Commit 8d93e047d0f192aecfd357cbac0ff07a2a56a6cd

Authored by zuihou
1 parent fb43e548

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

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