starfish-form-custom 1.0.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 (73) hide show
  1. package/README.md +2 -0
  2. package/auto-imports.d.ts +9 -0
  3. package/components.d.ts +68 -0
  4. package/dist/formAction-28d86b6a.mjs +446 -0
  5. package/dist/index-04830c0b.mjs +126 -0
  6. package/dist/index-eab8ef70.mjs +519 -0
  7. package/dist/index-f7ea052c.mjs +241 -0
  8. package/dist/main-96327b2e.mjs +5051 -0
  9. package/dist/starfish-form-a18a5409.mjs +328 -0
  10. package/dist/starfish-form.mjs +36 -0
  11. package/dist/style.css +377 -0
  12. package/dist/types/form/src/common/Loading.vue.d.ts +3 -0
  13. package/dist/types/form/src/env.d.ts +15 -0
  14. package/dist/types/form/src/main.d.ts +43 -0
  15. package/dist/types/form/src/starfish-form.vue.d.ts +40 -0
  16. package/dist/types/form/src/utils/customHooks.d.ts +2 -0
  17. package/dist/types/form/src/utils/fieldConfig.d.ts +78 -0
  18. package/dist/types/form/src/utils/fieldProps.d.ts +43 -0
  19. package/dist/types/starfish-form.d.ts +3 -0
  20. package/package.json +42 -0
  21. package/src/common/KeyValueConfig.vue +145 -0
  22. package/src/common/KeyValueConfigMult.vue +139 -0
  23. package/src/common/Loading.vue +14 -0
  24. package/src/common/action.vue +76 -0
  25. package/src/common/formAction.vue +298 -0
  26. package/src/common/listConfig.vue +45 -0
  27. package/src/common/panel.vue +61 -0
  28. package/src/common/radiogroup.vue +31 -0
  29. package/src/components/CheckBox/index.vue +42 -0
  30. package/src/components/ColorSelect/index.vue +49 -0
  31. package/src/components/Date/index.vue +39 -0
  32. package/src/components/DateTime/index.vue +39 -0
  33. package/src/components/InputNumber/index.vue +48 -0
  34. package/src/components/JsonEditor/index.vue +167 -0
  35. package/src/components/Radio/index.vue +42 -0
  36. package/src/components/RichText/index.vue +60 -0
  37. package/src/components/Rule/index.vue +365 -0
  38. package/src/components/Rule/ruleform.json +315 -0
  39. package/src/components/Rule/rules.js +91 -0
  40. package/src/components/Selected/index.vue +50 -0
  41. package/src/components/Selecteds/index.vue +50 -0
  42. package/src/components/ShowRule/index.vue +50 -0
  43. package/src/components/Slider/index.vue +38 -0
  44. package/src/components/Switch/index.vue +61 -0
  45. package/src/components/Text/index.vue +48 -0
  46. package/src/components/TextArea/index.vue +49 -0
  47. package/src/components/Time/index.vue +36 -0
  48. package/src/env.d.ts +15 -0
  49. package/src/layout/Divider.vue +30 -0
  50. package/src/layout/Info.vue +69 -0
  51. package/src/layout/Tabs.vue +75 -0
  52. package/src/layout/collapse.vue +78 -0
  53. package/src/layout/grid.vue +88 -0
  54. package/src/layout/table.vue +80 -0
  55. package/src/main.ts +62 -0
  56. package/src/starfish-form.vue +265 -0
  57. package/src/styles/action.scss +25 -0
  58. package/src/styles/collapse.scss +15 -0
  59. package/src/styles/custom-cpm.scss +5 -0
  60. package/src/styles/divider.scss +16 -0
  61. package/src/styles/form-action.scss +92 -0
  62. package/src/styles/formedit.scss +69 -0
  63. package/src/styles/grid.scss +12 -0
  64. package/src/styles/index.scss +12 -0
  65. package/src/styles/keyvalueConfig.scss +56 -0
  66. package/src/styles/rule.scss +17 -0
  67. package/src/styles/showrule.scss +5 -0
  68. package/src/styles/table.scss +19 -0
  69. package/src/styles/tabs.scss +5 -0
  70. package/src/utils/customHooks.ts +22 -0
  71. package/src/utils/fieldConfig.ts +961 -0
  72. package/src/utils/fieldProps.ts +50 -0
  73. package/stats.html +4949 -0
