lw-cdp-ui 1.1.55 → 1.1.57

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.
@@ -458,7 +458,13 @@ export default {
458
458
  let isHideHandle = false;
459
459
  // 处理 hideHandle 字段逻辑
460
460
  if (data && typeof item?.hideHandle === 'string') {
461
- isHideHandle = eval(item.hideHandle.replace(/\$/g, "data"));
461
+ try {
462
+ const hideHandleFunc = new Function("data", `return ${item.hideHandle.replace(/\$/g, "data")}`);
463
+ isHideHandle = hideHandleFunc(data);
464
+ } catch (error) {
465
+ console.error('遇到错误时返回默认值:', error)
466
+ isHideHandle = false; // 遇到错误时默认值
467
+ }
462
468
  } else if (data && typeof item?.hideHandle === 'boolean') {
463
469
  isHideHandle = item.hideHandle;
464
470
  }
@@ -6,15 +6,23 @@ import nodeDatas from '../nodesData/index.js'
6
6
  export default function registerCustom(lf, node, state) {
7
7
  // 是否显示
8
8
  function hideHandle(item, data) {
9
- if (Object.keys(data).length == 0) return false
9
+ if (Object.keys(data).length === 0) return false
10
+
10
11
  if (typeof item.hideHandle === 'string') {
11
- const exp = eval(item.hideHandle.replace(/\$/g, 'data'))
12
- return exp
12
+ try {
13
+ const hideHandleFunc = new Function('data', `return ${item.hideHandle.replace(/\$/g, 'data')}`)
14
+ return hideHandleFunc(data)
15
+ } catch (error) {
16
+ console.error('遇到错误时返回默认值:', error)
17
+ return false // 遇到错误时返回默认值
18
+ }
13
19
  } else if (typeof item.hideHandle === 'boolean') {
14
20
  return item.hideHandle
15
21
  }
22
+
16
23
  return false
17
24
  }
25
+
18
26
  /**
19
27
  * 解析模板字符串,将其中的占位符替换为对应的数据值。
20
28
  * 占位符格式为 ${key},其中 key 可以是嵌套的对象属性。
@@ -6,15 +6,23 @@ import nodeDatas from '../nodesData/index.js'
6
6
  export default function registerEt2l(lf, node) {
7
7
  // 是否显示
8
8
  function hideHandle(item, data) {
9
- if (Object.keys(data).length == 0) return false
10
- if (typeof item.hideHandle === 'string') {
11
- const exp = eval(item.hideHandle.replace(/\$/g, 'data'))
12
- return exp
13
- } else if (typeof item.hideHandle === 'boolean') {
14
- return item.hideHandle
15
- }
16
- return false
17
- }
9
+ if (Object.keys(data).length === 0) return false;
10
+
11
+ if (typeof item.hideHandle === 'string') {
12
+ try {
13
+ const hideHandleFunc = new Function("data", `return ${item.hideHandle.replace(/\$/g, 'data')}`);
14
+ return hideHandleFunc(data);
15
+ } catch (error) {
16
+ console.error("遇到错误时返回默认值:", error);
17
+ return false; // 遇到错误时返回默认值
18
+ }
19
+ } else if (typeof item.hideHandle === 'boolean') {
20
+ return item.hideHandle;
21
+ }
22
+
23
+ return false;
24
+ }
25
+
18
26
  /**
19
27
  * 解析模板字符串,将其中的占位符替换为对应的数据值。
20
28
  * 占位符格式为 ${key},其中 key 可以是嵌套的对象属性。
@@ -39,37 +39,38 @@
39
39
  <!-- input -->
40
40
  <template v-if="item.component == 'input'">
41
41
  <template v-if="item?.options?.name">
42
- <el-input v-model="form[item.name][item.options.name]"
43
- :placeholder="item.options?.placeholder"
42
+ <el-input v-model="form[item.name][item?.options.name]"
43
+ :placeholder="item?.options?.placeholder"
44
44
  clearable
45
- :type="item.options.type"
46
- :disabled="item.options?.disabled"
47
- :maxlength="item.options.maxlength"
45
+ :type="item?.options.type"
46
+ :disabled="item?.options?.disabled"
47
+ :autocomplete="item?.options?.autocomplete || 'off'"
48
+ :maxlength="item?.options.maxlength"
48
49
  show-word-limit>
49
- <template v-if="item.options.prepend"
50
- #prepend>{{ item.options.prepend }}</template>
51
- <template v-if="item.options.append"
52
- #append>{{ item.options.append }}</template>
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>
53
54
  </el-input>
54
55
  </template>
55
56
  <template v-else>
56
57
  <el-input v-model="form[item.name]"
57
- :placeholder="item.options?.placeholder"
58
+ :placeholder="item?.options?.placeholder"
58
59
  clearable
59
- :type="item.options.type"
60
- :disabled="item.options?.disabled"
61
- :maxlength="item.options.maxlength"
60
+ :type="item?.options.type"
61
+ :disabled="item?.options?.disabled"
62
+ :maxlength="item?.options.maxlength"
62
63
  show-word-limit>
63
- <template v-if="item.options.prepend"
64
- #prepend>{{ item.options.prepend }}</template>
65
- <template v-if="item.options.append"
66
- #append>{{ item.options.append }}</template>
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>
67
68
  </el-input>
68
69
  </template>
69
70
  </template>
70
71
  <!-- upload -->
71
72
  <template v-else-if="item.component == 'upload'">
72
- <template v-for="(_item, _index) in item.options.items"
73
+ <template v-for="(_item, _index) in item?.options.items"
73
74
  :key="_index">
74
75
  <template v-if="item.name">
75
76
  <div style="margin-right: 5px;">
@@ -109,20 +110,20 @@
109
110
  <template v-if="item.name">
110
111
  <el-checkbox v-model="form[item.name][_item.name]"
111
112
  :label="_item.label"
112
- v-for="(_item, _index) in item.options.items"
113
+ v-for="(_item, _index) in item?.options.items"
113
114
  :key="_index"></el-checkbox>
114
115
  </template>
115
116
  <template v-else>
116
117
  <el-checkbox v-model="form[_item.name]"
117
118
  :label="_item.label"
118
- v-for="(_item, _index) in item.options.items"
119
+ v-for="(_item, _index) in item?.options.items"
119
120
  :key="_index"></el-checkbox>
120
121
  </template>
121
122
  </template>
122
123
  <!-- checkboxGroup -->
123
124
  <template v-else-if="item.component == 'checkboxGroup'">
124
125
  <el-checkbox-group v-model="form[item.name]">
125
- <el-checkbox v-for="_item in item.options.items"
126
+ <el-checkbox v-for="_item in item?.options.items"
126
127
  :key="_item.value"
127
128
  :label="_item.value">{{ _item.label }}</el-checkbox>
128
129
  </el-checkbox-group>
@@ -131,31 +132,31 @@
131
132
  <!-- switch -->
132
133
  <template v-else-if="item.component == 'switch'">
133
134
  <template v-if="item?.options?.name">
134
- <el-switch v-model="form[item.name][item.options.name]"
135
+ <el-switch v-model="form[item.name][item?.options.name]"
135
136
  inline-prompt
136
- :active-text="item.options?.activeText"
137
- :inactive-text="item.options?.inactiveText" />
137
+ :active-text="item?.options?.activeText"
138
+ :inactive-text="item?.options?.inactiveText" />
138
139
  </template>
139
140
  <template v-else>
140
141
  <el-switch v-model="form[item.name]"
141
142
  inline-prompt
142
- :active-text="item.options?.activeText"
143
- :inactive-text="item.options?.inactiveText" />
143
+ :active-text="item?.options?.activeText"
144
+ :inactive-text="item?.options?.inactiveText" />
144
145
  </template>
145
146
  </template>
146
147
  <!-- select -->
147
148
  <template v-else-if="item.component == 'select'">
148
149
  <template v-if="item?.options?.name">
149
- <el-select v-model="form[item.name][item.options.name]"
150
- :multiple="item.options?.multiple"
151
- :allow-create="item.options?.allowCreate"
150
+ <el-select v-model="form[item.name][item?.options.name]"
151
+ :multiple="item?.options?.multiple"
152
+ :allow-create="item?.options?.allowCreate"
152
153
  default-first-option
153
- :placeholder="item.options?.placeholder || ''"
154
- :clearable="item.options?.clearable"
155
- :disabled="item.options?.disabled"
154
+ :placeholder="item?.options?.placeholder || ''"
155
+ :clearable="item?.options?.clearable"
156
+ :disabled="item?.options?.disabled"
156
157
  filterable
157
158
  style="width: 100%;">
158
- <el-option v-for="option in item.options.items"
159
+ <el-option v-for="option in item?.options.items"
159
160
  :key="option.value"
160
161
  :label="option.label"
161
162
  :value="option.value"></el-option>
@@ -163,15 +164,15 @@
163
164
  </template>
164
165
  <template v-else>
165
166
  <el-select v-model="form[item.name]"
166
- :multiple="item.options?.multiple"
167
- :allow-create="item.options?.allowCreate"
167
+ :multiple="item?.options?.multiple"
168
+ :allow-create="item?.options?.allowCreate"
168
169
  default-first-option
169
- :placeholder="item.options?.placeholder || ''"
170
- :clearable="item.options?.clearable"
171
- :disabled="item.options?.disabled"
170
+ :placeholder="item?.options?.placeholder || ''"
171
+ :clearable="item?.options?.clearable"
172
+ :disabled="item?.options?.disabled"
172
173
  filterable
173
174
  style="width: 100%;">
174
- <el-option v-for="option in item.options.items"
175
+ <el-option v-for="option in item?.options.items"
175
176
  :key="option.value"
176
177
  :label="option.label"
177
178
  :value="option.value"></el-option>
@@ -182,15 +183,15 @@
182
183
  <!-- cascader -->
183
184
  <template v-else-if="item.component == 'cascader'">
184
185
  <template v-if="item?.options?.name">
185
- <el-cascader v-model="form[item.name][item.options.name]"
186
+ <el-cascader v-model="form[item.name][item?.options.name]"
186
187
  style="width: 100%;"
187
- :options="item.options.items"
188
+ :options="item?.options.items"
188
189
  clearable></el-cascader>
189
190
  </template>
190
191
  <template v-else>
191
192
  <el-cascader v-model="form[item.name]"
192
193
  style="width: 100%;"
193
- :options="item.options.items"
194
+ :options="item?.options.items"
194
195
  clearable></el-cascader>
195
196
  </template>
196
197
 
@@ -198,40 +199,40 @@
198
199
  <!-- date -->
199
200
  <template v-else-if="item.component == 'date'">
200
201
  <template v-if="item?.options?.name">
201
- <el-date-picker v-model="form[item.name][item.options.name]"
202
+ <el-date-picker v-model="form[item.name][item?.options.name]"
202
203
  style="width: 100%;"
203
- :type="item.options.type"
204
- :start-placeholder="item.options.startPlaceholder"
205
- :end-placeholder="item.options.endPlaceholder"
206
- :shortcuts="item.options.shortcuts"
207
- :disabled-date="item.options?.disabledDate"
208
- :default-time="item.options.defaultTime"
209
- :disabled="item.options?.disabled"
210
- :value-format="item.options.valueFormat"
211
- :format="item.options.format"
212
- :placeholder="item.options.placeholder || '请选择'"></el-date-picker>
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>
213
214
  </template>
214
215
  <template v-else>
215
216
  <el-date-picker v-model="form[item.name]"
216
217
  style="width: 100%;"
217
- :type="item.options.type"
218
- :start-placeholder="item.options.startPlaceholder"
219
- :end-placeholder="item.options.endPlaceholder"
220
- :shortcuts="item.options.shortcuts"
221
- :disabled-date="item.options?.disabledDate"
222
- :default-time="item.options.defaultTime"
223
- :disabled="item.options?.disabled"
224
- :value-format="item.options.valueFormat"
225
- :format="item.options.format"
226
- :placeholder="item.options.placeholder || '请选择'"></el-date-picker>
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>
227
228
  </template>
228
229
 
229
230
  </template>
230
231
  <!-- number -->
231
232
  <template v-else-if="item.component == 'number'">
232
233
  <template v-if="item?.options?.name">
233
- <el-input-number v-model="form[item.name][item.options.name]"
234
- :disabled="item.options?.disabled"
234
+ <el-input-number v-model="form[item.name][item?.options.name]"
235
+ :disabled="item?.options?.disabled"
235
236
  :min="item?.options?.min"
236
237
  :max="item?.options?.max"
237
238
  :step="item?.options?.step || 1"
@@ -240,13 +241,13 @@
240
241
  :controls-position="item?.options?.controlsPosition || 'right'">
241
242
  <template v-if="item?.options?.suffix"
242
243
  #suffix>
243
- <span>{{ item.options.suffix }}</span>
244
+ <span>{{ item?.options.suffix }}</span>
244
245
  </template>
245
246
  </el-input-number>
246
247
  </template>
247
248
  <template v-else>
248
249
  <el-input-number v-model="form[item.name]"
249
- :disabled="item.options?.disabled"
250
+ :disabled="item?.options?.disabled"
250
251
  :min="item?.options?.min"
251
252
  :max="item?.options?.max"
252
253
  :step="item?.options?.step || 1"
@@ -255,7 +256,7 @@
255
256
  :controls-position="item?.options?.controlsPosition || 'right'">
256
257
  <template v-if="item?.options?.suffix"
257
258
  #suffix>
258
- <span>{{ item.options.suffix }}</span>
259
+ <span>{{ item?.options.suffix }}</span>
259
260
  </template>
260
261
  </el-input-number>
261
262
  </template>
@@ -264,17 +265,17 @@
264
265
  <!-- radio -->
265
266
  <template v-else-if="item.component == 'radio'">
266
267
  <template v-if="item?.options?.name">
267
- <el-radio-group v-model="form[item.name][item.options.name]"
268
- :disabled="item.options?.disabled">
269
- <el-radio v-for="_item in item.options.items"
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"
270
271
  :key="_item.value"
271
272
  :value="_item.value">{{ _item.label }}</el-radio>
272
273
  </el-radio-group>
273
274
  </template>
274
275
  <template v-else>
275
276
  <el-radio-group v-model="form[item.name]"
276
- :disabled="item.options?.disabled">
277
- <el-radio v-for="_item in item.options.items"
277
+ :disabled="item?.options?.disabled">
278
+ <el-radio v-for="_item in item?.options.items"
278
279
  :key="_item.value"
279
280
  :value="_item.value">{{ _item.label }}</el-radio>
280
281
  </el-radio-group>
@@ -284,7 +285,8 @@
284
285
  <!-- color -->
285
286
  <template v-else-if="item.component == 'color'">
286
287
  <template v-if="item?.options?.name">
287
- <el-color-picker v-model="form[item.name][item.options.name]" />
288
+ <el-color-picker
289
+ v-model="form[item.name][item?.options.name]" />
288
290
  </template>
289
291
  <template v-else>
290
292
  <el-color-picker v-model="form[item.name]" />
@@ -295,7 +297,7 @@
295
297
  <template v-else-if="item.component == 'rate'">
296
298
  <template v-if="item?.options?.name">
297
299
  <el-rate style="margin-top: 6px;"
298
- v-model="form[item.name][item.options.name]"></el-rate>
300
+ v-model="form[item.name][item?.options.name]"></el-rate>
299
301
  </template>
300
302
  <template v-else>
301
303
  <el-rate style="margin-top: 6px;"
@@ -306,12 +308,12 @@
306
308
  <!-- slider -->
307
309
  <template v-else-if="item.component == 'slider'">
308
310
  <template v-if="item?.options?.name">
309
- <el-slider v-model="form[item.name][item.options.name]"
310
- :marks="item.options.marks"></el-slider>
311
+ <el-slider v-model="form[item.name][item?.options.name]"
312
+ :marks="item?.options.marks"></el-slider>
311
313
  </template>
312
314
  <template v-else>
313
315
  <el-slider v-model="form[item.name]"
314
- :marks="item.options.marks"></el-slider>
316
+ :marks="item?.options.marks"></el-slider>
315
317
  </template>
316
318
 
317
319
  </template>
@@ -324,7 +326,7 @@
324
326
  :key="tag"
325
327
  closable
326
328
  :disable-transitions="false"
327
- @close="tagClose(tag, form[item.name][item.options.name])">
329
+ @close="tagClose(tag, form[item.name][item?.options.name])">
328
330
  {{ tag }}
329
331
  </el-tag>
330
332
 
@@ -458,7 +460,7 @@ export default {
458
460
  return Object.keys(this.config).length > 0
459
461
  },
460
462
  hasValue() {
461
- return Object.keys(this.modelValue).length > 0
463
+ return Object.keys(this.modelValue).length > 0
462
464
  },
463
465
 
464
466
  },
@@ -481,12 +483,12 @@ export default {
481
483
  if (item.component == 'checkbox' || item.component == 'upload') {
482
484
  if (item.name) {
483
485
  const value = {}
484
- item.options.items.forEach((option) => {
486
+ item?.options.items.forEach((option) => {
485
487
  value[option.name] = option.value
486
488
  })
487
489
  this.form[item.name] = value
488
490
  } else if (item?.options?.items) {
489
- item.options.items.forEach((option) => {
491
+ item?.options.items.forEach((option) => {
490
492
  this.form[option.name] = option.value
491
493
  })
492
494
  }
@@ -538,23 +540,29 @@ export default {
538
540
  //处理动态隐藏
539
541
  hideHandle(item) {
540
542
  if (typeof item.hideHandle === 'string') {
541
- // eslint-disable-next-line no-eval
542
- const exp = eval(item.hideHandle.replace(/\$/g, "this.form"))
543
- return exp
543
+ const func = new Function('form', `return ${item?.hideHandle.replace(/\$/g, "form")}`);
544
+ return func(this.form);
544
545
  } else if (typeof item.hideHandle === 'boolean') {
545
546
  return item.hideHandle
546
547
  }
547
548
  return false
548
549
  },
549
- //处理动态必填
550
+ // 处理动态必填
550
551
  rulesHandle(item) {
551
552
  if (item.requiredHandle) {
552
- // eslint-disable-next-line no-eval
553
- const exp = eval(item.requiredHandle.replace(/\$/g, "this.form"))
554
- var requiredRule = item.rules.find(t => 'required' in t)
555
- requiredRule.required = exp
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
+ }
556
564
  }
557
- return item.rules
565
+ return item.rules;
558
566
  },
559
567
  //数据验证
560
568
  validate(valid, obj) {
@@ -579,8 +587,8 @@ export default {
579
587
  if (this.tagValue) {
580
588
  if (item?.options?.name) {
581
589
  row[item.name] = row[item.name] || {};
582
- row[item.name][item.options.name] = row[item.name][item.options.name] || [];
583
- row[item.name][item.options.name].push(this.tagValue)
590
+ row[item.name][item?.options.name] = row[item.name][item?.options.name] || [];
591
+ row[item.name][item?.options.name].push(this.tagValue)
584
592
  } else {
585
593
  row[item.name] = row[item.name] || []
586
594
  row[item.name].push(this.tagValue)
@@ -593,13 +601,13 @@ export default {
593
601
  getPropName(item) {
594
602
  if (item.component == 'checkbox' || item.component == 'upload') {
595
603
  if (item.name) {
596
- return `${item.name}.${item.options.items[0].name}`
604
+ return `${item.name}.${item?.options.items[0].name}`
597
605
  } else {
598
- return item.options.items[0].name
606
+ return item?.options.items[0].name
599
607
  }
600
608
 
601
609
  } else {
602
- return item?.options?.name ? `${item.name}.${item.options.name}` : item.name
610
+ return item?.options?.name ? `${item.name}.${item?.options.name}` : item.name
603
611
  }
604
612
  }
605
613
  }