@bdsoft/element 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/README.md +90 -0
  2. package/global/index.ts +6 -0
  3. package/global/register-properties.ts +10 -0
  4. package/index.html +13 -0
  5. package/index.js +84 -0
  6. package/package-form/core/components/formCreate.js +274 -0
  7. package/package-form/core/components/fragment.js +12 -0
  8. package/package-form/core/factory/context.js +257 -0
  9. package/package-form/core/factory/creator.js +63 -0
  10. package/package-form/core/factory/maker.js +17 -0
  11. package/package-form/core/factory/manager.js +79 -0
  12. package/package-form/core/factory/node.js +85 -0
  13. package/package-form/core/factory/parser.js +28 -0
  14. package/package-form/core/frame/api.js +599 -0
  15. package/package-form/core/frame/attrs.js +12 -0
  16. package/package-form/core/frame/dataDriver.js +76 -0
  17. package/package-form/core/frame/fetch.js +119 -0
  18. package/package-form/core/frame/formCreate.js +274 -0
  19. package/package-form/core/frame/index.js +760 -0
  20. package/package-form/core/frame/provider.js +288 -0
  21. package/package-form/core/frame/util.js +274 -0
  22. package/package-form/core/handler/context.js +380 -0
  23. package/package-form/core/handler/effect.js +122 -0
  24. package/package-form/core/handler/index.js +111 -0
  25. package/package-form/core/handler/inject.js +145 -0
  26. package/package-form/core/handler/input.js +197 -0
  27. package/package-form/core/handler/lifecycle.js +43 -0
  28. package/package-form/core/handler/loader.js +373 -0
  29. package/package-form/core/handler/page.js +46 -0
  30. package/package-form/core/handler/render.js +29 -0
  31. package/package-form/core/index.js +12 -0
  32. package/package-form/core/package.json +15 -0
  33. package/package-form/core/parser/html.js +17 -0
  34. package/package-form/core/render/cache.js +47 -0
  35. package/package-form/core/render/index.js +31 -0
  36. package/package-form/core/render/render.js +393 -0
  37. package/package-form/element-form/components/checkbox/package.json +17 -0
  38. package/package-form/element-form/components/checkbox/src/component.jsx +110 -0
  39. package/package-form/element-form/components/checkbox/src/index.js +3 -0
  40. package/package-form/element-form/components/frame/package.json +17 -0
  41. package/package-form/element-form/components/frame/src/IconCircleClose.vue +14 -0
  42. package/package-form/element-form/components/frame/src/IconDelete.vue +12 -0
  43. package/package-form/element-form/components/frame/src/IconDocument.vue +12 -0
  44. package/package-form/element-form/components/frame/src/IconFolderOpened.vue +12 -0
  45. package/package-form/element-form/components/frame/src/IconView.vue +12 -0
  46. package/package-form/element-form/components/frame/src/component.jsx +349 -0
  47. package/package-form/element-form/components/frame/src/index.js +3 -0
  48. package/package-form/element-form/components/frame/src/style.css +66 -0
  49. package/package-form/element-form/components/group/package.json +17 -0
  50. package/package-form/element-form/components/group/src/component.jsx +314 -0
  51. package/package-form/element-form/components/group/src/index.js +3 -0
  52. package/package-form/element-form/components/group/src/style.css +125 -0
  53. package/package-form/element-form/components/index.js +22 -0
  54. package/package-form/element-form/components/radio/package.json +17 -0
  55. package/package-form/element-form/components/radio/src/component.jsx +101 -0
  56. package/package-form/element-form/components/radio/src/index.js +3 -0
  57. package/package-form/element-form/components/select/package.json +17 -0
  58. package/package-form/element-form/components/select/src/component.jsx +52 -0
  59. package/package-form/element-form/components/select/src/index.js +3 -0
  60. package/package-form/element-form/components/subform/package.json +14 -0
  61. package/package-form/element-form/components/subform/src/component.jsx +76 -0
  62. package/package-form/element-form/components/subform/src/index.js +3 -0
  63. package/package-form/element-form/components/tree/package.json +17 -0
  64. package/package-form/element-form/components/tree/src/component.jsx +62 -0
  65. package/package-form/element-form/components/tree/src/index.js +3 -0
  66. package/package-form/element-form/components/upload/package.json +17 -0
  67. package/package-form/element-form/components/upload/src/IconUpload.vue +12 -0
  68. package/package-form/element-form/components/upload/src/component.jsx +129 -0
  69. package/package-form/element-form/components/upload/src/index.js +3 -0
  70. package/package-form/element-form/components/upload/src/style.css +11 -0
  71. package/package-form/element-form/index.js +8 -0
  72. package/package-form/element-form/package.json +16 -0
  73. package/package-form/element-form/src/components/icon/IconWarning.vue +12 -0
  74. package/package-form/element-form/src/components/index.js +22 -0
  75. package/package-form/element-form/src/core/alias.js +34 -0
  76. package/package-form/element-form/src/core/api.js +208 -0
  77. package/package-form/element-form/src/core/config.js +62 -0
  78. package/package-form/element-form/src/core/index.js +60 -0
  79. package/package-form/element-form/src/core/maker.js +76 -0
  80. package/package-form/element-form/src/core/manager.js +315 -0
  81. package/package-form/element-form/src/core/provider.js +79 -0
  82. package/package-form/element-form/src/parsers/datePicker.js +31 -0
  83. package/package-form/element-form/src/parsers/hidden.js +12 -0
  84. package/package-form/element-form/src/parsers/index.js +17 -0
  85. package/package-form/element-form/src/parsers/input.js +21 -0
  86. package/package-form/element-form/src/parsers/row.js +10 -0
  87. package/package-form/element-form/src/parsers/select.js +15 -0
  88. package/package-form/element-form/src/parsers/slider.js +21 -0
  89. package/package-form/element-form/src/parsers/timePicker.js +17 -0
  90. package/package-form/element-form/src/style/index.css +52 -0
  91. package/package.json +17 -0
  92. package/src/App.vue +28 -0
  93. package/src/assets/css/element.scss +179 -0
  94. package/src/assets/css/layout.scss +215 -0
  95. package/src/assets/css/tailwind.scss +67 -0
  96. package/src/assets/images/banner.gif +0 -0
  97. package/src/assets/images/banner.png +0 -0
  98. package/src/assets/images/bg1.svg +22 -0
  99. package/src/assets/images/bg2.png +0 -0
  100. package/src/assets/images/ff.png +0 -0
  101. package/src/assets/images/home-file1.png +0 -0
  102. package/src/assets/images/ky.png +0 -0
  103. package/src/assets/images/menu/add.png +0 -0
  104. package/src/assets/images/menu/del.png +0 -0
  105. package/src/assets/images/menu/down.png +0 -0
  106. package/src/assets/images/menu/dr.png +0 -0
  107. package/src/assets/images/menu/edit.png +0 -0
  108. package/src/assets/images/menu/kx.png +0 -0
  109. package/src/assets/images/menu/mb.png +0 -0
  110. package/src/assets/images/menu/pz.png +0 -0
  111. package/src/assets/images/menu/save.png +0 -0
  112. package/src/assets/images/menu/sj.png +0 -0
  113. package/src/assets/images/menu/sjk.png +0 -0
  114. package/src/assets/images/menu/up.png +0 -0
  115. package/src/assets/images/po-i.png +0 -0
  116. package/src/assets/images/po1-i1.png +0 -0
  117. package/src/assets/images/po1-i2.png +0 -0
  118. package/src/assets/images/po1-i3.png +0 -0
  119. package/src/assets/images/po1-i4.png +0 -0
  120. package/src/assets/images/po1-i5.png +0 -0
  121. package/src/assets/images/po1-i6.png +0 -0
  122. package/src/assets/images/po1-i7.png +0 -0
  123. package/src/assets/images/po1-i8.png +0 -0
  124. package/src/assets/images/po2-i1.png +0 -0
  125. package/src/assets/images/po2-i2.png +0 -0
  126. package/src/assets/images/po3-i1.png +0 -0
  127. package/src/assets/images/po4-i1.png +0 -0
  128. package/src/assets/images/po5-i1.png +0 -0
  129. package/src/assets/images/po6-i1.png +0 -0
  130. package/src/assets/images/po6-i2.png +0 -0
  131. package/src/assets/images/po7-i1.png +0 -0
  132. package/src/assets/images/tj1.png +0 -0
  133. package/src/assets/images/tj2.png +0 -0
  134. package/src/assets/images/tj3.png +0 -0
  135. package/src/components/3dcloudwords/index.js +346 -0
  136. package/src/components/3dcloudwords/index.vue +99 -0
  137. package/src/components/3dcloudwords/readme.md +66 -0
  138. package/src/components/badge/index.js +167 -0
  139. package/src/components/badge/index.scss +166 -0
  140. package/src/components/badge/index.vue +98 -0
  141. package/src/components/badge/readme.md +18 -0
  142. package/src/components/basic/Finish.vue +107 -0
  143. package/src/components/basic/button.vue +19 -0
  144. package/src/components/basic/readme.md +7 -0
  145. package/src/components/button/index.vue +48 -0
  146. package/src/components/button/readme.md +62 -0
  147. package/src/components/carousel/index.vue +104 -0
  148. package/src/components/carousel/readme.md +12 -0
  149. package/src/components/chartconfig/index.vue +141 -0
  150. package/src/components/chartconfig/readme.md +25 -0
  151. package/src/components/contextMenu/hookContxtMenu.js +41 -0
  152. package/src/components/contextMenu/index.vue +245 -0
  153. package/src/components/contextMenu/readme.md +55 -0
  154. package/src/components/contextMenu/useElementBounding.js +40 -0
  155. package/src/components/countup/countUp.js +196 -0
  156. package/src/components/countup/index.vue +112 -0
  157. package/src/components/countup/readme.md +9 -0
  158. package/src/components/empty/assets/build.png +0 -0
  159. package/src/components/empty/assets/emptybg.gif +0 -0
  160. package/src/components/empty/assets/emptybg.png +0 -0
  161. package/src/components/empty/assets/emptybg2.jpg +0 -0
  162. package/src/components/empty/assets/emptybg3.jpg +0 -0
  163. package/src/components/empty/assets/wuxiao.png +0 -0
  164. package/src/components/empty/assets/wuxiao.webp +0 -0
  165. package/src/components/empty/building.vue +117 -0
  166. package/src/components/empty/empty.vue +120 -0
  167. package/src/components/empty/index.js +12 -0
  168. package/src/components/empty/invalid.vue +56 -0
  169. package/src/components/error/Error.vue +79 -0
  170. package/src/components/error/readme.md +20 -0
  171. package/src/components/form/Form.vue +84 -0
  172. package/src/components/form/FormItem.vue +143 -0
  173. package/src/components/form/data.js +52 -0
  174. package/src/components/form/readme.md +69 -0
  175. package/src/components/layout/banner.vue +412 -0
  176. package/src/components/layout/bar.vue +43 -0
  177. package/src/components/layout/layout1.vue +60 -0
  178. package/src/components/layout/layout2.vue +134 -0
  179. package/src/components/layout/layout3.vue +107 -0
  180. package/src/components/layout/layout4.vue +66 -0
  181. package/src/components/layout/nav.vue +333 -0
  182. package/src/components/layout/readme.md +61 -0
  183. package/src/components/loading/index.vue +122 -0
  184. package/src/components/loading/readme.md +6 -0
  185. package/src/components/notice/NoticeList.vue +198 -0
  186. package/src/components/notice/NoticeListPaging.vue +281 -0
  187. package/src/components/notice/NoticeView.vue +92 -0
  188. package/src/components/notice/readme.md +1 -0
  189. package/src/components/pagination/index.vue +100 -0
  190. package/src/components/pagination/readme.md +19 -0
  191. package/src/components/pagination/scroll-to.js +51 -0
  192. package/src/components/progress/bar.vue +72 -0
  193. package/src/components/progress/progress.vue +58 -0
  194. package/src/components/screenfull/index.js +3 -0
  195. package/src/components/screenfull/index.vue +65 -0
  196. package/src/components/screenfull/package.json +15 -0
  197. package/src/components/screenfull/readme.md +6 -0
  198. package/src/components/statisticalCount/index.vue +80 -0
  199. package/src/components/statisticalCount/readme.md +21 -0
  200. package/src/components/username/index.vue +79 -0
  201. package/src/components/username/readme.md +22 -0
  202. package/src/components/username//346/225/210/346/236/234/345/233/276.png +0 -0
  203. package/src/index.js +82 -0
  204. package/src/utils/index.js +32 -0
  205. package/src/xm_components/HeadSearch/hook/hookSearch.js +96 -0
  206. package/src/xm_components/HeadSearch/index.vue +206 -0
  207. package/src/xm_components/HeadSearch/readme.md +12 -0
  208. package/src/xm_components/HeadSearch//346/220/234/347/264/242/345/210/227/350/241/250.png +0 -0
  209. package/src/xm_components/Milestone/index.vue +212 -0
  210. package/src/xm_components/Milestone/readme.md +15 -0
  211. package/src/xm_components/readme.md +1 -0
  212. package/utils/coms/load.jsx +10 -0
  213. package/utils/func.js +32 -0
  214. package/utils/hookDialog.js +38 -0
  215. package/utils/hookPage.js +49 -0
  216. package/utils/index.js +5 -0
  217. package/utils/lib/console.js +39 -0
  218. package/utils/lib/debounce.js +19 -0
  219. package/utils/lib/deepextend.js +51 -0
  220. package/utils/lib/deepset.js +14 -0
  221. package/utils/lib/extend.js +28 -0
  222. package/utils/lib/index.js +13 -0
  223. package/utils/lib/json.js +90 -0
  224. package/utils/lib/mergeprops.js +62 -0
  225. package/utils/lib/mitt.js +43 -0
  226. package/utils/lib/modify.js +8 -0
  227. package/utils/lib/slot.js +19 -0
  228. package/utils/lib/toarray.js +5 -0
  229. package/utils/lib/tocase.js +11 -0
  230. package/utils/lib/todate.js +10 -0
  231. package/utils/lib/toline.js +10 -0
  232. package/utils/lib/tostring.js +7 -0
  233. package/utils/lib/type.js +45 -0
  234. package/utils/lib/unique.js +6 -0
  235. package/utils/message.js +166 -0
  236. package/utils/package.json +16 -0
  237. package/utils/type.js +45 -0
  238. package/vite.config.js +51 -0