@@ -0,0 +1,328 @@
1
+ import { ElFormItem, ElForm } from 'element-plus/es';
2
+ import 'element-plus/es/components/base/style/css';
3
+ import 'element-plus/es/components/form/style/css';
4
+ import 'element-plus/es/components/form-item/style/css';
5
+ import { defineComponent, getCurrentInstance, ref, onMounted, openBlock, createElementBlock, createVNode, withCtx, Fragment, renderList, createBlock, resolveDynamicComponent, mergeProps, createCommentVNode, toRaw } from 'vue';
6
+ import { _ as _export_sfc } from './main-96327b2e.mjs';
7
+ import 'element-plus/es/components/input/style/css';
8
+ import 'element-plus/es/components/checkbox/style/css';
9
+ import 'element-plus/es/components/tooltip/style/css';
10
+ import 'element-plus/es/components/loading/style/css';
11
+ import 'element-plus/es/components/dropdown/style/css';
12
+ import 'element-plus/es/components/dropdown-menu/style/css';
13
+ import 'element-plus/es/components/dropdown-item/style/css';
14
+ import 'element-plus/es/components/collapse/style/css';
15
+ import 'element-plus/es/components/collapse-item/style/css';
16
+ import 'element-plus/es/components/row/style/css';
17
+ import 'element-plus/es/components/button/style/css';
18
+ import 'element-plus/es/components/icon/style/css';
19
+ import 'element-plus/es/components/col/style/css';
20
+ import 'element-plus/es/components/select/style/css';
21
+ import 'element-plus/es/components/option/style/css';
22
+ import '@element-plus/icons-vue';
23
+ import 'element-plus/es/components/input-number/style/css';
24
+ import 'element-plus/es/components/radio-group/style/css';
25
+ import 'element-plus/es/components/radio-button/style/css';
26
+ import 'element-plus/es/components/checkbox-group/style/css';
27
+ import 'element-plus/es/components/color-picker/style/css';
28
+ import 'element-plus/es/components/date-picker/style/css';
29
+ import 'element-plus/es/components/radio/style/css';
30
+ import 'element-plus/es/components/slider/style/css';
31
+ import 'element-plus/es/components/switch/style/css';
32
+ import 'element-plus/es/components/time-select/style/css';
33
+ import 'element-plus/es/components/divider/style/css';
34
+ import 'element-plus/es/components/alert/style/css';
35
+ import 'element-plus/es/components/tabs/style/css';
36
+ import 'element-plus/es/components/tab-pane/style/css';
37
+ import 'element-plus';
38
+
39
+ const _sfc_main = defineComponent({
40
+ name: "Dynamicform",
41
+ props: {
42
+ allFormList: {
43
+ type: Array,
44
+ default() {
45
+ return [];
46
+ }
47
+ },
48
+ formResult: {
49
+ type: Object,
50
+ default() {
51
+ return {};
52
+ }
53
+ },
54
+ globalConfig: {
55
+ type: Object,
56
+ default() {
57
+ return {};
58
+ }
59
+ }
60
+ },
61
+ setup(props, { emit }) {
62
+ const { proxy } = getCurrentInstance();
63
+ const rules = ref({});
64
+ const ruleForm = ref();
65
+ const controlObj = ref();
66
+ props.allFormList?.forEach((item2) => {
67
+ getRules(item2);
68
+ });
69
+ function getFormListRules(rules) {
70
+ const result = [];
71
+ if (Array.isArray(rules) && rules && rules.length > 0) {
72
+ rules.forEach((item) => {
73
+ if (item.type == "enum") {
74
+ const func = eval(`(${item.value})`);
75
+ result.push({
76
+ validator: func,
77
+ trigger: "blur"
78
+ });
79
+ } else if (item.type == "func") {
80
+ const mainData = props.formResult;
81
+ const func = eval(`((rule, value, callback, mainData = mainData) => {${item.value.func}})`);
82
+ result.push({
83
+ validator: func,
84
+ trigger: "blur"
85
+ });
86
+ console.log("mainData", mainData);
87
+ } else if (item.type == "high") {
88
+ if (item.value.ruleType == 5) {
89
+ result.push({
90
+ validator: eval(item.value.validor),
91
+ trigger: item.value.trigger
92
+ });
93
+ return;
94
+ }
95
+ result.push(item.value);
96
+ }
97
+ });
98
+ }
99
+ return result;
100
+ }
101
+ function getRules(item2) {
102
+ if (!item2.layout) {
103
+ let rule = [];
104
+ if (item2.data.required) {
105
+ rule.push({
106
+ required: true,
107
+ message: "\u8BF7\u8F93\u5165" + item2.data.label,
108
+ trigger: "blur"
109
+ });
110
+ }
111
+ if (typeof item2.data.rule == "string") {
112
+ rule = rule.concat(proxy.$Flex.tryParseJson(item2.data.rule));
113
+ } else {
114
+ rule = rule.concat(getFormListRules(item2.data.rule));
115
+ }
116
+ if (item2.data.json) {
117
+ rule.push(...proxy.$Flex.getJsonValidate());
118
+ }
119
+ rules.value[item2.data.fieldName] = rule;
120
+ } else if (item2.layout) {
121
+ if (item2.ControlType == "Grid") {
122
+ item2.data.columns.forEach((colItem) => {
123
+ colItem.list.forEach((listItem) => {
124
+ getRules(listItem);
125
+ });
126
+ });
127
+ } else if (item2.ControlType == "TableLayout") {
128
+ const trs = item2.data.trs;
129
+ trs.forEach((trItem) => {
130
+ trItem.tds.forEach((tdItem) => {
131
+ tdItem.list.forEach((listItem) => {
132
+ getRules(listItem);
133
+ });
134
+ });
135
+ });
136
+ } else if (item2.ControlType == "Collapse" || item2.ControlType == "Tabs") {
137
+ const items = item2.data.items;
138
+ items.forEach((colItem) => {
139
+ colItem.list.forEach((listItem) => {
140
+ getRules(listItem);
141
+ });
142
+ });
143
+ }
144
+ }
145
+ }
146
+ const handleControlChange = () => {
147
+ const allFormLists = props.allFormList;
148
+ allFormLists.forEach((item2) => {
149
+ if (item2.data.showRule === "{}") {
150
+ item2.show = true;
151
+ } else {
152
+ try {
153
+ if (Array.isArray(item2.data.showRule)) {
154
+ item2.show = conditionChange(transformData(toRaw(item2.data.showRule)));
155
+ } else {
156
+ item2.show = conditionChange(toRaw(item2.data.showRule));
157
+ }
158
+ } catch (e) {
159
+ item2.show = true;
160
+ }
161
+ }
162
+ });
163
+ executeFunc("updated");
164
+ emit("change");
165
+ };
166
+ function transformData(data) {
167
+ const r = [];
168
+ data.forEach((item2) => {
169
+ r.push({
170
+ type: "andgroup",
171
+ result: item2.map((d) => {
172
+ return {
173
+ type: "data",
174
+ data: d
175
+ };
176
+ })
177
+ });
178
+ });
179
+ const result2 = {
180
+ type: "orgroup",
181
+ result: r
182
+ };
183
+ return result2;
184
+ }
185
+ function conditionChange(data) {
186
+ if (data.type == "andgroup") {
187
+ const result2 = data.result.map((item2) => {
188
+ const r = conditionChange(item2);
189
+ return r;
190
+ }).find((item2) => {
191
+ return item2 == false;
192
+ });
193
+ return result2 === void 0 ? true : result2;
194
+ } else if (data.type == "orgroup") {
195
+ const result2 = data.result.map((item2) => {
196
+ const r = conditionChange(item2);
197
+ return r;
198
+ }).find((item2) => {
199
+ return item2 == true;
200
+ });
201
+ return result2 === void 0 ? false : result2;
202
+ } else if (data.type == "data") {
203
+ const result2 = data.data;
204
+ const formResults = props.formResult;
205
+ const value = formResults[result2.field];
206
+ let isShow = false;
207
+ switch (result2.logic) {
208
+ case "=":
209
+ isShow = value == result2.value;
210
+ break;
211
+ case "!=":
212
+ isShow = value != result2.value;
213
+ break;
214
+ case "in":
215
+ if (Array.isArray(value)) {
216
+ value.find((item2) => {
217
+ if (result2.value.include(item2)) {
218
+ isShow = result2.value.includes(item2);
219
+ return item2;
220
+ }
221
+ });
222
+ } else {
223
+ isShow = result2.value.includes(value);
224
+ }
225
+ break;
226
+ case "not in":
227
+ if (Array.isArray(value)) {
228
+ value.find((item2) => {
229
+ if (!result2.value.include(item2)) {
230
+ isShow = !result2.value.includes(item2);
231
+ return item2;
232
+ }
233
+ });
234
+ } else {
235
+ isShow = !result2.value.includes(value);
236
+ }
237
+ break;
238
+ }
239
+ return isShow;
240
+ }
241
+ }
242
+ function reset() {
243
+ ruleForm.value.resetFields();
244
+ }
245
+ function getValidate() {
246
+ return new Promise((resolve) => {
247
+ ruleForm.value.validate((valide) => {
248
+ resolve(valide);
249
+ });
250
+ });
251
+ }
252
+ onMounted(() => {
253
+ handleControlChange();
254
+ executeFunc("mounted");
255
+ });
256
+ function executeFunc(funcName) {
257
+ const mountedAction = props.globalConfig.action?.find((item2) => {
258
+ if (item2.type == funcName) {
259
+ return item2;
260
+ }
261
+ });
262
+ if (mountedAction) {
263
+ eval(`(function(){${mountedAction.funcStr}}).call(proxy)`);
264
+ }
265
+ }
266
+ return {
267
+ rules,
268
+ ruleForm,
269
+ controlObj,
270
+ handleControlChange,
271
+ reset,
272
+ getValidate
273
+ };
274
+ }
275
+ });
276
+ const _hoisted_1 = { class: "starfish-dynamicform" };
277
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
278
+ const _component_el_form_item = ElFormItem;
279
+ const _component_el_form = ElForm;
280
+ return openBlock(), createElementBlock("div", _hoisted_1, [
281
+ createVNode(_component_el_form, {
282
+ ref: "ruleForm",
283
+ model: _ctx.formResult,
284
+ rules: _ctx.rules,
285
+ "label-width": "120px",
286
+ class: "demo-ruleForm",
287
+ size: _ctx.globalConfig.size || "large",
288
+ "validate-on-rule-change": false
289
+ }, {
290
+ default: withCtx(() => [
291
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.allFormList, (item2) => {
292
+ return openBlock(), createElementBlock(Fragment, null, [
293
+ !item2.layout && item2.show ? (openBlock(), createBlock(_component_el_form_item, {
294
+ prop: item2.data.fieldName,
295
+ key: item2.id
296
+ }, {
297
+ default: withCtx(() => [
298
+ (openBlock(), createBlock(resolveDynamicComponent(item2.ControlType), mergeProps({
299
+ ref_for: true,
300
+ ref: "controlObj",
301
+ onChange: _ctx.handleControlChange
302
+ }, { ref_for: true }, _ctx.globalConfig, {
303
+ item: item2,
304
+ data: _ctx.formResult || "{}",
305
+ drag: false
306
+ }), null, 16, ["onChange", "item", "data"]))
307
+ ]),
308
+ _: 2
309
+ }, 1032, ["prop"])) : item2.show ? (openBlock(), createBlock(resolveDynamicComponent(item2.ControlType), mergeProps({
310
+ ref_for: true,
311
+ ref: "controlObj",
312
+ onChange: _ctx.handleControlChange,
313
+ key: item2.id
314
+ }, { ref_for: true }, _ctx.globalConfig, {
315
+ item: item2,
316
+ data: _ctx.formResult || "{}",
317
+ drag: false
318
+ }), null, 16, ["onChange", "item", "data"])) : createCommentVNode("", true)
319
+ ], 64);
320
+ }), 256))
321
+ ]),
322
+ _: 1
323
+ }, 8, ["model", "rules", "size"])
324
+ ]);
325
+ }
326
+ const Dynamicform = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
327
+
328
+ export { Dynamicform as default };
@@ -0,0 +1,36 @@
1
+ export { D as Dynamicform, m as default } from './main-96327b2e.mjs';
2
+ import 'vue';
3
+ import 'element-plus/es';
4
+ import 'element-plus/es/components/base/style/css';
5
+ import 'element-plus/es/components/input/style/css';
6
+ import 'element-plus/es/components/checkbox/style/css';
7
+ import 'element-plus/es/components/tooltip/style/css';
8
+ import 'element-plus/es/components/loading/style/css';
9
+ import 'element-plus/es/components/dropdown/style/css';
10
+ import 'element-plus/es/components/dropdown-menu/style/css';
11
+ import 'element-plus/es/components/dropdown-item/style/css';
12
+ import 'element-plus/es/components/collapse/style/css';
13
+ import 'element-plus/es/components/collapse-item/style/css';
14
+ import 'element-plus/es/components/row/style/css';
15
+ import 'element-plus/es/components/button/style/css';
16
+ import 'element-plus/es/components/icon/style/css';
17
+ import 'element-plus/es/components/col/style/css';
18
+ import 'element-plus/es/components/select/style/css';
19
+ import 'element-plus/es/components/option/style/css';
20
+ import '@element-plus/icons-vue';
21
+ import 'element-plus/es/components/input-number/style/css';
22
+ import 'element-plus/es/components/radio-group/style/css';
23
+ import 'element-plus/es/components/radio-button/style/css';
24
+ import 'element-plus/es/components/checkbox-group/style/css';
25
+ import 'element-plus/es/components/color-picker/style/css';
26
+ import 'element-plus/es/components/date-picker/style/css';
27
+ import 'element-plus/es/components/radio/style/css';
28
+ import 'element-plus/es/components/slider/style/css';
29
+ import 'element-plus/es/components/switch/style/css';
30
+ import 'element-plus/es/components/time-select/style/css';
31
+ import 'element-plus/es/components/divider/style/css';
32
+ import 'element-plus/es/components/alert/style/css';
33
+ import 'element-plus/es/components/tabs/style/css';
34
+ import 'element-plus/es/components/tab-pane/style/css';
35
+ import 'element-plus/es/components/form-item/style/css';
36
+ import 'element-plus';