Commit 8d93e047d0f192aecfd357cbac0ff07a2a56a6cd

Authored by zuihou
1 parent fb43e548

fix: 已经存在rules时,required不生效

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();
... ...