tianheng-ui 0.1.80 → 0.1.82

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.
@@ -0,0 +1,250 @@
1
+ <template>
2
+ <div class="pageTable">
3
+ <div v-if="widget.options.columns.tree.show" class="pageTable-tree">
4
+ <el-tree
5
+ :data="widget.options.columns.tree.props.data"
6
+ :current-node-key="widget.options.columns.tree.props.selectedKeys[0]"
7
+ :show-checkbox="widget.options.columns.tree.props.checkable"
8
+ :default-expanded-keys="widget.options.columns.tree.props.expandedKeys"
9
+ :default-checked-keys="widget.options.columns.tree.props.checkedKeys"
10
+ :props="widget.options.columns.tree.props.fieldNames"
11
+ :default-expand-all="widget.options.columns.tree.props.defaultExpandAll"
12
+ :node-key="widget.options.columns.tree.props.fieldNames.key"
13
+ >
14
+ </el-tree>
15
+ </div>
16
+ <div class="pageTable-content">
17
+ <div v-if="widget.options.columns.search.show" class="pageTable-search">
18
+ <draggable
19
+ v-model="widget.options.columns.search.list"
20
+ v-bind="{
21
+ group: 'people',
22
+ ghostClass: 'draggable-ghost',
23
+ animation: 200,
24
+ handle: '.drag-widget'
25
+ }"
26
+ :no-transition-on-drag="true"
27
+ @add="handleWidgetAdd($event, widget, 'search')"
28
+ >
29
+ <transition-group name="fade" tag="div" class="draggable-list">
30
+ <widget-form-item
31
+ v-for="(element,
32
+ elementIndex) in widget.options.columns.search.list.filter(
33
+ item => {
34
+ return item.key;
35
+ }
36
+ )"
37
+ :key="element.key"
38
+ :widget="element"
39
+ :widgetArray="widget.options.columns.search.list"
40
+ :widgetIndex="elementIndex"
41
+ :config="config"
42
+ :select.sync="selectWidget"
43
+ ></widget-form-item>
44
+ </transition-group>
45
+ </draggable>
46
+ <th-empty
47
+ v-if="widget.options.columns.search.list.length == 0"
48
+ class="pageTable-empty"
49
+ description="从左侧拖拽来添加搜索字段"
50
+ ></th-empty>
51
+ </div>
52
+ <div v-if="widget.options.columns.tools.show" class="pageTable-tools">
53
+ <draggable
54
+ v-model="widget.options.columns.tools.list"
55
+ v-bind="{
56
+ group: 'people',
57
+ ghostClass: 'draggable-ghost',
58
+ animation: 200,
59
+ handle: '.drag-widget'
60
+ }"
61
+ :no-transition-on-drag="true"
62
+ @add="handleWidgetAdd($event, widget, 'tools')"
63
+ >
64
+ <transition-group name="fade" tag="div" class="draggable-list">
65
+ <widget-form-item
66
+ v-for="(element,
67
+ elementIndex) in widget.options.columns.tools.list.filter(
68
+ item => {
69
+ return item.key;
70
+ }
71
+ )"
72
+ :key="element.key"
73
+ :widget="element"
74
+ :widgetArray="widget.options.columns.tools.list"
75
+ :widgetIndex="elementIndex"
76
+ :config="config"
77
+ :select.sync="selectWidget"
78
+ ></widget-form-item>
79
+ </transition-group>
80
+ </draggable>
81
+ <th-empty
82
+ v-if="widget.options.columns.tools.list.length == 0"
83
+ class="pageTable-empty"
84
+ description="从左侧拖拽来添加功能按钮"
85
+ ></th-empty>
86
+ </div>
87
+ <div class="pageTable-table">
88
+ <el-table
89
+ :data="widget.options.columns.table.data"
90
+ :size="widget.options.columns.table.size"
91
+ :border="widget.options.columns.table.border"
92
+ >
93
+ <el-table-column
94
+ v-for="column in widget.options.columns.table.columns"
95
+ :key="column.dataIndex"
96
+ :prop="column.dataIndex"
97
+ :label="column.title"
98
+ >
99
+ <template slot-scope="scope">
100
+ <template v-if="column.dataIndex === 'action'">
101
+ <el-button type="text" size="small">查看</el-button>
102
+ <el-button type="text" size="small">编辑</el-button>
103
+ </template>
104
+ <template v-else>{{ scope.row[column.dataIndex] }}</template>
105
+ </template>
106
+ </el-table-column>
107
+ </el-table>
108
+ </div>
109
+ <div
110
+ v-if="widget.options.columns.table.pagination.show"
111
+ class="pageTable-pagination"
112
+ >
113
+ <el-pagination
114
+ :current-page="
115
+ widget.options.columns.table.pagination.options.current
116
+ "
117
+ :page-sizes="
118
+ widget.options.columns.table.pagination.options.pageSizes
119
+ "
120
+ :page-size="widget.options.columns.table.pagination.options.pageSize"
121
+ layout="total, sizes, prev, pager, next, jumper"
122
+ :total="widget.options.columns.table.data.length"
123
+ >
124
+ </el-pagination>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ </template>
129
+
130
+ <script>
131
+ import { deepClone } from "../../util/index";
132
+ import { itemsComponent, eventMixin } from "../mixins/index";
133
+ import Draggable from "vuedraggable";
134
+ import WidgetFormItem from "../../WidgetFormItem.vue";
135
+ import compsData from "../register";
136
+ export default {
137
+ components: { Draggable, WidgetFormItem },
138
+ mixins: [itemsComponent, eventMixin],
139
+ data() {
140
+ return {
141
+ compsData: deepClone(compsData),
142
+ selectWidget: this.select
143
+ };
144
+ },
145
+ watch: {
146
+ select(val) {
147
+ this.selectWidget = val;
148
+ },
149
+ selectWidget(val) {
150
+ this.$emit("update:select", val);
151
+ }
152
+ },
153
+ created() {
154
+ const devComponentsPath = {
155
+ grid: "grid_dev",
156
+ table: "table_dev",
157
+ list: "list_dev",
158
+ tabs: "tabs_dev",
159
+ blank: "blank_dev"
160
+ };
161
+ const keys = Object.keys(this.compsData);
162
+ for (const key of keys) {
163
+ const element = this.compsData[key];
164
+ if (devComponentsPath[key])
165
+ element.content = require(`./${devComponentsPath[key]}`).default;
166
+ else element.content = require(`./${key}`).default;
167
+ }
168
+ },
169
+ mounted() {},
170
+ methods: {
171
+ handleWidgetAdd($event, row, colIndex) {
172
+ const newIndex = $event.newIndex;
173
+ const oldIndex = $event.oldIndex;
174
+ const item = $event.item;
175
+ const newComponent = JSON.parse(
176
+ JSON.stringify(row.options.columns[colIndex].list[newIndex])
177
+ );
178
+
179
+ // 防止布局元素的嵌套拖拽
180
+ if (item.className.indexOf("grid") >= 0) {
181
+ // 如果是列表中拖拽的元素需要还原到原来位置
182
+ item.tagName === "DIV" &&
183
+ this.widgetArray.splice(oldIndex, 0, newComponent);
184
+
185
+ row.options.columns[colIndex].list.splice(newIndex, 1);
186
+ return false;
187
+ }
188
+
189
+ if (!newComponent.key) {
190
+ const key =
191
+ Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
192
+ newComponent.key = key;
193
+ newComponent.model = `${newComponent.type}_${key}`;
194
+ if (colIndex === "tools") newComponent.options.hideLabel = true;
195
+ }
196
+ this.$set(row.options.columns[colIndex].list, newIndex, newComponent);
197
+ this.selectWidget = newComponent;
198
+ }
199
+ }
200
+ };
201
+ </script>
202
+
203
+ <style lang="scss" scoped>
204
+ .pageTable {
205
+ display: flex;
206
+ padding: 10px;
207
+
208
+ .pageTable-tree {
209
+ margin-right: 10px;
210
+ width: 200px;
211
+ }
212
+
213
+ .pageTable-content {
214
+ flex: 1;
215
+ width: 0;
216
+ .pageTable-search {
217
+ position: relative;
218
+ margin-bottom: 10px;
219
+ }
220
+ .pageTable-tools {
221
+ position: relative;
222
+ // margin-bottom: 10px;
223
+ }
224
+ .pageTable-table {
225
+ margin-bottom: 10px;
226
+ }
227
+ .pageTable-pagination {
228
+ text-align: right;
229
+ }
230
+ }
231
+ .draggable-list {
232
+ display: flex;
233
+ }
234
+
235
+ .pageTable-empty {
236
+ position: absolute;
237
+ margin-left: -200px;
238
+ padding: 0;
239
+ width: 400px;
240
+ top: 0;
241
+ left: 50%;
242
+ text-align: center;
243
+ color: #ccc;
244
+
245
+ .th-empty-description {
246
+ font-size: 20px;
247
+ }
248
+ }
249
+ }
250
+ </style>
@@ -125,6 +125,9 @@
125
125
  ref="widgetForm"