@@ -0,0 +1,599 @@
1
+ import {byCtx, invoke, mergeRule, parseFn, toJson} from './util';
2
+ import {$set} from '@bdsoft-element/utils/lib/modify';
3
+ import {deepCopy} from '@bdsoft-element/utils/lib/deepextend';
4
+ import is, {hasProperty} from '@bdsoft-element/utils/lib/type';
5
+ import extend from '@bdsoft-element/utils/lib/extend';
6
+ import {format} from '@bdsoft-element/utils/lib/console';
7
+ import {asyncFetch} from './fetch';
8
+ import {nextTick} from 'vue';
9
+
10
+
11
+ function copy(value) {
12
+ return deepCopy(value);
13
+ }
14
+
15
+ export default function Api(h) {
16
+
17
+ function tidyFields(fields) {
18
+ if (is.Undef(fields))
19
+ fields = h.fields();
20
+ else if (!Array.isArray(fields))
21
+ fields = [fields];
22
+ return fields;
23
+ }
24
+
25
+ function props(fields, key, val) {
26
+ tidyFields(fields).forEach(field => {
27
+ h.getCtxs(field).forEach(ctx => {
28
+ $set(ctx.rule, key, val);
29
+ h.$render.clearCache(ctx);
30
+ });
31
+ })
32
+ }
33
+
34
+ function allSubForm() {
35
+ const subs = h.subForm;
36
+ return Object.keys(subs).reduce((initial, k) => {
37
+ const sub = subs[k];
38
+ if (!sub) return initial;
39
+ if (Array.isArray(sub))
40
+ initial.push(...sub);
41
+ else
42
+ initial.push(sub);
43
+ return initial;
44
+ }, []);
45
+ }
46
+
47
+ const api = {
48
+ get config() {
49
+ return h.options
50
+ },
51
+ set config(val) {
52
+ h.fc.options.value = val;
53
+ },
54
+ get options() {
55
+ return h.options
56
+ },
57
+ set options(val) {
58
+ h.fc.options.value = val;
59
+ },
60
+ get form() {
61
+ return h.form
62
+ },
63
+ get rule() {
64
+ return h.rules
65
+ },
66
+ get parent() {
67
+ return h.vm.setupState.parent && h.vm.setupState.parent.setupState.fapi
68
+ },
69
+ get top() {
70
+ if (api.parent) {
71
+ return api.parent.top;
72
+ }
73
+ return api;
74
+ },
75
+ get children() {
76
+ return allSubForm();
77
+ },
78
+ get siblings() {
79
+ const inject = h.vm.setupState.getGroupInject();
80
+ if (inject) {
81
+ const subForm = inject.getSubForm();
82
+ if (Array.isArray(subForm)) {
83
+ return [...subForm];
84
+ }
85
+ }
86
+ return undefined;
87
+ },
88
+ get index() {
89
+ const siblings = api.siblings;
90
+ if (siblings) {
91
+ const idx = siblings.indexOf(api);
92
+ return idx > -1 ? idx : undefined;
93
+ }
94
+ return undefined;
95
+ },
96
+ formData(fields) {
97
+ if (fields == null) {
98
+ const data = {};
99
+ Object.keys(h.form).forEach(k => {
100
+ if (h.ignoreFields.indexOf(k) === -1) {
101
+ data[k] = copy(h.form[k]);
102
+ }
103
+ });
104
+ return data;
105
+ } else {
106
+ return tidyFields(fields).reduce((initial, id) => {
107
+ initial[id] = api.getValue(id);
108
+ return initial;
109
+ }, {});
110
+ }
111
+ },
112
+ getValue(field) {
113
+ const ctx = h.getFieldCtx(field);
114
+ if (!ctx) {
115
+ if (h.options.appendValue !== false && hasProperty(h.appendData, field)) {
116
+ return copy(h.appendData[field]);
117
+ }
118
+ return undefined;
119
+ }
120
+ return copy(ctx.rule.value);
121
+ },
122
+ coverValue(formData) {
123
+ const data = {...(formData || {})};
124
+ h.deferSyncValue(() => {
125
+ h.appendData = {};
126
+ api.fields().forEach(key => {
127
+ const ctxs = h.fieldCtx[key];
128
+ if (ctxs) {
129
+ const flag = hasProperty(formData, key);
130
+ ctxs.forEach(ctx => {
131
+ ctx.rule.value = flag ? formData[key] : undefined;
132
+ })
133
+ delete data[key];
134
+ }
135
+ });
136
+ extend(h.appendData, data);
137
+ }, true)
138
+ },
139
+ setValue(field) {
140
+ let formData = field;
141
+ if (arguments.length >= 2)
142
+ formData = {[field]: arguments[1]};
143
+ h.deferSyncValue(() => {
144
+ Object.keys(formData).forEach(key => {
145
+ const ctxs = h.fieldCtx[key];
146
+ if (!ctxs) return h.appendData[key] = formData[key];
147
+ ctxs.forEach(ctx => {
148
+ ctx.rule.value = formData[key];
149
+ });
150
+ });
151
+ }, true)
152
+ },
153
+ removeField(field) {
154
+ const ctx = h.getCtx(field);
155
+ h.deferSyncValue(() => {
156
+ h.getCtxs(field).forEach(ctx => {
157
+ ctx.rm();
158
+ });
159
+ }, true);
160
+ return ctx ? ctx.origin : undefined;
161
+ },
162
+ removeRule(rule) {
163
+ const ctx = rule && byCtx(rule);
164
+ if (!ctx) return;
165
+ ctx.rm();
166
+ return ctx.origin;
167
+ },
168
+ fields: () => h.fields(),
169
+ append: (rule, after, child) => {
170
+ let index = h.sort.length - 1, rules;
171
+ const ctx = h.getCtx(after);
172
+
173
+ if (ctx) {
174
+ if (child) {
175
+ rules = ctx.getPending('children', ctx.rule.children);
176
+ if (!Array.isArray(rules)) return;
177
+ index = ctx.rule.children.length - 1;
178
+ } else {
179
+ index = ctx.root.indexOf(ctx.origin);
180
+ rules = ctx.root;
181
+ }
182
+ } else rules = h.rules;
183
+ rules.splice(index + 1, 0, rule);
184
+ },
185
+ prepend: (rule, after, child) => {
186
+ let index = 0, rules;
187
+ const ctx = h.getCtx(after);
188
+
189
+ if (ctx) {
190
+ if (child) {
191
+ rules = ctx.getPending('children', ctx.rule.children);
192
+ if (!Array.isArray(rules)) return;
193
+ } else {
194
+ index = ctx.root.indexOf(ctx.origin);
195
+ rules = ctx.root;
196
+ }
197
+ } else rules = h.rules;
198
+ rules.splice(index, 0, rule);
199
+ },
200
+ hidden(state, fields) {
201
+ props(fields, 'hidden', !!state);
202
+ h.refresh();
203
+ },
204
+ hiddenStatus(id) {
205
+ const ctx = h.getCtx(id);
206
+ if (!ctx) return;
207
+ return !!ctx.rule.hidden;
208
+ },
209
+ display(state, fields) {
210
+ props(fields, 'display', !!state);
211
+ h.refresh();
212
+ },
213
+ displayStatus(id) {
214
+ const ctx = h.getCtx(id);
215
+ if (!ctx) return;
216
+ return !!ctx.rule.display;
217
+ },
218
+ disabled(disabled, fields) {
219
+ tidyFields(fields).forEach((field) => {
220
+ h.getCtxs(field).forEach(ctx => {
221
+ $set(ctx.rule.props, 'disabled', !!disabled);
222
+ });
223
+ });
224
+ h.refresh();
225
+ },
226
+ all(origin) {
227
+ return Object.keys(h.ctxs).map(k => {
228
+ const ctx = h.ctxs[k];
229
+ return origin ? ctx.origin : ctx.rule;
230
+ });
231
+ },
232
+ model(origin) {
233
+ return h.fields().reduce((initial, key) => {
234
+ const ctx = h.fieldCtx[key][0];
235
+ initial[key] = origin ? ctx.origin : ctx.rule;
236
+ return initial;
237
+ }, {});
238
+ },
239
+ component(origin) {
240
+ return Object.keys(h.nameCtx).reduce((initial, key) => {
241
+ const ctx = h.nameCtx[key].map(ctx => origin ? ctx.origin : ctx.rule);
242
+ initial[key] = ctx.length === 1 ? ctx[0] : ctx;
243
+ return initial;
244
+ }, {});
245
+ },
246
+ bind() {
247
+ return api.form;
248
+ },
249
+ reload: (rules) => {
250
+ h.reloadRule(rules)
251
+ },
252
+ updateOptions(options) {
253
+ h.fc.updateOptions(options);
254
+ api.refresh();
255
+ },
256
+ onSubmit(fn) {
257
+ api.updateOptions({onSubmit: fn});
258
+ },
259
+ sync: (field) => {
260
+ if (Array.isArray(field)) {
261
+ field.forEach(v => api.sync(v));
262
+ return;
263
+ }
264
+ let ctxs = is.Object(field) ? byCtx(field) : h.getCtxs(field);
265
+ if (!ctxs) {
266
+ return;
267
+ }
268
+ ctxs = Array.isArray(ctxs) ? ctxs : [ctxs];
269
+ ctxs.forEach(ctx => {
270
+ if (!ctx.deleted) {
271
+ const subForm = h.subForm[ctx.id];
272
+ if (subForm) {
273
+ if (Array.isArray(subForm)) {
274
+ subForm.forEach(form => {
275
+ form.refresh();
276
+ })
277
+ } else if (subForm) {
278
+ subForm.refresh();
279
+ }
280
+ }
281
+ //ctx.updateKey(true);
282
+ h.$render.clearCache(ctx);
283
+ }
284
+ });
285
+ h.refresh();
286
+ },
287
+ refresh: () => {
288
+ allSubForm().forEach(sub => {
289
+ sub.refresh();
290
+ });
291
+ h.$render.clearCacheAll();
292
+ h.refresh();
293
+ },
294
+ refreshOptions() {
295
+ h.$manager.updateOptions(h.options);
296
+ api.refresh();
297
+ },
298
+ hideForm: (hide) => {
299
+ h.vm.setupState.isShow = !hide;
300
+ },
301
+ changeStatus: () => {
302
+ return h.changeStatus;
303
+ },
304
+ clearChangeStatus: () => {
305
+ h.changeStatus = false;
306
+ },
307
+ updateRule(id, rule) {
308
+ h.getCtxs(id).forEach(ctx => {
309
+ extend(ctx.rule, rule);
310
+ });
311
+ },
312
+ updateRules(rules) {
313
+ Object.keys(rules).forEach(id => {
314
+ api.updateRule(id, rules[id]);
315
+ })
316
+ },
317
+ mergeRule: (id, rule) => {
318
+ h.getCtxs(id).forEach(ctx => {
319
+ mergeRule(ctx.rule, rule);
320
+ });
321
+ },
322
+ mergeRules(rules) {
323
+ Object.keys(rules).forEach(id => {
324
+ api.mergeRule(id, rules[id]);
325
+ })
326
+ },
327
+ getRule: (id, origin) => {
328
+ const ctx = h.getCtx(id);
329
+ if (ctx) {
330
+ return origin ? ctx.origin : ctx.rule;
331
+ }
332
+ },
333
+ getRenderRule: (id) => {
334
+ const ctx = h.getCtx(id);
335
+ if (ctx) {
336
+ return ctx.prop;
337
+ }
338
+ },
339
+ getRefRule: (id) => {
340
+ const ctxs = h.getCtxs(id);
341
+ if (ctxs) {
342
+ const rules = ctxs.map(ctx => {
343
+ return ctx.rule;
344
+ })
345
+ return rules.length === 1 ? rules[0] : rules;
346
+ }
347
+ },
348
+ setEffect(id, attr, value) {
349
+ const ctx = h.getCtx(id);
350
+ if (ctx && attr) {
351
+ if (attr[0] === '$') {
352
+ attr = attr.substr(1);
353
+ }
354
+ if (hasProperty(ctx.rule, '$' + attr)) {
355
+ $set(ctx.rule, '$' + attr, value);
356
+ }
357
+ if (!hasProperty(ctx.rule, 'effect')) {
358
+ ctx.rule.effect = {};
359
+ }
360
+ $set(ctx.rule.effect, attr, value);
361
+ }
362
+ },
363
+ clearEffectData(id, attr) {
364
+ const ctx = h.getCtx(id);
365
+ if (ctx) {
366
+ if (attr && attr[0] === '$') {
367
+ attr = attr.substr(1);
368
+ }
369
+ ctx.clearEffectData(attr);
370
+ api.sync(id);
371
+ }
372
+ },
373
+ updateValidate(id, validate, merge) {
374
+ if (merge) {
375
+ api.mergeRule(id, {validate})
376
+ } else {
377
+ props(id, 'validate', validate);
378
+ }
379
+ },
380
+ updateValidates(validates, merge) {
381
+ Object.keys(validates).forEach(id => {
382
+ api.updateValidate(id, validates[id], merge);
383
+ })
384
+ },
385
+ refreshValidate() {
386
+ api.refresh();
387
+ },
388
+ resetFields(fields) {
389
+ tidyFields(fields).forEach(field => {
390
+ h.getCtxs(field).forEach(ctx => {
391
+ h.$render.clearCache(ctx);
392
+ ctx.rule.value = copy(ctx.defaultValue);
393
+ });
394
+ });
395
+ nextTick(() => {
396
+ nextTick(() => {
397
+ nextTick(() => {
398
+ api.clearValidateState(fields);
399
+ });
400
+ });
401
+ });
402
+ if (fields == null) {
403
+ is.Function(h.options.onReset) && invoke(() => h.options.onReset(api));
404
+ h.vm.emit('reset', api);
405
+ }
406
+ },
407
+ method(id, name) {
408
+ const el = api.el(id);
409
+ if (!el || !el[name])
410
+ throw new Error(format('err', `${name} 方法不存在`));
411
+ return (...args) => {
412
+ return el[name](...args);
413
+ }
414
+ },
415
+ exec(id, name, ...args) {
416
+ return invoke(() => api.method(id, name)(...args));
417
+ },
418
+ toJson(space) {
419
+ return toJson(api.rule, space);
420
+ },
421
+ trigger(id, event, ...args) {
422
+ const el = api.el(id);
423
+ el && el.$emit(event, ...args);
424
+ },
425
+ el(id) {
426
+ const ctx = h.getCtx(id);
427
+ if (ctx) return ctx.el || h.vm.refs[ctx.ref];
428
+ },
429
+ closeModal: (id) => {
430
+ h.bus.$emit('fc:closeModal:' + id);
431
+ },
432
+ getSubForm(field) {
433
+ const ctx = h.getCtx(field);
434
+ return ctx ? h.subForm[ctx.id] : undefined;
435
+ },
436
+ getChildrenRuleList(id) {
437
+ const flag = typeof id === 'object';
438
+ const ctx = flag ? byCtx(id) : h.getCtx(id);
439
+ const rule = ctx ? ctx.rule : (flag ? id : api.getRule(id));
440
+ if (!rule) {
441
+ return [];
442
+ }
443
+ const rules = [];
444
+ const findRules = children => {
445
+ children && children.forEach(item => {
446
+ if (typeof item !== 'object') {
447
+ return;
448
+ }
449
+ if (item.field) {
450
+ rules.push(item);
451
+ }
452
+ rules.push(...api.getChildrenRuleList(item));
453
+ });
454
+ }
455
+ findRules(ctx ? ctx.loadChildrenPending() : rule.children);
456
+ return rules;
457
+ },
458
+ getParentRule(id) {
459
+ const flag = typeof id === 'object';
460
+ const ctx = flag ? byCtx(id) : h.getCtx(id);
461
+ return ctx.parent.rule;
462
+ },
463
+ getParentSubRule(id) {
464
+ const flag = typeof id === 'object';
465
+ const ctx = flag ? byCtx(id) : h.getCtx(id);
466
+ if (ctx) {
467
+ const group = ctx.getParentGroup();
468
+ if (group) {
469
+ return group.rule;
470
+ }
471
+ }
472
+ },
473
+ getChildrenFormData(id) {
474
+ const rules = api.getChildrenRuleList(id);
475
+ return rules.reduce((formData, rule) => {
476
+ formData[rule.field] = copy(rule.value);
477
+ return formData;
478
+ }, {});
479
+ },
480
+ setChildrenFormData(id, formData, cover) {
481
+ const rules = api.getChildrenRuleList(id);
482
+ h.deferSyncValue(() => {
483
+ rules.forEach(rule => {
484
+ if (hasProperty(formData, rule.field)) {
485
+ rule.value = formData[rule.field];
486
+ } else if (cover) {
487
+ rule.value = undefined;
488
+ }
489
+ });
490
+ });
491
+ },
492
+ getGlobalEvent(name) {
493
+ let event = api.options.globalEvent[name];
494
+ if (event) {
495
+ if (typeof event === 'object') {
496
+ event = event.handle;
497
+ }
498
+ return parseFn(event);
499
+ }
500
+ return undefined;
501
+ },
502
+ getGlobalData(name) {
503
+ return new Promise((resolve, inject) => {
504
+ let config = api.options.globalData[name];
505
+ if (!config) {
506
+ resolve(h.fc.loadData[name]);
507
+ }
508
+ if (config.type === 'fetch') {
509
+ api.fetch(config).then(res => {
510
+ resolve(res);
511
+ }).catch(inject);
512
+ } else {
513
+ resolve(config.data);
514
+ }
515
+ });
516
+ },
517
+ nextTick(fn) {
518
+ h.bus.$once('next-tick', fn);
519
+ h.refresh();
520
+ },
521
+ nextRefresh(fn) {
522
+ h.nextRefresh();
523
+ fn && invoke(fn);
524
+ },
525
+ deferSyncValue(fn, sync) {
526
+ h.deferSyncValue(fn, sync);
527
+ },
528
+ emit(name, ...args) {
529
+ h.vm.emit(name, ...args);
530
+ },
531
+ bus: h.bus,
532
+ fetch(opt) {
533
+ return new Promise((resolve, reject) => {
534
+ opt = deepCopy(opt);
535
+ opt = h.loadFetchVar(opt);
536
+ h.beforeFetch(opt).then(() => {
537
+ return asyncFetch(opt, h.fc.create.fetch, api).then((res) => {
538
+ invoke(() => opt.onSuccess && opt.onSuccess(res));
539
+ resolve(res);
540
+ }).catch((e) => {
541
+ invoke(() => opt.onError && opt.onError(e));
542
+ reject(e);
543
+ });
544
+ });
545
+ });
546
+ },
547
+ watchFetch(opt, callback, error, beforeFetch) {
548
+ return h.fc.watchLoadData((get, change) => {
549
+ let _opt = deepCopy(opt);
550
+ _opt = h.loadFetchVar(_opt, get);
551
+ if (beforeFetch && beforeFetch(_opt, change) === false) {
552
+ return;
553
+ }
554
+ h.beforeFetch(_opt).then(() => {
555
+ return asyncFetch(_opt, h.fc.create.fetch, api).then(res => {
556
+ invoke(() => _opt.onSuccess && _opt.onSuccess(res));
557
+ callback && callback(res, change);
558
+ }).catch(e => {
559
+ invoke(() => _opt.onError && _opt.onError(e));
560
+ error && error(e);
561
+ });
562
+ });
563
+ }, opt.wait == null ? 1000 : opt.wait);
564
+ },
565
+ getData(id, def) {
566
+ return h.fc.getLoadData(id, def);
567
+ },
568
+ watchData(fn) {
569
+ return h.fc.watchLoadData((get, change) => {
570
+ invoke(() => fn(get, change));
571
+ })
572
+ },
573
+ setData(id, data, isGlobal) {
574
+ return h.fc.setData(id, data, isGlobal);
575
+ },
576
+ refreshData(id) {
577
+ return h.fc.refreshData(id);
578
+ },
579
+ t(id, params) {
580
+ return h.fc.t(id, params);
581
+ },
582
+ getLocale() {
583
+ return h.fc.getLocale();
584
+ },
585
+ helper: {
586
+ tidyFields, props
587
+ }
588
+ };
589
+
590
+ ['on', 'once', 'off'].forEach(n => {
591
+ api[n] = function (...args) {
592
+ h.bus[`$${n}`](...args);
593
+ }
594
+ });
595
+
596
+ api.changeValue = api.changeField = api.setValue;
597
+
598
+ return api;
599
+ }
@@ -0,0 +1,12 @@
1
+ import {functionalMerge, normalMerge, toArrayMerge} from '@bdsoft-element/utils/lib/mergeprops';
2
+
3
+
4
+ export const keyAttrs = ['type', 'slot', 'ignore', 'emitPrefix', 'value', 'name', 'native', 'hidden', 'display', 'inject', 'options', 'emit', 'link', 'prefix', 'suffix', 'update', 'sync', 'optionsTo', 'key', 'slotUpdate', 'computed', 'preview', 'component', 'cache', 'modelEmit'];
5
+
6
+ export const arrayAttrs = ['validate', 'children', 'control'];
7
+
8
+ export const normalAttrs = ['effect', 'deep', 'renderSlots'];
9
+
10
+ export function attrs() {
11
+ return [...keyAttrs, ...normalMerge, ...toArrayMerge, ...functionalMerge, ...arrayAttrs, ...normalAttrs];
12
+ }
@@ -0,0 +1,76 @@
1
+ import {deepGet} from './util';
2
+
3
+ function getCookie(name) {
4
+ name = name + '=';
5
+
6
+ const decodedCookie = decodeURIComponent(document.cookie);
7
+ const cookieArray = decodedCookie.split(';');
8
+
9
+ for (let i = 0; i < cookieArray.length; i++) {
10
+ let cookie = cookieArray[i];
11
+ while (cookie.charAt(0) === ' ') {
12
+ cookie = cookie.substring(1);
13
+ }
14
+ if (cookie.indexOf(name) === 0) {
15
+ cookie = cookie.substring(name.length, cookie.length);
16
+ try {
17
+ return JSON.parse(cookie);
18
+ } catch (e) {
19
+ return cookie;
20
+ }
21
+ }
22
+ }
23
+ return null;
24
+ }
25
+
26
+ function getLocalStorage(name) {
27
+ const value = localStorage.getItem(name);
28
+ if (value) {
29
+ try {
30
+ return JSON.parse(value);
31
+ } catch (e) {
32
+ return value;
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+
38
+ function getSessionStorage(name) {
39
+ const value = sessionStorage.getItem(name);
40
+ if (value) {
41
+ try {
42
+ return JSON.parse(value);
43
+ } catch (e) {
44
+ return value;
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+
50
+ export function baseDriver(driver, name) {
51
+ if (!name) {
52
+ return null;
53
+ }
54
+ const split = name.split('.');
55
+ let value = driver(split.shift());
56
+
57
+ if (!split.length) {
58
+ return value;
59
+ }
60
+ if (value == null) {
61
+ return null;
62
+ }
63
+ return deepGet(value, split);
64
+ }
65
+
66
+ export function cookieDriver(name) {
67
+ return baseDriver(getCookie, name);
68
+ }
69
+
70
+ export function localStorageDriver(name) {
71
+ return baseDriver(getLocalStorage, name);
72
+ }
73
+
74
+ export function sessionStorageDriver(name) {
75
+ return baseDriver(getSessionStorage, name);
76
+ }