UNPKG

5.39 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 && 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 const ctx = h.getFieldCtx(field);
51 if (!ctx) return;
52 const sub = h.subForm[ctx.id];
53 let len = 0;
54 let flag;
55 const validate = () => {
56 h.$manager.validateField(ctx.id, (...args) => {
57 if (args[0]) {
58 flag = args;
59 } else if (flag) {
60 return callback && callback('子表单验证未通过', flag[1]);
61 }
62 callback && 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 h.getCtxs(field).forEach(ctx => {
90 h.$manager.clearValidateState(ctx);
91 });
92 });
93 },
94 clearSubValidateState(fields) {
95 api.helper.tidyFields(fields).forEach(field => {
96 h.getCtxs(field).forEach(ctx => {
97 const subForm = h.subForm[ctx.id];
98 if (!subForm) return;
99 if (Array.isArray(subForm)) {
100 subForm.forEach(form => {
101 form.clearValidateState();
102 })
103 } else if (subForm) {
104 subForm.clearValidateState();
105 }
106 });
107 })
108 },
109 btn: {
110 loading: (loading = true) => {
111 api.submitBtnProps({loading: !!loading});
112 },
113 disabled: (disabled = true) => {
114 api.submitBtnProps({disabled: !!disabled});
115 },
116 show: (isShow = true) => {
117 api.submitBtnProps({show: !!isShow});
118 }
119 },
120 resetBtn: {
121 loading: (loading = true) => {
122 api.resetBtnProps({loading: !!loading});
123 },
124 disabled: (disabled = true) => {
125 api.resetBtnProps({disabled: !!disabled});
126 },
127 show: (isShow = true) => {
128 api.resetBtnProps({show: !!isShow});
129 }
130 },
131 submitBtnProps: (props = {}) => {
132 let btn = tidyBtnProp(h.options.submitBtn, true);
133 extend(btn, props);
134 h.options.submitBtn = btn;
135 api.refreshOptions();
136 },
137 resetBtnProps: (props = {}) => {
138 let btn = tidyBtnProp(h.options.resetBtn, false);
139 extend(btn, props);
140 h.options.resetBtn = btn;
141 api.refreshOptions();
142 },
143 submit(successFn, failFn) {
144 api.validate((valid) => {
145 if (valid) {
146 let formData = api.formData();
147 if (is.Function(successFn))
148 invoke(() => successFn(formData, this));
149 else {
150 is.Function(h.options.onSubmit) && invoke(() => h.options.onSubmit(formData, this));
151 h.vm.$emit('submit', formData, this);
152 }
153 } else {
154 is.Function(failFn) && invoke(() => failFn(this, ...arguments));
155 }
156 });
157 },
158 });
159
160 return api;
161}