126
126
  >
127
127
  </widget-form>
128
+ <widget-footer>
129
+ <slot name="footer"></slot>
130
+ </widget-footer>
128
131
  </div>
129
132
 
130
133
  <!-- 右侧配置区 -->
@@ -155,6 +158,7 @@ import Draggable from "vuedraggable";
155
158
  import WidgetConfig from "./WidgetConfig";
156
159
  import WidgetTools from "./WidgetTools";
157
160
  import WidgetForm from "./WidgetForm";
161
+ import WidgetFooter from "./WidgetFooter";
158
162
  import GenerateForm from "./GenerateForm";
159
163
  import WidgetGuide from "./WidgetGuide.vue";
160
164
  import {
@@ -175,6 +179,7 @@ export default {
175
179
  WidgetConfig,
176
180
  WidgetTools,
177
181
  WidgetForm,
182
+ WidgetFooter,
178
183
  GenerateForm,
179
184
  WidgetGuide
180
185
  },
@@ -232,7 +237,7 @@ export default {
232
237
  },
233
238
  businessFields: {
234
239
  type: Array,
235
- default: () => ["blank", "descriptions", "workflow"]
240
+ default: () => ["blank", "descriptions", "workflow", "page-table"]
236
241
  },
237
242
  guide: Boolean
238
243
  },