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,13 +102,19 @@ export default defineComponent({
102 rulesMessageJoinLabel, 102 rulesMessageJoinLabel,
103 label, 103 label,
104 dynamicRules, 104 dynamicRules,
  105 + required,
105 } = props.schema; 106 } = props.schema;
106 107
107 if (isFunction(dynamicRules)) { 108 if (isFunction(dynamicRules)) {
108 return dynamicRules(unref(getValuesRef)); 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 const requiredRuleIndex: number = rules.findIndex( 118 const requiredRuleIndex: number = rules.findIndex(
113 (rule) => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator') 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,6 +112,8 @@ export interface FormSchema {
112 component: ComponentType; 112 component: ComponentType;
113 // 组件参数 113 // 组件参数
114 componentProps?: any; 114 componentProps?: any;
  115 + // 必填
  116 + required?: boolean;
115 117
116 // 校验规则 118 // 校验规则
117 rules?: RuleObject[]; 119 rules?: RuleObject[];
src/views/demo/form/RuleForm.vue
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 colProps: { 24 colProps: {
25 span: 8, 25 span: 8,
26 }, 26 },
27 - rules: [{ required: true }], 27 + required: true,
28 }, 28 },
29 { 29 {
30 field: 'field2', 30 field: 'field2',
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 colProps: { 33 colProps: {
34 span: 8, 34 span: 8,
35 }, 35 },
36 - rules: [{ required: true }], 36 + required: true,
37 }, 37 },
38 { 38 {
39 field: 'field3', 39 field: 'field3',
@@ -42,7 +42,7 @@ @@ -42,7 +42,7 @@
42 colProps: { 42 colProps: {
43 span: 8, 43 span: 8,
44 }, 44 },
45 - rules: [{ required: true }], 45 + required: true,
46 }, 46 },
47 { 47 {
48 field: 'field4', 48 field: 'field4',
@@ -65,7 +65,7 @@ @@ -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 field: 'field5', 71 field: 'field5',