UNPKG

5.24 kBJavaScriptView Raw
1import extend from '@form-create/utils/lib/extend';
2import is from '@form-create/utils/lib/type';
3import {invoke} from '@form-create/core/src/frame/util';
4import toArray from '@form-create/utils/lib/toarray';
5
6function tidyBtnProp(btn, def) {
7 if (is.Boolean(btn))
8 btn = {show: btn};
9 else if (!is.Undef(btn) && !is.Object(btn)) btn = {show: def};
10 return btn;
11}
12
13export default function extendApi(api, h) {
14 extend(api, {
15 validate(callback) {
16 let flag;
17 const forms = api.children;
18 let len = forms.length;
19 const validate = () => {
20 h.$manager.validate((...args) => {
21 if (!args[0] || !flag) {
22 flag = args;
23 }
24 callback(...flag);
25 });
26 };
27
28 const validFn = (args) => {
29 setTimeout(() => {
30 if (!args[0]) {
31 if (!flag) {
32 flag = args;
33 }
34 }
35 if (!--len) {
36 validate();
37 }
38 });
39 };
40
41 forms.forEach(form => {
42 form.validate((...args) => validFn(args))
43 })
44
45 if (!len) {
46 validate();
47 }
48 },
49 validateField: (field, callback) => {
50 if (!h.fieldCtx[field])
51 return;
52 const sub = h.subForm[field];
53 let len = 0;
54 let flag;
55 const validate = () => {
56 h.$manager.validateField(field, (...args) => {
57 if (args[0]) {
58 flag = args;
59 } else if (flag) {
60 return callback('子表单验证未通过', flag[1]);
61 }
62 callback(...flag || args);
63 });
64 };
65 const validFn = (args) => {
66 setTimeout(() => {
67 if (!args[0]) {
68 if (!flag) {
69 flag = args;
70 }
71 }
72 if (!--len) {
73 validate();
74 }
75 });
76 };
77 sub && toArray(sub).forEach(form => {
78 len++;
79 form.validate((...args) => validFn(args))
80 });
81
82 if (!len) {
83 validate();
84 }
85 },
86 clearValidateState(fields, clearSub = true) {
87 api.helper.tidyFields(fields).forEach(field => {
88 if (clearSub) this.clearSubValidateState(field);
89 const ctx = h.fieldCtx[field];
90 if (!ctx) return;
91 h.$manager.clearValidateState(ctx);
92 });
93 },
94 clearSubValidateState(fields) {
95 api.helper.tidyFields(fields).forEach(field => {
96 const subForm = h.subForm[field];
97 if (!subForm) return;
98 if (Array.isArray(subForm)) {
99 subForm.forEach(form => {
100 form.clearValidateState();
101 })
102 } else if (subForm) {
103 subForm.clearValidateState();
104 }
105 })
106 },
107 btn: {
108 loading: (loading = true) => {
109 api.submitBtnProps({loading: !!loading});
110 },
111 disabled: (disabled = true) => {
112 api.submitBtnProps({disabled: !!disabled});
113 },
114 show: (isShow = true) => {
115 api.submitBtnProps({show: !!isShow});
116 }
117 },
118 resetBtn: {
119 loading: (loading = true) => {
120 api.resetBtnProps({loading: !!loading});
121 },
122 disabled: (disabled = true) => {
123 api.resetBtnProps({disabled: !!disabled});
124 },
125 show: (isShow = true) => {
126 api.resetBtnProps({show: !!isShow});
127 }
128 },
129 submitBtnProps: (props = {}) => {
130 let btn = tidyBtnProp(h.options.submitBtn, true);
131 extend(btn, props);
132 h.options.submitBtn = btn;
133 api.refreshOptions();
134 },
135 resetBtnProps: (props = {}) => {
136 let btn = tidyBtnProp(h.options.resetBtn, false);
137 extend(btn, props);
138 h.options.resetBtn = btn;
139 api.refreshOptions();
140 },
141 submit(successFn, failFn) {
142 api.validate((valid) => {
143 if (valid) {
144 let formData = api.formData();
145 if (is.Function(successFn))
146 invoke(() => successFn(formData, this));
147 else {
148 is.Function(h.options.onSubmit) && invoke(() => h.options.onSubmit(formData, this));
149 h.vm.$emit('submit', formData, this);
150 }
151 } else {
152 is.Function(failFn) && invoke(() => failFn(this, ...arguments));
153 }
154 });
155 },
156 });
157
158 return api;
159}
\No newline at end of file