tianheng-ui 0.1.63 → 0.1.65

Sign up to get free protection for your applications and to get access to all the features.
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;