@kp-ui/lowcode-pc 1.0.0-alpha.12 → 1.0.0-alpha.13

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 (47) hide show
  1. package/assets/styles/style.css +22 -18
  2. package/core/src/components/common/render/useFormContext.js +3 -2
  3. package/core/src/components/common/render/useFormContext.js.map +1 -1
  4. package/core/src/hooks/useDataHttp.js +3 -3
  5. package/core/src/hooks/useDataHttp.js.map +1 -1
  6. package/core/src/hooks/useField.js +94 -77
  7. package/core/src/hooks/useField.js.map +1 -1
  8. package/core/src/lang/zh-CN.js +1 -1
  9. package/core/src/lang/zh-CN.js.map +1 -1
  10. package/package.json +1 -1
  11. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue.js +1 -1
  12. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js.map +1 -1
  13. package/src/components/desginer/widget-panel/advanced/data-table.js +1 -0
  14. package/src/components/desginer/widget-panel/advanced/data-table.js.map +1 -1
  15. package/src/components/field-widget/bpmn-editor-widget.vue.js +1 -1
  16. package/src/components/field-widget/bpmn-editor-widget.vue2.js +1 -1
  17. package/src/components/field-widget/bpmn-editor-widget.vue2.js.map +1 -1
  18. package/src/components/field-widget/button-list-widget.vue.js +1 -1
  19. package/src/components/field-widget/button-list-widget.vue2.js +1 -1
  20. package/src/components/field-widget/button-list-widget.vue2.js.map +1 -1
  21. package/src/components/field-widget/code-editor-widget.vue.js +1 -1
  22. package/src/components/field-widget/code-editor-widget.vue2.js +1 -1
  23. package/src/components/field-widget/code-editor-widget.vue2.js.map +1 -1
  24. package/src/components/field-widget/divider-widget.vue2.js +1 -1
  25. package/src/components/field-widget/divider-widget.vue2.js.map +1 -1
  26. package/src/components/field-widget/diy-compontent-widget.vue2.js +1 -1
  27. package/src/components/field-widget/diy-compontent-widget.vue2.js.map +1 -1
  28. package/src/components/field-widget/dropdown-widget.vue.js +1 -1
  29. package/src/components/field-widget/dropdown-widget.vue2.js +1 -1
  30. package/src/components/field-widget/dropdown-widget.vue2.js.map +1 -1
  31. package/src/components/field-widget/form-item-wrapper.vue.js +1 -1
  32. package/src/components/field-widget/form-item-wrapper.vue2.js.map +1 -1
  33. package/src/components/field-widget/number-widget.vue2.js +1 -1
  34. package/src/components/field-widget/number-widget.vue2.js.map +1 -1
  35. package/src/components/field-widget/rich-editor-widget.vue.js +1 -1
  36. package/src/components/field-widget/rich-editor-widget.vue2.js +1 -1
  37. package/src/components/field-widget/rich-editor-widget.vue2.js.map +1 -1
  38. package/src/components/field-widget/textarea-widget.vue.js +1 -1
  39. package/src/components/field-widget/textarea-widget.vue2.js +1 -1
  40. package/src/components/field-widget/textarea-widget.vue2.js.map +1 -1
  41. package/src/components/field-widget/treeSelect-widget.vue2.js +1 -1
  42. package/src/components/field-widget/treeSelect-widget.vue2.js.map +1 -1
  43. package/src/components/field-widget/vue-render-widget.vue2.js +1 -1
  44. package/src/components/field-widget/vue-render-widget.vue2.js.map +1 -1
  45. package/stats.html +1 -1
  46. package/src/components/field-widget/useField.js +0 -578
  47. package/src/components/field-widget/useField.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { inject, ref, getCurrentInstance, computed, toRaw, onMounted, onBeforeUnmount } from "vue";
2
- import FormValidators from "../utils/validators.js";
3
- import { get, eq, isArray, cloneDeep } from "lodash-es";
2
+ import { get, eq, isArray } from "lodash-es";
4
3
  import { useExecFunction } from "tmgc2-share";
4
+ import FormValidators from "../utils/validators.js";
5
5
  import { useAppRef } from "./useAppRef.js";
6
6
  import { useEmitter } from "../utils/useEmitter.js";
7
7
  import { useI18n } from "../utils/i18n.js";
