tianheng-ui 0.1.68 → 0.1.70
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/js/axios.js +1 -1
- package/lib/theme-chalk/styles/dialog.scss +56 -40
- package/lib/theme-chalk/styles/feature.scss +7 -0
- package/lib/theme-chalk/styles/icon.css +8 -2
- package/lib/tianheng-ui.js +13 -13
- package/package.json +1 -1
- package/packages/Dialog/index.vue +18 -9
- package/packages/FormMaking/GenerateForm.vue +40 -49
- package/packages/FormMaking/GenerateFormItem.vue +10 -26
- package/packages/FormMaking/WidgetFormItem.vue +9 -7
- package/packages/FormMaking/WidgetGuide.vue +86 -0
- package/packages/FormMaking/WidgetSelect.vue +2 -2
- package/packages/FormMaking/WidgetTools.vue +10 -7
- package/packages/FormMaking/config/index.js +2 -0
- package/packages/FormMaking/custom/config.js +7 -36
- package/packages/FormMaking/custom/configs/grid.vue +17 -9
- package/packages/FormMaking/custom/configs/list.vue +89 -8
- package/packages/FormMaking/custom/configs/radio.vue +2 -5
- package/packages/FormMaking/custom/configs/table.vue +12 -9
- package/packages/FormMaking/custom/configs/tabs.vue +69 -55
- package/packages/FormMaking/custom/index.js +1 -1
- package/packages/FormMaking/custom/items/grid_dev.vue +5 -8
- package/packages/FormMaking/custom/items/list_dev.vue +19 -23
- package/packages/FormMaking/custom/items/list_pro.vue +109 -6
- package/packages/FormMaking/custom/items/table_dev.vue +13 -12
- package/packages/FormMaking/custom/items/table_pro.vue +5 -5
- package/packages/FormMaking/custom/items/tabs_dev.vue +4 -7
- package/packages/FormMaking/custom/items/tabs_pro.vue +7 -9
- package/packages/FormMaking/custom/items/upload.vue +3 -1
- package/packages/FormMaking/index.vue +72 -78
- package/packages/FormMaking/lang/zh-CN.js +2 -2
- package/packages/FormMaking/network/axios.js +88 -0
- package/packages/FormMaking/styles/index.scss +3 -3
- package/packages/FormMaking/util/Log.js +99 -0
- package/packages/FormMaking/util/generateCode.js +2 -2
- package/packages/TableMaking/config/index.js +8 -0
- package/packages/TableMaking/generateTable.vue +10 -3
- package/packages/TableMaking/index.vue +18 -3
- package/packages/TableMaking/network/axios.js +88 -0
- package/packages/TableMaking/util/Log.js +99 -0
- package/packages/TableMaking/widgetGuide.vue +122 -58
- package/packages/FormMaking/custom/configs/tableH5.vue +0 -98
- package/packages/FormMaking/custom/items/tableH5_dev.vue +0 -112
- package/packages/FormMaking/custom/items/tableH5_pro.vue +0 -119
- package/packages/FormMaking/util/request.js +0 -25
@@ -1,18 +1,99 @@
|
|
1
1
|
<template>
|
2
|
-
<div>
|
3
|
-
|
2
|
+
<div class="component-config">
|
3
|
+
<el-collapse-item title="组件配置" name="group-element">
|
4
|
+
<el-form-item label="标题">
|
5
|
+
<el-input v-model="widget.name" clearable></el-input>
|
6
|
+
</el-form-item>
|
7
|
+
|
8
|
+
<el-form-item label="标签宽度">
|
9
|
+
<div style="display: flex;">
|
10
|
+
<el-checkbox v-model="widget.options.isLabelWidth"
|
11
|
+
>自定义</el-checkbox
|
12
|
+
>
|
13
|
+
<el-input-number
|
14
|
+
style="margin-left:5px;"
|
15
|
+
v-model="widget.options.labelWidth"
|
16
|
+
controls-position="right"
|
17
|
+
:min="0"
|
18
|
+
:max="200"
|
19
|
+
:disabled="!widget.options.isLabelWidth"
|
20
|
+
>
|
21
|
+
</el-input-number>
|
22
|
+
</div>
|
23
|
+
</el-form-item>
|
24
|
+
|
25
|
+
<el-form-item label-width="0">
|
26
|
+
<div class="config-header">
|
27
|
+
<span class="title">默认值</span>
|
28
|
+
<div class="value">
|
29
|
+
<el-button type="text" @click="handleAddData">添加数据</el-button>
|
30
|
+
<el-button type="text" @click="widget.options.defaultValue = []"
|
31
|
+
>重置</el-button
|
32
|
+
>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<th-code-editor
|
36
|
+
v-model="widget.options.defaultValue"
|
37
|
+
language="json"
|
38
|
+
></th-code-editor>
|
39
|
+
</el-form-item>
|
40
|
+
|
41
|
+
<el-form-item label="新增按钮">
|
42
|
+
<el-input v-model.number="widget.options.addButtonText"></el-input>
|
43
|
+
</el-form-item>
|
44
|
+
|
45
|
+
<el-form-item label="删除按钮">
|
46
|
+
<el-input v-model.number="widget.options.deleteButtonText"></el-input>
|
47
|
+
</el-form-item>
|
48
|
+
|
49
|
+
<el-form-item label="可删除的最小索引">
|
50
|
+
<el-input-number v-model="widget.options.deleteIndex" :min="0">
|
51
|
+
</el-input-number>
|
52
|
+
</el-form-item>
|
53
|
+
|
54
|
+
<el-form-item label="操作属性">
|
55
|
+
<el-checkbox v-model="widget.options.disabled">禁用 </el-checkbox>
|
56
|
+
<el-checkbox v-model="widget.options.hidden">隐藏组件 </el-checkbox>
|
57
|
+
<el-checkbox v-model="widget.options.hideLabel">隐藏标签 </el-checkbox>
|
58
|
+
<el-checkbox v-model="widget.options.isAdd">可新增 </el-checkbox>
|
59
|
+
<el-checkbox v-model="widget.options.isDelete">可删除 </el-checkbox>
|
60
|
+
</el-form-item>
|
61
|
+
|
62
|
+
<el-form-item label="校验">
|
63
|
+
<el-checkbox v-model="widget.options.required">必填</el-checkbox>
|
64
|
+
</el-form-item>
|
65
|
+
</el-collapse-item>
|
4
66
|
</div>
|
5
67
|
</template>
|
6
68
|
|
7
69
|
<script>
|
70
|
+
import Draggable from "vuedraggable";
|
71
|
+
import { configComponent } from "../mixins";
|
8
72
|
export default {
|
9
|
-
|
10
|
-
|
73
|
+
components: {
|
74
|
+
Draggable
|
11
75
|
},
|
12
|
-
|
76
|
+
mixins: [configComponent],
|
77
|
+
props: {},
|
13
78
|
mounted() {},
|
14
|
-
methods: {
|
79
|
+
methods: {
|
80
|
+
handleAddData() {
|
81
|
+
let dic = {};
|
82
|
+
this.widget.options.columns.forEach(item => {
|
83
|
+
if (item.type === "grid") {
|
84
|
+
for (let i = 0; i < item.options.columns.length; i++) {
|
85
|
+
const element = item.options.columns[i];
|
86
|
+
for (let j = 0; j < element.list.length; j++) {
|
87
|
+
const element2 = element.list[j];
|
88
|
+
dic[element2.model] = element2.options.defaultValue;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
} else {
|
92
|
+
dic[item.model] = item.options.defaultValue;
|
93
|
+
}
|
94
|
+
});
|
95
|
+
this.widget.options.defaultValue.push(dic);
|
96
|
+
}
|
97
|
+
}
|
15
98
|
};
|
16
99
|
</script>
|
17
|
-
|
18
|
-
<style lang="scss" scoped></style>
|
@@ -76,15 +76,12 @@
|
|
76
76
|
>
|
77
77
|
<div slot="prepend">标签</div>
|
78
78
|
</el-input>
|
79
|
-
<el-input
|
80
|
-
style="margin-bottom:5px;"
|
81
|
-
v-model="widget.options.remote.props.children"
|
82
|
-
>
|
79
|
+
<el-input v-model="widget.options.remote.props.children">
|
83
80
|
<div slot="prepend">子选项</div>
|
84
81
|
</el-input>
|
85
82
|
</template>
|
86
83
|
<template v-else>
|
87
|
-
<el-radio-group
|
84
|
+
<el-radio-group v-model="widget.options.defaultValue">
|
88
85
|
<draggable
|
89
86
|
:list="widget.options.options"
|
90
87
|
v-bind="{
|
@@ -20,15 +20,20 @@
|
|
20
20
|
</div>
|
21
21
|
</el-form-item>
|
22
22
|
|
23
|
-
<el-form-item>
|
24
|
-
<div class="config-header"
|
23
|
+
<el-form-item label-width="0">
|
24
|
+
<div class="config-header">
|
25
25
|
<span class="title">默认值</span>
|
26
|
-
<
|
26
|
+
<div class="value">
|
27
|
+
<el-button type="text" @click="handleAddData">添加数据</el-button>
|
28
|
+
<el-button type="text" @click="widget.options.defaultValue = []"
|
29
|
+
>重置</el-button
|
30
|
+
>
|
31
|
+
</div>
|
27
32
|
</div>
|
28
|
-
<code-editor
|
33
|
+
<th-code-editor
|
29
34
|
v-model="widget.options.defaultValue"
|
30
35
|
language="json"
|
31
|
-
></code-editor>
|
36
|
+
></th-code-editor>
|
32
37
|
</el-form-item>
|
33
38
|
|
34
39
|
<!-- <el-form-item label="高度">
|
@@ -76,9 +81,8 @@ export default {
|
|
76
81
|
mounted() {},
|
77
82
|
methods: {
|
78
83
|
handleAddData() {
|
79
|
-
let defaultValue = JSON.parse(this.widget.options.defaultValue || "[]");
|
80
84
|
let dic = {};
|
81
|
-
this.widget.
|
85
|
+
this.widget.options.columns.forEach(item => {
|
82
86
|
if (item.type === "grid") {
|
83
87
|
for (let i = 0; i < item.options.columns.length; i++) {
|
84
88
|
const element = item.options.columns[i];
|
@@ -91,8 +95,7 @@ export default {
|
|
91
95
|
dic[item.model] = item.options.defaultValue;
|
92
96
|
}
|
93
97
|
});
|
94
|
-
defaultValue.push(dic);
|
95
|
-
this.widget.options.defaultValue = JSON.stringify(defaultValue, null, 2);
|
98
|
+
this.widget.options.defaultValue.push(dic);
|
96
99
|
}
|
97
100
|
}
|
98
101
|
};
|
@@ -55,77 +55,65 @@
|
|
55
55
|
</el-form-item>
|
56
56
|
|
57
57
|
<el-form-item label-width="0">
|
58
|
-
<div v-if="widget.options.remote">
|
58
|
+
<div v-if="widget.options.remote.open">
|
59
59
|
<el-select
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
>
|
67
|
-
<el-option
|
68
|
-
v-for="item in apiOptions"
|
69
|
-
:key="item.id"
|
70
|
-
:label="item.name"
|
71
|
-
:value="item.id"
|
60
|
+
style="width:100%;margin-bottom:5px;"
|
61
|
+
v-model="widget.options.remote.api"
|
62
|
+
placeholder="请选择"
|
63
|
+
no-data-text="暂无数据,请查阅相关文档说明"
|
64
|
+
clearable
|
65
|
+
filterable
|
72
66
|
>
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
</
|
67
|
+
<el-option
|
68
|
+
v-for="item in apiOptions"
|
69
|
+
:key="item.id"
|
70
|
+
:label="item.name"
|
71
|
+
:value="item.id"
|
72
|
+
>
|
73
|
+
</el-option>
|
74
|
+
</el-select>
|
75
|
+
<el-input
|
76
|
+
style="margin-bottom:5px;"
|
77
|
+
v-model="widget.options.remote.props.value"
|
78
|
+
>
|
79
|
+
<div slot="prepend">内容</div>
|
80
|
+
</el-input>
|
81
|
+
<el-input v-model="widget.options.remote.props.label">
|
82
|
+
<div slot="prepend">标签</div>
|
80
83
|
</el-input>
|
81
|
-
<el-input size="mini" style="" v-model="widget.options.props.label">
|
82
|
-
<template slot="prepend">
|
83
|
-
<div style="width:30px;">标签</div>
|
84
|
-
</template>
|
85
|
-
</el-input> -->
|
86
84
|
</div>
|
87
85
|
<template v-else>
|
88
86
|
<el-radio-group v-model="widget.options.defaultValue">
|
89
87
|
<draggable
|
90
|
-
tag="ul"
|
91
88
|
:list="widget.options.columns"
|
92
89
|
v-bind="{
|
93
|
-
group: { name: '
|
90
|
+
group: { name: 'options' },
|
94
91
|
ghostClass: 'ghost',
|
95
|
-
handle: '.drag
|
92
|
+
handle: '.drag'
|
96
93
|
}"
|
97
|
-
handle=".drag
|
94
|
+
handle=".drag"
|
98
95
|
>
|
99
|
-
<
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
<el-input
|
108
|
-
|
109
|
-
|
110
|
-
size="mini"
|
111
|
-
placeholder="label"
|
112
|
-
></el-input>
|
113
|
-
</el-radio>
|
114
|
-
<i
|
115
|
-
class="drag-item"
|
116
|
-
style="font-size: 16px;margin: 0 5px;cursor: move;"
|
117
|
-
><i class="iconfont icon-icon_bars"></i
|
118
|
-
></i>
|
96
|
+
<div
|
97
|
+
v-for="(item, index) in widget.options.columns"
|
98
|
+
class="draggable-item"
|
99
|
+
:key="index"
|
100
|
+
>
|
101
|
+
<i class="drag"><i class="iconfont icon-icon_bars"></i></i>
|
102
|
+
<el-radio :label="item.value"> <span></span> </el-radio>
|
103
|
+
<div class="content">
|
104
|
+
<el-input v-model="item.value"></el-input>
|
105
|
+
<el-input v-model="item.label"></el-input>
|
106
|
+
</div>
|
119
107
|
<el-button
|
120
|
-
|
121
|
-
circle
|
122
|
-
plain
|
108
|
+
class="delete"
|
123
109
|
type="danger"
|
124
110
|
size="mini"
|
125
111
|
icon="el-icon-minus"
|
126
|
-
|
112
|
+
circle
|
113
|
+
plain
|
114
|
+
@click="handleOptionsRemove(index)"
|
127
115
|
></el-button>
|
128
|
-
</
|
116
|
+
</div>
|
129
117
|
</draggable>
|
130
118
|
</el-radio-group>
|
131
119
|
|
@@ -168,4 +156,30 @@ export default {
|
|
168
156
|
};
|
169
157
|
</script>
|
170
158
|
|
171
|
-
<style
|
159
|
+
<style lang="scss" scoped>
|
160
|
+
.draggable-item {
|
161
|
+
margin-bottom: 5px;
|
162
|
+
display: flex;
|
163
|
+
align-items: center;
|
164
|
+
.el-radio {
|
165
|
+
margin-right: 0;
|
166
|
+
padding-left: 10px;
|
167
|
+
}
|
168
|
+
|
169
|
+
.content {
|
170
|
+
flex: 1;
|
171
|
+
display: flex;
|
172
|
+
margin-right: 5px;
|
173
|
+
> div {
|
174
|
+
margin: 0 2px;
|
175
|
+
}
|
176
|
+
}
|
177
|
+
.drag {
|
178
|
+
font-size: 16px;
|
179
|
+
cursor: move;
|
180
|
+
}
|
181
|
+
.delete {
|
182
|
+
padding: 4px;
|
183
|
+
}
|
184
|
+
}
|
185
|
+
</style>
|
@@ -20,7 +20,7 @@ const basicComponents = [
|
|
20
20
|
"editor",
|
21
21
|
"cascader"
|
22
22
|
];
|
23
|
-
const advanceComponents = ["table", "
|
23
|
+
const advanceComponents = ["table", "list", "tabs"];
|
24
24
|
const layoutComponents = ["grid", "alliance", "filler", "divider"];
|
25
25
|
const businessComponents = ["blank", "descriptions"];
|
26
26
|
|
@@ -12,13 +12,13 @@
|
|
12
12
|
>
|
13
13
|
<draggable
|
14
14
|
v-model="column.list"
|
15
|
-
:no-transition-on-drag="true"
|
16
15
|
v-bind="{
|
17
16
|
group: 'people',
|
18
17
|
ghostClass: 'draggable-ghost',
|
19
18
|
animation: 200,
|
20
19
|
handle: '.drag-widget'
|
21
20
|
}"
|
21
|
+
:no-transition-on-drag="true"
|
22
22
|
@add="handleWidgetAdd($event, widget, columnIndex)"
|
23
23
|
>
|
24
24
|
<transition-group name="fade" tag="div" class="draggable-list">
|
@@ -50,18 +50,15 @@ export default {
|
|
50
50
|
mixins: [itemsComponent, eventMixin],
|
51
51
|
data() {
|
52
52
|
return {
|
53
|
-
selectWidget:
|
53
|
+
selectWidget: this.select
|
54
54
|
};
|
55
55
|
},
|
56
56
|
watch: {
|
57
57
|
select(val) {
|
58
58
|
this.selectWidget = val;
|
59
59
|
},
|
60
|
-
selectWidget
|
61
|
-
|
62
|
-
this.$emit("update:select", val);
|
63
|
-
},
|
64
|
-
deep: true
|
60
|
+
selectWidget(val) {
|
61
|
+
this.$emit("update:select", val);
|
65
62
|
}
|
66
63
|
},
|
67
64
|
methods: {
|
@@ -74,7 +71,7 @@ export default {
|
|
74
71
|
);
|
75
72
|
|
76
73
|
// 防止布局元素的嵌套拖拽
|
77
|
-
if (item.className.indexOf("
|
74
|
+
if (item.className.indexOf("grid") >= 0) {
|
78
75
|
// 如果是列表中拖拽的元素需要还原到原来位置
|
79
76
|
item.tagName === "DIV" &&
|
80
77
|
this.widgetArray.splice(oldIndex, 0, newComponent);
|
@@ -2,34 +2,30 @@
|
|
2
2
|
<div class="component-list">
|
3
3
|
<draggable
|
4
4
|
v-model="widget.options.columns"
|
5
|
-
:no-transition-on-drag="true"
|
6
5
|
v-bind="{
|
7
6
|
group: 'people',
|
8
7
|
ghostClass: 'draggable-ghost',
|
9
8
|
animation: 200,
|
10
9
|
handle: '.drag-widget'
|
11
10
|
}"
|
11
|
+
:no-transition-on-drag="true"
|
12
12
|
@add="handleWidgetAdd($event)"
|
13
13
|
>
|
14
14
|
<transition-group name="fade" tag="div" class="draggable-list">
|
15
|
-
<
|
15
|
+
<widget-form-item
|
16
16
|
v-for="(element, elementIndex) in widget.options.columns.filter(
|
17
17
|
item => {
|
18
18
|
return item.key;
|
19
19
|
}
|
20
20
|
)"
|
21
21
|
:key="element.key"
|
22
|
-
|
22
|
+
:widget="element"
|
23
|
+
:widgetArray="widget.options.columns"
|
24
|
+
:widgetIndex="elementIndex"
|
25
|
+
:select.sync="selectWidget"
|
26
|
+
:config="config"
|
23
27
|
>
|
24
|
-
|
25
|
-
:widget="element"
|
26
|
-
:widgetArray="widget.options.columns"
|
27
|
-
:widgetIndex="elementIndex"
|
28
|
-
:select.sync="selectWidget"
|
29
|
-
:config="config"
|
30
|
-
>
|
31
|
-
</widget-form-item>
|
32
|
-
</div>
|
28
|
+
</widget-form-item>
|
33
29
|
</transition-group>
|
34
30
|
</draggable>
|
35
31
|
<div v-if="widget.options.isDelete" class="tools">
|
@@ -52,35 +48,34 @@ export default {
|
|
52
48
|
mixins: [itemsComponent, eventMixin],
|
53
49
|
data() {
|
54
50
|
return {
|
55
|
-
selectWidget:
|
51
|
+
selectWidget: this.select
|
56
52
|
};
|
57
53
|
},
|
58
54
|
watch: {
|
59
55
|
select(val) {
|
60
56
|
this.selectWidget = val;
|
61
57
|
},
|
62
|
-
selectWidget
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
58
|
+
selectWidget(val) {
|
59
|
+
this.$emit("update:select", val);
|
60
|
+
},
|
61
|
+
// 子组建变动后重置初始值
|
62
|
+
"widget.options.columns.length"(val) {
|
63
|
+
this.widget.options.defaultValue = [];
|
67
64
|
}
|
68
65
|
},
|
69
66
|
methods: {
|
70
67
|
handleWidgetAdd($event) {
|
71
|
-
console.log("handleWidgetAdd =>", $event);
|
72
68
|
const newIndex = $event.newIndex;
|
73
69
|
const oldIndex = $event.oldIndex;
|
74
70
|
const newComponent = JSON.parse(
|
75
71
|
JSON.stringify(this.widget.options.columns[newIndex])
|
76
72
|
);
|
77
|
-
|
73
|
+
|
78
74
|
// 防止布局元素的嵌套拖拽
|
79
|
-
if (item.className.indexOf("no-put") >= 0) {
|
75
|
+
if ($event.item.className.indexOf("no-put") >= 0) {
|
80
76
|
// 如果是列表中拖拽的元素需要还原到原来位置
|
81
|
-
item.tagName === "DIV" &&
|
77
|
+
$event.item.tagName === "DIV" &&
|
82
78
|
this.widgetArray.splice(oldIndex, 0, newComponent);
|
83
|
-
|
84
79
|
this.widget.options.columns.splice(newIndex, 1);
|
85
80
|
return false;
|
86
81
|
}
|
@@ -92,6 +87,7 @@ export default {
|
|
92
87
|
newComponent.model = `${newComponent.type}_${key}`;
|
93
88
|
}
|
94
89
|
this.$set(this.widget.options.columns, newIndex, newComponent);
|
90
|
+
this.widget.options.defaultValue = [];
|
95
91
|
this.selectWidget = newComponent;
|
96
92
|
}
|
97
93
|
}
|
@@ -1,18 +1,121 @@
|
|
1
1
|
<template>
|
2
|
-
<div>
|
3
|
-
|
2
|
+
<div class="component-list">
|
3
|
+
<div
|
4
|
+
v-for="(column, columnIndex) in dataModel"
|
5
|
+
class="list-group"
|
6
|
+
:key="`group_${columnIndex}`"
|
7
|
+
>
|
8
|
+
<div
|
9
|
+
v-for="(element, elementIndex) in widget.options.columns"
|
10
|
+
class="list-group-item"
|
11
|
+
:key="elementIndex"
|
12
|
+
>
|
13
|
+
<generate-form-item
|
14
|
+
:widget="element"
|
15
|
+
:model.sync="
|
16
|
+
element.type === 'grid' && !element.options.isEntity
|
17
|
+
? column
|
18
|
+
: column[element.model]
|
19
|
+
"
|
20
|
+
:models="models"
|
21
|
+
:pModel="getPModel(columnIndex)"
|
22
|
+
:config="config"
|
23
|
+
:slotKeys="slotKeys"
|
24
|
+
:componentsData="componentsData"
|
25
|
+
>
|
26
|
+
<template v-for="name in slotKeys" :slot="name">
|
27
|
+
<slot :name="name" />
|
28
|
+
</template>
|
29
|
+
</generate-form-item>
|
30
|
+
<div
|
31
|
+
v-if="
|
32
|
+
widget.options.isDelete &&
|
33
|
+
elementIndex === 0 &&
|
34
|
+
columnIndex >= widget.options.deleteIndex
|
35
|
+
"
|
36
|
+
class="actions"
|
37
|
+
>
|
38
|
+
<el-button
|
39
|
+
type="danger"
|
40
|
+
@click.native.prevent="dataModel.splice(columnIndex, 1)"
|
41
|
+
>{{ widget.options.deleteButtonText }}</el-button
|
42
|
+
>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div v-if="widget.options.isAdd" style="text-align: center;">
|
48
|
+
<el-button
|
49
|
+
type="text"
|
50
|
+
:disabled="widget.options.disabled"
|
51
|
+
@click="handleTableAdd"
|
52
|
+
>{{ widget.options.addButtonText }}</el-button
|
53
|
+
>
|
54
|
+
</div>
|
4
55
|
</div>
|
5
56
|
</template>
|
6
57
|
|
7
58
|
<script>
|
59
|
+
import { itemsComponent, eventMixin } from "../mixins/index";
|
60
|
+
import GenerateFormItem from "../../GenerateFormItem.vue";
|
8
61
|
export default {
|
62
|
+
components: { GenerateFormItem },
|
63
|
+
mixins: [itemsComponent, eventMixin],
|
64
|
+
props: ["slotKeys", "componentsData"],
|
9
65
|
data() {
|
10
66
|
return {};
|
11
67
|
},
|
12
|
-
|
13
|
-
|
14
|
-
|
68
|
+
mounted() {
|
69
|
+
console.log("mounted pModel =>", this.pModel);
|
70
|
+
},
|
71
|
+
methods: {
|
72
|
+
handleTableAdd() {
|
73
|
+
let dic = {};
|
74
|
+
const initData = (list, data) => {
|
75
|
+
for (const item of list) {
|
76
|
+
if (item.type === "grid") {
|
77
|
+
if (item.options.isEntity) data[item.model] = {};
|
78
|
+
for (const column of item.options.columns) {
|
79
|
+
initData(
|
80
|
+
column.list,
|
81
|
+
item.options.isEntity ? data[item.model] : data
|
82
|
+
);
|
83
|
+
}
|
84
|
+
} else {
|
85
|
+
data[item.model] = item.options.defaultValue;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
};
|
89
|
+
initData(this.widget.options.columns, dic);
|
90
|
+
this.dataModel.push(dic);
|
91
|
+
},
|
92
|
+
getPModel(val) {
|
93
|
+
if (this.pModel) return `${this.pModel}.${this.widget.model}.${val}`;
|
94
|
+
else return `${this.widget.model}.${val}`;
|
95
|
+
}
|
96
|
+
}
|
15
97
|
};
|
16
98
|
</script>
|
17
99
|
|
18
|
-
<style lang="scss" scoped
|
100
|
+
<style lang="scss" scoped>
|
101
|
+
.component-list {
|
102
|
+
background: #fff;
|
103
|
+
|
104
|
+
.list-group {
|
105
|
+
.list-group-item {
|
106
|
+
width: 100%;
|
107
|
+
}
|
108
|
+
.list-group-item:nth-child(1) {
|
109
|
+
display: flex;
|
110
|
+
> div:first-child {
|
111
|
+
flex: 1;
|
112
|
+
margin-right: 10px;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
.footer {
|
118
|
+
text-align: center;
|
119
|
+
}
|
120
|
+
}
|
121
|
+
</style>
|
@@ -2,14 +2,14 @@
|
|
2
2
|
<draggable
|
3
3
|
class="component-table"
|
4
4
|
v-model="widget.options.columns"
|
5
|
-
:no-transition-on-drag="true"
|
6
5
|
v-bind="{
|
7
6
|
group: 'people',
|
8
7
|
ghostClass: 'draggable-ghost',
|
9
8
|
animation: 200,
|
10
9
|
handle: '.drag-widget'
|
11
10
|
}"
|
12
|
-
|
11
|
+
:no-transition-on-drag="true"
|
12
|
+
@add="handleWidgetAdd($event)"
|
13
13
|
>
|
14
14
|
<transition-group name="fade" tag="div" class="draggable-list">
|
15
15
|
<widget-form-item
|
@@ -39,18 +39,19 @@ export default {
|
|
39
39
|
mixins: [itemsComponent, eventMixin],
|
40
40
|
data() {
|
41
41
|
return {
|
42
|
-
selectWidget:
|
42
|
+
selectWidget: this.select
|
43
43
|
};
|
44
44
|
},
|
45
45
|
watch: {
|
46
46
|
select(val) {
|
47
47
|
this.selectWidget = val;
|
48
48
|
},
|
49
|
-
selectWidget
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
selectWidget(val) {
|
50
|
+
this.$emit("update:select", val);
|
51
|
+
},
|
52
|
+
// 子组建变动后重置初始值
|
53
|
+
"widget.options.columns.length"(val) {
|
54
|
+
this.widget.options.defaultValue = [];
|
54
55
|
}
|
55
56
|
},
|
56
57
|
methods: {
|
@@ -60,13 +61,12 @@ export default {
|
|
60
61
|
const newComponent = JSON.parse(
|
61
62
|
JSON.stringify(this.widget.options.columns[newIndex])
|
62
63
|
);
|
63
|
-
|
64
|
+
|
64
65
|
// 防止布局元素的嵌套拖拽
|
65
|
-
if (item.className.indexOf("no-put") >= 0) {
|
66
|
+
if ($event.item.className.indexOf("no-put") >= 0) {
|
66
67
|
// 如果是列表中拖拽的元素需要还原到原来位置
|
67
|
-
item.tagName === "DIV" &&
|
68
|
+
$event.item.tagName === "DIV" &&
|
68
69
|
this.widgetArray.splice(oldIndex, 0, newComponent);
|
69
|
-
|
70
70
|
this.widget.options.columns.splice(newIndex, 1);
|
71
71
|
return false;
|
72
72
|
}
|
@@ -78,6 +78,7 @@ export default {
|
|
78
78
|
newComponent.model = `${newComponent.type}_${key}`;
|
79
79
|
}
|
80
80
|
this.$set(this.widget.options.columns, newIndex, newComponent);
|
81
|
+
this.widget.options.defaultValue = [];
|
81
82
|
this.selectWidget = newComponent;
|
82
83
|
}
|
83
84
|
}
|