tianheng-ui 0.0.46 → 0.0.49
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.
- package/lib/index.js +3 -3
- package/lib/tianheng-ui.js +3 -3
- package/package.json +1 -1
- package/packages/dialog/index.vue +4 -1
- package/packages/formMaking/Container.vue +16 -26
- package/packages/formMaking/GenerateForm.vue +93 -101
- package/packages/formMaking/GenerateFormItem.vue +203 -17
- package/packages/formMaking/WidgetConfig.vue +212 -34
- package/packages/formMaking/WidgetForm.vue +51 -185
- package/packages/formMaking/WidgetFormItem.vue +382 -30
- package/packages/formMaking/componentsConfig.js +159 -14
- package/packages/formMaking/generateCode.js +35 -27
- package/packages/formMaking/styles/cover.scss +40 -40
- package/packages/formMaking/styles/index.scss +30 -8
package/package.json
CHANGED
@@ -80,9 +80,6 @@
|
|
80
80
|
sort: false,
|
81
81
|
ghostClass: 'ghost'
|
82
82
|
}"
|
83
|
-
@end="handleMoveEnd"
|
84
|
-
@start="handleMoveStart"
|
85
|
-
:move="handleMove"
|
86
83
|
>
|
87
84
|
<template v-for="(item, index) in layoutComponents">
|
88
85
|
<li
|
@@ -150,7 +147,8 @@
|
|
150
147
|
ref="widgetForm"
|
151
148
|
:data="widgetForm"
|
152
149
|
:select.sync="widgetFormSelect"
|
153
|
-
|
150
|
+
>
|
151
|
+
</widget-form>
|
154
152
|
</el-main>
|
155
153
|
</el-container>
|
156
154
|
|
@@ -200,19 +198,11 @@
|
|
200
198
|
:data="widgetForm"
|
201
199
|
:value="widgetModels"
|
202
200
|
:remote="remoteFuncs"
|
201
|
+
:slotKeys="slotKeys"
|
203
202
|
ref="generateForm"
|
204
203
|
>
|
205
|
-
<template v-slot
|
206
|
-
|
207
|
-
<el-input
|
208
|
-
v-model="scope.model.blank.width"
|
209
|
-
style="width: 100px"
|
210
|
-
></el-input>
|
211
|
-
Height
|
212
|
-
<el-input
|
213
|
-
v-model="scope.model.blank.height"
|
214
|
-
style="width: 100px"
|
215
|
-
></el-input>
|
204
|
+
<template v-for="name in slotKeys" :slot="name">
|
205
|
+
<slot :name="name" />
|
216
206
|
</template>
|
217
207
|
</generate-form>
|
218
208
|
|
@@ -302,7 +292,7 @@
|
|
302
292
|
import ace from "ace-builds";
|
303
293
|
import "ace-builds/src-min-noconflict/mode-json";
|
304
294
|
import "ace-builds/src-min-noconflict/mode-html";
|
305
|
-
import htmlWorkerUrl from
|
295
|
+
import htmlWorkerUrl from "file-loader!ace-builds/src-min-noconflict/worker-html";
|
306
296
|
ace.config.setModuleUrl("ace/mode/html_worker", htmlWorkerUrl);
|
307
297
|
import jsonWorkerUrl from "file-loader!ace-builds/src-noconflict/worker-json";
|
308
298
|
ace.config.setModuleUrl("ace/mode/json_worker", jsonWorkerUrl);
|
@@ -316,8 +306,8 @@ import CusDialog from "./CusDialog";
|
|
316
306
|
import GenerateForm from "./GenerateForm";
|
317
307
|
import {
|
318
308
|
basicComponents,
|
319
|
-
|
320
|
-
|
309
|
+
advanceComponents,
|
310
|
+
layoutComponents
|
321
311
|
} from "./componentsConfig.js";
|
322
312
|
// import {loadJs, loadCss} from '../util/index.js'
|
323
313
|
import request from "./util/request";
|
@@ -369,16 +359,17 @@ export default {
|
|
369
359
|
"select",
|
370
360
|
"switch",
|
371
361
|
"slider",
|
372
|
-
"text"
|
362
|
+
"text",
|
363
|
+
"button"
|
373
364
|
]
|
374
365
|
},
|
375
366
|
advanceFields: {
|
376
367
|
type: Array,
|
377
|
-
default: () => ["blank", "imgupload", "editor", "cascader"]
|
368
|
+
default: () => ["blank", "imgupload", "editor", "cascader", "table"]
|
378
369
|
},
|
379
370
|
layoutFields: {
|
380
371
|
type: Array,
|
381
|
-
default: () => ["grid"]
|
372
|
+
default: () => ["grid", "tabs", "divider"]
|
382
373
|
},
|
383
374
|
remoteApis: {
|
384
375
|
type: Array,
|
@@ -428,7 +419,7 @@ export default {
|
|
428
419
|
console.log("callback", response, file, fileList);
|
429
420
|
}
|
430
421
|
},
|
431
|
-
widgetModels: {},
|
422
|
+
widgetModels: { table: [{ name: "这是" }] },
|
432
423
|
blank: "",
|
433
424
|
htmlTemplate: "",
|
434
425
|
vueTemplate: "",
|
@@ -445,7 +436,8 @@ export default {
|
|
445
436
|
"size": "small"
|
446
437
|
}
|
447
438
|
}`,
|
448
|
-
codeActiveName: "vue"
|
439
|
+
codeActiveName: "vue",
|
440
|
+
slotKeys: []
|
449
441
|
};
|
450
442
|
},
|
451
443
|
mounted() {
|
@@ -472,9 +464,6 @@ export default {
|
|
472
464
|
// };
|
473
465
|
// });
|
474
466
|
// },
|
475
|
-
handleGoGithub() {
|
476
|
-
window.location.href = "https://github.com/GavinZhuLei/vue-form-making";
|
477
|
-
},
|
478
467
|
handleConfigSelect(value) {
|
479
468
|
this.configTab = value;
|
480
469
|
},
|
@@ -489,6 +478,7 @@ export default {
|
|
489
478
|
},
|
490
479
|
handlePreview() {
|
491
480
|
// console.log(this.widgetForm);
|
481
|
+
this.slotKeys = Object.keys(this.$slots);
|
492
482
|
this.previewVisible = true;
|
493
483
|
},
|
494
484
|
handleTest() {
|
@@ -9,62 +9,20 @@
|
|
9
9
|
:label-position="data.config.labelPosition"
|
10
10
|
:label-width="data.config.labelWidth + 'px'"
|
11
11
|
>
|
12
|
-
<
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
:span="col.span"
|
25
|
-
>
|
26
|
-
<template v-for="citem in col.list">
|
27
|
-
<el-form-item
|
28
|
-
v-if="citem.type == 'blank'"
|
29
|
-
:label="citem.name"
|
30
|
-
:prop="citem.model"
|
31
|
-
:key="citem.key"
|
32
|
-
>
|
33
|
-
<slot :name="citem.model" :model="models"></slot>
|
34
|
-
</el-form-item>
|
35
|
-
<genetate-form-item
|
36
|
-
v-else
|
37
|
-
:key="citem.key"
|
38
|
-
:models.sync="models"
|
39
|
-
:remote="remote"
|
40
|
-
:rules="rules"
|
41
|
-
:widget="citem"
|
42
|
-
@input-change="onInputChange"
|
43
|
-
>
|
44
|
-
</genetate-form-item>
|
45
|
-
</template>
|
46
|
-
</el-col>
|
47
|
-
</el-row>
|
12
|
+
<genetate-form-item
|
13
|
+
v-for="item in data.list"
|
14
|
+
:key="item.key"
|
15
|
+
:models.sync="models"
|
16
|
+
:rules="rules"
|
17
|
+
:widget="item"
|
18
|
+
:slotKeys="slotKeys"
|
19
|
+
@input-change="onInputChange"
|
20
|
+
:remote="remote"
|
21
|
+
>
|
22
|
+
<template v-for="name in slotKeys" :slot="name">
|
23
|
+
<slot :name="name" />
|
48
24
|
</template>
|
49
|
-
|
50
|
-
<template v-else-if="item.type == 'blank'">
|
51
|
-
<el-form-item :label="item.name" :prop="item.model" :key="item.key">
|
52
|
-
<slot :name="item.model" :model="models"></slot>
|
53
|
-
</el-form-item>
|
54
|
-
</template>
|
55
|
-
|
56
|
-
<template v-else>
|
57
|
-
<genetate-form-item
|
58
|
-
:key="item.key"
|
59
|
-
:models.sync="models"
|
60
|
-
:rules="rules"
|
61
|
-
:widget="item"
|
62
|
-
@input-change="onInputChange"
|
63
|
-
:remote="remote"
|
64
|
-
>
|
65
|
-
</genetate-form-item>
|
66
|
-
</template>
|
67
|
-
</template>
|
25
|
+
</genetate-form-item>
|
68
26
|
</el-form>
|
69
27
|
</div>
|
70
28
|
</template>
|
@@ -75,13 +33,13 @@ import GenetateFormItem from "./GenerateFormItem";
|
|
75
33
|
export default {
|
76
34
|
name: "fm-generate-form",
|
77
35
|
components: {
|
78
|
-
GenetateFormItem
|
36
|
+
GenetateFormItem
|
79
37
|
},
|
80
|
-
props: ["data", "remote", "value", "insite"],
|
38
|
+
props: ["data", "remote", "value", "insite", "slotKeys"],
|
81
39
|
data() {
|
82
40
|
return {
|
83
41
|
models: {},
|
84
|
-
rules: {}
|
42
|
+
rules: {}
|
85
43
|
};
|
86
44
|
},
|
87
45
|
created() {
|
@@ -89,66 +47,100 @@ export default {
|
|
89
47
|
},
|
90
48
|
mounted() {},
|
91
49
|
methods: {
|
92
|
-
generateModle(genList) {
|
93
|
-
|
94
|
-
if (
|
95
|
-
|
96
|
-
this.generateModle(item.list);
|
50
|
+
generateModle(genList, obj) {
|
51
|
+
genList.map(item => {
|
52
|
+
if (item.type === "grid") {
|
53
|
+
item.columns.forEach(item => {
|
54
|
+
this.generateModle(item.list, obj);
|
97
55
|
});
|
56
|
+
} else if (item.type === "tabs") {
|
57
|
+
if (obj) {
|
58
|
+
obj[item.model] = {};
|
59
|
+
item.tabs.forEach(item2 => {
|
60
|
+
obj[item.model][item2.value] = {};
|
61
|
+
this.generateModle(
|
62
|
+
item2.list,
|
63
|
+
obj[item.model][item2.value]
|
64
|
+
);
|
65
|
+
});
|
66
|
+
} else {
|
67
|
+
this.models[item.model] = {};
|
68
|
+
item.tabs.forEach(item2 => {
|
69
|
+
this.models[item.model][item2.value] = {};
|
70
|
+
this.generateModle(
|
71
|
+
item2.list,
|
72
|
+
this.models[item.model][item2.value]
|
73
|
+
);
|
74
|
+
});
|
75
|
+
}
|
76
|
+
} else if (obj) {
|
77
|
+
obj[item.model] = JSON.parse(
|
78
|
+
JSON.stringify(item.options.defaultValue || "")
|
79
|
+
);
|
98
80
|
} else {
|
99
|
-
if (
|
100
|
-
this.value
|
101
|
-
Object.keys(this.value).indexOf(genList[i].model) >= 0
|
102
|
-
) {
|
103
|
-
this.models[genList[i].model] = this.value[genList[i].model];
|
81
|
+
if (this.value && Object.keys(this.value).indexOf(item.model) >= 0) {
|
82
|
+
this.models[item.model] = this.value[item.model];
|
104
83
|
} else {
|
105
|
-
if (
|
84
|
+
if (item.type === "blank") {
|
106
85
|
this.$set(
|
107
86
|
this.models,
|
108
|
-
|
109
|
-
|
87
|
+
item.model,
|
88
|
+
item.options.defaultType === "String"
|
110
89
|
? ""
|
111
|
-
:
|
90
|
+
: item.options.defaultType === "Object"
|
112
91
|
? {}
|
113
92
|
: []
|
114
93
|
);
|
115
94
|
} else {
|
116
|
-
this.models[
|
95
|
+
this.models[item.model] = JSON.parse(
|
96
|
+
JSON.stringify(item.options.defaultValue || "")
|
97
|
+
);
|
117
98
|
}
|
118
99
|
}
|
119
100
|
|
120
|
-
if (
|
121
|
-
this.
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
return { ...item, pattern: new RegExp(item.pattern) };
|
126
|
-
} else {
|
127
|
-
return { ...item };
|
128
|
-
}
|
129
|
-
}),
|
130
|
-
];
|
101
|
+
if (item.type === "table") {
|
102
|
+
this.generateRules(item);
|
103
|
+
item.list.forEach(item2 => {
|
104
|
+
this.generateRules(item2);
|
105
|
+
});
|
131
106
|
} else {
|
132
|
-
this.
|
133
|
-
...genList[i].rules.map((item) => {
|
134
|
-
if (item.pattern) {
|
135
|
-
return { ...item, pattern: new RegExp(item.pattern) };
|
136
|
-
} else {
|
137
|
-
return { ...item };
|
138
|
-
}
|
139
|
-
}),
|
140
|
-
];
|
107
|
+
this.generateRules(item);
|
141
108
|
}
|
142
109
|
}
|
110
|
+
});
|
111
|
+
// console.log(this.models)
|
112
|
+
},
|
113
|
+
generateRules(item) {
|
114
|
+
if (this.rules[item.model]) {
|
115
|
+
this.rules[item.model] = [
|
116
|
+
...this.rules[item.model],
|
117
|
+
...item.rules.map(rule => {
|
118
|
+
if (rule.pattern) {
|
119
|
+
return { ...rule, pattern: new RegExp(rule.pattern) };
|
120
|
+
} else {
|
121
|
+
return { ...rule };
|
122
|
+
}
|
123
|
+
})
|
124
|
+
];
|
125
|
+
} else {
|
126
|
+
this.rules[item.model] = [
|
127
|
+
...item.rules.map(rule => {
|
128
|
+
if (rule.pattern) {
|
129
|
+
return { ...rule, pattern: new RegExp(rule.pattern) };
|
130
|
+
} else {
|
131
|
+
return { ...rule };
|
132
|
+
}
|
133
|
+
})
|
134
|
+
];
|
143
135
|
}
|
144
136
|
},
|
145
137
|
getData() {
|
146
138
|
return new Promise((resolve, reject) => {
|
147
|
-
this.$refs.generateForm.validate(
|
139
|
+
this.$refs.generateForm.validate(valid => {
|
148
140
|
if (valid) {
|
149
141
|
resolve(this.models);
|
150
142
|
} else {
|
151
|
-
reject(new Error(
|
143
|
+
reject(new Error("表单数据校验失败").message);
|
152
144
|
}
|
153
145
|
});
|
154
146
|
});
|
@@ -159,23 +151,23 @@ export default {
|
|
159
151
|
onInputChange(value, field) {
|
160
152
|
this.$emit("on-change", field, value, this.models);
|
161
153
|
},
|
162
|
-
refresh() {}
|
154
|
+
refresh() {}
|
163
155
|
},
|
164
156
|
watch: {
|
165
157
|
data: {
|
166
158
|
deep: true,
|
167
159
|
handler(val) {
|
168
|
-
this.generateModle(val.list);
|
169
|
-
}
|
160
|
+
// this.generateModle(val.list);
|
161
|
+
}
|
170
162
|
},
|
171
163
|
value: {
|
172
164
|
deep: true,
|
173
165
|
handler(val) {
|
174
166
|
console.log(JSON.stringify(val));
|
175
167
|
this.models = { ...this.models, ...val };
|
176
|
-
}
|
177
|
-
}
|
178
|
-
}
|
168
|
+
}
|
169
|
+
}
|
170
|
+
}
|
179
171
|
};
|
180
172
|
</script>
|
181
173
|
|