tianheng-ui 0.1.63 → 0.1.65

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.
Files changed (60) hide show
  1. package/lib/theme-chalk/index.scss +1 -1
  2. package/lib/theme-chalk/styles/feature.scss +1 -0
  3. package/lib/tianheng-ui.js +13 -13
  4. package/package.json +1 -1
  5. package/packages/CodeEditor/index.vue +41 -19
  6. package/packages/FormMaking/GenerateForm.vue +67 -71
  7. package/packages/FormMaking/WidgetConfig.vue +1 -1
  8. package/packages/FormMaking/WidgetForm.vue +11 -5
  9. package/packages/FormMaking/WidgetFormItem.vue +11 -4
  10. package/packages/FormMaking/WidgetGuide.vue +0 -0
  11. package/packages/FormMaking/WidgetTools.vue +2 -2
  12. package/packages/FormMaking/custom/config.js +320 -76
  13. package/packages/FormMaking/custom/configs/blank.vue +1 -1
  14. package/packages/FormMaking/custom/configs/button.vue +2 -2
  15. package/packages/FormMaking/custom/configs/cascader.vue +71 -34
  16. package/packages/FormMaking/custom/configs/cell.vue +1 -1
  17. package/packages/FormMaking/custom/configs/checkbox.vue +95 -64
  18. package/packages/FormMaking/custom/configs/color.vue +1 -1
  19. package/packages/FormMaking/custom/configs/date.vue +1 -1
  20. package/packages/FormMaking/custom/configs/descriptions.vue +314 -0
  21. package/packages/FormMaking/custom/configs/divider.vue +1 -1
  22. package/packages/FormMaking/custom/configs/editor.vue +1 -1
  23. package/packages/FormMaking/custom/configs/filler.vue +1 -1
  24. package/packages/FormMaking/custom/configs/grid.vue +33 -22
  25. package/packages/FormMaking/custom/configs/image.vue +1 -1
  26. package/packages/FormMaking/custom/configs/input.vue +1 -1
  27. package/packages/FormMaking/custom/configs/number.vue +1 -1
  28. package/packages/FormMaking/custom/configs/radio.vue +84 -53
  29. package/packages/FormMaking/custom/configs/rate.vue +1 -1
  30. package/packages/FormMaking/custom/configs/select.vue +157 -158
  31. package/packages/FormMaking/custom/configs/slider.vue +1 -1
  32. package/packages/FormMaking/custom/configs/switch.vue +1 -1
  33. package/packages/FormMaking/custom/configs/table.vue +1 -1
  34. package/packages/FormMaking/custom/configs/tableH5.vue +1 -1
  35. package/packages/FormMaking/custom/configs/tabs.vue +1 -1
  36. package/packages/FormMaking/custom/configs/text.vue +1 -1
  37. package/packages/FormMaking/custom/configs/textarea.vue +1 -1
  38. package/packages/FormMaking/custom/configs/time.vue +1 -1
  39. package/packages/FormMaking/custom/configs/upload.vue +1 -1
  40. package/packages/FormMaking/custom/configs/workflow.vue +494 -0
  41. package/packages/FormMaking/custom/index.js +4 -2
  42. package/packages/FormMaking/custom/items/cascader.vue +2 -2
  43. package/packages/FormMaking/custom/items/checkbox.vue +6 -10
  44. package/packages/FormMaking/custom/items/descriptions.vue +75 -0
  45. package/packages/FormMaking/custom/items/grid_dev.vue +2 -2
  46. package/packages/FormMaking/custom/items/list_dev.vue +10 -22
  47. package/packages/FormMaking/custom/items/radio.vue +5 -9
  48. package/packages/FormMaking/custom/items/select.vue +2 -4
  49. package/packages/FormMaking/custom/items/tableH5_dev.vue +9 -18
  50. package/packages/FormMaking/custom/items/table_dev.vue +13 -3
  51. package/packages/FormMaking/custom/items/tabs_dev.vue +3 -2
  52. package/packages/FormMaking/custom/items/workflow.vue +131 -0
  53. package/packages/FormMaking/custom/register.js +15 -1
  54. package/packages/FormMaking/index.vue +61 -27
  55. package/packages/FormMaking/styles/index.scss +156 -478
  56. package/packages/TableMaking/index.vue +4 -1
  57. package/packages/TableMaking/widgetGuide.vue +96 -0
  58. package/packages/TableMaking/widgetTable.vue +0 -7
  59. package/packages/Workflow/index.vue +0 -31
  60. package/packages/FormMaking/GenerateFormItemH5.vue +0 -825
