Commit 28590676214b1c5fdbf6878e40da45a7bc0c5874

Authored by vben
1 parent b6d5e5c9

feat(from): add required in schema

src/components/Form/src/FormItem.tsx
... ... @@ -102,13 +102,19 @@ export default defineComponent({
102 102 rulesMessageJoinLabel,
103 103 label,
104 104 dynamicRules,
  105 + required,
105 106 } = props.schema;
106 107  
107 108 if (isFunction(dynamicRules)) {
108 109 return dynamicRules(unref(getValuesRef));
109 110 }
110 111  
111   - const rules: ValidationRule[] = cloneDeep(defRules);
  112 + let rules: ValidationRule[] = cloneDeep(defRules);
  113 +
  114 + if ((!rules || rules.length === 0) && required) {
  115 + rules = [{ required }];
  116 + }
  117 +
112 118 const requiredRuleIndex: number = rules.findIndex(
113 119 (rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator')
114 120 );
... ...
src/components/Form/src/types/form.ts
... ... @@ -112,6 +112,8 @@ export interface FormSchema {
112 112 component: ComponentType;
113 113 // 组件参数
114 114 componentProps?: any;
  115 + // 必填
  116 + required?: boolean;
115 117  
116 118 // 校验规则
117 119 rules?: RuleObject[];
... ...
src/views/demo/form/RuleForm.vue
... ... @@ -24,7 +24,7 @@
24 24 colProps: {
25 25 span: 8,
26 26 },
27   - rules: [{ required: true }],
  27 + required: true,
28 28 },
29 29 {
30 30 field: 'field2',
... ... @@ -33,7 +33,7 @@
33 33 colProps: {
34 34 span: 8,
35 35 },
36   - rules: [{ required: true }],
  36 + required: true,
37 37 },
38 38 {
39 39 field: 'field3',
... ... @@ -42,7 +42,7 @@
42 42 colProps: {
43 43 span: 8,
44 44 },
45   - rules: [{ required: true }],
  45 + required: true,
46 46 },
47 47 {
48 48 field: 'field4',
... ... @@ -65,7 +65,7 @@
65 65 },
66 66 ],
67 67 },
68   - rules: [{ required: true }],
  68 + rules: [{ required: true, message: '请输入aa' }],
69 69 },
70 70 {
71 71 field: 'field5',
... ...