@@ -16,7 +16,7 @@ function useField(props, isInitModelValue = true) {
16
16
  const { registerToRefList, getWidgetRef, getFormRef, unregisterFromRefList } = useAppRef();
17
17
  const { executeFunction, asyncExecuteFunction } = useExecFunction();
18
18
  const { i18nt, i18n2t } = useI18n();
19
- const field = props.field;
19
+ const { field } = props;
20
20
  const fieldEditor = ref(null);
21
21
  const oldFieldValue = ref(null);
22
22
  const fieldReadonlyFlag = ref(false);
@@ -28,8 +28,8 @@ function useField(props, isInitModelValue = true) {
28
28
  const { dispatch } = useEmitter();
29
29
  const size = computed(() => {
30
30
  var _a;
31
- if ((_a = options.value) == null ? void 0 : _a.size) {
32
- return options.value.size;
31
+ if ((_a = field == null ? void 0 : field.options) == null ? void 0 : _a.size) {
32
+ return field.options.size;
33
33
  }
34
34
  return formConfig.value.size || "middle";
35
35
  });
@@ -38,7 +38,7 @@ function useField(props, isInitModelValue = true) {
38
38
  });
39
39
  const fieldModel = computed({
40
40
  get() {
41
- return get((formModel == null ? void 0 : formModel.value) || {}, getPropName.value);
41
+ return get(formModel.value, getPropName.value);
42
42
  },
43
43
  set(value) {
44
44
  syncUpdateFormModel(value);
@@ -52,7 +52,7 @@ function useField(props, isInitModelValue = true) {
52
52
  if (designState) {
53
53
  return false;
54
54
  }
55
- const { onHidden, hidden } = options.value;
55
+ const { onHidden, hidden } = props.field.options;
56
56
  if (hidden) return true;
57
57
  if (onHidden) {
58
58
  try {
@@ -71,7 +71,10 @@ function useField(props, isInitModelValue = true) {
71
71
  return false;
72
72
  });
73
73
  const handleDisabled = computed(() => {
74
- const { onDisabled, disabled } = options.value;
74
+ if (designState) {
75
+ return false;
76
+ }
77
+ const { onDisabled, disabled } = props.field.options;
75
78
  if (disabled) return true;
76
79
  if (onDisabled) {
77
80
  try {
@@ -104,18 +107,18 @@ function useField(props, isInitModelValue = true) {
104
107
  };
105
108
  const getPropName = computed(() => {
106
109
  if (isSubFormField && !designState) {
107
- return subFormName.value + "." + props.subFormRowIndex + "." + options.value.name;
110
+ return subFormName.value + "." + props.subFormRowIndex + "." + props.field.options.name;
108
111
  } else {
109
- return options.value.name;
112
+ return props.field.options.name;
110
113
  }
111
114
  });
112
115
  async function handleOnCreated() {
113
116
  if (designState) {
114
117
  return;
115
118
  }
116
- if (options.value.onCreated) {
119
+ if (props.field.options.onCreated) {
117
120
  await asyncExecuteFunction({
118
- functionBody: options.value.onCreated
121
+ functionBody: props.field.options.onCreated
119
122
  });
120
123
  }
121
124
  }
@@ -123,59 +126,59 @@ function useField(props, isInitModelValue = true) {
123
126
  if (designState) {
124
127
  return;
125
128
  }
126
- if (options.value.onMounted) {
129
+ if (props.field.options.onMounted) {
127
130
  await asyncExecuteFunction({
128
- functionBody: options.value.onMounted
131
+ functionBody: props.field.options.onMounted
129
132
  });
130
133
  }
131
134
  }
132
135
  const refreshDefaultValue = () => {
133
- fieldModel.value = options.value.defaultValue;
136
+ fieldModel.value = props.field.options.defaultValue;
134
137
  };
135
138
  const clearFieldRules = () => {
136
- if (!field.formItemFlag) {
139
+ if (!props.field.formItemFlag) {
137
140
  return;
138
141
  }
139
142
  rules.value.splice(0, rules.value.length);
140
143
  };
141
144
  const buildFieldRules = () => {
142
- if (!field.formItemFlag || options.value.hidden) {
145
+ if (!(props == null ? void 0 : props.field.formItemFlag) || (props == null ? void 0 : props.field.options.hidden)) {
143
146
  return;
144
147
  }
145
148
  rules.value.splice(0, rules.value.length);
146
- if (options.value.required) {
149
+ if (props.field.options.required) {
147
150
  rules.value.push({
148
151
  required: true,
149
152
  // trigger: ['blur', 'change'],
150
153
  trigger: [
151
154
  "blur"
152
155
  ],
153
- message: options.value.requiredHint || i18nt("render.hint.fieldRequired")
156
+ message: props.field.options.requiredHint || i18nt("render.hint.fieldRequired")
154
157
  });
155
158
  }
156
- if (options.value.validation) {
157
- const vldName = options.value.validation;
159
+ if (props.field.options.validation) {
160
+ const vldName = props.field.options.validation;
158
161
  if (FormValidators[vldName]) {
159
162
  rules.value.push({
160
163
  validator: FormValidators[vldName],
161
164
  trigger: ["blur", "change"],
162
- label: options.value.label,
163
- errorMsg: options.value.validationHint
165
+ label: props.field.options.label,
166
+ errorMsg: props.field.options.validationHint
164
167
  });
165
168
  } else {
166
169
  rules.value.push({
167
170
  validator: FormValidators["regExp"],
168
171
  trigger: ["blur", "change"],
169
172
  regExp: vldName,
170
- label: options.value.label,
171
- errorMsg: options.value.validationHint
173
+ label: props.field.options.label,
174
+ errorMsg: props.field.options.validationHint
172
175
  });
173
176
  }
174
177
  }
175
- if (options.value.onValidate) {
178
+ if (props.field.options.onValidate) {
176
179
  const customFn = (rule, value) => {
177
180
  return executeFunction({
178
- functionBody: options.value.onValidate,
181
+ functionBody: props.field.options.onValidate,
179
182
  params: { rule, value },
180
183
  keys: ["rule", "value"]
181
184
  });
@@ -183,7 +186,7 @@ function useField(props, isInitModelValue = true) {
183
186
  rules.value.push({
184
187
  validator: customFn,
185
188
  trigger: ["blur"],
186
- label: options.value.label
189
+ label: props.field.options.label
187
190
  });
188
191
  }
189
192
  };
@@ -232,7 +235,7 @@ function useField(props, isInitModelValue = true) {
232
235
  }
233
236
  if (!instance) return;
234
237
  dispatch("VFormRender", "fieldChange", [
235
- options.value.name,
238
+ props.field.options.name,
236
239
  newValue,
237
240
  oldValue,
238
241
  subFormName.value,
@@ -262,10 +265,10 @@ function useField(props, isInitModelValue = true) {
262
265
  if (designState) {
263
266
  return;
264
267
  }
265
- oldFieldValue.value = cloneDeep(fieldModel.value);
266
- if (options.value.onFocus) {
268
+ oldFieldValue.value = deepClone(fieldModel.value);
269
+ if (props.field.options.onFocus) {
267
270
  executeFunction({
268
- functionBody: options.value.onFocus,
271
+ functionBody: props.field.options.onFocus,
269
272
  params: { event },
270
273
  keys: ["event"]
271
274
  });
@@ -275,9 +278,9 @@ function useField(props, isInitModelValue = true) {
275
278
  if (designState) {
276
279
  return;
277
280
  }
278
- if (options.value.onBlur) {
281
+ if (props.field.options.onBlur) {
279
282
  executeFunction({
280
- functionBody: options.value.onBlur,
283
+ functionBody: props.field.options.onBlur,
281
284
  params: { event },
282
285
  keys: ["event"]
283
286
  });
@@ -287,21 +290,9 @@ function useField(props, isInitModelValue = true) {
287
290
  if (designState) {
288
291
  return;
289
292
  }
290
- if (options.value.onAppendButtonClick) {
293
+ if (props.field.options.onAppendButtonClick) {
291
294
  executeFunction({
292
- functionBody: options.value.onAppendButtonClick
293
- });
294
- }
295
- };
296
- const executeWidgetEventFunction = async (eventName, params) => {
297
- if (designState) {
298
- return;
299
- }
300
- if (options.value[eventName]) {
301
- await asyncExecuteFunction({
302
- functionBody: options.value[eventName],
303
- params: { params },
304
- keys: ["params"]
295
+ functionBody: props.field.options.onAppendButtonClick
305
296
  });
306
297
  }
307
298
  };
@@ -309,9 +300,9 @@ function useField(props, isInitModelValue = true) {
309
300
  if (designState) {
310
301
  return;
311
302
  }
312
- if (options.value.onChange) {
303
+ if (props.field.options.onChange) {
313
304
  executeFunction({
314
- functionBody: options.value.onChange,
305
+ functionBody: props.field.options.onChange,
315
306
  params: {
316
307
  value: val,
317
308
  oldValue: oldVal,
@@ -322,8 +313,28 @@ function useField(props, isInitModelValue = true) {
322
313
  });
323
314
  }
324
315
  };
316
+ const onClick = async () => {
317
+ if (designState) {
318
+ return;
319
+ }
320
+ if (props.field.options.onClick) {
321
+ return await asyncExecuteFunction({
322
+ functionBody: props.field.options.onClick
323
+ });
324
+ }
325
+ };
325
326
  const handleClickIcon = async () => {
326
- await executeWidgetEventFunction("onClickIcon", {});
327
+ if (designState) {
328
+ return;
329
+ }
330
+ if (handleDisabled.value) {
331
+ return;
332
+ }
333
+ if (field.options.onClickIcon) {
334
+ await asyncExecuteFunction({
335
+ functionBody: field.options.onClickIcon
336
+ });
337
+ }
327
338
  };
328
339
  const getFieldEditor = () => {
329
340
  return fieldEditor.value;
@@ -346,9 +357,9 @@ function useField(props, isInitModelValue = true) {
346
357
  }
347
358
  if (eq(fieldModel.value, newValue)) return;
348
359
  const oldValue = deepClone(fieldModel.value);
349
- if (field.type === "file-upload") {
360
+ if (props.field.type === "file-upload") {
350
361
  newValue = showFileList(newValue || []);
351
- } else if (field.type === "code-editor") {
362
+ } else if (props.field.type === "code-editor") {
352
363
  const fieldEditor2 = getFieldEditor();
353
364
  if (fieldEditor2) {
354
365
  fieldEditor2.setValue(newValue);
@@ -363,26 +374,26 @@ function useField(props, isInitModelValue = true) {
363
374
  return fieldModel.value;
364
375
  };
365
376
  const resetField = () => {
366
- const defaultValue = options.value.defaultValue;
377
+ const defaultValue = props.field.options.defaultValue;
367
378
  setValue(defaultValue);
368
- if (field.type === "picture-upload" || field.type === "file-upload") {
379
+ if (props.field.type === "picture-upload" || props.field.type === "file-upload") {
369
380
  fieldModel.value.splice(0, fieldModel.value.length);
370
381
  }
371
382
  };
372
383
  const setReadonly = (flag) => {
373
- options.value.readonly = flag;
384
+ props.field.options.readonly = flag;
374
385
  };
375
386
  const setDisabled = (flag) => {
376
- options.value.disabled = flag;
387
+ props.field.options.disabled = flag;
377
388
  };
378
389
  const setAppendButtonVisible = (flag) => {
379
- options.value.appendButton = flag;
390
+ props.field.options.appendButton = flag;
380
391
  };
381
392
  const setAppendButtonDisabled = (flag) => {
382
- options.value.appendButtonDisabled = flag;
393
+ props.field.options.appendButtonDisabled = flag;
383
394
  };
384
395
  const setHidden = (flag) => {
385
- options.value.hidden = flag;
396
+ props.field.options.hidden = flag;
386
397
  if (flag) {
387
398
  clearFieldRules();
388
399
  } else {
@@ -390,7 +401,7 @@ function useField(props, isInitModelValue = true) {
390
401
  }
391
402
  };
392
403
  const setRequired = (flag) => {
393
- options.value.required = flag;
404
+ props.field.options.required = flag;
394
405
  buildFieldRules();
395
406
  if (!designState && !flag) {
396
407
  clearValidate();
@@ -403,10 +414,10 @@ function useField(props, isInitModelValue = true) {
403
414
  getFormRef().clearValidate(getPropName.value);
404
415
  };
405
416
  const getVfCtx = () => {
406
- return getFormRef().vfCtx;
417
+ return getFormRef().vfCtx || {};
407
418
  };
408
419
  const setLabel = (newLabel) => {
409
- options.value.label = newLabel;
420
+ props.field.options.label = newLabel;
410
421
  };
411
422
  const focus = () => {
412
423
  const fieldEditor2 = getFieldEditor();
@@ -421,25 +432,25 @@ function useField(props, isInitModelValue = true) {
421
432
  fieldReadonlyFlag.value = readonlyFlag;
422
433
  };
423
434
  const addCssClass = (className) => {
424
- if (!options.value.customClass) {
425
- options.value.customClass = [className];
435
+ if (!props.field.options.customClass) {
436
+ props.field.options.customClass = [className];
426
437
  } else {
427
- options.value.customClass.push(className);
438
+ props.field.options.customClass.push(className);
428
439
  }
429
440
  };
430
- const customClass = computed(() => options.value.customClass);
441
+ const customClass = computed(() => props.field.options.customClass);
431
442
  const removeCssClass = (className) => {
432
- if (!options.value.customClass) {
443
+ if (!props.field.options.customClass) {
433
444
  return;
434
445
  }
435
446
  let foundIdx = -1;
436
- options.value.customClass.map((cc, idx) => {
447
+ props.field.options.customClass.map((cc, idx) => {
437
448
  if (cc === className) {
438
449
  foundIdx = idx;
439
450
  }
440
451
  });
441
452
  if (foundIdx > -1) {
442
- options.value.customClass.splice(foundIdx, 1);
453
+ props.field.options.customClass.splice(foundIdx, 1);
443
454
  }
444
455
  };
445
456
  const getEl = () => {
@@ -447,7 +458,7 @@ function useField(props, isInitModelValue = true) {
447
458
  return (_a = fieldEditor.value) == null ? void 0 : _a.$el;
448
459
  };
449
460
  const setWidgetOption = (optionName, optionValue) => {
450
- options.value[optionName] = optionValue;
461
+ props.field.options[optionName] = optionValue;
451
462
  };
452
463
  const options = computed({
453
464
  get() {
@@ -458,7 +469,7 @@ function useField(props, isInitModelValue = true) {
458
469
  }
459
470
  });
460
471
  const initFieldModel = () => {
461
- const defaultValue = typeof options.value.defaultValue === "undefined" ? "" : options.value.defaultValue;
472
+ const defaultValue = typeof props.field.options.defaultValue === "undefined" ? "" : props.field.options.defaultValue;
462
473
  dispatch("VFormRender", "fieldChange", {
463
474
  fieldName: getPropName.value,
464
475
  value: defaultValue,
@@ -478,13 +489,12 @@ function useField(props, isInitModelValue = true) {
478
489
  onBeforeUnmount(() => {
479
490
  unregisterFromRefList();
480
491
  });
481
- const widget = computed(() => props.field);
482
492
  const defineExposed = {
483
493
  i18nt,
484
494
  options,
485
495
  proxy: instance == null ? void 0 : instance.proxy,
486
496
  field,
487
- widget: widget.value,
497
+ widget: field,
488
498
  fieldModel,
489
499
  fieldEditor,
490
500
  isReadMode,
@@ -506,14 +516,16 @@ function useField(props, isInitModelValue = true) {
506
516
  removeCssClass,
507
517
  setRequired,
508
518
  clearValidate,
509
- focus,
510
- executeWidgetEventFunction
519
+ focus
511
520
  };
512
521
  return {
513
522
  asyncExecuteFunction,
514
523
  executeFunction,
524
+ options,
515
525
  customClass,
526
+ fieldEditor,
516
527
  // 状态
528
+ fieldModel,
517
529
  oldFieldValue,
518
530
  fieldReadonlyFlag,
519
531
  loading,
@@ -521,12 +533,15 @@ function useField(props, isInitModelValue = true) {
521
533
  uploadData,
522
534
  designState,
523
535
  customToolbar,
536
+ i18nt,
524
537
  i18n2t,
525
538
  size,
539
+ field,
526
540
  // 计算属性
527
541
  formConfig,
528
542
  subFormName,
529
543
  formModel,
544
+ isReadMode,
530
545
  // 方法
531
546
  handleHidden,
532
547
  handleDisabled,
@@ -545,13 +560,15 @@ function useField(props, isInitModelValue = true) {
545
560
  handleBlurCustomEvent,
546
561
  emitAppendButtonClick,
547
562
  handleOnChange,
563
+ onClick,
548
564
  handleClickIcon,
565
+ getFieldEditor,
549
566
  showFileList,
550
567
  setAppendButtonVisible,
551
568
  setAppendButtonDisabled,
569
+ focus,
552
570
  setUploadData,
553
571
  isSubFormField,
554
- ...defineExposed,
555
572
  defineExposed
556
573
  };
557
574
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useField.js","sources":["../../../../../core/src/hooks/useField.ts"],"sourcesContent":["import {\n ref,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n getCurrentInstance,\n Ref,\n toRaw,\n toRefs\n} from 'vue';\nimport FormValidators from '@kp-ui/lowcode-core/src/utils/validators';\nimport { isArray, eq, get, cloneDeep } from 'lodash-es';\nimport { deepClone, FormConfig, Widget } from '@kp-ui/lowcode-core';\nimport { useI18n } from '@kp-ui/lowcode-core';\nimport { useEmitter, useAppRef } from '@kp-ui/lowcode-core';\nimport { useExecFunction } from 'tmgc2-share';\n\nexport type FieldProps<T = Widget> = {\n widget: T;\n field: T;\n designer?: any;\n parentWidget?: Widget | null;\n parentList?: T[] | null;\n indexOfParentList?: number;\n subFormRowIndex?: number;\n subFormRowId?: string;\n subFormColIndex?: number;\n};\n\n/**\n * 表单字段 Hook,提供表单字段的通用功能\n * @returns 表单字段相关的状态和方法\n */\nexport function useField<T extends Widget>(props: FieldProps<T>, isInitModelValue = true) {\n // 注入依赖\n const formConfig = inject<Ref<FormConfig>>('formConfig', ref({} as FormConfig));\n const formModel = inject<Ref<any>>('formData', ref({}));\n const getReadMode = inject('getReadMode', () => false);\n const isSubFormField = inject('isSubFormField', false);\n\n const getSubFormName = inject('getSubFormName', () => '');\n const designState = inject('designState', false);\n\n const { registerToRefList, getWidgetRef, getFormRef, unregisterFromRefList } = useAppRef();\n const { executeFunction, asyncExecuteFunction } = useExecFunction();\n\n const { i18nt, i18n2t } = useI18n();\n const field = props.field;\n\n const fieldEditor = ref<InstanceType<any>>(null);\n // 状态\n const oldFieldValue = ref<any>(null);\n const fieldReadonlyFlag = ref<boolean>(false);\n const loading = ref<boolean>(false);\n const rules = ref<any[]>([]);\n const uploadData = ref<Record<string, any>>({});\n const customToolbar = ref<any>(null);\n const instance = getCurrentInstance();\n const { dispatch } = useEmitter();\n\n const size = computed(() => {\n if (options.value?.size) {\n return options.value.size;\n }\n return formConfig.value.size || 'middle';\n });\n\n const subFormName = computed(() => {\n return getSubFormName ? getSubFormName() : '';\n });\n\n const fieldModel = computed({\n get() {\n return get(formModel?.value || {}, getPropName.value);\n },\n set(value) {\n syncUpdateFormModel(value);\n }\n });\n\n const subFormData = computed(() => formModel.value[subFormName.value]);\n\n const isReadMode = computed(() => {\n return getReadMode() ? true : fieldReadonlyFlag.value;\n });\n\n /**\n * 处理字段隐藏逻辑\n * @returns 是否隐藏\n */\n const handleHidden = computed(() => {\n if (designState) {\n return false;\n }\n const { onHidden, hidden } = options.value;\n\n if (hidden) return true;\n if (onHidden) {\n try {\n const result = executeFunction({\n functionBody: onHidden\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch {\n return false;\n }\n }\n return false;\n });\n\n /**\n * 处理字段禁用逻辑\n * @returns 是否禁用\n */\n const handleDisabled = computed(() => {\n const { onDisabled, disabled } = options.value;\n if (disabled) return true;\n if (onDisabled) {\n try {\n const result = executeFunction({\n functionBody: onDisabled\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch (error) {\n console.log({ error });\n return false;\n }\n }\n return false;\n });\n\n /**\n * 在数组中查找元素\n * @param arrayObject 数组对象\n * @param element 要查找的元素\n * @returns 找到的索引,未找到返回-1\n */\n const findInArray = (arrayObject: any[], element: any) => {\n if (!Array.isArray(arrayObject)) {\n return -1;\n }\n\n let foundIdx = -1;\n arrayObject.forEach((aItem, aIdx) => {\n if (aItem === element) {\n foundIdx = aIdx;\n }\n });\n\n return foundIdx;\n };\n\n /**\n * 获取属性名称\n * @returns 属性名称\n */\n const getPropName = computed(() => {\n if (isSubFormField && !designState) {\n return subFormName.value + '.' + props.subFormRowIndex + '.' + options.value.name + '';\n } else {\n return options.value.name;\n }\n });\n\n /**\n * 处理组件创建事件\n */\n async function handleOnCreated() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onCreated) {\n await asyncExecuteFunction({\n functionBody: options.value.onCreated\n });\n }\n }\n\n /**\n * 处理组件挂载事件\n */\n async function handleOnMounted() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n if (options.value.onMounted) {\n await asyncExecuteFunction({\n functionBody: options.value.onMounted\n });\n }\n }\n\n /**\n * 刷新默认值\n */\n const refreshDefaultValue = () => {\n fieldModel.value = options.value.defaultValue;\n };\n\n /**\n * 清除字段规则\n */\n const clearFieldRules = () => {\n if (!field.formItemFlag) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n };\n\n /**\n * 构建字段规则\n */\n const buildFieldRules = () => {\n if (!field.formItemFlag || options.value.hidden) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n if (options.value.required) {\n rules.value.push({\n required: true,\n // trigger: ['blur', 'change'],\n trigger: [\n 'blur'\n ] /* 去掉change事件触发校验,change事件触发时formModel数据尚未更新,导致radio/checkbox必填校验出错!! */,\n message: options.value.requiredHint || i18nt('render.hint.fieldRequired')\n });\n }\n\n if (options.value.validation) {\n const vldName = options.value.validation;\n if (FormValidators[vldName]) {\n rules.value.push({\n validator: FormValidators[vldName],\n trigger: ['blur', 'change'],\n label: options.value.label,\n errorMsg: options.value.validationHint\n });\n } else {\n rules.value.push({\n validator: FormValidators['regExp'],\n trigger: ['blur', 'change'],\n regExp: vldName,\n label: options.value.label,\n errorMsg: options.value.validationHint\n });\n }\n }\n\n if (options.value.onValidate) {\n const customFn = (rule: any, value: any) => {\n return executeFunction({\n functionBody: options.value.onValidate,\n params: { rule, value },\n keys: ['rule', 'value']\n });\n };\n rules.value.push({\n validator: customFn,\n trigger: ['blur'],\n label: options.value.label\n });\n }\n };\n\n /**\n * 禁用字段值变动触发表单校验\n */\n const disableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.splice(0, rule.trigger.length);\n }\n });\n };\n\n /**\n * 启用字段值变动触发表单校验\n */\n const enableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.push('blur');\n rule.trigger.push('change');\n }\n });\n };\n\n /**\n * 禁用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const disableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = true;\n }\n });\n }\n };\n\n /**\n * 启用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const enableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = false;\n }\n });\n }\n };\n\n /**\n * 发送字段数据变更事件\n * @param newValue 新值\n * @param oldValue 旧值\n */\n const emitFieldDataChange = (newValue: any, oldValue: any) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n\n if (!instance) return;\n\n /* 必须用dispatch向指定父组件派发消息!! */\n dispatch('VFormRender', 'fieldChange', [\n options.value.name,\n newValue,\n oldValue,\n subFormName.value,\n props.subFormRowIndex\n ]);\n };\n\n /**\n * 同步更新表单模型\n * @param value 值\n */\n\n const syncUpdateFormModel = value => {\n if (designState) {\n dispatch('VFormDesigner', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n field: field\n });\n //设计状态不触发事件\n return;\n }\n /* 主动触发表单的单个字段校验,用于清除字段可能存在的校验错误提示 */\n dispatch('VFormRender', 'fieldValidation', [getPropName.value]);\n const oldValue = toRaw(fieldModel.value);\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n oldValue: oldValue,\n field: field\n });\n handleOnChange(value, oldValue);\n };\n\n /**\n * 处理焦点自定义事件\n * @param event 事件对象\n */\n const handleFocusCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n oldFieldValue.value = cloneDeep(fieldModel.value); // 保存修改change之前的值\n\n if (options.value.onFocus) {\n executeFunction({\n functionBody: options.value.onFocus,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 处理失焦自定义事件\n * @param event 事件对象\n */\n const handleBlurCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onBlur) {\n executeFunction({\n functionBody: options.value.onBlur,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 发送附加按钮点击事件\n */\n const emitAppendButtonClick = () => {\n if (designState) {\n // 设计状态不触发点击事件\n return;\n }\n\n if (options.value.onAppendButtonClick) {\n executeFunction({\n functionBody: options.value.onAppendButtonClick\n });\n }\n };\n\n const executeWidgetEventFunction = async (eventName: string, params: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value[eventName]) {\n await asyncExecuteFunction({\n functionBody: options.value[eventName],\n params: { params },\n keys: ['params']\n });\n }\n };\n\n /**\n * 处理变更事件\n * @param val 新值\n * @param oldVal 旧值\n * @param ops 选项\n */\n const handleOnChange = (val: any, oldVal: any) => {\n // 自定义onChange事件\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (options.value.onChange) {\n executeFunction({\n functionBody: options.value.onChange,\n params: {\n value: val,\n oldValue: oldVal,\n subFormData: subFormData.value,\n rowId: props.subFormRowId\n },\n keys: ['value', 'oldValue', 'subFormData', 'rowId']\n });\n }\n };\n\n /**\n * 处理图标点击事件\n */\n const handleClickIcon = async () => {\n // if (designState) {\n // // 设计状态不触发事件\n // return;\n // }\n // if (handleDisabled.value) {\n // return;\n // }\n // if (options.value.onClickIcon) {\n // await asyncExecuteFunction({\n // functionBody: options.value.onClickIcon\n // });\n // }\n await executeWidgetEventFunction('onClickIcon', {});\n };\n\n /**\n * 获取字段编辑器\n * @returns 字段编辑器\n */\n const getFieldEditor = () => {\n // 获取内置的el表单组件\n return fieldEditor.value;\n };\n\n /**\n * 显示文件列表\n * @param list 文件列表\n * @returns 格式化后的文件列表\n */\n const showFileList = (list: any) => {\n if (typeof list === 'string') {\n list = JSON.parse(list);\n }\n if (!isArray(list)) return [];\n const res = list.map((item: any, uid: number) => ({\n ...item,\n name: item.fileName,\n uid\n }));\n return res;\n };\n\n /**\n * 设置值\n * @param newValue 新值\n * @param disableChangeEvent 是否禁用变更事件\n */\n const setValue = (newValue: any, disableChangeEvent = false) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n if (eq(fieldModel.value, newValue)) return;\n\n const oldValue = deepClone(fieldModel.value);\n if (field.type === 'file-upload') {\n newValue = showFileList(newValue || []);\n // TODO\n } else if (field.type === 'code-editor') {\n const fieldEditor = getFieldEditor();\n if (fieldEditor) {\n fieldEditor.setValue(newValue);\n }\n }\n fieldModel.value = newValue;\n if (!disableChangeEvent) {\n emitFieldDataChange(newValue, oldValue);\n }\n };\n\n /**\n * 获取值\n * @returns 字段值\n */\n const getValue = () => {\n return fieldModel.value;\n };\n\n /**\n * 重置字段\n */\n const resetField = () => {\n const defaultValue = options.value.defaultValue;\n setValue(defaultValue);\n\n // 清空上传组件文件列表\n if (field.type === 'picture-upload' || field.type === 'file-upload') {\n fieldModel.value.splice(0, fieldModel.value.length);\n // handleChangeEvent(fieldModel.value);\n }\n };\n\n /**\n * 设置只读\n * @param flag 是否只读\n */\n const setReadonly = (flag: boolean) => {\n options.value.readonly = flag;\n };\n\n /**\n * 设置禁用\n * @param flag 是否禁用\n */\n const setDisabled = (flag: boolean) => {\n options.value.disabled = flag;\n };\n\n /**\n * 设置附加按钮可见性\n * @param flag 是否可见\n */\n const setAppendButtonVisible = (flag: boolean) => {\n options.value.appendButton = flag;\n };\n\n /**\n * 设置附加按钮禁用状态\n * @param flag 是否禁用\n */\n const setAppendButtonDisabled = (flag: boolean) => {\n options.value.appendButtonDisabled = flag;\n };\n\n /**\n * 设置隐藏\n * @param flag 是否隐藏\n */\n const setHidden = (flag: boolean) => {\n options.value.hidden = flag;\n\n if (flag) {\n // 清除组件校验规则\n clearFieldRules();\n } else {\n // 重建组件校验规则\n buildFieldRules();\n }\n };\n\n /**\n * 设置必填\n * @param flag 是否必填\n */\n const setRequired = (flag: boolean) => {\n options.value.required = flag;\n buildFieldRules();\n\n if (!designState && !flag) {\n // 清除必填校验提示\n clearValidate();\n }\n };\n\n /**\n * 清除字段校验提示\n */\n const clearValidate = () => {\n if (designState) {\n return;\n }\n\n getFormRef().clearValidate(getPropName.value);\n };\n\n /**\n * 获取VForm上下文\n * @returns VForm上下文\n */\n const getVfCtx = () => {\n return getFormRef().vfCtx;\n };\n\n /**\n * 设置标签\n * @param newLabel 新标签\n */\n const setLabel = (newLabel: string) => {\n options.value.label = newLabel;\n };\n\n /**\n * 聚焦\n */\n const focus = () => {\n const fieldEditor = getFieldEditor();\n if (fieldEditor && fieldEditor.focus) {\n fieldEditor.focus();\n }\n };\n\n /**\n * 设置上传数据\n * @param name 名称\n * @param value 值\n */\n const setUploadData = (name: string, value: any) => {\n uploadData.value[name] = value;\n };\n\n /**\n * 设置或取消设置字段只读查看模式\n * @param readonlyFlag 只读标志\n */\n const setReadMode = (readonlyFlag = true) => {\n fieldReadonlyFlag.value = readonlyFlag;\n };\n\n /**\n * 动态增加自定义css样式\n * @param className 类名\n */\n const addCssClass = (className: string) => {\n if (!options.value.customClass) {\n options.value.customClass = [className];\n } else {\n options.value.customClass.push(className);\n }\n };\n const customClass = computed(() => options.value.customClass);\n\n /**\n * 动态移除自定义css样式\n * @param className 类名\n */\n const removeCssClass = (className: string) => {\n if (!options.value.customClass) {\n return;\n }\n\n let foundIdx = -1;\n options.value.customClass.map((cc: string, idx: number) => {\n if (cc === className) {\n foundIdx = idx;\n }\n });\n if (foundIdx > -1) {\n options.value.customClass.splice(foundIdx, 1);\n }\n };\n\n const getEl = () => {\n return fieldEditor.value?.$el;\n };\n\n /**\n * 设置组件选项\n * @param optionName 选项名称\n * @param optionValue 选项值\n */\n const setWidgetOption = (optionName: string, optionValue: any) => {\n // 通用组件选项修改API\n options.value[optionName] = optionValue;\n };\n\n const options = computed({\n get() {\n return props.field.options;\n },\n set(value) {\n props.field.options = value;\n }\n });\n\n const initFieldModel = () => {\n const defaultValue =\n typeof options.value.defaultValue === 'undefined' ? '' : options.value.defaultValue;\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value: defaultValue,\n oldValue: toRaw(fieldModel.value),\n field: field\n });\n };\n\n // 生命周期钩子\n onMounted(async () => {\n if (isInitModelValue) {\n initFieldModel();\n }\n await registerToRefList();\n\n await handleOnCreated();\n\n await handleOnMounted();\n buildFieldRules();\n });\n\n onBeforeUnmount(() => {\n unregisterFromRefList();\n });\n\n const widget = computed(() => props.field);\n\n const defineExposed = {\n i18nt,\n options,\n proxy: instance?.proxy,\n field,\n widget: widget.value,\n fieldModel,\n fieldEditor,\n isReadMode,\n setWidgetOption,\n setReadonly,\n setDisabled,\n getVfCtx,\n setLabel,\n getEl,\n setReadMode,\n resetField,\n setValue,\n getValue,\n getFieldEditor,\n getFormRef,\n getWidgetRef,\n setHidden,\n addCssClass,\n removeCssClass,\n setRequired,\n clearValidate,\n focus,\n executeWidgetEventFunction\n };\n\n return {\n asyncExecuteFunction,\n executeFunction,\n customClass,\n // 状态\n oldFieldValue,\n fieldReadonlyFlag,\n loading,\n rules,\n uploadData,\n designState,\n customToolbar,\n i18n2t,\n size,\n // 计算属性\n formConfig,\n subFormName,\n\n formModel,\n\n // 方法\n handleHidden,\n handleDisabled,\n findInArray,\n getPropName,\n refreshDefaultValue,\n clearFieldRules,\n buildFieldRules,\n disableChangeValidate,\n enableChangeValidate,\n disableOptionOfList,\n enableOptionOfList,\n emitFieldDataChange,\n syncUpdateFormModel,\n handleFocusCustomEvent,\n handleBlurCustomEvent,\n emitAppendButtonClick,\n handleOnChange,\n handleClickIcon,\n showFileList,\n\n setAppendButtonVisible,\n setAppendButtonDisabled,\n\n setUploadData,\n\n isSubFormField,\n ...defineExposed,\n defineExposed\n };\n}\n"],"names":["fieldEditor"],"mappings":"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"}
1
+ {"version":3,"file":"useField.js","sources":["../../../../../core/src/hooks/useField.ts"],"sourcesContent":["import {\n ref,\n computed,\n inject,\n onMounted,\n onBeforeUnmount,\n getCurrentInstance,\n Ref,\n toRaw\n} from 'vue';\nimport { isArray, eq, get } from 'lodash-es';\nimport { FormConfig, FormValidators, Widget } from '@kp-ui/lowcode-core';\nimport { useEmitter, deepClone, useAppRef, useI18n } from '@kp-ui/lowcode-core';\nimport { useExecFunction } from 'tmgc2-share';\n\nexport type FieldProps<T = Widget> = {\n widget: T;\n field: T;\n designer?: any;\n parentWidget?: Widget | null;\n parentList?: T[] | null;\n indexOfParentList?: number;\n subFormRowIndex?: number;\n subFormRowId?: string;\n subFormColIndex?: number;\n};\n\n/**\n * 表单字段 Hook,提供表单字段的通用功能\n * @returns 表单字段相关的状态和方法\n */\nexport function useField<T extends Widget>(props: FieldProps<T>, isInitModelValue = true) {\n // 注入依赖\n const formConfig = inject<Ref<FormConfig>>('formConfig', ref({} as FormConfig));\n const formModel = inject<Ref<any>>('formData', ref({}));\n const getReadMode = inject('getReadMode', () => false);\n const isSubFormField = inject('isSubFormField', false);\n\n const getSubFormName = inject('getSubFormName', () => '');\n const designState = inject('designState', false);\n\n const { registerToRefList, getWidgetRef, getFormRef, unregisterFromRefList } = useAppRef();\n const { executeFunction, asyncExecuteFunction } = useExecFunction();\n\n const { i18nt, i18n2t } = useI18n();\n const { field } = props;\n\n const fieldEditor = ref<InstanceType<any>>(null);\n // 状态\n const oldFieldValue = ref<any>(null);\n const fieldReadonlyFlag = ref<boolean>(false);\n const loading = ref<boolean>(false);\n const rules = ref<any[]>([]);\n const uploadData = ref<Record<string, any>>({});\n const customToolbar = ref<any>(null);\n const instance = getCurrentInstance();\n const { dispatch } = useEmitter();\n\n const size = computed(() => {\n if (field?.options?.size) {\n return field.options.size;\n }\n return formConfig.value.size || 'middle';\n });\n\n const subFormName = computed(() => {\n return getSubFormName ? getSubFormName() : '';\n });\n\n const fieldModel = computed({\n get() {\n return get(formModel.value, getPropName.value);\n },\n set(value) {\n syncUpdateFormModel(value);\n }\n });\n\n const subFormData = computed(() => formModel.value[subFormName.value]);\n\n const isReadMode = computed(() => {\n return getReadMode() ? true : fieldReadonlyFlag.value;\n });\n\n /**\n * 处理字段隐藏逻辑\n * @returns 是否隐藏\n */\n const handleHidden = computed(() => {\n if (designState) {\n return false;\n }\n const { onHidden, hidden } = props.field.options;\n\n if (hidden) return true;\n if (onHidden) {\n try {\n const result = executeFunction({\n functionBody: onHidden\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch {\n return false;\n }\n }\n return false;\n });\n\n /**\n * 处理字段禁用逻辑\n * @returns 是否禁用\n */\n const handleDisabled = computed(() => {\n if (designState) {\n return false;\n }\n const { onDisabled, disabled } = props.field.options;\n if (disabled) return true;\n if (onDisabled) {\n try {\n const result = executeFunction({\n functionBody: onDisabled\n });\n if (typeof result === 'boolean') {\n return result;\n } else {\n return false;\n }\n } catch (error) {\n console.log({ error });\n return false;\n }\n }\n return false;\n });\n\n /**\n * 在数组中查找元素\n * @param arrayObject 数组对象\n * @param element 要查找的元素\n * @returns 找到的索引,未找到返回-1\n */\n const findInArray = (arrayObject: any[], element: any) => {\n if (!Array.isArray(arrayObject)) {\n return -1;\n }\n\n let foundIdx = -1;\n arrayObject.forEach((aItem, aIdx) => {\n if (aItem === element) {\n foundIdx = aIdx;\n }\n });\n\n return foundIdx;\n };\n\n /**\n * 获取属性名称\n * @returns 属性名称\n */\n const getPropName = computed(() => {\n if (isSubFormField && !designState) {\n return (\n subFormName.value +\n '.' +\n props.subFormRowIndex +\n '.' +\n props.field.options.name +\n ''\n );\n } else {\n return props.field.options.name;\n }\n });\n\n /**\n * 处理组件创建事件\n */\n async function handleOnCreated() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (props.field.options.onCreated) {\n await asyncExecuteFunction({\n functionBody: props.field.options.onCreated\n });\n }\n }\n\n /**\n * 处理组件挂载事件\n */\n async function handleOnMounted() {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n if (props.field.options.onMounted) {\n await asyncExecuteFunction({\n functionBody: props.field.options.onMounted\n });\n }\n }\n\n /**\n * 刷新默认值\n */\n const refreshDefaultValue = () => {\n fieldModel.value = props.field.options.defaultValue;\n };\n\n /**\n * 清除字段规则\n */\n const clearFieldRules = () => {\n if (!props.field.formItemFlag) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n };\n\n /**\n * 构建字段规则\n */\n const buildFieldRules = () => {\n if (!props?.field.formItemFlag || props?.field.options.hidden) {\n return;\n }\n\n rules.value.splice(0, rules.value.length); // 清空已有\n if (props.field.options.required) {\n rules.value.push({\n required: true,\n // trigger: ['blur', 'change'],\n trigger: [\n 'blur'\n ] /* 去掉change事件触发校验,change事件触发时formModel数据尚未更新,导致radio/checkbox必填校验出错!! */,\n message: props.field.options.requiredHint || i18nt('render.hint.fieldRequired')\n });\n }\n\n if (props.field.options.validation) {\n const vldName = props.field.options.validation;\n if (FormValidators[vldName]) {\n rules.value.push({\n validator: FormValidators[vldName],\n trigger: ['blur', 'change'],\n label: props.field.options.label,\n errorMsg: props.field.options.validationHint\n });\n } else {\n rules.value.push({\n validator: FormValidators['regExp'],\n trigger: ['blur', 'change'],\n regExp: vldName,\n label: props.field.options.label,\n errorMsg: props.field.options.validationHint\n });\n }\n }\n\n if (props.field.options.onValidate) {\n const customFn = (rule: any, value: any) => {\n return executeFunction({\n functionBody: props.field.options.onValidate,\n params: { rule, value },\n keys: ['rule', 'value']\n });\n };\n rules.value.push({\n validator: customFn,\n trigger: ['blur'],\n label: props.field.options.label\n });\n }\n };\n\n /**\n * 禁用字段值变动触发表单校验\n */\n const disableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.splice(0, rule.trigger.length);\n }\n });\n };\n\n /**\n * 启用字段值变动触发表单校验\n */\n const enableChangeValidate = () => {\n if (!rules.value) {\n return;\n }\n\n rules.value.forEach(rule => {\n if (rule.trigger) {\n rule.trigger.push('blur');\n rule.trigger.push('change');\n }\n });\n };\n\n /**\n * 禁用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const disableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = true;\n }\n });\n }\n };\n\n /**\n * 启用列表中的选项\n * @param optionList 选项列表\n * @param optionValue 选项值\n */\n const enableOptionOfList = (optionList: any[], optionValue: any) => {\n if (optionList && optionList.length > 0) {\n optionList.forEach(opt => {\n if (opt.value === optionValue) {\n opt.disabled = false;\n }\n });\n }\n };\n\n /**\n * 发送字段数据变更事件\n * @param newValue 新值\n * @param oldValue 旧值\n */\n const emitFieldDataChange = (newValue: any, oldValue: any) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n\n if (!instance) return;\n\n /* 必须用dispatch向指定父组件派发消息!! */\n dispatch('VFormRender', 'fieldChange', [\n props.field.options.name,\n newValue,\n oldValue,\n subFormName.value,\n props.subFormRowIndex\n ]);\n };\n\n /**\n * 同步更新表单模型\n * @param value 值\n */\n\n const syncUpdateFormModel = value => {\n if (designState) {\n dispatch('VFormDesigner', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n field: field\n });\n //设计状态不触发事件\n return;\n }\n /* 主动触发表单的单个字段校验,用于清除字段可能存在的校验错误提示 */\n dispatch('VFormRender', 'fieldValidation', [getPropName.value]);\n const oldValue = toRaw(fieldModel.value);\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value,\n oldValue: oldValue,\n field: field\n });\n handleOnChange(value, oldValue);\n };\n\n /**\n * 处理焦点自定义事件\n * @param event 事件对象\n */\n const handleFocusCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n oldFieldValue.value = deepClone(fieldModel.value); // 保存修改change之前的值\n\n if (props.field.options.onFocus) {\n executeFunction({\n functionBody: props.field.options.onFocus,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 处理失焦自定义事件\n * @param event 事件对象\n */\n const handleBlurCustomEvent = (event: any) => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (props.field.options.onBlur) {\n executeFunction({\n functionBody: props.field.options.onBlur,\n params: { event },\n keys: ['event']\n });\n }\n };\n\n /**\n * 发送附加按钮点击事件\n */\n const emitAppendButtonClick = () => {\n if (designState) {\n // 设计状态不触发点击事件\n return;\n }\n\n if (props.field.options.onAppendButtonClick) {\n executeFunction({\n functionBody: props.field.options.onAppendButtonClick\n });\n }\n };\n\n /**\n * 处理变更事件\n * @param val 新值\n * @param oldVal 旧值\n * @param ops 选项\n */\n const handleOnChange = (val: any, oldVal: any) => {\n // 自定义onChange事件\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n\n if (props.field.options.onChange) {\n executeFunction({\n functionBody: props.field.options.onChange,\n params: {\n value: val,\n oldValue: oldVal,\n subFormData: subFormData.value,\n rowId: props.subFormRowId\n },\n keys: ['value', 'oldValue', 'subFormData', 'rowId']\n });\n }\n };\n\n /**\n * 处理点击事件\n */\n const onClick = async () => {\n if (designState) {\n // 设计状态不触发点击事件\n return;\n }\n\n if (props.field.options.onClick) {\n return await asyncExecuteFunction({\n functionBody: props.field.options.onClick\n });\n }\n };\n\n /**\n * 处理图标点击事件\n */\n const handleClickIcon = async () => {\n if (designState) {\n // 设计状态不触发事件\n return;\n }\n if (handleDisabled.value) {\n return;\n }\n if (field.options.onClickIcon) {\n await asyncExecuteFunction({\n functionBody: field.options.onClickIcon\n });\n }\n };\n\n /**\n * 获取字段编辑器\n * @returns 字段编辑器\n */\n const getFieldEditor = () => {\n // 获取内置的el表单组件\n return fieldEditor.value;\n };\n\n /**\n * 显示文件列表\n * @param list 文件列表\n * @returns 格式化后的文件列表\n */\n const showFileList = (list: any) => {\n if (typeof list === 'string') {\n list = JSON.parse(list);\n }\n if (!isArray(list)) return [];\n const res = list.map((item: any, uid: number) => ({\n ...item,\n name: item.fileName,\n uid\n }));\n return res;\n };\n\n /**\n * 设置值\n * @param newValue 新值\n * @param disableChangeEvent 是否禁用变更事件\n */\n const setValue = (newValue: any, disableChangeEvent = false) => {\n if (newValue) {\n newValue = newValue.target ? newValue.target.value : newValue;\n }\n if (eq(fieldModel.value, newValue)) return;\n\n const oldValue = deepClone(fieldModel.value);\n if (props.field.type === 'file-upload') {\n newValue = showFileList(newValue || []);\n // TODO\n } else if (props.field.type === 'code-editor') {\n const fieldEditor = getFieldEditor();\n if (fieldEditor) {\n fieldEditor.setValue(newValue);\n }\n }\n fieldModel.value = newValue;\n if (!disableChangeEvent) {\n emitFieldDataChange(newValue, oldValue);\n }\n };\n\n /**\n * 获取值\n * @returns 字段值\n */\n const getValue = () => {\n return fieldModel.value;\n };\n\n /**\n * 重置字段\n */\n const resetField = () => {\n const defaultValue = props.field.options.defaultValue;\n setValue(defaultValue);\n\n // 清空上传组件文件列表\n if (props.field.type === 'picture-upload' || props.field.type === 'file-upload') {\n fieldModel.value.splice(0, fieldModel.value.length);\n // handleChangeEvent(fieldModel.value);\n }\n };\n\n /**\n * 设置只读\n * @param flag 是否只读\n */\n const setReadonly = (flag: boolean) => {\n props.field.options.readonly = flag;\n };\n\n /**\n * 设置禁用\n * @param flag 是否禁用\n */\n const setDisabled = (flag: boolean) => {\n props.field.options.disabled = flag;\n };\n\n /**\n * 设置附加按钮可见性\n * @param flag 是否可见\n */\n const setAppendButtonVisible = (flag: boolean) => {\n props.field.options.appendButton = flag;\n };\n\n /**\n * 设置附加按钮禁用状态\n * @param flag 是否禁用\n */\n const setAppendButtonDisabled = (flag: boolean) => {\n props.field.options.appendButtonDisabled = flag;\n };\n\n /**\n * 设置隐藏\n * @param flag 是否隐藏\n */\n const setHidden = (flag: boolean) => {\n props.field.options.hidden = flag;\n\n if (flag) {\n // 清除组件校验规则\n clearFieldRules();\n } else {\n // 重建组件校验规则\n buildFieldRules();\n }\n };\n\n /**\n * 设置必填\n * @param flag 是否必填\n */\n const setRequired = (flag: boolean) => {\n props.field.options.required = flag;\n buildFieldRules();\n\n if (!designState && !flag) {\n // 清除必填校验提示\n clearValidate();\n }\n };\n\n /**\n * 清除字段校验提示\n */\n const clearValidate = () => {\n if (designState) {\n return;\n }\n\n getFormRef().clearValidate(getPropName.value);\n };\n\n /**\n * 获取VForm上下文\n * @returns VForm上下文\n */\n const getVfCtx = () => {\n return getFormRef().vfCtx || {};\n };\n\n /**\n * 设置标签\n * @param newLabel 新标签\n */\n const setLabel = (newLabel: string) => {\n props.field.options.label = newLabel;\n };\n\n /**\n * 聚焦\n */\n const focus = () => {\n const fieldEditor = getFieldEditor();\n if (fieldEditor && fieldEditor.focus) {\n fieldEditor.focus();\n }\n };\n\n /**\n * 设置上传数据\n * @param name 名称\n * @param value 值\n */\n const setUploadData = (name: string, value: any) => {\n uploadData.value[name] = value;\n };\n\n /**\n * 设置或取消设置字段只读查看模式\n * @param readonlyFlag 只读标志\n */\n const setReadMode = (readonlyFlag = true) => {\n fieldReadonlyFlag.value = readonlyFlag;\n };\n\n /**\n * 动态增加自定义css样式\n * @param className 类名\n */\n const addCssClass = (className: string) => {\n if (!props.field.options.customClass) {\n props.field.options.customClass = [className];\n } else {\n props.field.options.customClass.push(className);\n }\n };\n const customClass = computed(() => props.field.options.customClass);\n\n /**\n * 动态移除自定义css样式\n * @param className 类名\n */\n const removeCssClass = (className: string) => {\n if (!props.field.options.customClass) {\n return;\n }\n\n let foundIdx = -1;\n props.field.options.customClass.map((cc: string, idx: number) => {\n if (cc === className) {\n foundIdx = idx;\n }\n });\n if (foundIdx > -1) {\n props.field.options.customClass.splice(foundIdx, 1);\n }\n };\n\n const getEl = () => {\n return fieldEditor.value?.$el;\n };\n\n /**\n * 设置组件选项\n * @param optionName 选项名称\n * @param optionValue 选项值\n */\n const setWidgetOption = (optionName: string, optionValue: any) => {\n // 通用组件选项修改API\n props.field.options[optionName] = optionValue;\n };\n\n const options = computed({\n get() {\n return props.field.options;\n },\n set(value) {\n props.field.options = value;\n }\n });\n\n const initFieldModel = () => {\n const defaultValue =\n typeof props.field.options.defaultValue === 'undefined'\n ? ''\n : props.field.options.defaultValue;\n\n dispatch('VFormRender', 'fieldChange', {\n fieldName: getPropName.value,\n value: defaultValue,\n oldValue: toRaw(fieldModel.value),\n field: field\n });\n };\n\n // 生命周期钩子\n onMounted(async () => {\n if (isInitModelValue) {\n initFieldModel();\n }\n await registerToRefList();\n\n await handleOnCreated();\n\n await handleOnMounted();\n buildFieldRules();\n });\n\n onBeforeUnmount(() => {\n unregisterFromRefList();\n });\n\n const defineExposed = {\n i18nt,\n options,\n proxy: instance?.proxy,\n field,\n widget: field,\n fieldModel,\n fieldEditor,\n isReadMode,\n setWidgetOption,\n setReadonly,\n setDisabled,\n getVfCtx,\n setLabel,\n getEl,\n setReadMode,\n resetField,\n setValue,\n getValue,\n getFieldEditor,\n getFormRef,\n getWidgetRef,\n setHidden,\n addCssClass,\n removeCssClass,\n setRequired,\n clearValidate,\n focus\n };\n\n return {\n asyncExecuteFunction,\n executeFunction,\n options,\n customClass,\n fieldEditor,\n // 状态\n fieldModel,\n oldFieldValue,\n fieldReadonlyFlag,\n loading,\n rules,\n uploadData,\n designState,\n customToolbar,\n i18nt,\n i18n2t,\n size,\n field,\n // 计算属性\n formConfig,\n subFormName,\n\n formModel,\n isReadMode,\n\n // 方法\n handleHidden,\n handleDisabled,\n findInArray,\n getPropName,\n refreshDefaultValue,\n clearFieldRules,\n buildFieldRules,\n disableChangeValidate,\n enableChangeValidate,\n disableOptionOfList,\n enableOptionOfList,\n emitFieldDataChange,\n syncUpdateFormModel,\n handleFocusCustomEvent,\n handleBlurCustomEvent,\n emitAppendButtonClick,\n handleOnChange,\n onClick,\n handleClickIcon,\n getFieldEditor,\n showFileList,\n\n setAppendButtonVisible,\n setAppendButtonDisabled,\n\n focus,\n setUploadData,\n\n isSubFormField,\n defineExposed\n };\n}\n"],"names":["fieldEditor"],"mappings":"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"}
@@ -245,7 +245,7 @@ const zhCN = {
245
245
  hasRowSelection: "启用左侧勾选设置",
246
246
  fixedLeft: "左",
247
247
  fixedRight: "右",
248
- fixedNull: "",
248
+ fixedNull: "",
249
249
  preserveSelectedRowKeys: "当数据被删除时仍然保留选项的 key",
250
250
  customColumnWidth: "自定义列表选择框宽度",
251
251
  customColumnTitle: "自定义列表选择框标题",