lw-cdp-ui 1.2.48 → 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 -469
  63. package/dist/components/lwLogin/index.vue +0 -511
  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 -346
  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 -19906
  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,631 +0,0 @@
1
- <template>
2
- <el-skeleton v-if="renderLoading || Object.keys(form).length == 0"
3
- animated />
4
-
5
- <el-form v-else
6
- ref="form"
7
- :model="form"
8
- :label-width="config.labelWidth"
9
- :label-position="$i18n.locale == 'en-us' ? 'top' : config.labelPosition"
10
- v-loading="loading"
11
- :disabled="isView"
12
- element-loading-text="Loading...">
13
- <el-row :gutter="15">
14
- <template v-for="(item, index) in config.formItems"
15
- :key="index">
16
- <el-col :span="item.span || 24"
17
- v-if="!hideHandle(item)">
18
- <!-- 间隔标题 -->
19
- <div v-if="item.component == 'divider'"
20
- class="title-name">
21
- {{ item.label }}
22
- <el-tooltip v-if="item.tips"
23
- :content="item.tips">
24
- <el-icon><el-icon-question-filled /></el-icon>
25
- </el-tooltip>
26
- </div>
27
- <!-- 表单内容 -->
28
- <el-form-item v-else
29
- :prop="getPropName(item)"
30
- :rules="rulesHandle(item)">
31
- <template #label>
32
- {{ item.label }}
33
- <el-tooltip v-if="item.tips"
34
- :content="item.tips">
35
- <el-icon><el-icon-question-filled /></el-icon>
36
- </el-tooltip>
37
- </template>
38
-
39
- <!-- input -->
40
- <template v-if="item.component == 'input'">
41
- <template v-if="item?.options?.name">
42
- <el-input v-model="form[item.name][item?.options.name]"
43
- :placeholder="item?.options?.placeholder"
44
- clearable
45
- :type="item?.options.type"
46
- :disabled="item?.options?.disabled"
47
- :autocomplete="item?.options?.autocomplete || 'off'"
48
- :maxlength="item?.options.maxlength"
49
- show-word-limit>
50
- <template v-if="item?.options.prepend"
51
- #prepend>{{ item?.options.prepend }}</template>
52
- <template v-if="item?.options.append"
53
- #append>{{ item?.options.append }}</template>
54
- </el-input>
55
- </template>
56
- <template v-else>
57
- <el-input v-model="form[item.name]"
58
- :placeholder="item?.options?.placeholder"
59
- clearable
60
- :type="item?.options.type"
61
- :disabled="item?.options?.disabled"
62
- :maxlength="item?.options.maxlength"
63
- show-word-limit>
64
- <template v-if="item?.options.prepend"
65
- #prepend>{{ item?.options.prepend }}</template>
66
- <template v-if="item?.options.append"
67
- #append>{{ item?.options.append }}</template>
68
- </el-input>
69
- </template>
70
- </template>
71
- <!-- upload -->
72
- <template v-else-if="item.component == 'upload'">
73
- <template v-for="(_item, _index) in item?.options.items"
74
- :key="_index">
75
- <template v-if="item.name">
76
- <div style="margin-right: 5px;">
77
- <lw-upload v-model="form[item.name][_item.name]"
78
- :maxSize="_item.maxSize"
79
- :accept="_item.accept"
80
- :title="_item.label"
81
- :parseData="item.parseData"
82
- :disabled="_item?.disabled"
83
- :multiple="_item?.multiple"
84
- :limit="_item?.limit"
85
- :returnFile="_item?.returnFile"
86
- :tip="_item?.tip"
87
- :apiObj="item.apiObj"></lw-upload>
88
- </div>
89
- </template>
90
- <template v-else>
91
- <div style="margin-right: 5px;">
92
- <lw-upload v-model="form[_item.name]"
93
- :maxSize="_item.maxSize"
94
- :accept="_item.accept"
95
- :title="_item.label"
96
- :parseData="item.parseData"
97
- :disabled="_item?.disabled"
98
- :multiple="_item?.multiple"
99
- :limit="_item?.limit"
100
- :returnFile="_item?.returnFile"
101
- :tip="_item?.tip"
102
- :apiObj="item.apiObj"></lw-upload>
103
- </div>
104
- </template>
105
-
106
- </template>
107
- </template>
108
- <!-- checkbox -->
109
- <template v-else-if="item.component == 'checkbox'">
110
- <template v-if="item.name">
111
- <el-checkbox v-model="form[item.name][_item.name]"
112
- :label="_item.label"
113
- v-for="(_item, _index) in item?.options.items"
114
- :key="_index"></el-checkbox>
115
- </template>
116
- <template v-else>
117
- <el-checkbox v-model="form[_item.name]"
118
- :label="_item.label"
119
- v-for="(_item, _index) in item?.options.items"
120
- :key="_index"></el-checkbox>
121
- </template>
122
- </template>
123
- <!-- checkboxGroup -->
124
- <template v-else-if="item.component == 'checkboxGroup'">
125
- <el-checkbox-group v-model="form[item.name]">
126
- <el-checkbox v-for="_item in item?.options.items"
127
- :key="_item.value"
128
- :label="_item.value">{{ _item.label }}</el-checkbox>
129
- </el-checkbox-group>
130
- </template>
131
-
132
- <!-- switch -->
133
- <template v-else-if="item.component == 'switch'">
134
- <template v-if="item?.options?.name">
135
- <el-switch v-model="form[item.name][item?.options.name]"
136
- inline-prompt
137
- :active-text="item?.options?.activeText"
138
- :inactive-text="item?.options?.inactiveText" />
139
- </template>
140
- <template v-else>
141
- <el-switch v-model="form[item.name]"
142
- inline-prompt
143
- :active-text="item?.options?.activeText"
144
- :inactive-text="item?.options?.inactiveText" />
145
- </template>
146
- </template>
147
- <!-- select -->
148
- <template v-else-if="item.component == 'select'">
149
- <template v-if="item?.options?.name">
150
- <el-select v-model="form[item.name][item?.options.name]"
151
- :multiple="item?.options?.multiple"
152
- :allow-create="item?.options?.allowCreate"
153
- default-first-option
154
- :placeholder="item?.options?.placeholder || ''"
155
- :clearable="item?.options?.clearable"
156
- :disabled="item?.options?.disabled"
157
- filterable
158
- style="width: 100%;">
159
- <el-option v-for="option in item?.options.items"
160
- :key="option.value"
161
- :label="option.label"
162
- :value="option.value"></el-option>
163
- </el-select>
164
- </template>
165
- <template v-else>
166
- <el-select v-model="form[item.name]"
167
- :multiple="item?.options?.multiple"
168
- :allow-create="item?.options?.allowCreate"
169
- default-first-option
170
- :placeholder="item?.options?.placeholder || ''"
171
- :clearable="item?.options?.clearable"
172
- :disabled="item?.options?.disabled"
173
- filterable
174
- style="width: 100%;">
175
- <el-option v-for="option in item?.options.items"
176
- :key="option.value"
177
- :label="option.label"
178
- :value="option.value"></el-option>
179
- </el-select>
180
- </template>
181
-
182
- </template>
183
- <!-- cascader -->
184
- <template v-else-if="item.component == 'cascader'">
185
- <template v-if="item?.options?.name">
186
- <el-cascader v-model="form[item.name][item?.options.name]"
187
- style="width: 100%;"
188
- :options="item?.options.items"
189
- clearable></el-cascader>
190
- </template>
191
- <template v-else>
192
- <el-cascader v-model="form[item.name]"
193
- style="width: 100%;"
194
- :options="item?.options.items"
195
- clearable></el-cascader>
196
- </template>
197
-
198
- </template>
199
- <!-- date -->
200
- <template v-else-if="item.component == 'date'">
201
- <template v-if="item?.options?.name">
202
- <el-date-picker v-model="form[item.name][item?.options.name]"
203
- style="width: 100%;"
204
- :type="item?.options.type"
205
- :start-placeholder="item?.options.startPlaceholder"
206
- :end-placeholder="item?.options.endPlaceholder"
207
- :shortcuts="item?.options.shortcuts"
208
- :disabled-date="item?.options?.disabledDate"
209
- :default-time="item?.options.defaultTime"
210
- :disabled="item?.options?.disabled"
211
- :value-format="item?.options.valueFormat"
212
- :format="item?.options.format"
213
- :placeholder="item?.options.placeholder || '请选择'"></el-date-picker>
214
- </template>
215
- <template v-else>
216
- <el-date-picker v-model="form[item.name]"
217
- style="width: 100%;"
218
- :type="item?.options.type"
219
- :start-placeholder="item?.options.startPlaceholder"
220
- :end-placeholder="item?.options.endPlaceholder"
221
- :shortcuts="item?.options.shortcuts"
222
- :disabled-date="item?.options?.disabledDate"
223
- :default-time="item?.options.defaultTime"
224
- :disabled="item?.options?.disabled"
225
- :value-format="item?.options.valueFormat"
226
- :format="item?.options.format"
227
- :placeholder="item?.options.placeholder || '请选择'"></el-date-picker>
228
- </template>
229
-
230
- </template>
231
- <!-- number -->
232
- <template v-else-if="item.component == 'number'">
233
- <template v-if="item?.options?.name">
234
- <el-input-number v-model="form[item.name][item?.options.name]"
235
- :disabled="item?.options?.disabled"
236
- :min="item?.options?.min"
237
- :max="item?.options?.max"
238
- :step="item?.options?.step || 1"
239
- :precision="item?.options?.precision"
240
- :placeholder="item?.options?.placeholder || ''"
241
- :controls-position="item?.options?.controlsPosition || 'right'">
242
- <template v-if="item?.options?.suffix"
243
- #suffix>
244
- <span>{{ item?.options.suffix }}</span>
245
- </template>
246
- </el-input-number>
247
- </template>
248
- <template v-else>
249
- <el-input-number v-model="form[item.name]"
250
- :disabled="item?.options?.disabled"
251
- :min="item?.options?.min"
252
- :max="item?.options?.max"
253
- :step="item?.options?.step || 1"
254
- :precision="item?.options?.precision"
255
- :placeholder="item?.options?.placeholder || ''"
256
- :controls-position="item?.options?.controlsPosition || 'right'">
257
- <template v-if="item?.options?.suffix"
258
- #suffix>
259
- <span>{{ item?.options.suffix }}</span>
260
- </template>
261
- </el-input-number>
262
- </template>
263
-
264
- </template>
265
- <!-- radio -->
266
- <template v-else-if="item.component == 'radio'">
267
- <template v-if="item?.options?.name">
268
- <el-radio-group v-model="form[item.name][item?.options.name]"
269
- :disabled="item?.options?.disabled">
270
- <el-radio v-for="_item in item?.options.items"
271
- :key="_item.value"
272
- :value="_item.value">{{ _item.label }}</el-radio>
273
- </el-radio-group>
274
- </template>
275
- <template v-else>
276
- <el-radio-group v-model="form[item.name]"
277
- :disabled="item?.options?.disabled">
278
- <el-radio v-for="_item in item?.options.items"
279
- :key="_item.value"
280
- :value="_item.value">{{ _item.label }}</el-radio>
281
- </el-radio-group>
282
- </template>
283
-
284
- </template>
285
- <!-- color -->
286
- <template v-else-if="item.component == 'color'">
287
- <template v-if="item?.options?.name">
288
- <el-color-picker
289
- v-model="form[item.name][item?.options.name]" />
290
- </template>
291
- <template v-else>
292
- <el-color-picker v-model="form[item.name]" />
293
- </template>
294
-
295
- </template>
296
- <!-- rate -->
297
- <template v-else-if="item.component == 'rate'">
298
- <template v-if="item?.options?.name">
299
- <el-rate style="margin-top: 6px;"
300
- v-model="form[item.name][item?.options.name]"></el-rate>
301
- </template>
302
- <template v-else>
303
- <el-rate style="margin-top: 6px;"
304
- v-model="form[item.name]"></el-rate>
305
- </template>
306
-
307
- </template>
308
- <!-- slider -->
309
- <template v-else-if="item.component == 'slider'">
310
- <template v-if="item?.options?.name">
311
- <el-slider v-model="form[item.name][item?.options.name]"
312
- :marks="item?.options.marks"></el-slider>
313
- </template>
314
- <template v-else>
315
- <el-slider v-model="form[item.name]"
316
- :marks="item?.options.marks"></el-slider>
317
- </template>
318
-
319
- </template>
320
-
321
- <!-- tags -->
322
- <template v-else-if="item.component == 'tags'">
323
- <div class="tags-list">
324
- <template v-if="item?.options?.name">
325
- <el-tag v-for="tag in form[item.name][item?.options?.name]"
326
- :key="tag"
327
- closable
328
- :disable-transitions="false"
329
- @close="tagClose(tag, form[item.name][item?.options.name])">
330
- {{ tag }}
331
- </el-tag>
332
-
333
- </template>
334
- <template v-else>
335
- <el-tag v-for="tag in form[item.name]"
336
- :key="tag"
337
- closable
338
- :disable-transitions="false"
339
- @close="tagClose(tag, form[item.name])">
340
- {{ tag }}
341
- </el-tag>
342
- </template>
343
- <el-input v-if="tagVisible"
344
- v-model="tagValue"
345
- class="w-20"
346
- size="small"
347
- @keyup.enter="tagInputConfirm(item, form)"
348
- @blur="tagInputConfirm(item, form)" />
349
- <el-button v-else
350
- class="button-new-tag"
351
- size="small"
352
- @click="tagVisible = true">
353
- + 添加
354
- </el-button>
355
- </div>
356
- </template>
357
-
358
- <!-- 没有组件是component值 就是插槽名称 -->
359
- <template v-else>
360
- <slot :name="item.component"
361
- :itemCur="item"
362
- :formCur="form">
363
- <el-tag type="danger">[{{ item.component }}]
364
- 没有这个默认组件也未自定义插槽内容</el-tag>
365
- </slot>
366
- </template>
367
- <div v-if="item.message"
368
- class="el-form-item-msg">{{ item.message }}</div>
369
- </el-form-item>
370
- </el-col>
371
- </template>
372
- <el-col :span="24">
373
- <el-form-item>
374
- <slot>
375
- <el-button type="primary"
376
- @click="submit">提交</el-button>
377
- </slot>
378
- </el-form-item>
379
- </el-col>
380
- </el-row>
381
- </el-form>
382
- </template>
383
-
384
- <script>
385
- import lwUpload from '../lwUpload'
386
- export default {
387
- components: {
388
- lwUpload
389
- },
390
- props: {
391
- modelValue: { type: Object, default: () => { } },
392
- /**
393
- * 配置项
394
- * {
395
- * formItems: [{
396
- * span: 24,
397
- * component: 'input', // 可选项有 input, textarea, select, cascader, date, number, radio, checkbox, switch, color, rate, slider, tags, divider, upload, 自定义名称
398
- * name: 'name', // 表单字段名称
399
- * label: '名称', // 表单字段名称
400
- * message: '提示信息', // 表单字段名称
401
- * value: '1', // 表单字段值
402
- * options: {
403
- * name: 'name', // 表单字段名称
404
- * type: 'input|', // 输入框类型
405
- * placeholder: '请输入', // 表单字段名称
406
- * disabled: false, // 表单字段名称
407
- * maxlength: 10, // 表单字段名称
408
- * append: '元', // 表单字段名称
409
- * items: [{
410
- * value: '1',
411
- * label: '选项1'
412
- * }, {
413
- * value: '2',
414
- * label: '选项2'
415
- * }]
416
- * }
417
- * ...
418
- * }]
419
- * labelWidth: '100px', // 表单域标签的宽度
420
- * labelPosition: 'top', // 表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width
421
- * ...
422
- * }
423
- * **/
424
- config: { type: Object, default: () => { } },
425
- /**
426
- * 是否显示加载中
427
- */
428
- loading: { type: Boolean, default: false },
429
- /**
430
- * 是否是查看模式
431
- */
432
- isView: { type: Boolean, default: false },
433
- },
434
- data() {
435
- return {
436
- form: {},
437
- tagValue: '',
438
- tagVisible: false,
439
- renderLoading: false
440
- }
441
- },
442
- watch: {
443
- modelValue(val, old) {
444
- if (this.hasConfig && this.hasValue) {
445
- this.deepMerge(this.form, JSON.parse(JSON.stringify(val)))
446
- }
447
- },
448
- config() {
449
- this.render()
450
- },
451
- form: {
452
- handler(val) {
453
- this.$emit("update:modelValue", val)
454
- },
455
- deep: true
456
- }
457
- },
458
- computed: {
459
- hasConfig() {
460
- return Object.keys(this.config).length > 0
461
- },
462
- hasValue() {
463
- return Object.keys(this.modelValue).length > 0
464
- },
465
-
466
- },
467
- mounted() {
468
- if (this.hasConfig) {
469
- this.render()
470
- }
471
- },
472
- methods: {
473
- /**
474
- * 渲染表单数据。
475
- * 遍历配置中的表单项,根据不同组件类型初始化表单数据。
476
- * 对于复选框和上传组件,将选项值存储在对象中。
477
- * 对于其他组件,直接将值赋给表单数据。
478
- * 如果存在当前值,则将其与表单数据进行深度合并。
479
- */
480
- render() {
481
- this.form = {}
482
- this.config.formItems.forEach((item) => {
483
- if (item.component == 'checkbox' || item.component == 'upload') {
484
- if (item.name) {
485
- const value = {}
486
- item?.options.items.forEach((option) => {
487
- value[option.name] = option.value
488
- })
489
- this.form[item.name] = value
490
- } else if (item?.options?.items) {
491
- item?.options.items.forEach((option) => {
492
- this.form[option.name] = option.value
493
- })
494
- }
495
- } else {
496
- if (item?.options?.name) {
497
- if (!this.form[item.name]) {
498
- this.form[item.name] = {}
499
- }
500
- this.form[item.name][item?.options?.name] = item.value
501
- } else if (item.name) {
502
- this.form[item.name] = item.value
503
- }
504
-
505
- }
506
- })
507
-
508
- if (this.hasValue) {
509
- this.form = this.deepMerge(this.form, this.modelValue)
510
- }
511
- },
512
- deepMerge(obj1, obj2) {
513
- for (let key in obj2) {
514
- if (obj2.hasOwnProperty(key)) {
515
- // 确保 obj1[key] 和 obj2[key] 不是 null 或 undefined
516
- const isObj1Valid = obj1[key] !== null && obj1[key] !== undefined;
517
- const isObj2Valid = obj2[key] !== null && obj2[key] !== undefined;
518
-
519
- if (
520
- isObj1Valid &&
521
- typeof obj1[key] === "object" &&
522
- !Array.isArray(obj1[key]) &&
523
- isObj2Valid &&
524
- typeof obj2[key] === "object" &&
525
- !Array.isArray(obj2[key])
526
- ) {
527
- obj1[key] = this.deepMerge(obj1[key], obj2[key]);
528
- } else {
529
-
530
- if (isObj2Valid) {
531
- obj1[key] = obj2[key];
532
- } else if (!isObj2Valid) {
533
- delete obj1[key];
534
- }
535
- }
536
- }
537
- }
538
- return obj1;
539
- },
540
- //处理动态隐藏
541
- hideHandle(item) {
542
- if (typeof item.hideHandle === 'string') {
543
- const func = new Function('form', `return ${item?.hideHandle.replace(/\$/g, "form")}`);
544
- return func(this.form);
545
- } else if (typeof item.hideHandle === 'boolean') {
546
- return item.hideHandle
547
- }
548
- return false
549
- },
550
- // 处理动态必填
551
- rulesHandle(item) {
552
- if (item.requiredHandle) {
553
- try {
554
- const requiredHandleFunc = new Function("form", `return ${item.requiredHandle.replace(/\$/g, "form")}`);
555
- const exp = requiredHandleFunc(this.form);
556
-
557
- const requiredRule = item.rules.find(t => 'required' in t);
558
- if (requiredRule) {
559
- requiredRule.required = exp;
560
- }
561
- } catch (error) {
562
- console.error("Error requiredHandle function:", error);
563
- }
564
- }
565
- return item.rules;
566
- },
567
- //数据验证
568
- validate(valid, obj) {
569
- return this.$refs.form.validate(valid, obj)
570
- },
571
- scrollToField(prop) {
572
- return this.$refs.form.scrollToField(prop)
573
- },
574
- resetFields() {
575
- return this.$refs.form.resetFields()
576
- },
577
- //提交
578
- submit() {
579
- this.$emit("submit", this.form)
580
- },
581
- // 删除tag
582
- tagClose(tag, item) {
583
- item.splice(item.indexOf(tag), 1)
584
- },
585
- // 增加tag
586
- tagInputConfirm(item, row) {
587
- if (this.tagValue) {
588
- if (item?.options?.name) {
589
- row[item.name] = row[item.name] || {};
590
- row[item.name][item?.options.name] = row[item.name][item?.options.name] || [];
591
- row[item.name][item?.options.name].push(this.tagValue)
592
- } else {
593
- row[item.name] = row[item.name] || []
594
- row[item.name].push(this.tagValue)
595
- }
596
- }
597
- this.tagVisible = false
598
- this.tagValue = ''
599
- },
600
- // prop NAME
601
- getPropName(item) {
602
- if (item.component == 'checkbox' || item.component == 'upload') {
603
- if (item.name) {
604
- return `${item.name}.${item?.options.items[0].name}`
605
- } else {
606
- return item?.options.items[0].name
607
- }
608
-
609
- } else {
610
- return item?.options?.name ? `${item.name}.${item?.options.name}` : item.name
611
- }
612
- }
613
- }
614
- }
615
- </script>
616
- <style lang="scss" scoped>
617
- .button-new-tag {
618
- margin-left: 10px;
619
- }
620
-
621
- .w-20 {
622
- width: 100px;
623
- margin-left: 10px;
624
- }
625
-
626
- .title-name {
627
- font-size: 18px;
628
- font-weight: bold;
629
- margin-bottom: 10px;
630
- }
631
- </style>