tianheng-ui 0.1.9 → 0.1.11
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/theme-chalk/styles/reset.scss +0 -2
- package/lib/tianheng-ui.js +14 -14
- package/package.json +1 -1
- package/packages/FormMaking/GenerateForm.vue +10 -10
- package/packages/FormMaking/GenerateFormItem.vue +66 -578
- package/packages/FormMaking/GenerateFormItemH5.vue +5 -5
- package/packages/FormMaking/Upload/index.vue +0 -1
- package/packages/FormMaking/WidgetConfig.vue +66 -30
- package/packages/FormMaking/WidgetForm.vue +7 -48
- package/packages/FormMaking/WidgetFormItem.vue +41 -65
- package/packages/FormMaking/WidgetSelect.vue +160 -0
- package/packages/FormMaking/custom/config.js +98 -63
- package/packages/FormMaking/custom/configs/grid.vue +4 -4
- package/packages/FormMaking/custom/configs/input.vue +135 -28
- package/packages/FormMaking/custom/configs/number.vue +2 -2
- package/packages/FormMaking/custom/configs/table.vue +2 -2
- package/packages/FormMaking/custom/configs/{table_h5.vue → tableH5.vue} +2 -2
- package/packages/FormMaking/custom/configs/tabs.vue +6 -6
- package/packages/FormMaking/custom/configs/textarea.vue +121 -19
- package/packages/FormMaking/custom/index.js +2 -4
- package/packages/FormMaking/custom/items/alliance.vue +30 -29
- package/packages/FormMaking/custom/items/blank_pro.vue +14 -0
- package/packages/FormMaking/custom/items/button.vue +1 -0
- package/packages/FormMaking/custom/items/cascader.vue +6 -2
- package/packages/FormMaking/custom/items/cell.vue +0 -2
- package/packages/FormMaking/custom/items/checkbox.vue +17 -7
- package/packages/FormMaking/custom/items/color.vue +1 -1
- package/packages/FormMaking/custom/items/date.vue +1 -1
- package/packages/FormMaking/custom/items/editor.vue +1 -1
- package/packages/FormMaking/custom/items/{grid.vue → grid_dev.vue} +16 -47
- package/packages/FormMaking/custom/items/grid_pro.vue +45 -0
- package/packages/FormMaking/custom/items/image.vue +0 -28
- package/packages/FormMaking/custom/items/input.vue +15 -9
- package/packages/FormMaking/custom/items/number.vue +4 -4
- package/packages/FormMaking/custom/items/radio.vue +17 -7
- package/packages/FormMaking/custom/items/rate.vue +1 -1
- package/packages/FormMaking/custom/items/select.vue +12 -6
- package/packages/FormMaking/custom/items/slider.vue +1 -1
- package/packages/FormMaking/custom/items/switch.vue +1 -1
- package/packages/FormMaking/custom/items/{table_h5.vue → tableH5_dev.vue} +44 -49
- package/packages/FormMaking/custom/items/tableH5_pro.vue +113 -0
- package/packages/FormMaking/custom/items/{table.vue → table_dev.vue} +21 -41
- package/packages/FormMaking/custom/items/table_pro.vue +114 -0
- package/packages/FormMaking/custom/items/tabs_dev.vue +101 -0
- package/packages/FormMaking/custom/items/tabs_pro.vue +50 -0
- package/packages/FormMaking/custom/items/text.vue +1 -1
- package/packages/FormMaking/custom/items/textarea.vue +4 -13
- package/packages/FormMaking/custom/items/time.vue +3 -3
- package/packages/FormMaking/custom/items/upload.vue +15 -14
- package/packages/FormMaking/custom/mixins/index.js +23 -1
- package/packages/FormMaking/custom/register.js +22 -11
- package/packages/FormMaking/index.vue +11 -7
- package/packages/FormMaking/styles/index.scss +235 -221
- package/packages/FormMaking/util/generateCode.js +3 -3
- package/packages/FormMaking/util/index.js +33 -23
- package/packages/TableMaking/generateTable.vue +2 -2
- package/packages/FormMaking/custom/items/tabs.vue +0 -145
- /package/packages/FormMaking/custom/items/{blank.vue → blank_dev.vue} +0 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
<template>
|
2
|
+
<el-tabs
|
3
|
+
v-model="widget.options.defaultValue"
|
4
|
+
:type="widget.options.type"
|
5
|
+
:tab-position="widget.options.tabPosition"
|
6
|
+
>
|
7
|
+
<el-tab-pane
|
8
|
+
v-for="(column, columnIndex) in widget.options.columns"
|
9
|
+
:key="`tabs_${columnIndex}`"
|
10
|
+
:label="column.label"
|
11
|
+
:name="column.value"
|
12
|
+
>
|
13
|
+
<draggable
|
14
|
+
v-model="column.list"
|
15
|
+
:no-transition-on-drag="true"
|
16
|
+
v-bind="{
|
17
|
+
group: 'people',
|
18
|
+
ghostClass: 'ghost',
|
19
|
+
animation: 200,
|
20
|
+
handle: '.drag-widget'
|
21
|
+
}"
|
22
|
+
@add="handleWidgetAdd($event, widget, columnIndex)"
|
23
|
+
>
|
24
|
+
<transition-group name="fade" tag="div" class="widget-col-list">
|
25
|
+
<widget-form-item
|
26
|
+
v-for="(element, elementIndex) in column.list.filter(item => {
|
27
|
+
return item.key;
|
28
|
+
})"
|
29
|
+
:key="element.key"
|
30
|
+
:widget="element"
|
31
|
+
:widgetIndex="elementIndex"
|
32
|
+
:widgetArray="column.list"
|
33
|
+
:select.sync="selectWidget"
|
34
|
+
:config="config"
|
35
|
+
></widget-form-item>
|
36
|
+
</transition-group>
|
37
|
+
</draggable>
|
38
|
+
</el-tab-pane>
|
39
|
+
</el-tabs>
|
40
|
+
</template>
|
41
|
+
|
42
|
+
<script>
|
43
|
+
import { itemsComponent } from "../mixins/index";
|
44
|
+
import Draggable from "vuedraggable";
|
45
|
+
import WidgetFormItem from "../../WidgetFormItem.vue";
|
46
|
+
export default {
|
47
|
+
components: { Draggable, WidgetFormItem },
|
48
|
+
mixins: [itemsComponent],
|
49
|
+
data() {
|
50
|
+
return {
|
51
|
+
selectWidget: {}
|
52
|
+
};
|
53
|
+
},
|
54
|
+
watch: {
|
55
|
+
select(val) {
|
56
|
+
this.selectWidget = val;
|
57
|
+
},
|
58
|
+
selectWidget: {
|
59
|
+
handler(val) {
|
60
|
+
this.$emit("update:select", val);
|
61
|
+
},
|
62
|
+
deep: true
|
63
|
+
}
|
64
|
+
},
|
65
|
+
methods: {
|
66
|
+
handleWidgetAdd($event, row, colIndex) {
|
67
|
+
const newIndex = $event.newIndex;
|
68
|
+
const oldIndex = $event.oldIndex;
|
69
|
+
const item = $event.item;
|
70
|
+
const newComponent = JSON.parse(
|
71
|
+
JSON.stringify(row.options.columns[colIndex].list[newIndex])
|
72
|
+
);
|
73
|
+
|
74
|
+
// 防止布局元素的嵌套拖拽
|
75
|
+
if (
|
76
|
+
item.className.indexOf("tabs") !== -1 ||
|
77
|
+
item.className.indexOf("alliance") !== -1
|
78
|
+
) {
|
79
|
+
// 如果是列表中拖拽的元素需要还原到原来位置
|
80
|
+
item.tagName === "DIV" &&
|
81
|
+
this.widgetArray.splice(oldIndex, 0, newComponent);
|
82
|
+
|
83
|
+
row.options.columns[colIndex].list.splice(newIndex, 1);
|
84
|
+
return false;
|
85
|
+
}
|
86
|
+
|
87
|
+
const key =
|
88
|
+
Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
|
89
|
+
if (!newComponent.model) {
|
90
|
+
newComponent.key = key;
|
91
|
+
newComponent.model = `${newComponent.type}_${key}`;
|
92
|
+
}
|
93
|
+
this.$set(row.options.columns[colIndex].list, newIndex, newComponent);
|
94
|
+
|
95
|
+
this.selectWidget = newComponent;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
};
|
99
|
+
</script>
|
100
|
+
|
101
|
+
<style></style>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<template>
|
2
|
+
<el-tabs
|
3
|
+
v-model="widget.options.defaultValue"
|
4
|
+
:type="widget.options.type"
|
5
|
+
:tab-position="widget.options.tabPosition"
|
6
|
+
>
|
7
|
+
<el-tab-pane
|
8
|
+
v-for="(column, columnIndex) in widget.options.columns"
|
9
|
+
:key="`tabs_${columnIndex}`"
|
10
|
+
:label="column.label"
|
11
|
+
:name="column.value"
|
12
|
+
>
|
13
|
+
<generate-form-item
|
14
|
+
v-for="element in column.list"
|
15
|
+
:key="`tabs_${columnIndex}_${element.key}`"
|
16
|
+
:widget="element"
|
17
|
+
:models.sync="dataModel[column.value]"
|
18
|
+
:config="config"
|
19
|
+
:remote="remote"
|
20
|
+
:prop="
|
21
|
+
element.type === 'grid'
|
22
|
+
? `${prop}.${column.value}`
|
23
|
+
: `${prop}.${column.value}.${element.model}`
|
24
|
+
"
|
25
|
+
:slotKeys="slotKeys"
|
26
|
+
:componentsData="componentsData"
|
27
|
+
>
|
28
|
+
<template v-for="name in slotKeys" :slot="name">
|
29
|
+
<slot :name="name" />
|
30
|
+
</template>
|
31
|
+
</generate-form-item>
|
32
|
+
</el-tab-pane>
|
33
|
+
</el-tabs>
|
34
|
+
</template>
|
35
|
+
|
36
|
+
<script>
|
37
|
+
import { itemsComponent } from "../mixins/index";
|
38
|
+
import GenerateFormItem from "../../GenerateFormItem.vue";
|
39
|
+
export default {
|
40
|
+
components: { GenerateFormItem },
|
41
|
+
mixins: [itemsComponent],
|
42
|
+
props: ["models", "remote", "prop", "slotKeys", "componentsData"],
|
43
|
+
data() {
|
44
|
+
return {};
|
45
|
+
},
|
46
|
+
methods: {}
|
47
|
+
};
|
48
|
+
</script>
|
49
|
+
|
50
|
+
<style></style>
|
@@ -1,15 +1,13 @@
|
|
1
1
|
<template>
|
2
2
|
<el-input
|
3
3
|
type="textarea"
|
4
|
-
v-model="
|
5
|
-
:style="{ width: widget.options.width }"
|
4
|
+
v-model="dataModel"
|
6
5
|
:disabled="widget.options.disabled"
|
7
6
|
:placeholder="widget.options.placeholder"
|
7
|
+
:style="{ width: widget.options.width }"
|
8
8
|
:maxlength="widget.options.maxlength"
|
9
|
-
:show-word-limit="widget.options.showWordLimit"
|
10
9
|
:clearable="widget.options.clearable"
|
11
|
-
:
|
12
|
-
:prefix-icon="widget.options.prefixIcon"
|
10
|
+
:show-word-limit="widget.options.showWordLimit"
|
13
11
|
:autosize="{
|
14
12
|
minRows: widget.options.minRows,
|
15
13
|
maxRows: widget.options.maxRows
|
@@ -17,14 +15,7 @@
|
|
17
15
|
@input="handleEventAction(widget.events.onChange)"
|
18
16
|
@focus="handleEventAction(widget.events.onFocus)"
|
19
17
|
@blur="handleEventAction(widget.events.onBlur)"
|
20
|
-
>
|
21
|
-
<template v-if="widget.options.prepend" slot="prepend">
|
22
|
-
<span v-html="widget.options.prepend"></span>
|
23
|
-
</template>
|
24
|
-
<template v-if="widget.options.append" slot="append">
|
25
|
-
<span v-html="widget.options.append"></span>
|
26
|
-
</template>
|
27
|
-
</el-input>
|
18
|
+
></el-input>
|
28
19
|
</template>
|
29
20
|
|
30
21
|
<script>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<template>
|
2
2
|
<el-time-picker
|
3
|
-
v-model="
|
3
|
+
v-model="dataModel"
|
4
4
|
:style="{ width: widget.options.width }"
|
5
5
|
:is-range="widget.options.isRange"
|
6
6
|
:placeholder="widget.options.placeholder"
|
@@ -10,11 +10,11 @@
|
|
10
10
|
:disabled="widget.options.disabled"
|
11
11
|
:editable="widget.options.editable"
|
12
12
|
:clearable="widget.options.clearable"
|
13
|
-
:
|
13
|
+
:arrowControl="widget.options.arrowControl"
|
14
|
+
:value-format="widget.options.format"
|
14
15
|
:picker-options="{
|
15
16
|
selectableRange: `${widget.options.pickerOptions.selectableRange[0]} - ${widget.options.pickerOptions.selectableRange[1]}`
|
16
17
|
}"
|
17
|
-
:value-format="widget.options.format"
|
18
18
|
@change="handleEventAction(widget.events.onChange)"
|
19
19
|
@focus="handleEventAction(widget.events.onFocus)"
|
20
20
|
@blur="handleEventAction(widget.events.onBlur)"
|
@@ -1,17 +1,19 @@
|
|
1
1
|
<template>
|
2
2
|
<div>
|
3
3
|
<el-upload
|
4
|
+
class="upload-demo"
|
4
5
|
:action="uploadUrl"
|
5
6
|
:headers="widget.options.remote ? widget.options.remoteFunc.headers : {}"
|
6
7
|
:data="widget.options.remote ? widget.options.remoteFunc.params : {}"
|
7
8
|
:multiple="widget.options.multiple"
|
8
9
|
:limit="widget.options.length"
|
10
|
+
:width="widget.options.size.width"
|
11
|
+
:height="widget.options.size.height"
|
9
12
|
:list-type="widget.options.listType"
|
10
|
-
:file-list="widget.options.defaultValue"
|
11
13
|
:drag="widget.options.drag"
|
12
14
|
:disabled="widget.options.disabled"
|
15
|
+
:auto-upload="true"
|
13
16
|
:on-change="handleAvatar"
|
14
|
-
:on-success="handleSuccess"
|
15
17
|
:on-error="handleAvatarError"
|
16
18
|
:on-preview="
|
17
19
|
file => handlePictureCardPreview(file, widget.options.listType)
|
@@ -19,27 +21,26 @@
|
|
19
21
|
:on-remove="handleRemove"
|
20
22
|
>
|
21
23
|
<el-button
|
24
|
+
size="small"
|
25
|
+
type="primary"
|
26
|
+
:disabled="widget.options.disabled"
|
22
27
|
v-if="
|
23
28
|
['default', 'picture'].includes(widget.options.listType) &&
|
24
29
|
!widget.options.drag
|
25
30
|
"
|
26
|
-
size="small"
|
27
|
-
type="primary"
|
28
|
-
:disabled="widget.options.disabled"
|
29
31
|
>点击上传</el-button
|
30
32
|
>
|
31
33
|
<i
|
34
|
+
slot="default"
|
35
|
+
class="el-icon-plus"
|
32
36
|
v-if="
|
33
37
|
widget.options.listType === 'picture-card' && !widget.options.drag
|
34
38
|
"
|
35
|
-
slot="default"
|
36
|
-
class="el-icon-plus"
|
37
39
|
></i>
|
38
|
-
<
|
39
|
-
|
40
|
-
|
41
|
-
</
|
42
|
-
|
40
|
+
<i class="el-icon-upload" v-if="widget.options.drag"></i>
|
41
|
+
<div class="el-upload__text" v-if="widget.options.drag">
|
42
|
+
将文件拖到此处,或<em>点击上传</em>
|
43
|
+
</div>
|
43
44
|
<div
|
44
45
|
slot="tip"
|
45
46
|
class="el-upload__tip"
|
@@ -87,10 +88,10 @@ export default {
|
|
87
88
|
}
|
88
89
|
},
|
89
90
|
handleRemove(file, fileList) {
|
90
|
-
this.
|
91
|
+
this.widget.options.defaultValue = fileList;
|
91
92
|
},
|
92
93
|
handleAvatar(res, file) {
|
93
|
-
this.
|
94
|
+
this.widget.options.defaultValue = file;
|
94
95
|
},
|
95
96
|
handleAvatarError() {
|
96
97
|
console.log("上传失败!");
|
@@ -33,7 +33,29 @@ export const configComponent = {
|
|
33
33
|
};
|
34
34
|
|
35
35
|
export const itemsComponent = {
|
36
|
-
props: [
|
36
|
+
props: [
|
37
|
+
"value",
|
38
|
+
"widget",
|
39
|
+
"widgetArray",
|
40
|
+
"select",
|
41
|
+
"config",
|
42
|
+
],
|
43
|
+
data() {
|
44
|
+
return {
|
45
|
+
dataModel: this.value
|
46
|
+
};
|
47
|
+
},
|
48
|
+
watch: {
|
49
|
+
value(val) {
|
50
|
+
this.dataModel = val;
|
51
|
+
},
|
52
|
+
dataModel: {
|
53
|
+
handler(val) {
|
54
|
+
this.$emit("update:value", val);
|
55
|
+
},
|
56
|
+
deep: true
|
57
|
+
}
|
58
|
+
},
|
37
59
|
methods: {
|
38
60
|
handleEventAction(key) {
|
39
61
|
const eventScript = this.config.eventScript;
|
@@ -1,18 +1,29 @@
|
|
1
1
|
//在此注册组件
|
2
|
-
import { basicComponents, advanceComponents, layoutComponents } from "./
|
3
|
-
|
4
|
-
const allComponents = [
|
5
|
-
...basicComponents,
|
6
|
-
...advanceComponents,
|
7
|
-
...layoutComponents
|
8
|
-
];
|
2
|
+
import { basicComponents, advanceComponents, layoutComponents } from "./config";
|
9
3
|
|
10
4
|
let compsData = {};
|
11
|
-
for (
|
12
|
-
|
13
|
-
name:
|
5
|
+
for (const config of basicComponents) {
|
6
|
+
compsData[config.type] = {
|
7
|
+
name: config.name,
|
8
|
+
type: config.type,
|
9
|
+
config: config,
|
10
|
+
content: null
|
11
|
+
};
|
12
|
+
}
|
13
|
+
for (const config of advanceComponents) {
|
14
|
+
compsData[config.type] = {
|
15
|
+
name: config.name,
|
16
|
+
type: config.type,
|
17
|
+
config: config,
|
18
|
+
content: null
|
19
|
+
};
|
20
|
+
}
|
21
|
+
for (const config of layoutComponents) {
|
22
|
+
compsData[config.type] = {
|
23
|
+
name: config.name,
|
24
|
+
type: config.type,
|
25
|
+
config: config,
|
14
26
|
content: null
|
15
27
|
};
|
16
|
-
compsData[allComponents[i]] = comp;
|
17
28
|
}
|
18
29
|
export default compsData;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="
|
2
|
+
<div class="formMaking">
|
3
3
|
<el-container
|
4
4
|
v-if="Object.keys(widgetFormData.config).length"
|
5
5
|
class="container-box"
|
@@ -52,7 +52,7 @@
|
|
52
52
|
v-for="(item, index) in getAdvanceComponents"
|
53
53
|
class="form-edit-widget-label"
|
54
54
|
:class="{
|
55
|
-
'no-put': ['table', '
|
55
|
+
'no-put': ['table', 'tableH5', 'tabs'].includes(
|
56
56
|
item.type
|
57
57
|
),
|
58
58
|
[item.type]: true
|
@@ -227,6 +227,7 @@
|
|
227
227
|
:data="widgetFormSelect"
|
228
228
|
:remoteApis="remoteApis"
|
229
229
|
:config="widgetFormData.config"
|
230
|
+
@update="handleWidgetConfigUpdate"
|
230
231
|
>
|
231
232
|
</widget-config>
|
232
233
|
<form-config
|
@@ -452,7 +453,7 @@ export default {
|
|
452
453
|
},
|
453
454
|
advanceFields: {
|
454
455
|
type: Array,
|
455
|
-
default: () => ["table", "
|
456
|
+
default: () => ["table", "tableH5", "tabs", "blank"]
|
456
457
|
},
|
457
458
|
layoutFields: {
|
458
459
|
type: Array,
|
@@ -629,7 +630,7 @@ export default {
|
|
629
630
|
const key =
|
630
631
|
Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
|
631
632
|
let grid = this.getComponentsConfig("grid");
|
632
|
-
grid.columns = [];
|
633
|
+
grid.options.columns = [];
|
633
634
|
grid.key = key;
|
634
635
|
grid.model = "grid_" + key;
|
635
636
|
|
@@ -666,7 +667,7 @@ export default {
|
|
666
667
|
data.options.defaultValue = valueDom.innerText;
|
667
668
|
data.key = colKey;
|
668
669
|
data.model = "input_" + colKey;
|
669
|
-
grid.columns.push({ span: span, list: [data] });
|
670
|
+
grid.options.columns.push({ span: span, list: [data] });
|
670
671
|
} else {
|
671
672
|
span = titleDom.colSpan * colSpan;
|
672
673
|
|
@@ -676,10 +677,10 @@ export default {
|
|
676
677
|
data.options.hideLabel = true;
|
677
678
|
data.key = colKey;
|
678
679
|
data.model = "text_" + colKey;
|
679
|
-
grid.columns.push({ span: span, list: [data] });
|
680
|
+
grid.options.columns.push({ span: span, list: [data] });
|
680
681
|
}
|
681
682
|
}
|
682
|
-
if (grid.columns.length) {
|
683
|
+
if (grid.options.columns.length) {
|
683
684
|
config.list.push(grid);
|
684
685
|
} else {
|
685
686
|
const data = this.getComponentsConfig("filler");
|
@@ -801,6 +802,9 @@ export default {
|
|
801
802
|
},
|
802
803
|
handleDataChange(field, value, data) {
|
803
804
|
// console.log(field, value, data);
|
805
|
+
},
|
806
|
+
handleWidgetConfigUpdate(val) {
|
807
|
+
this.widgetFormSelect = Object.assign(this.widgetFormSelect, val);
|
804
808
|
}
|
805
809
|
}
|
806
810
|
};
|