Commit 8d93e047d0f192aecfd357cbac0ff07a2a56a6cd
1 parent
fb43e548
fix: 已经存在rules时,required不生效
Showing
1 changed file
with
19 additions
and
11 deletions
src/components/Form/src/components/FormItem.vue
1 | 1 | <script lang="tsx"> |
2 | 2 | import type { PropType, Ref } from 'vue'; |
3 | - import type { FormActionType, FormProps } from '../types/form'; | |
4 | - import type { FormSchema } from '../types/form'; | |
3 | + import { computed, defineComponent, toRefs, unref } from 'vue'; | |
4 | + import type { FormActionType, FormProps, FormSchema } from '../types/form'; | |
5 | 5 | import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; |
6 | 6 | import type { TableActionType } from '/@/components/Table'; |
7 | - import { defineComponent, computed, unref, toRefs } from 'vue'; | |
8 | - import { Form, Col, Divider } from 'ant-design-vue'; | |
7 | + import { Col, Divider, Form } from 'ant-design-vue'; | |
9 | 8 | import { componentMap } from '../componentMap'; |
10 | 9 | import { BasicHelp } from '/@/components/Basic'; |
11 | 10 | import { isBoolean, isFunction, isNull } from '/@/utils/is'; |
12 | 11 | import { getSlot } from '/@/utils/helper/tsxHelper'; |
13 | 12 | import { createPlaceholderMessage, setComponentRuleType } from '../helper'; |
14 | - import { upperFirst, cloneDeep } from 'lodash-es'; | |
13 | + import { cloneDeep, upperFirst } from 'lodash-es'; | |
15 | 14 | import { useItemLabelWidth } from '../hooks/useLabelWidth'; |
16 | 15 | import { useI18n } from '/@/hooks/web/useI18n'; |
17 | 16 | |
... | ... | @@ -178,18 +177,27 @@ |
178 | 177 | |
179 | 178 | const getRequired = isFunction(required) ? required(unref(getValues)) : required; |
180 | 179 | |
181 | - if ((!rules || rules.length === 0) && getRequired) { | |
182 | - rules = [{ required: getRequired, validator }]; | |
180 | + /* | |
181 | + * 1、若设置了required属性,又没有其他的rules,就创建一个验证规则; | |
182 | + * 2、若设置了required属性,又存在其他的rules,则只rules中不存在required属性时,才添加验证required的规则 | |
183 | + * 也就是说rules中的required,优先级大于required | |
184 | + */ | |
185 | + if (getRequired) { | |
186 | + if (!rules || rules.length === 0) { | |
187 | + rules = [{ required: getRequired, validator }]; | |
188 | + } else { | |
189 | + const requiredIndex: number = rules.findIndex((rule) => Reflect.has(rule, 'required')); | |
190 | + | |
191 | + if (requiredIndex === -1) { | |
192 | + rules.push({ required: getRequired, validator }); | |
193 | + } | |
194 | + } | |
183 | 195 | } |
184 | 196 | |
185 | 197 | const requiredRuleIndex: number = rules.findIndex( |
186 | 198 | (rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator'), |
187 | 199 | ); |
188 | 200 | |
189 | - if (requiredRuleIndex === -1 && getRequired) { | |
190 | - rules.push({ required: getRequired, validator }); | |
191 | - } | |
192 | - | |
193 | 201 | if (requiredRuleIndex !== -1) { |
194 | 202 | const rule = rules[requiredRuleIndex]; |
195 | 203 | const { isShow } = getShow(); | ... | ... |