@@ -0,0 +1,494 @@
1
+ <template>
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
+ <el-form-item label="排序方向">
8
+ <el-radio-group v-model="widget.options.reverse">
9
+ <el-radio-button :label="false">正序</el-radio-button>
10
+ <el-radio-button :label="true">倒序</el-radio-button>
11
+ </el-radio-group>
12
+ </el-form-item>
13
+ <el-form-item label="时间位置">
14
+ <el-radio-group v-model="widget.options.placement">
15
+ <el-radio-button label="top">顶部</el-radio-button>
16
+ <el-radio-button label="right">右边</el-radio-button>
17
+ <el-radio-button label="bottom">底部</el-radio-button>
18
+ </el-radio-group>
19
+ </el-form-item>
20
+ <el-form-item label="隐藏时间">
21
+ <el-switch v-model="widget.options.hideTimestamp"></el-switch>
22
+ </el-form-item>
23
+
24
+ <el-form-item label="节点数据">
25
+ <el-radio-group
26
+ v-model="widget.options.remote.open"
27
+ @input="handleRemoteChange"
28
+ >
29
+ <el-radio-button :label="false">静态数据</el-radio-button>
30
+ <el-radio-button :label="true">远端数据</el-radio-button>
31
+ </el-radio-group>
32
+ </el-form-item>
33
+
34
+ <el-form-item v-if="widget.options.remote.open" label-width="0">
35
+ <el-select
36
+ style="width:100%;margin-bottom: 5px;"
37
+ v-model="widget.options.remote.api"
38
+ placeholder="请选择"
39
+ no-data-text="暂无数据,请查阅相关文档说明"
40
+ clearable
41
+ filterable
42
+ >
43
+ <el-option
44
+ v-for="item in apiOptions"
45
+ :key="item.id"
46
+ :label="item.name"
47
+ :value="item.id"
48
+ >
49
+ </el-option>
50
+ </el-select>
51
+ </el-form-item>
52
+ <el-form-item v-if="!widget.options.remote.open" label-width="0">
53
+ <draggable
54
+ :list="widget.options.defaultValue.processInstTaskRsps"
55
+ v-bind="{
56
+ group: { name: 'options' },
57
+ ghostClass: 'ghost',
58
+ handle: '.drag'
59
+ }"
60
+ handle=".drag"
61
+ >
62
+ <div
63
+ v-for="(item, index) in widget.options.defaultValue
64
+ .processInstTaskRsps"
65
+ class="draggable-item"
66
+ :key="index"
67
+ >
68
+ <i class="drag"><i class="iconfont icon-icon_bars"></i></i>
69
+ <div class="content">
70
+ <el-input v-model="item.name" placeholder="标题" clearable>
71
+ </el-input>
72
+ </div>
73
+ <el-button
74
+ class="action"
75
+ type="primary"
76
+ size="mini"
77
+ icon="el-icon-set-up"
78
+ circle
79
+ plain
80
+ @click="handleDetailOption(index, 'processInstTaskRsps')"
81
+ ></el-button>
82
+
83
+ <el-button
84
+ class="action"
85
+ type="danger"
86
+ size="mini"
87
+ icon="el-icon-minus"
88
+ circle
89
+ plain
90
+ @click="handleRemoveOption(index, 'processInstTaskRsps')"
91
+ ></el-button>
92
+ </div>
93
+ </draggable>
94
+
95
+ <div style="margin-left: 22px;">
96
+ <el-button type="text" @click="handleAddOption('processInstTaskRsps')"
97
+ >添加节点</el-button
98
+ >
99
+ </div>
100
+ </el-form-item>
101
+ <el-form-item v-if="!widget.options.remote.open" label-width="0">
102
+ <draggable
103
+ :list="widget.options.defaultValue.processInstButtons"
104
+ v-bind="{
105
+ group: { name: 'options' },
106
+ ghostClass: 'ghost',
107
+ handle: '.drag'
108
+ }"
109
+ handle=".drag"
110
+ >
111
+ <div
112
+ v-for="(item, index) in widget.options.defaultValue
113
+ .processInstButtons"
114
+ class="draggable-item"
115
+ :key="index"
116
+ >
117
+ <i class="drag"><i class="iconfont icon-icon_bars"></i></i>
118
+ <div class="content">
119
+ <el-input v-model="item.name" placeholder="标题" clearable>
120
+ </el-input>
121
+ </div>
122
+ <el-button
123
+ class="action"
124
+ type="primary"
125
+ size="mini"
126
+ icon="el-icon-set-up"
127
+ circle
128
+ plain
129
+ @click="handleDetailOption(index, 'processInstButtons')"
130
+ ></el-button>
131
+
132
+ <el-button
133
+ class="action"
134
+ type="danger"
135
+ size="mini"
136
+ icon="el-icon-minus"
137
+ circle
138
+ plain
139
+ @click="handleRemoveOption(index, 'processInstButtons')"
140
+ ></el-button>
141
+ </div>
142
+ </draggable>
143
+
144
+ <div style="margin-left: 22px;">
145
+ <el-button type="text" @click="handleAddOption('processInstButtons')"
146
+ >添加操作</el-button
147
+ >
148
+ </div>
149
+ </el-form-item>
150
+ </el-collapse-item>
151
+
152
+ <th-dialog
153
+ v-model="dialog.show"
154
+ title="数据配置"
155
+ :modal-append-to-body="false"
156
+ :showFooter="false"
157
+ >
158
+ <div
159
+ v-if="dialog.action === 'processInstTaskRsps'"
160
+ class="th-flex_box th-is_border"
161
+ >
162
+ <div class="box-list th-flex_aside th-is_border_right">
163
+ <div class="box-header th-sticky_top">
164
+ <div>节点列表</div>
165
+ <el-button
166
+ type="text"
167
+ icon="el-icon-plus"
168
+ size="mini"
169
+ @click="handleAddOption('processInstTaskRsps')"
170
+ >添加</el-button
171
+ >
172
+ </div>
173
+ <div
174
+ v-for="(item, index) in widget.options.defaultValue
175
+ .processInstTaskRsps"
176
+ class="list-item th-is_hover"
177
+ :class="{
178
+ 'th-is_active': dialog.data && dialog.data.name === item.name
179
+ }"
180
+ :key="index"
181
+ @click="dialog.data = item"
182
+ >
183
+ <div class="list-item-value">{{ item.name }}</div>
184
+ <el-popconfirm
185
+ :title="`是否确定删除 ${item.name}`"
186
+ confirm-button-text="删除"
187
+ confirm-button-type="danger"
188
+ @confirm="handleRemoveOption(index, 'processInstTaskRsps')"
189
+ >
190
+ <i class="delete el-icon-delete" slot="reference"></i>
191
+ </el-popconfirm>
192
+ </div>
193
+ </div>
194
+ <div class="box-content th-fiex_content">
195
+ <div class="box-header th-sticky_top">节点详情</div>
196
+ <el-form
197
+ v-if="dialog.data"
198
+ style="padding:10px"
199
+ :model="dialog.data"
200
+ label-width="80px"
201
+ size="mini"
202
+ >
203
+ <el-form-item label="节点标题">
204
+ <el-input v-model="dialog.data.name"></el-input>
205
+ </el-form-item>
206
+ <!-- <el-form-item label="节点状态">
207
+ <el-input v-model="dialog.data.status"></el-input>
208
+ </el-form-item> -->
209
+ <el-form-item label="节点颜色">
210
+ <el-color-picker
211
+ v-model="dialog.data.color"
212
+ :predefine="predefineColors"
213
+ ></el-color-picker>
214
+ </el-form-item>
215
+ <el-form-item label="节点时间">
216
+ <el-input v-model="dialog.data.timestamp"></el-input>
217
+ </el-form-item>
218
+ <el-form-item label="审批人">
219
+ <th-code-editor
220
+ v-model="dialog.data.checkPersons"
221
+ ></th-code-editor>
222
+ </el-form-item>
223
+ </el-form>
224
+ </div>
225
+ </div>
226
+ <div
227
+ v-if="dialog.action === 'processInstButtons'"
228
+ class="th-flex_box th-is_border"
229
+ >
230
+ <div class="box-list th-flex_aside th-is_border_right">
231
+ <div class="box-header th-sticky_top">
232
+ <div>操作列表</div>
233
+ <el-button
234
+ type="text"
235
+ icon="el-icon-plus"
236
+ size="mini"
237
+ @click="handleAddOption('processInstButtons')"
238
+ >添加</el-button
239
+ >
240
+ </div>
241
+ <div
242
+ v-for="(item, index) in widget.options.defaultValue
243
+ .processInstButtons"
244
+ class="list-item th-is_hover"
245
+ :class="{
246
+ 'th-is_active': dialog.data && dialog.data.name === item.name
247
+ }"
248
+ :key="index"
249
+ @click="dialog.data = item"
250
+ >
251
+ <div class="list-item-value">{{ item.name }}</div>
252
+ <el-popconfirm
253
+ :title="`是否确定删除 ${item.name}`"
254
+ confirm-button-text="删除"
255
+ confirm-button-type="danger"
256
+ @confirm="handleRemoveOption(index, 'processInstTaskRsps')"
257
+ >
258
+ <i class="delete el-icon-delete" slot="reference"></i>
259
+ </el-popconfirm>
260
+ </div>
261
+ </div>
262
+ <div class="box-content th-fiex_content">
263
+ <div class="box-header th-sticky_top">操作详情</div>
264
+ <el-form
265
+ v-if="dialog.data"
266
+ style="padding:10px"
267
+ :model="dialog.data"
268
+ label-width="80px"
269
+ size="mini"
270
+ >
271
+ <el-form-item label="按钮模型">
272
+ <el-button
273
+ :type="dialog.data.options.type"
274
+ :icon="dialog.data.options.icon"
275
+ :plain="dialog.data.options.plain"
276
+ :round="dialog.data.options.round"
277
+ :circle="dialog.data.options.circle"
278
+ :size="dialog.data.options.size"
279
+ >{{ dialog.data.name }}</el-button
280
+ >
281
+ </el-form-item>
282
+ <el-form-item label="操作标题">
283
+ <el-input v-model="dialog.data.name"></el-input>
284
+ </el-form-item>
285
+ <el-form-item label="按钮类型">
286
+ <el-radio-group v-model="dialog.data.options.type">
287
+ <el-radio label="">默认</el-radio>
288
+ <el-radio label="primary">主要按钮</el-radio>
289
+ <el-radio label="success">成功按钮</el-radio>
290
+ <el-radio label="info">信息按钮</el-radio>
291
+ <el-radio label="warning">警告按钮</el-radio>
292
+ <el-radio label="danger">危险按钮</el-radio>
293
+ <el-radio label="text">文字按钮</el-radio>
294
+ </el-radio-group>
295
+ </el-form-item>
296
+ <el-form-item label="按钮大小">
297
+ <el-radio-group v-model="dialog.data.options.size" size="mini">
298
+ <el-radio-button label="medium"></el-radio-button>
299
+ <el-radio-button label="small"></el-radio-button>
300
+ <el-radio-button label="mini"></el-radio-button>
301
+ </el-radio-group>
302
+ </el-form-item>
303
+
304
+ <el-form-item label="是否空心">
305
+ <el-switch v-model="dialog.data.options.plain"> </el-switch>
306
+ </el-form-item>
307
+ <el-form-item label="是否圆角">
308
+ <el-switch v-model="dialog.data.options.round"> </el-switch>
309
+ </el-form-item>
310
+ <el-form-item label="是否圆型">
311
+ <el-switch v-model="dialog.data.options.circle"> </el-switch>
312
+ </el-form-item>
313
+ <el-form-item label="按钮图标">
314
+ <th-icons v-model="dialog.data.options.icon"></th-icons>
315
+ </el-form-item>
316
+ <el-form-item>
317
+ <el-tooltip
318
+ slot="label"
319
+ effect="light"
320
+ content="当前操作关联的接口请求"
321
+ placement="top"
322
+ >
323
+ <span style="color: #409EFF;">关联接口</span>
324
+ </el-tooltip>
325
+ <el-select
326
+ v-model="dialog.data.options.remote.api"
327
+ style="width:100%"
328
+ value-key="id"
329
+ clearable
330
+ placeholder=""
331
+ no-data-text="暂无接口,请前往【接口模块】创建"
332
+ >
333
+ <el-option
334
+ v-for="item in apiOptions"
335
+ :key="item.id"
336
+ :label="item.name"
337
+ :value="item"
338
+ >
339
+ </el-option>
340
+ </el-select>
341
+ </el-form-item>
342
+ </el-form>
343
+ </div>
344
+ </div>
345
+ </th-dialog>
346
+ </div>
347
+ </template>
348
+
349
+ <script>
350
+ import Draggable from "vuedraggable";
351
+ import { configComponent } from "../mixins";
352
+ export default {
353
+ components: { Draggable },
354
+ mixins: [configComponent],
355
+ data() {
356
+ return {
357
+ dialog: { show: false, action: "", data: "", index: "" },
358
+ predefineColors: [
359
+ "#ff4500",
360
+ "#ff8c00",
361
+ "#ffd700",
362
+ "#90ee90",
363
+ "#00ced1",
364
+ "#1e90ff",
365
+ "#c71585",
366
+ "rgba(255, 69, 0, 0.68)",
367
+ "rgb(255, 120, 0)",
368
+ "hsv(51, 100, 98)",
369
+ "hsva(120, 40, 94, 0.5)",
370
+ "hsl(181, 100%, 37%)",
371
+ "hsla(209, 100%, 56%, 0.73)",
372
+ "#c7158577"
373
+ ]
374
+ };
375
+ },
376
+ created() {},
377
+ mounted() {},
378
+ methods: {
379
+ handleAddOption(type) {
380
+ if (type === "processInstTaskRsps") {
381
+ this.widget.options.defaultValue.processInstTaskRsps.push({
382
+ name: `节点${this.widget.options.defaultValue.processInstTaskRsps
383
+ .length + 1}`,
384
+ status: "",
385
+ icon: "",
386
+ color: "",
387
+ checkPersons: [
388
+ {
389
+ avatar: "",
390
+ name: "审批人",
391
+ status: "审批状态",
392
+ description: "审批内容",
393
+ endTime: ""
394
+ }
395
+ ],
396
+ timestamp: "节点时间"
397
+ });
398
+ } else {
399
+ this.widget.options.defaultValue.processInstButtons.push({
400
+ name: `操作${this.widget.options.defaultValue.processInstButtons
401
+ .length + 1}`,
402
+ options: {
403
+ remote: {
404
+ api: ""
405
+ },
406
+ type: "",
407
+ icon: "",
408
+ size: "small",
409
+ plain: false,
410
+ round: false,
411
+ circle: false,
412
+ disabled: false,
413
+ loading: false,
414
+ customStyle: ""
415
+ }
416
+ });
417
+ }
418
+ },
419
+ handleRemoveOption(index, type) {
420
+ if (type === "processInstTaskRsps")
421
+ this.widget.options.defaultValue.processInstTaskRsps.splice(index, 1);
422
+ else this.widget.options.defaultValue.processInstButtons.splice(index, 1);
423
+ },
424
+ handleRemoteChange(val) {
425
+ if (val) return;
426
+ this.widget.options.remote.api = "";
427
+ },
428
+ handleDetailOption(index, action) {
429
+ const data =
430
+ action === "processInstTaskRsps"
431
+ ? this.widget.options.defaultValue.processInstTaskRsps[index]
432
+ : this.widget.options.defaultValue.processInstButtons[index];
433
+ this.dialog = {
434
+ show: true,
435
+ action,
436
+ data,
437
+ index
438
+ };
439
+ }
440
+ }
441
+ };
442
+ </script>
443
+
444
+ <style lang="scss" scoped>
445
+ .draggable-item {
446
+ margin-bottom: 5px;
447
+ display: flex;
448
+ align-items: center;
449
+
450
+ .content {
451
+ display: flex;
452
+ margin: 0 5px;
453
+ > div {
454
+ margin: 0 2px;
455
+ }
456
+ }
457
+ .drag {
458
+ font-size: 16px;
459
+ cursor: move;
460
+ }
461
+ .action {
462
+ padding: 4px;
463
+ }
464
+ }
465
+ .th-flex_box {
466
+ .box-list {
467
+ .list-item {
468
+ padding: 10px 10px;
469
+ display: flex;
470
+ align-items: center;
471
+ justify-content: space-between;
472
+ transition: 0.25s;
473
+
474
+ .delete {
475
+ color: #f56c6c;
476
+ cursor: pointer;
477
+ }
478
+ .delete:hover {
479
+ color: #f78989;
480
+ }
481
+ }
482
+ }
483
+ .box-content {
484
+ }
485
+ .box-header {
486
+ padding: 0 10px;
487
+ height: 40px;
488
+ display: flex;
489
+ align-items: center;
490
+ justify-content: space-between;
491
+ z-index: 99;
492
+ }
493
+ }
494
+ </style>
@@ -20,11 +20,13 @@ const basicComponents = [
20
20
  "editor",
21
21
  "cascader"
22
22
  ];
