lw-cdp-ui 1.2.47 → 1.2.49

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 (88) hide show
  1. package/package.json +1 -1
  2. package/dist/assets/images/empty.jpg +0 -0
  3. package/dist/assets/images/login.svg +0 -558
  4. package/dist/assets/images/logo.jpg +0 -0
  5. package/dist/assets/images/logo.svg +0 -78
  6. package/dist/assets/images/logo1.svg +0 -86
  7. package/dist/assets/images/register.svg +0 -351
  8. package/dist/components/lwCronSelect/index.vue +0 -218
  9. package/dist/components/lwFlow/components/lfControl.vue +0 -126
  10. package/dist/components/lwFlow/components/lfNodePanel.vue +0 -98
  11. package/dist/components/lwFlow/config/dagre.js +0 -279
  12. package/dist/components/lwFlow/config/nodesList.js +0 -243
  13. package/dist/components/lwFlow/index.vue +0 -781
  14. package/dist/components/lwFlow/nodeEdit/audienceReceive.vue +0 -262
  15. package/dist/components/lwFlow/nodeEdit/basicSettings.vue +0 -88
  16. package/dist/components/lwFlow/nodeEdit/eventReceive.vue +0 -145
  17. package/dist/components/lwFlow/nodeEdit/index.vue +0 -306
  18. package/dist/components/lwFlow/nodeEdit/sms.vue +0 -107
  19. package/dist/components/lwFlow/nodeEdit/styleSettings.vue +0 -236
  20. package/dist/components/lwFlow/nodes/basisEnd.js +0 -56
  21. package/dist/components/lwFlow/nodes/basisStart.js +0 -56
  22. package/dist/components/lwFlow/nodes/custom.js +0 -129
  23. package/dist/components/lwFlow/nodes/et2lTable.js +0 -132
  24. package/dist/components/lwFlow/nodesData/datas/audienceReceive.js +0 -137
  25. package/dist/components/lwFlow/nodesData/datas/base.js +0 -190
  26. package/dist/components/lwFlow/nodesData/datas/collap.js +0 -95
  27. package/dist/components/lwFlow/nodesData/datas/eventReceive.js +0 -106
  28. package/dist/components/lwFlow/nodesData/datas/expand.js +0 -85
  29. package/dist/components/lwFlow/nodesData/datas/filter.js +0 -85
  30. package/dist/components/lwFlow/nodesData/datas/joiner.js +0 -96
  31. package/dist/components/lwFlow/nodesData/datas/mapper.js +0 -111
  32. package/dist/components/lwFlow/nodesData/datas/reduce.js +0 -69
  33. package/dist/components/lwFlow/nodesData/datas/sms.js +0 -69
  34. package/dist/components/lwFlow/nodesData/datas/source.js +0 -142
  35. package/dist/components/lwFlow/nodesData/datas/target.js +0 -95
  36. package/dist/components/lwFlow/nodesData/datas/timer.js +0 -180
  37. package/dist/components/lwFlow/nodesData/index.js +0 -41
  38. package/dist/components/lwForm/index.vue +0 -631
  39. package/dist/components/lwFormJson/JsonItem.vue +0 -302
  40. package/dist/components/lwFormJson/StatsConfig.vue +0 -544
  41. package/dist/components/lwFormJson/TreeItem.vue +0 -149
  42. package/dist/components/lwFormJson/index.vue +0 -362
  43. package/dist/components/lwFormJson/menuList.js +0 -324
  44. package/dist/components/lwFormMini/FormItem.vue +0 -466
  45. package/dist/components/lwFormMini/ViewItem.vue +0 -391
  46. package/dist/components/lwFormMini/index.vue +0 -421
  47. package/dist/components/lwFormMini/textToPassword.vue +0 -61
  48. package/dist/components/lwFormView/index.vue +0 -390
  49. package/dist/components/lwFormView/textToPassword.vue +0 -59
  50. package/dist/components/lwIconSelect/iconSelect.js +0 -289
  51. package/dist/components/lwIconSelect/index.vue +0 -142
  52. package/dist/components/lwLayout/components/NavMenu.vue +0 -36
  53. package/dist/components/lwLayout/components/aside.vue +0 -295
  54. package/dist/components/lwLayout/components/bu.vue +0 -88
  55. package/dist/components/lwLayout/components/iframeView.vue +0 -57
  56. package/dist/components/lwLayout/components/lang.vue +0 -77
  57. package/dist/components/lwLayout/components/setting.vue +0 -102
  58. package/dist/components/lwLayout/components/sideM.vue +0 -135
  59. package/dist/components/lwLayout/components/tags.vue +0 -388
  60. package/dist/components/lwLayout/components/topbar.vue +0 -69
  61. package/dist/components/lwLayout/components/userbar.vue +0 -214
  62. package/dist/components/lwLayout/index.vue +0 -460
  63. package/dist/components/lwLogin/index.vue +0 -506
  64. package/dist/components/lwLogin/locale/en-us.js +0 -37
  65. package/dist/components/lwLogin/locale/zh-cn.js +0 -37
  66. package/dist/components/lwSearch/date/date.vue +0 -113
  67. package/dist/components/lwSearch/dateRange/dateRange.vue +0 -118
  68. package/dist/components/lwSearch/dates/dates.vue +0 -366
  69. package/dist/components/lwSearch/index.vue +0 -628
  70. package/dist/components/lwSearch/input/input.vue +0 -55
  71. package/dist/components/lwSearch/locale/en-us.js +0 -15
  72. package/dist/components/lwSearch/locale/zh-cn.js +0 -15
  73. package/dist/components/lwSearch/select/select.vue +0 -58
  74. package/dist/components/lwSvgIcon/index.vue +0 -29
  75. package/dist/components/lwTable/index.js +0 -286
  76. package/dist/components/lwTable/index.scss +0 -238
  77. package/dist/components/lwTable/index.vue +0 -344
  78. package/dist/components/lwTable/locale/en-US.js +0 -26
  79. package/dist/components/lwTable/locale/zh-CN.js +0 -26
  80. package/dist/components/lwTable/useFullscreen.js +0 -73
  81. package/dist/components/lwTableForm/index.vue +0 -662
  82. package/dist/components/lwTableSelect/index.vue +0 -266
  83. package/dist/components/lwTableSelect/tableSelect.js +0 -23
  84. package/dist/components/lwUpload/index.vue +0 -564
  85. package/dist/lw-cdp-ui.esm.js +0 -19893
  86. package/dist/lw-cdp-ui.umd.js +0 -22
  87. package/dist/style.css +0 -1
  88. package/dist/vite.svg +0 -1
