tianheng-ui 0.0.45 → 0.0.48
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 +1 -1
- package/lib/tianheng-ui.js +3 -3
- package/package.json +1 -1
- package/packages/formMaking/Container.vue +14 -25
- package/packages/formMaking/GenerateForm.vue +93 -101
- package/packages/formMaking/GenerateFormItem.vue +200 -18
- package/packages/formMaking/WidgetConfig.vue +187 -13
- package/packages/formMaking/WidgetForm.vue +51 -185
- package/packages/formMaking/WidgetFormItem.vue +369 -29
- package/packages/formMaking/componentsConfig.js +129 -13
- 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";
|
@@ -374,11 +364,11 @@ export default {
|
|
374
364
|
},
|
375
365
|
advanceFields: {
|
376
366
|
type: Array,
|
377
|
-
default: () => ["blank", "imgupload", "editor", "cascader"]
|
367
|
+
default: () => ["blank", "imgupload", "editor", "cascader", "table"]
|
378
368
|
},
|
379
369
|
layoutFields: {
|
380
370
|
type: Array,
|
381
|
-
default: () => ["grid"]
|
371
|
+
default: () => ["grid", "tabs", "divider"]
|
382
372
|
},
|
383
373
|
remoteApis: {
|
384
374
|
type: Array,
|
@@ -428,7 +418,7 @@ export default {
|
|
428
418
|
console.log("callback", response, file, fileList);
|
429
419
|
}
|
430
420
|
},
|
431
|
-
widgetModels: {},
|
421
|
+
widgetModels: {table:[{name:'这是'}]},
|
432
422
|
blank: "",
|
433
423
|
htmlTemplate: "",
|
434
424
|
vueTemplate: "",
|
@@ -445,7 +435,8 @@ export default {
|
|
445
435
|
"size": "small"
|
446
436
|
}
|
447
437
|
}`,
|
448
|
-
codeActiveName: "vue"
|
438
|
+
codeActiveName: "vue",
|
439
|
+
slotKeys: []
|
449
440
|
};
|
450
441
|
},
|
451
442
|
mounted() {
|
@@ -472,9 +463,6 @@ export default {
|
|
472
463
|
// };
|
473
464
|
// });
|
474
465
|
// },
|
475
|
-
handleGoGithub() {
|
476
|
-
window.location.href = "https://github.com/GavinZhuLei/vue-form-making";
|
477
|
-
},
|
478
466
|
handleConfigSelect(value) {
|
479
467
|
this.configTab = value;
|
480
468
|
},
|
@@ -489,6 +477,7 @@ export default {
|
|
489
477
|
},
|
490
478
|
handlePreview() {
|
491
479
|
// console.log(this.widgetForm);
|
480
|
+
this.slotKeys = Object.keys(this.$slots);
|
492
481
|
this.previewVisible = true;
|
493
482
|
},
|
494
483
|
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
|
|