23
- const advanceComponents = ["table", "tableH5", "list", "tabs", "blank"];
23
+ const advanceComponents = ["table", "tableH5", "list", "tabs"];
24
24
  const layoutComponents = ["grid", "alliance", "filler", "divider"];
25
+ const businessComponents = ["blank", "descriptions"];
25
26
 
26
27
  module.exports = {
27
28
  basicComponents,
28
29
  advanceComponents,
29
- layoutComponents
30
+ layoutComponents,
31
+ businessComponents
30
32
  };
@@ -8,8 +8,8 @@
8
8
  width: widget.options.width,
9
9
  height: widget.options.height
10
10
  }"
11
- :options="widget.options.remoteOptions"
12
- :props="widget.options.props"
11
+ :options="widget.options.options"
12
+ :props="widget.options.remote.props"
13
13
  :show-all-levels="widget.options.showAllLevels ? false : true"
14
14
  :collapse-tags="widget.options.collapseTags"
15
15
  :filterable="widget.options.filterable"
@@ -12,14 +12,12 @@
12
12
  :style="{
13
13
  display: widget.options.inline ? 'inline-block' : 'block'
14
14
  }"
15
+ v-for="(item, index) in widget.options.options"
16
+ :key="index"
15
17
  :label="item.value"
16
18
  :border="widget.options.border"