@@ -1,544 +0,0 @@
1
- <template>
2
- <el-form :model="item"
3
- class="form-list"
4
- label-position="top">
5
-
6
- <template v-if="item.component">
7
- <div class="form-title">基础配置</div>
8
- <div class="form-body">
9
- <el-form-item v-if="item.component == 'checkbox' || item.component == 'upload'"
10
- label="属性名称">
11
- <template v-for="(_item, _index) in item?.options.items">
12
- <el-input v-model="_item.name"
13
- placeholder="请输入"
14
- clearable />
15
- </template>
16
-
17
- </el-form-item>
18
- <el-form-item v-else
19
- label="属性名称">
20
- <el-input v-model="item.name"
21
- placeholder="请输入"
22
- clearable />
23
- </el-form-item>
24
- <el-form-item label="标题">
25
- <el-input v-model="item.label"
26
- placeholder="请输入"
27
- clearable />
28
- </el-form-item>
29
- <el-form-item v-if="item?.options && item.component != 'checkbox' && item.component != 'upload'"
30
- label="输入提示">
31
- <el-input v-model="item.options.placeholder"
32
- placeholder="请输入"
33
- clearable />
34
- </el-form-item>
35
- <el-form-item v-if="item?.options && item.component != 'checkbox' && item.component != 'upload'"
36
- label="禁用">
37
- <el-switch v-model="item.options.disabled"
38
- active-text="启用"
39
- inactive-text="禁用" />
40
- </el-form-item>
41
- <el-form-item label="内容提示">
42
- <el-input v-model="item.tips"
43
- type="textarea"
44
- placeholder="请输入"
45
- clearable />
46
- </el-form-item>
47
- </div>
48
-
49
- <template v-if="item?.span">
50
- <div class="form-title">布局配置</div>
51
- <div class="form-body">
52
- <el-form-item label="栅格">
53
- <div class="form-slider">
54
- <el-slider v-model="item.span"
55
- :step="4"
56
- show-stops
57
- :min="4"
58
- :max="24" />
59
- </div>
60
- </el-form-item>
61
- </div>
62
- </template>
63
-
64
- <div v-if="item?.options"
65
- class="form-title">组件属性配置</div>
66
- <div v-if="item?.options"
67
- class="form-body">
68
- <template v-if="item.component === 'input'">
69
- <el-form-item v-if="item.options.type != 'textarea'"
70
- label="输入类型">
71
- <el-select v-model="item.options.type"
72
- placeholder="请选择输入类型">
73
- <el-option label="文本"
74
- value="text" />
75
- <el-option label="密码"
76
- value="password" />
77
- <el-option label="邮箱"
78
- value="email" />
79
- </el-select>
80
- </el-form-item>
81
- <el-form-item label="最大长度">
82
- <el-input-number v-model="item.options.maxlength"
83
- :min="1"
84
- controls-position="right"
85
- placeholder="请输入" />
86
- </el-form-item>
87
-
88
- </template>
89
- <template
90
- v-if="['select','radio','checkbox', 'checkboxGroup'].includes(item.component)">
91
- <el-form-item label="选项">
92
- <div v-for="(option, index) in item.options.items"
93
- :key="index"
94
- class="form-item">
95
- <el-input v-if="['checkbox'].includes(item.component)"
96
- v-model="option.name"
97
- placeholder="属性名称"
98
- clearable />
99
- <el-input v-model="option.label"
100
- placeholder="选项名称"
101
- clearable />
102
- <el-input v-model="option.value"
103
- placeholder="选项值"
104
- clearable />
105
-
106
- <el-icon class="remove-btn"
107
- size="14"
108
- v-if="item.options.items.length > 1"
109
- @click="item.options.items.splice(index, 1)"><el-icon-delete /></el-icon>
110
- </div>
111
- <el-button type="primary"
112
- size="small"
113
- style="width: 100%;"
114
- @click="item.options.items.push({ label: '', value: '' })">新增选项</el-button>
115
- </el-form-item>
116
-
117
- </template>
118
-
119
- <template v-if="['tags'].includes(item.component)">
120
- <el-form-item label="按钮名称">
121
- <el-input v-model="item.options.addText"
122
- placeholder="请输入"
123
- clearable />
124
- </el-form-item>
125
- <el-form-item label="默认标签">
126
- <div class="tags-list">
127
- <el-tag v-for="tag in item.value"
128
- :key="tag"
129
- closable
130
- :disable-transitions="false"
131
- @close="tagClose(tag, item.value)">
132
- {{ tag }}
133
- </el-tag>
134
- <el-input v-if="tagVisible[item.name]"
135
- v-model="tagValue"
136
- class="w-20"
137
- size="small"
138
- @keyup.enter="tagInputConfirm(item, item.value)"
139
- @blur="tagInputConfirm(item, item.value)" />
140
- <el-button v-else
141
- class="button-new-tag"
142
- size="small"
143
- @click="tagVisible[item.name] = true">
144
- + 添加
145
- </el-button>
146
- </div>
147
- </el-form-item>
148
-
149
- </template>
150
-
151
- <el-form-item v-if="item.component === 'switch'"
152
- label="开关文字">
153
- <div class="form-item">
154
- <el-input v-model="item.options.activeText"
155
- placeholder="开文字"
156
- clearable />
157
- <el-input v-model="item.options.inactiveText"
158
- placeholder="关文字"
159
- clearable />
160
- </div>
161
-
162
- </el-form-item>
163
-
164
- <template v-if="['rate','number'].includes(item.component)">
165
- <el-row :gutter="10">
166
- <el-col :span="12">
167
- <el-form-item label="最小值">
168
- <el-input-number v-model="item.options.min"
169
- controls-position="right"
170
- placeholder="最小值" />
171
- </el-form-item>
172
- </el-col>
173
- <el-col :span="12">
174
- <el-form-item label="最大值">
175
- <el-input-number v-model="item.options.max"
176
- controls-position="right"
177
- placeholder="最大值" />
178
- </el-form-item>
179
- </el-col>
180
- <el-col :span="12">
181
- <el-form-item label="步长">
182
- <el-input-number v-model="item.options.step"
183
- controls-position="right"
184
- placeholder="步长" />
185
- </el-form-item>
186
- </el-col>
187
- <el-col :span="12">
188
- <el-form-item v-if="item.component == 'number'"
189
- label="后缀">
190
- <el-input-number v-model="item.options.suffix"
191
- controls-position="right"
192
- placeholder="后缀" />
193
- </el-form-item>
194
- </el-col>
195
- </el-row>
196
-
197
- </template>
198
-
199
- <template v-if="item.component === 'upload'"
200
- v-for="(_item, _index) in item?.options.items"
201
- :key="_index">
202
- <el-row :gutter="10">
203
- <el-col :span="12">
204
- <el-form-item label="宽">
205
- <el-input-number v-model="item.width"
206
- :min="1"
207
- controls-position="right"
208
- placeholder="宽" />
209
- </el-form-item>
210
- </el-col>
211
- <el-col :span="12">
212
- <el-form-item label="高">
213
- <el-input-number v-model="item.height"
214
- :min="1"
215
- controls-position="right"
216
- placeholder="高" />
217
- </el-form-item>
218
- </el-col>
219
- <el-col :span="12">
220
- <el-form-item label="数量限制">
221
- <el-input-number v-model="_item.limit"
222
- :min="1"
223
- controls-position="right"
224
- placeholder="文件数量" />
225
- </el-form-item>
226
- </el-col>
227
- <el-col :span="12">
228
- <el-form-item label="文件大小">
229
- <el-input-number v-model="_item.maxSize"
230
- :min="1"
231
- controls-position="right"
232
- placeholder="文件大小" />
233
- </el-form-item>
234
- </el-col>
235
- </el-row>
236
-
237
- <el-form-item>
238
- <template #label>
239
- 文件类型
240
- <el-tooltip content="不填默认类型image/gif, image/jpeg, image/png">
241
- <el-icon><el-icon-question-filled /></el-icon>
242
- </el-tooltip>
243
- </template>
244
- <el-input v-model="_item.accept"
245
- placeholder="请输入文件类型,如 .jpg,.png"
246
- clearable />
247
- </el-form-item>
248
- <el-form-item label="上传文案">
249
- <el-input v-model="_item.label"
250
- placeholder="请输入"
251
- clearable />
252
- </el-form-item>
253
- <el-form-item label="提示文案">
254
- <el-input v-model="_item.tip"
255
- placeholder="请输入"
256
- clearable />
257
- </el-form-item>
258
- <el-form-item label="禁用">
259
- <el-switch v-model="_item.disabled"
260
- active-text="启用"
261
- inactive-text="禁用" />
262
- </el-form-item>
263
- </template>
264
-
265
- <template v-if="item.component === 'date'">
266
- <el-form-item label="日期类型">
267
- <el-select v-model="item.options.type"
268
- placeholder="请选择日期类型">
269
- <el-option label="日期"
270
- value="date" />
271
- <el-option label="日期时间"
272
- value="datetime" />
273
- <el-option label="周"
274
- value="week" />
275
- <el-option label="月份"
276
- value="month" />
277
- <el-option label="年"
278
- value="year" />
279
- <el-option label="日期范围"
280
- value="daterange" />
281
- <el-option label="日期时间范围"
282
- value="datetimerange" />
283
- </el-select>
284
- </el-form-item>
285
- <el-form-item label="开始占位符">
286
- <el-input v-model="item.options.startPlaceholder"
287
- placeholder="请输入开始占位符"
288
- clearable />
289
- </el-form-item>
290
- <el-form-item label="结束占位符">
291
- <el-input v-model="item.options.endPlaceholder"
292
- placeholder="请输入结束占位符"
293
- clearable />
294
- </el-form-item>
295
- <el-form-item label="日期格式">
296
- <el-input v-model="item.options.format"
297
- placeholder="请输入日期格式"
298
- clearable />
299
- </el-form-item>
300
- <el-form-item label="值格式">
301
- <el-input v-model="item.options.valueFormat"
302
- placeholder="请输入值格式"
303
- clearable />
304
- </el-form-item>
305
- <el-form-item label="快捷选项">
306
- <el-switch v-model="item.options.shortcuts"
307
- active-text="启用"
308
- inactive-text="禁用" />
309
- </el-form-item>
310
- </template>
311
-
312
- </div>
313
-
314
- <div class="form-title">表单校验</div>
315
- <div class="form-body">
316
- <el-form-item label="提交校验">
317
- <el-select v-model="item.rules"
318
- multiple
319
- value-key="label"
320
- clearable
321
- placeholder="请选择">
322
- <el-option v-for="item in rules"
323
- :key="item.label"
324
- :label="item.label"
325
- :value="item" />
326
- </el-select>
327
- </el-form-item>
328
- <el-form-item label="隐藏校验(满足条件时将隐藏该项)">
329
- <div class="input-body">
330
- <el-cascader v-model="hideForm.label"
331
- :show-all-levels="false"
332
- :props="{ emitPath: false }"
333
- style="flex:1.2;"
334
- :options="strList" />
335
- <el-select v-model="hideForm.filter"
336
- clearable
337
- style="flex:1;"
338
- placeholder="条件">
339
- <el-option v-for="item in filter"
340
- :key="item.label"
341
- :label="item.label"
342
- :value="item.value" />
343
- </el-select>
344
- <el-input v-model="hideForm.value"
345
- style="flex:1;"
346
- placeholder="值"
347
- clearable />
348
- </div>
349
-
350
- </el-form-item>
351
-
352
- </div>
353
- </template>
354
- <template v-else>
355
- <div class="form-title">表单样式</div>
356
- <div class="form-body">
357
- <el-form-item label="标题宽度">
358
- <el-input v-model="item.labelWidth"
359
- placeholder="请输入"
360
- clearable />
361
- </el-form-item>
362
- <el-form-item label="标题位置">
363
- <el-select v-model="item.labelPosition"
364
- placeholder="请选择">
365
- <el-option label="顶部"
366
- value="top" />
367
- <el-option label="左"
368
- value="left" />
369
- <el-option label="右"
370
- value="right" />
371
- </el-select>
372
- </el-form-item>
373
- </div>
374
- <div class="form-title">数据层级</div>
375
- <TreeItem :formItems="config.formItems" />
376
- </template>
377
- </el-form>
378
- </template>
379
-
380
- <script>
381
- import TreeItem from './TreeItem.vue'
382
- export default {
383
- name: 'StatsConfig',
384
- components: {
385
- TreeItem
386
- },
387
- data() {
388
- return {
389
- tagVisible: {},
390
- hideForm: {},
391
- tagValue: '',
392
- filter: [
393
- { label: '等于', value: '==' },
394
- { label: '大于', value: '>' },
395
- { label: '大于等于', value: '>=' },
396
- { label: '小于', value: '<' },
397
- { label: '小于等于', value: '<=' },
398
- { label: '不等于', value: '!=' }
399
- ],
400
- rules: [
401
- {
402
- label: '必填', required: true, message: '请输入', trigger: 'blur'
403
- },
404
- {
405
- label: '必选', required: true, message: '请选择', trigger: 'change'
406
- },
407
- ]
408
- }
409
- },
410
- props: {
411
- item: {
412
- type: Object,
413
- default: () => ({})
414
- },
415
- config: {
416
- type: Object,
417
- default: () => ({})
418
- }
419
- },
420
- watch: {
421
- hideForm: {
422
- handler(val) {
423
- if (!val?.label || !val.filter || !val.value) {
424
- this.item.hideHandle = ''
425
- return
426
- }
427
- this.item.hideHandle = `$.${val.label} ${val.filter} ${val.value}`
428
- },
429
- deep: true
430
- },
431
- item: {
432
- handler(val) {
433
- if (val?.hideHandle) {
434
- const regex = /^\$\.(\S+)\s+(\S+)\s+(\S+)$/;
435
- const match = val?.hideHandle.match(regex);
436
-
437
- if (match) {
438
- const val = {
439
- label: match[1],
440
- filter: match[2],
441
- value: match[3]
442
- };
443
- this.hideForm = val
444
- }
445
-
446
- }
447
- },
448
- deep: true
449
- }
450
- },
451
- computed: {
452
- // 字段
453
- strList() {
454
- function parse(data) {
455
- const parseItem = (item) => {
456
- let node = {
457
- label: item.label,
458
- value: item.name || item.label
459
- };
460
-
461
- if (item.component === 'object' || item.component === 'list') {
462
- // 如果是组合或者列表,递归处理子节点
463
- node.children = (item.value || []).map((subItem) => {
464
- if (Array.isArray(subItem)) {
465
- return subItem.map(parseItem); // 处理二维数组的情况
466
- }
467
- return parseItem(subItem);
468
- }).flat();
469
- } else if (item.component === 'checkbox' || item.component === 'upload') {
470
- // 如果是复选框或者上传组件,从 options.items 中提取子节点
471
- node.value = item.options?.items[0].name
472
- }
473
-
474
- return node;
475
- };
476
-
477
- return data.formItems.map(parseItem);
478
- }
479
- let list = parse(this.config)
480
- return list
481
- }
482
- },
483
- methods: {
484
- // 删除tag
485
- tagClose(tag, item) {
486
- item.splice(item.indexOf(tag), 1)
487
- },
488
- // 增加tag
489
- tagInputConfirm(item, val) {
490
- if (this.tagValue) {
491
- val = val || []
492
- val.push(this.tagValue)
493
- }
494
- this.tagVisible[item.name] = false
495
- this.tagValue = ''
496
- }
497
- }
498
- };
499
- </script>
500
-
501
- <style lang="scss" scoped>
502
- .form-list {
503
- max-height: calc(100vh - 137px);
504
- .form-title {
505
- font-size: 12px;
506
- color: #000;
507
- font-weight: bold;
508
- padding: 15px 10px;
509
- background-color: var(--el-fill-color-lighter);
510
- }
511
- .form-body {
512
- padding: 10px;
513
- }
514
- .form-slider {
515
- padding: 0 10px;
516
- width: 100%;
517
- }
518
- .form-item {
519
- width: 100%;
520
- display: flex;
521
- align-items: center;
522
- gap: 5px;
523
- margin-bottom: 10px;
524
- }
525
-
526
- :deep(.el-tag) {
527
- & + .button-new-tag {
528
- margin-left: 10px;
529
- }
530
- & + .w-20 {
531
- margin-left: 10px;
532
- }
533
- }
534
- .w-20 {
535
- width: 100px;
536
- }
537
-
538
- .input-body {
539
- display: flex;
540
- align-items: center;
541
- gap: 5px;
542
- }
543
- }
544
- </style>
@@ -1,149 +0,0 @@
1
- <template>
2
- <draggable :list="formItems"
3
- item-key="name"
4
- group="people"
5
- class="draggable-item"
6
- ghost-class="draggable-ghost">
7
- <template #item="{element: item, index}">
8
- <div>
9
- <!-- 组合 -->
10
- <template v-if="['object'].includes(item.component)">
11
- <div class="form-item">
12
- {{item.label}}<span>「{{item.name || item.options?.items[0]?.name}}」</span>
13
- <div class="tool-list">
14
- <el-icon class="btn"
15
- size="14"
16
- @click="copyItem(item, index)"
17
- title="复制"><el-icon-copy-document /></el-icon>
18
- <el-icon class="btn"
19
- size="14"
20
- @click="deleteItem(index)"
21
- title="删除"><el-icon-delete /></el-icon>
22
- </div>
23
- </div>
24
- <TreeItem :formItems="item.value"></TreeItem>
25
- </template>
26
-
27
- <!-- 列表 显示时 -->
28
- <template v-else-if="['list'].includes(item.component)">
29
- <div class="list-item">
30
- <div class="form-item">
31
- {{item.label}}<span>「{{item.name || item.options?.items[0]?.name}}」</span>
32
- <div class="tool-list">
33
- <el-icon class="btn"
34
- size="14"
35
- @click="copyItem(item, index)"
36
- title="复制"><el-icon-copy-document /></el-icon>
37
- <el-icon class="btn"
38
- size="14"
39
- @click="deleteItem(index)"
40
- title="删除"><el-icon-delete /></el-icon>
41
- </div>
42
- </div>
43
- <TreeItem :formItems="x"
44
- v-for="x in item.value"></TreeItem>
45
- </div>
46
-
47
- </template>
48
-
49
- <div v-else
50
- class="form-item">
51
- {{item.label}}<span>「{{item.name || item.options?.items[0]?.name}}」</span>
52
- <div class="tool-list">
53
- <el-icon class="btn"
54
- size="14"
55
- @click="copyItem(item, index)"
56
- title="复制"><el-icon-copy-document /></el-icon>
57
- <el-icon class="btn"
58
- size="14"
59
- @click="deleteItem(index)"
60
- title="删除"><el-icon-delete /></el-icon>
61
- </div>
62
- </div>
63
- </div>
64
- </template>
65
- </draggable>
66
- </template>
67
-
68
- <script>
69
- import draggable from 'vuedraggable'
70
- export default {
71
- name: 'TreeItem',
72
- components: {
73
- draggable
74
- },
75
- props: {
76
- formItems: {
77
- type: Object,
78
- default: []
79
- }
80
- },
81
- computed: {
82
- curIndex() {
83
- return this.$store.state?.curIndex || ''
84
- }
85
- },
86
- emits: ['curClick'],
87
- methods: {
88
- // 删除
89
- deleteItem(index) {
90
- this.formItems.splice(index, 1)
91
- },
92
- // 复制
93
- copyItem(item, index) {
94
- let x = JSON.parse(JSON.stringify(item))
95
- x.name = `${item.component}-${this.$tool.getUUID('', 2)}`
96
- this.formItems.splice(index + 1, 0, x)
97
- }
98
- }
99
- }
100
- </script>
101
- <style lang="scss" scoped>
102
- .draggable-item {
103
- // padding-left: 10px;
104
- border-left: 10px solid rgba($color: #000, $alpha: 0.05);
105
- background-color: rgba($color: #000, $alpha: 0.01);
106
- backdrop-filter: blur(10px);
107
- color: var(--el-text-color-regular);
108
- cursor: move;
109
- .list-item {
110
- }
111
- .form-item {
112
- padding: 8px 0 8px 10px;
113
- border-bottom: 1px solid rgba($color: #000, $alpha: 0.1);
114
- position: relative;
115
- span{
116
- color: var(--el-color-primary-light-6);
117
- }
118
- .tool-list {
119
- display: none;
120
- }
121
- &:hover {
122
- // border: 1px dashed var(--el-color-primary) !important;
123
- background-color: var(--el-color-primary-light-9);
124
- .tool-list {
125
- position: absolute;
126
- bottom: 0;
127
- right: 0;
128
- display: block;
129
- border-top-left-radius: 10px;
130
- z-index: 8;
131
- background-color: var(--el-color-primary);
132
- color: #fff;
133
- display: flex;
134
- gap: 10px;
135
- padding: 2px 10px;
136
- .btn {
137
- cursor: pointer;
138
- width: 20px;
139
- height: 20px;
140
- }
141
- }
142
- }
143
- }
144
- :deep(.draggable-ghost) {
145
- background: var(--el-border-color-light);
146
- width: 100%;
147
- }
148
- }
149
- </style>