瀏覽代碼

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

zuihou 3 年之前
父節點
當前提交
8d93e047d0
共有 1 個文件被更改,包括 19 次插入11 次删除
  1. 19 11
      src/components/Form/src/components/FormItem.vue

+ 19 - 11
src/components/Form/src/components/FormItem.vue

@@ -1,17 +1,16 @@
 <script lang="tsx">
 <script lang="tsx">
   import type { PropType, Ref } from 'vue';
   import type { PropType, Ref } from 'vue';
-  import type { FormActionType, FormProps } from '../types/form';
-  import type { FormSchema } from '../types/form';
+  import { computed, defineComponent, toRefs, unref } from 'vue';
+  import type { FormActionType, FormProps, FormSchema } from '../types/form';
   import type { ValidationRule } from 'ant-design-vue/lib/form/Form';
   import type { ValidationRule } from 'ant-design-vue/lib/form/Form';
   import type { TableActionType } from '/@/components/Table';
   import type { TableActionType } from '/@/components/Table';
-  import { defineComponent, computed, unref, toRefs } from 'vue';
-  import { Form, Col, Divider } from 'ant-design-vue';
+  import { Col, Divider, Form } from 'ant-design-vue';
   import { componentMap } from '../componentMap';
   import { componentMap } from '../componentMap';
   import { BasicHelp } from '/@/components/Basic';
   import { BasicHelp } from '/@/components/Basic';
   import { isBoolean, isFunction, isNull } from '/@/utils/is';
   import { isBoolean, isFunction, isNull } from '/@/utils/is';
   import { getSlot } from '/@/utils/helper/tsxHelper';
   import { getSlot } from '/@/utils/helper/tsxHelper';
   import { createPlaceholderMessage, setComponentRuleType } from '../helper';
   import { createPlaceholderMessage, setComponentRuleType } from '../helper';
-  import { upperFirst, cloneDeep } from 'lodash-es';
+  import { cloneDeep, upperFirst } from 'lodash-es';
   import { useItemLabelWidth } from '../hooks/useLabelWidth';
   import { useItemLabelWidth } from '../hooks/useLabelWidth';
   import { useI18n } from '/@/hooks/web/useI18n';
   import { useI18n } from '/@/hooks/web/useI18n';
 
 
@@ -178,18 +177,27 @@
 
 
         const getRequired = isFunction(required) ? required(unref(getValues)) : required;
         const getRequired = isFunction(required) ? required(unref(getValues)) : required;
 
 
-        if ((!rules || rules.length === 0) && getRequired) {
-          rules = [{ required: getRequired, validator }];
+        /*
+         * 1、若设置了required属性,又没有其他的rules,就创建一个验证规则;
+         * 2、若设置了required属性,又存在其他的rules,则只rules中不存在required属性时,才添加验证required的规则
+         *     也就是说rules中的required,优先级大于required
+         */
+        if (getRequired) {
+          if (!rules || rules.length === 0) {
+            rules = [{ required: getRequired, validator }];
+          } else {
+            const requiredIndex: number = rules.findIndex((rule) => Reflect.has(rule, 'required'));
+
+            if (requiredIndex === -1) {
+              rules.push({ required: getRequired, validator });
+            }
+          }
         }
         }
 
 
         const requiredRuleIndex: number = rules.findIndex(
         const requiredRuleIndex: number = rules.findIndex(
           (rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator'),
           (rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator'),
         );
         );
 
 
-        if (requiredRuleIndex === -1 && getRequired) {
-          rules.push({ required: getRequired, validator });
-        }
-
         if (requiredRuleIndex !== -1) {
         if (requiredRuleIndex !== -1) {
           const rule = rules[requiredRuleIndex];
           const rule = rules[requiredRuleIndex];
           const { isShow } = getShow();
           const { isShow } = getShow();