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 | <script lang="tsx"> | 1 | <script lang="tsx"> |
2 | import type { PropType, Ref } from 'vue'; | 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 | import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; | 5 | import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; |
6 | import type { TableActionType } from '/@/components/Table'; | 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 | import { componentMap } from '../componentMap'; | 8 | import { componentMap } from '../componentMap'; |
10 | import { BasicHelp } from '/@/components/Basic'; | 9 | import { BasicHelp } from '/@/components/Basic'; |
11 | import { isBoolean, isFunction, isNull } from '/@/utils/is'; | 10 | import { isBoolean, isFunction, isNull } from '/@/utils/is'; |
12 | import { getSlot } from '/@/utils/helper/tsxHelper'; | 11 | import { getSlot } from '/@/utils/helper/tsxHelper'; |
13 | import { createPlaceholderMessage, setComponentRuleType } from '../helper'; | 12 | import { createPlaceholderMessage, setComponentRuleType } from '../helper'; |
14 | - import { upperFirst, cloneDeep } from 'lodash-es'; | 13 | + import { cloneDeep, upperFirst } from 'lodash-es'; |
15 | import { useItemLabelWidth } from '../hooks/useLabelWidth'; | 14 | import { useItemLabelWidth } from '../hooks/useLabelWidth'; |
16 | import { useI18n } from '/@/hooks/web/useI18n'; | 15 | import { useI18n } from '/@/hooks/web/useI18n'; |
17 | 16 | ||
@@ -178,18 +177,27 @@ | @@ -178,18 +177,27 @@ | ||
178 | 177 | ||
179 | const getRequired = isFunction(required) ? required(unref(getValues)) : required; | 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 | const requiredRuleIndex: number = rules.findIndex( | 197 | const requiredRuleIndex: number = rules.findIndex( |
186 | (rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator'), | 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 | if (requiredRuleIndex !== -1) { | 201 | if (requiredRuleIndex !== -1) { |
194 | const rule = rules[requiredRuleIndex]; | 202 | const rule = rules[requiredRuleIndex]; |
195 | const { isShow } = getShow(); | 203 | const { isShow } = getShow(); |