17
- v-for="(item, index) in widget.options.remote
18
- ? widget.options.remoteOptions
19
- : widget.options.options"
20
- :key="index"
21
19
  >
22
- <template v-if="widget.options.remote">{{ item.label }}</template>
20
+ <template v-if="widget.options.remote.open">{{ item.label }}</template>
23
21
  <template v-else>{{
24
22
  widget.options.showLabel ? item.label : item.value
25
23
  }}</template>
@@ -30,14 +28,12 @@
30
28
  :style="{
31
29
  display: widget.options.inline ? 'inline-block' : 'block'
32
30
  }"
31
+ v-for="(item, index) in widget.options.options"
32
+ :key="index"
33
33
  :label="item.value"
34
34
  :border="widget.options.border"
35
- v-for="(item, index) in widget.options.remote
36
- ? widget.options.remoteOptions
37
- : widget.options.options"
38
- :key="index"
39
35
  >
40
- <template v-if="widget.options.remote">{{ item.label }}</template>
36
+ <template v-if="widget.options.remote.open">{{ item.label }}</template>
41
37
  <template v-else>{{
42
38
  widget.options.showLabel ? item.label : item.value
43
39
  }}</template>
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <div class="component-descriptions">
3
+ <div
4
+ v-if="widget.name"
5
+ class="component-header_title"
6
+ v-html="widget.name"
7
+ ></div>
8
+ <el-descriptions
9
+ :border="widget.options.border"
10
+ :column="widget.options.column"
11
+ :direction="widget.options.direction"
12
+ :size="widget.options.size"
13
+ :colon="false"
14
+ >
15
+ <el-descriptions-item v-for="(item, index) in dataModel" :key="index">
16
+ <template slot="label">
17
+ <div :style="labelStyle(item)">
18
+ <i :class="item.icon"></i>
19
+ <span v-html="item.label"></span>
20
+ <span v-if="widget.options.colon">:</span>
21
+ </div>
22
+ </template>
23
+ <a v-if="item.type === 'url'" :href="item.value">{{ item.value }}</a>
24
+ <span v-else v-html="item.value"></span>
25
+ </el-descriptions-item>
26
+ </el-descriptions>
27
+ </div>
28
+ </template>
29
+
30
+ <script>
31
+ import { itemsComponent, eventMixin } from "../mixins/index";
32
+ export default {
33
+ mixins: [itemsComponent, eventMixin],
34
+ computed: {
35
+ labelStyle() {
36
+ return item => {
37
+ let style = {
38
+ width: this.widget.options.labelWidth,
39
+ textAlignLast: this.widget.options.textAlignLast
40
+ };
41
+ style = Object.assign(style, item.options.style.label);
42
+ return this.initStyle(style);
43
+ };
44
+ }
45
+ },
46
+ methods: {
47
+ initStyle(style) {
48
+ let styleText = "";
49
+ let customStyle = "";
50
+ for (let key of Object.keys(style)) {
51
+ const value = style[key];
52
+ if (!value) continue;
53
+ if (key === "customStyle") {
54
+ customStyle = value.replace(/{/g, "");
55
+ customStyle = customStyle.replace(/}/g, "");
56
+ customStyle = customStyle.replace(/\/n/g, "");
57
+ } else {
58
+ styleText += `${key}: ${value};`;
59
+ }
60
+ }
61
+ if (customStyle) styleText += customStyle;
62
+ styleText = styleText.replace(/rpx/g, "px");
63
+ return styleText;
64
+ }
65
+ }
66
+ };
67
+ </script>
68
+
69
+ <style lang="scss" scoped>
70
+ .component-descriptions {
71
+ .el-descriptions {
72
+ padding: 0px;
73
+ }
74
+ }
75
+ </style>
@@ -15,13 +15,13 @@
15
15
  :no-transition-on-drag="true"
16
16
  v-bind="{
17
17
  group: 'people',
18
- ghostClass: 'ghost',
18
+ ghostClass: 'draggable-ghost',
19
19
  animation: 200,
20
20
  handle: '.drag-widget'
21
21
  }"
22
22
  @add="handleWidgetAdd($event, widget, columnIndex)"
23
23
  >
24
- <transition-group name="fade" tag="div" class="widget-col-list">
24
+ <transition-group name="fade" tag="div" class="draggable-list">
25
25
  <widget-form-item
26
26
  v-for="(element, elementIndex) in column.list.filter(item => {
27
27
  return item.key;