@kp-ui/lowcode-pc-v2 0.0.2 → 0.0.4

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.
@@ -1,503 +1,414 @@
1
- import { EVENT_TYPE, useEmitter } from '../utils/useEmitter.js';
2
- import { useI18n } from '../utils/i18n.js';
3
- import { deepClone } from '../utils/util.js';
4
- import { getEventParams } from '../components/property-editor/propertyRegister.js';
5
- import { useAppRef } from './useAppRef.js';
6
- import { useFieldRules } from './useFieldRules.js';
7
- import { computed, inject, onBeforeUnmount, onMounted, ref, toRaw, watch } from 'vue';
8
- import { useExecFunction } from 'tmgc2-share';
9
- import { eq, get, isArray } from 'lodash-es';
1
+ import { EVENT_TYPE, useEmitter } from "../utils/useEmitter.js";
2
+ import { useI18n } from "../utils/i18n.js";
3
+ import { deepClone } from "../utils/util.js";
4
+ import { getEventParams } from "../components/property-editor/propertyRegister.js";
5
+ import { useAppRef } from "./useAppRef.js";
6
+ import { useFieldRules } from "./useFieldRules.js";
7
+ import { computed, inject, onBeforeUnmount, onMounted, ref, toRaw, watch } from "vue";
8
+ import { useExecFunction } from "tmgc2-share";
9
+ import { eq, get, isArray } from "lodash-es";
10
10
  //#region ../core/src/hooks/useField.ts
11
11
  /**
12
- * 表单字段 Hook,提供表单字段的通用功能
13
- */
12
+ * 表单字段 Hook,提供表单字段的通用功能
13
+ */
14
14
  function useField(widget) {
15
- const formConfig = inject('formConfig', ref({}));
16
- const formModel = inject('formData', ref({}));
17
- const getReadMode = inject('getReadMode', () => false);
18
- const isSubFormField = inject('isSubFormField', false);
19
- const subFormRowIndex = inject('subFormRowIndex', ref(0));
20
- const getSubFormName = inject('getSubFormName', () => '');
21
- const designState = inject('designState', false);
22
- const { registerToRefList, getInstance, getPageInstance, unregisterFromRefList } = useAppRef();
23
- const { context, executeFunction, asyncExecuteFunction } = useExecFunction();
24
- const { i18nt, i18n2t } = useI18n();
25
- const { emitter } = useEmitter();
26
- const fieldEditor = ref(null);
27
- const oldFieldValue = ref(null);
28
- const fieldReadonlyFlag = ref(false);
29
- const loading = ref(false);
30
- /** 获取属性名称 */
31
- const getPropName = computed(() => {
32
- var _widget$props2;
33
- if (isSubFormField && !designState) {
34
- var _widget$props;
35
- return `${getSubFormName()}.${subFormRowIndex.value}.${
36
- ((_widget$props = widget.props) === null || _widget$props === void 0
37
- ? void 0
38
- : _widget$props.name) || ''
39
- }`;
40
- }
41
- return (
42
- ((_widget$props2 = widget.props) === null || _widget$props2 === void 0
43
- ? void 0
44
- : _widget$props2.name) || ''
45
- );
46
- });
47
- /** 标签文本 */
48
- const label = computed(() => {
49
- var _widget$props$label, _widget$props3;
50
- return (_widget$props$label =
51
- (_widget$props3 = widget.props) === null || _widget$props3 === void 0
52
- ? void 0
53
- : _widget$props3.label) !== null && _widget$props$label !== void 0
54
- ? _widget$props$label
55
- : '';
56
- });
57
- /** 字段值 */
58
- const fieldModel = computed({
59
- get() {
60
- return get(
61
- (formModel === null || formModel === void 0 ? void 0 : formModel.value) || {},
62
- getPropName.value
63
- );
64
- },
65
- set(value) {
66
- syncUpdateFormModel(value);
67
- }
68
- });
69
- const { rules, buildFieldRules, clearFieldRules, clearValidate } = useFieldRules({
70
- widget,
71
- getPropName,
72
- getPageInstance,
73
- designState
74
- });
75
- /** 子表单名称 */
76
- const subFormName = computed(() => (getSubFormName ? getSubFormName() : ''));
77
- /** 子表单数据 */
78
- const subFormData = computed(() => formModel.value[subFormName.value]);
79
- const isFieldWidget = computed(() => widget.category === 'field');
80
- /** 组件尺寸 */
81
- const size = computed(() => {
82
- var _widget$props4;
83
- return (
84
- ((_widget$props4 = widget.props) === null || _widget$props4 === void 0
85
- ? void 0
86
- : _widget$props4.size) ||
87
- formConfig.value.size ||
88
- 'middle'
89
- );
90
- });
91
- /** 是否只读模式 */
92
- const isReadMode = computed(() => {
93
- return getReadMode() || fieldReadonlyFlag.value;
94
- });
95
- /** 自定义类名 */
96
- const customClass = computed(() => {
97
- var _widget$props5;
98
- return (
99
- ((_widget$props5 = widget.props) === null || _widget$props5 === void 0
100
- ? void 0
101
- : _widget$props5.customClass) || []
102
- );
103
- });
104
- const dataSource = computed(() => {
105
- return widget.dataSource;
106
- });
107
- /** 处理字段隐藏逻辑 */
108
- const handleHidden = computed(() => {
109
- var _widget$props$hidden, _widget$props6, _widget$events;
110
- if (designState) return false;
111
- const hidden =
112
- (_widget$props$hidden =
113
- (_widget$props6 = widget.props) === null || _widget$props6 === void 0
114
- ? void 0
115
- : _widget$props6.hidden) !== null && _widget$props$hidden !== void 0
116
- ? _widget$props$hidden
117
- : false;
118
- const onHidden =
119
- (_widget$events = widget.events) === null || _widget$events === void 0
120
- ? void 0
121
- : _widget$events.onHidden;
122
- if (hidden) return true;
123
- if (onHidden)
124
- try {
125
- const result = executeFunction({ functionBody: onHidden });
126
- return typeof result === 'boolean' ? result : false;
127
- } catch (_unused) {
128
- return false;
129
- }
130
- return false;
131
- });
132
- /** 处理字段禁用逻辑 */
133
- const handleDisabled = computed(() => {
134
- var _widget$events2;
135
- const { disabled } = widget.props || {};
136
- const onDisabled =
137
- (_widget$events2 = widget.events) === null || _widget$events2 === void 0
138
- ? void 0
139
- : _widget$events2.onDisabled;
140
- if (disabled) return true;
141
- if (designState) return;
142
- if (onDisabled)
143
- try {
144
- const result = executeFunction({ functionBody: onDisabled });
145
- return typeof result === 'boolean' ? result : false;
146
- } catch (_unused2) {
147
- return false;
148
- }
149
- return false;
150
- });
151
- /** 执行组件事件函数 */
152
- const executeWidgetEvent = async (eventName, params = {}) => {
153
- var _widget$events3;
154
- if (designState) return;
155
- const eventParams = getEventParams(eventName, widget.type);
156
- const eventCode =
157
- (_widget$events3 = widget.events) === null || _widget$events3 === void 0
158
- ? void 0
159
- : _widget$events3[eventName];
160
- if (eventCode)
161
- await asyncExecuteFunction({
162
- functionBody: eventCode,
163
- params,
164
- keys: eventParams
165
- });
166
- };
167
- /** 处理挂载事件 */
168
- const handleOnMounted = async () => {
169
- if (designState) return;
170
- await executeWidgetEvent('onMounted');
171
- };
172
- /** 处理变更事件 */
173
- const handleOnChange = (val, oldVal, item = {}) => {
174
- var _widget$events4;
175
- if (designState) return;
176
- executeFunction({
177
- functionBody:
178
- ((_widget$events4 = widget.events) === null || _widget$events4 === void 0
179
- ? void 0
180
- : _widget$events4.onChange) || '',
181
- params: {
182
- value: val,
183
- oldValue: oldVal,
184
- subFormData: subFormData.value,
185
- rowId: subFormRowIndex.value,
186
- item
187
- },
188
- keys: ['value', 'oldValue', 'subFormData', 'rowId', 'item']
189
- });
190
- };
191
- /** 处理焦点事件 */
192
- const handleFocusCustomEvent = event => {
193
- var _widget$events5;
194
- if (designState) return;
195
- executeFunction({
196
- functionBody:
197
- ((_widget$events5 = widget.events) === null || _widget$events5 === void 0
198
- ? void 0
199
- : _widget$events5.onFocus) || '',
200
- params: { event },
201
- keys: ['event']
202
- });
203
- };
204
- /** 处理失焦事件 */
205
- const handleBlurCustomEvent = event => {
206
- var _widget$events6;
207
- if (designState) return;
208
- executeFunction({
209
- functionBody:
210
- ((_widget$events6 = widget.events) === null || _widget$events6 === void 0
211
- ? void 0
212
- : _widget$events6.onBlur) || '',
213
- params: { event },
214
- keys: ['event']
215
- });
216
- };
217
- /** 处理点击事件 */
218
- const onClick = async () => {
219
- if (designState || handleDisabled.value) return;
220
- await executeWidgetEvent('onClick');
221
- };
222
- /** 发送字段数据变更事件 */
223
- const emitFieldDataChange = (newValue, oldValue) => {
224
- if (newValue === null || newValue === void 0 ? void 0 : newValue.target)
225
- newValue = newValue.target.value;
226
- if (!context.value) return;
227
- emitter.emit(EVENT_TYPE.ON_FIELD_DATA_CHANGE, {
228
- fieldName: widget.props.name,
229
- value: newValue,
230
- oldValue,
231
- field: widget,
232
- subFormName: subFormName.value,
233
- subFormRowIndex: subFormRowIndex.value
234
- });
235
- };
236
- /** 同步更新表单模型 */
237
- const syncUpdateFormModel = value => {
238
- if (designState) {
239
- emitFieldDataChange(value, fieldModel.value);
240
- return;
241
- }
242
- emitter.emit(EVENT_TYPE.ON_FIELD_VALIDATION, [getPropName.value]);
243
- const oldValue = toRaw(fieldModel.value);
244
- emitFieldDataChange(value, oldValue);
245
- handleOnChange(value, oldValue);
246
- };
247
- /** 设置值 */
248
- const setValue = (newValue, disableChangeEvent = false) => {
249
- if (newValue === null || newValue === void 0 ? void 0 : newValue.target)
250
- newValue = newValue.target.value;
251
- if (eq(fieldModel.value, newValue)) return;
252
- const oldValue = deepClone(fieldModel.value);
253
- if (widget.type === 'file-upload') newValue = showFileList(newValue || []);
254
- else if (widget.type === 'code-editor') {
255
- var _getFieldEditor;
256
- (_getFieldEditor = getFieldEditor()) === null ||
257
- _getFieldEditor === void 0 ||
258
- _getFieldEditor.setValue(newValue);
259
- }
260
- fieldModel.value = newValue;
261
- if (!disableChangeEvent) emitFieldDataChange(newValue, oldValue);
262
- };
263
- /** 获取值 */
264
- const getValue = () => fieldModel.value;
265
- /** 重置字段 */
266
- const resetField = () => {
267
- var _widget$props7;
268
- setValue(
269
- (_widget$props7 = widget.props) === null || _widget$props7 === void 0
270
- ? void 0
271
- : _widget$props7.defaultValue
272
- );
273
- };
274
- /** 刷新默认值 */
275
- const refreshDefaultValue = () => {
276
- var _widget$props8;
277
- fieldModel.value =
278
- (_widget$props8 = widget.props) === null || _widget$props8 === void 0
279
- ? void 0
280
- : _widget$props8.defaultValue;
281
- };
282
- const setReadonly = flag => {
283
- if (widget.props) widget.props.readonly = flag;
284
- };
285
- /** 设置禁用 */
286
- const setDisabled = flag => {
287
- if (widget.props) widget.props.disabled = flag;
288
- };
289
- /** 设置隐藏 */
290
- const setHidden = flag => {
291
- if (widget.props) widget.props.hidden = flag;
292
- flag ? clearFieldRules() : buildFieldRules();
293
- };
294
- /** 设置必填 */
295
- const setRequired = flag => {
296
- if ('validation' in widget && widget.validation) widget.validation.required = flag;
297
- buildFieldRules();
298
- if (!designState && !flag) clearValidate();
299
- };
300
- /** 设置标签 */
301
- const setLabel = newLabel => {
302
- if (widget.props) widget.props.label = newLabel;
303
- };
304
- /** 设置只读模式 */
305
- const setReadMode = (flag = true) => {
306
- fieldReadonlyFlag.value = flag;
307
- };
308
- /** 添加 CSS 类 */
309
- const addCssClass = className => {
310
- if (!widget.props) widget.props = {};
311
- if (!widget.props.customClass) widget.props.customClass = [className];
312
- else widget.props.customClass.push(className);
313
- };
314
- /** 移除 CSS 类 */
315
- const removeCssClass = className => {
316
- var _widget$props9;
317
- if (
318
- !((_widget$props9 = widget.props) === null || _widget$props9 === void 0
319
- ? void 0
320
- : _widget$props9.customClass)
321
- )
322
- return;
323
- const idx = widget.props.customClass.indexOf(className);
324
- if (idx > -1) widget.props.customClass.splice(idx, 1);
325
- };
326
- /** 获取字段编辑器 */
327
- const getFieldEditor = () => fieldEditor.value;
328
- /** 获取 DOM 元素 */
329
- const getEl = () => {
330
- var _fieldEditor$value;
331
- return (_fieldEditor$value = fieldEditor.value) === null || _fieldEditor$value === void 0
332
- ? void 0
333
- : _fieldEditor$value.$el;
334
- };
335
- /** 获取 VForm 上下文 */
336
- const getVfCtx = () => {
337
- var _getPageInstance;
338
- return (
339
- ((_getPageInstance = getPageInstance()) === null || _getPageInstance === void 0
340
- ? void 0
341
- : _getPageInstance.vfCtx) || {}
342
- );
343
- };
344
- /** 聚焦 */
345
- const focus = () => {
346
- var _fieldEditor$value2, _fieldEditor$value2$f;
347
- (_fieldEditor$value2 = fieldEditor.value) === null ||
348
- _fieldEditor$value2 === void 0 ||
349
- (_fieldEditor$value2$f = _fieldEditor$value2.focus) === null ||
350
- _fieldEditor$value2$f === void 0 ||
351
- _fieldEditor$value2$f.call(_fieldEditor$value2);
352
- };
353
- /** 显示文件列表 */
354
- const showFileList = list => {
355
- if (typeof list === 'string')
356
- try {
357
- list = JSON.parse(list);
358
- } catch (_unused3) {
359
- return [];
360
- }
361
- if (!isArray(list)) return [];
362
- return list.map((item, uid) => ({
363
- ...item,
364
- name: item.fileName,
365
- uid
366
- }));
367
- };
368
- /** 初始化字段模型 */
369
- const initFieldModel = () => {
370
- let value;
371
- if (isSubFormField) value = fieldModel.value;
372
- else {
373
- var _widget$props$default, _widget$props10;
374
- value =
375
- (_widget$props$default =
376
- (_widget$props10 = widget.props) === null || _widget$props10 === void 0
377
- ? void 0
378
- : _widget$props10.defaultValue) !== null && _widget$props$default !== void 0
379
- ? _widget$props$default
380
- : '';
381
- }
382
- emitFieldDataChange(toRaw(value), toRaw(fieldModel.value));
383
- };
384
- const getSubFormRowIndex = () => {
385
- return subFormRowIndex.value;
386
- };
387
- watch(
388
- () => widget.validation,
389
- () => {
390
- buildFieldRules();
391
- },
392
- { deep: true }
393
- );
394
- watch(
395
- () => {
396
- var _widget$props11;
397
- return (_widget$props11 = widget.props) === null || _widget$props11 === void 0
398
- ? void 0
399
- : _widget$props11.defaultValue;
400
- },
401
- val => {
402
- syncUpdateFormModel(val);
403
- }
404
- );
405
- onMounted(async () => {
406
- if (isFieldWidget.value) initFieldModel();
407
- await registerToRefList();
408
- await handleOnMounted();
409
- buildFieldRules();
410
- });
411
- onBeforeUnmount(() => {
412
- unregisterFromRefList();
413
- });
414
- return {
415
- formModel,
416
- context,
417
- fieldEditor,
418
- fieldModel,
419
- oldFieldValue,
420
- fieldReadonlyFlag,
421
- loading,
422
- rules,
423
- customClass,
424
- label,
425
- size,
426
- isReadMode,
427
- handleHidden,
428
- handleDisabled,
429
- getPropName,
430
- formConfig,
431
- subFormName,
432
- subFormData,
433
- field: widget,
434
- widget,
435
- dataSource,
436
- handleOnMounted,
437
- handleOnChange,
438
- handleFocusCustomEvent,
439
- handleBlurCustomEvent,
440
- onClick,
441
- executeWidgetEvent,
442
- executeFunction,
443
- asyncExecuteFunction,
444
- setValue,
445
- getValue,
446
- resetField,
447
- refreshDefaultValue,
448
- emitFieldDataChange,
449
- syncUpdateFormModel,
450
- buildFieldRules,
451
- clearFieldRules,
452
- clearValidate,
453
- setReadonly,
454
- setDisabled,
455
- setHidden,
456
- setRequired,
457
- setLabel,
458
- setReadMode,
459
- addCssClass,
460
- removeCssClass,
461
- getPageInstance,
462
- getFieldEditor,
463
- getEl,
464
- getVfCtx,
465
- focus,
466
- showFileList,
467
- i18nt,
468
- i18n2t,
469
- designState,
470
- isSubFormField,
471
- subFormRowIndex,
472
- defineExposed: {
473
- widget,
474
- field: widget,
475
- fieldModel,
476
- fieldEditor,
477
- isReadMode,
478
- formModel,
479
- getSubFormRowIndex,
480
- setValue,
481
- getValue,
482
- resetField,
483
- setReadonly,
484
- setDisabled,
485
- setHidden,
486
- setRequired,
487
- setLabel,
488
- setReadMode,
489
- addCssClass,
490
- removeCssClass,
491
- clearValidate,
492
- focus,
493
- getEl,
494
- getFieldEditor,
495
- getPageInstance,
496
- getInstance,
497
- getVfCtx,
498
- i18nt
499
- }
500
- };
15
+ const formConfig = inject("formConfig", ref({}));
16
+ const formModel = inject("formData", ref({}));
17
+ const getReadMode = inject("getReadMode", () => false);
18
+ const isSubFormField = inject("isSubFormField", false);
19
+ const subFormRowIndex = inject("subFormRowIndex", ref(0));
20
+ const getSubFormName = inject("getSubFormName", () => "");
21
+ const designState = inject("designState", false);
22
+ const { registerToRefList, getInstance, getPageInstance, unregisterFromRefList } = useAppRef();
23
+ const { context, executeFunction, asyncExecuteFunction } = useExecFunction();
24
+ const { i18nt, i18n2t } = useI18n();
25
+ const { emitter } = useEmitter();
26
+ const fieldEditor = ref(null);
27
+ const oldFieldValue = ref(null);
28
+ const fieldReadonlyFlag = ref(false);
29
+ const loading = ref(false);
30
+ /** 获取属性名称 */
31
+ const getPropName = computed(() => {
32
+ var _widget$props2;
33
+ if (isSubFormField && !designState) {
34
+ var _widget$props;
35
+ return `${getSubFormName()}.${subFormRowIndex.value}.${((_widget$props = widget.props) === null || _widget$props === void 0 ? void 0 : _widget$props.name) || ""}`;
36
+ }
37
+ return ((_widget$props2 = widget.props) === null || _widget$props2 === void 0 ? void 0 : _widget$props2.name) || "";
38
+ });
39
+ /** 标签文本 */
40
+ const label = computed(() => {
41
+ var _widget$props$label, _widget$props3;
42
+ return (_widget$props$label = (_widget$props3 = widget.props) === null || _widget$props3 === void 0 ? void 0 : _widget$props3.label) !== null && _widget$props$label !== void 0 ? _widget$props$label : "";
43
+ });
44
+ /** 字段值 */
45
+ const fieldModel = computed({
46
+ get() {
47
+ return get((formModel === null || formModel === void 0 ? void 0 : formModel.value) || {}, getPropName.value);
48
+ },
49
+ set(value) {
50
+ syncUpdateFormModel(value);
51
+ }
52
+ });
53
+ const { rules, buildFieldRules, clearFieldRules, clearValidate } = useFieldRules({
54
+ widget,
55
+ getPropName,
56
+ getPageInstance,
57
+ designState
58
+ });
59
+ /** 子表单名称 */
60
+ const subFormName = computed(() => getSubFormName ? getSubFormName() : "");
61
+ /** 子表单数据 */
62
+ const subFormData = computed(() => formModel.value[subFormName.value]);
63
+ const isFieldWidget = computed(() => widget.category === "field");
64
+ /** 组件尺寸 */
65
+ const size = computed(() => {
66
+ var _widget$props4;
67
+ return ((_widget$props4 = widget.props) === null || _widget$props4 === void 0 ? void 0 : _widget$props4.size) || formConfig.value.size || "middle";
68
+ });
69
+ /** 是否只读模式 */
70
+ const isReadMode = computed(() => {
71
+ return getReadMode() || fieldReadonlyFlag.value;
72
+ });
73
+ /** 自定义类名 */
74
+ const customClass = computed(() => {
75
+ var _widget$props5;
76
+ return ((_widget$props5 = widget.props) === null || _widget$props5 === void 0 ? void 0 : _widget$props5.customClass) || [];
77
+ });
78
+ const dataSource = computed(() => {
79
+ return widget.dataSource;
80
+ });
81
+ /** 处理字段隐藏逻辑 */
82
+ const handleHidden = computed(() => {
83
+ var _widget$props$hidden, _widget$props6, _widget$events;
84
+ if (designState) return false;
85
+ const hidden = (_widget$props$hidden = (_widget$props6 = widget.props) === null || _widget$props6 === void 0 ? void 0 : _widget$props6.hidden) !== null && _widget$props$hidden !== void 0 ? _widget$props$hidden : false;
86
+ const onHidden = (_widget$events = widget.events) === null || _widget$events === void 0 ? void 0 : _widget$events.onHidden;
87
+ if (hidden) return true;
88
+ if (onHidden) try {
89
+ const result = executeFunction({ functionBody: onHidden });
90
+ return typeof result === "boolean" ? result : false;
91
+ } catch (_unused) {
92
+ return false;
93
+ }
94
+ return false;
95
+ });
96
+ /** 处理字段禁用逻辑 */
97
+ const handleDisabled = computed(() => {
98
+ var _widget$events2;
99
+ const { disabled } = widget.props || {};
100
+ const onDisabled = (_widget$events2 = widget.events) === null || _widget$events2 === void 0 ? void 0 : _widget$events2.onDisabled;
101
+ if (disabled) return true;
102
+ if (designState) return;
103
+ if (onDisabled) try {
104
+ const result = executeFunction({ functionBody: onDisabled });
105
+ return typeof result === "boolean" ? result : false;
106
+ } catch (_unused2) {
107
+ return false;
108
+ }
109
+ return false;
110
+ });
111
+ /** 执行组件事件函数 */
112
+ const executeWidgetEvent = async (eventName, params = {}) => {
113
+ var _widget$events3;
114
+ if (designState) return;
115
+ const eventParams = getEventParams(eventName, widget.type);
116
+ const eventCode = (_widget$events3 = widget.events) === null || _widget$events3 === void 0 ? void 0 : _widget$events3[eventName];
117
+ if (eventCode) await asyncExecuteFunction({
118
+ functionBody: eventCode,
119
+ params,
120
+ keys: eventParams
121
+ });
122
+ };
123
+ /** 处理挂载事件 */
124
+ const handleOnMounted = async () => {
125
+ if (designState) return;
126
+ await executeWidgetEvent("onMounted");
127
+ };
128
+ /** 处理变更事件 */
129
+ const handleOnChange = (val, oldVal, item = {}) => {
130
+ var _widget$events4;
131
+ if (designState) return;
132
+ executeFunction({
133
+ functionBody: ((_widget$events4 = widget.events) === null || _widget$events4 === void 0 ? void 0 : _widget$events4.onChange) || "",
134
+ params: {
135
+ value: val,
136
+ oldValue: oldVal,
137
+ subFormData: subFormData.value,
138
+ rowId: subFormRowIndex.value,
139
+ item
140
+ },
141
+ keys: [
142
+ "value",
143
+ "oldValue",
144
+ "subFormData",
145
+ "rowId",
146
+ "item"
147
+ ]
148
+ });
149
+ };
150
+ /** 处理焦点事件 */
151
+ const handleFocusCustomEvent = (event) => {
152
+ var _widget$events5;
153
+ if (designState) return;
154
+ executeFunction({
155
+ functionBody: ((_widget$events5 = widget.events) === null || _widget$events5 === void 0 ? void 0 : _widget$events5.onFocus) || "",
156
+ params: { event },
157
+ keys: ["event"]
158
+ });
159
+ };
160
+ /** 处理失焦事件 */
161
+ const handleBlurCustomEvent = (event) => {
162
+ var _widget$events6;
163
+ if (designState) return;
164
+ executeFunction({
165
+ functionBody: ((_widget$events6 = widget.events) === null || _widget$events6 === void 0 ? void 0 : _widget$events6.onBlur) || "",
166
+ params: { event },
167
+ keys: ["event"]
168
+ });
169
+ };
170
+ /** 处理点击事件 */
171
+ const onClick = async () => {
172
+ if (designState || handleDisabled.value) return;
173
+ await executeWidgetEvent("onClick");
174
+ };
175
+ /** 发送字段数据变更事件 */
176
+ const emitFieldDataChange = (newValue, oldValue) => {
177
+ if (newValue === null || newValue === void 0 ? void 0 : newValue.target) newValue = newValue.target.value;
178
+ if (!context.value) return;
179
+ emitter.emit(EVENT_TYPE.ON_FIELD_DATA_CHANGE, {
180
+ fieldName: widget.props.name,
181
+ value: newValue,
182
+ oldValue,
183
+ field: widget,
184
+ subFormName: subFormName.value,
185
+ subFormRowIndex: subFormRowIndex.value
186
+ });
187
+ };
188
+ /** 同步更新表单模型 */
189
+ const syncUpdateFormModel = (value) => {
190
+ if (designState) {
191
+ emitFieldDataChange(value, fieldModel.value);
192
+ return;
193
+ }
194
+ emitter.emit(EVENT_TYPE.ON_FIELD_VALIDATION, [getPropName.value]);
195
+ const oldValue = toRaw(fieldModel.value);
196
+ emitFieldDataChange(value, oldValue);
197
+ handleOnChange(value, oldValue);
198
+ };
199
+ /** 设置值 */
200
+ const setValue = (newValue, disableChangeEvent = false) => {
201
+ if (newValue === null || newValue === void 0 ? void 0 : newValue.target) newValue = newValue.target.value;
202
+ if (eq(fieldModel.value, newValue)) return;
203
+ const oldValue = deepClone(fieldModel.value);
204
+ if (widget.type === "file-upload") newValue = showFileList(newValue || []);
205
+ else if (widget.type === "code-editor") {
206
+ var _getFieldEditor;
207
+ (_getFieldEditor = getFieldEditor()) === null || _getFieldEditor === void 0 || _getFieldEditor.setValue(newValue);
208
+ }
209
+ fieldModel.value = newValue;
210
+ if (!disableChangeEvent) emitFieldDataChange(newValue, oldValue);
211
+ };
212
+ /** 获取值 */
213
+ const getValue = () => fieldModel.value;
214
+ /** 重置字段 */
215
+ const resetField = () => {
216
+ var _widget$props7;
217
+ setValue((_widget$props7 = widget.props) === null || _widget$props7 === void 0 ? void 0 : _widget$props7.defaultValue);
218
+ };
219
+ /** 刷新默认值 */
220
+ const refreshDefaultValue = () => {
221
+ var _widget$props8;
222
+ fieldModel.value = (_widget$props8 = widget.props) === null || _widget$props8 === void 0 ? void 0 : _widget$props8.defaultValue;
223
+ };
224
+ const setReadonly = (flag) => {
225
+ if (widget.props) widget.props.readonly = flag;
226
+ };
227
+ /** 设置禁用 */
228
+ const setDisabled = (flag) => {
229
+ if (widget.props) widget.props.disabled = flag;
230
+ };
231
+ /** 设置隐藏 */
232
+ const setHidden = (flag) => {
233
+ if (widget.props) widget.props.hidden = flag;
234
+ flag ? clearFieldRules() : buildFieldRules();
235
+ };
236
+ /** 设置必填 */
237
+ const setRequired = (flag) => {
238
+ if ("validation" in widget && widget.validation) widget.validation.required = flag;
239
+ buildFieldRules();
240
+ if (!designState && !flag) clearValidate();
241
+ };
242
+ /** 设置标签 */
243
+ const setLabel = (newLabel) => {
244
+ if (widget.props) widget.props.label = newLabel;
245
+ };
246
+ /** 设置只读模式 */
247
+ const setReadMode = (flag = true) => {
248
+ fieldReadonlyFlag.value = flag;
249
+ };
250
+ /** 添加 CSS 类 */
251
+ const addCssClass = (className) => {
252
+ if (!widget.props) widget.props = {};
253
+ if (!widget.props.customClass) widget.props.customClass = [className];
254
+ else widget.props.customClass.push(className);
255
+ };
256
+ /** 移除 CSS */
257
+ const removeCssClass = (className) => {
258
+ var _widget$props9;
259
+ if (!((_widget$props9 = widget.props) === null || _widget$props9 === void 0 ? void 0 : _widget$props9.customClass)) return;
260
+ const idx = widget.props.customClass.indexOf(className);
261
+ if (idx > -1) widget.props.customClass.splice(idx, 1);
262
+ };
263
+ /** 获取字段编辑器 */
264
+ const getFieldEditor = () => fieldEditor.value;
265
+ /** 获取 DOM 元素 */
266
+ const getEl = () => {
267
+ var _fieldEditor$value;
268
+ return (_fieldEditor$value = fieldEditor.value) === null || _fieldEditor$value === void 0 ? void 0 : _fieldEditor$value.$el;
269
+ };
270
+ /** 获取 VForm 上下文 */
271
+ const getVfCtx = () => {
272
+ var _getPageInstance;
273
+ return ((_getPageInstance = getPageInstance()) === null || _getPageInstance === void 0 ? void 0 : _getPageInstance.vfCtx) || {};
274
+ };
275
+ /** 聚焦 */
276
+ const focus = () => {
277
+ var _fieldEditor$value2, _fieldEditor$value2$f;
278
+ (_fieldEditor$value2 = fieldEditor.value) === null || _fieldEditor$value2 === void 0 || (_fieldEditor$value2$f = _fieldEditor$value2.focus) === null || _fieldEditor$value2$f === void 0 || _fieldEditor$value2$f.call(_fieldEditor$value2);
279
+ };
280
+ /** 显示文件列表 */
281
+ const showFileList = (list) => {
282
+ if (typeof list === "string") try {
283
+ list = JSON.parse(list);
284
+ } catch (_unused3) {
285
+ return [];
286
+ }
287
+ if (!isArray(list)) return [];
288
+ return list.map((item, uid) => ({
289
+ ...item,
290
+ name: item.fileName,
291
+ uid
292
+ }));
293
+ };
294
+ /** 初始化字段模型 */
295
+ const initFieldModel = () => {
296
+ let value;
297
+ if (isSubFormField) value = fieldModel.value;
298
+ else {
299
+ var _widget$props$default, _widget$props10;
300
+ value = (_widget$props$default = (_widget$props10 = widget.props) === null || _widget$props10 === void 0 ? void 0 : _widget$props10.defaultValue) !== null && _widget$props$default !== void 0 ? _widget$props$default : "";
301
+ }
302
+ emitFieldDataChange(toRaw(value), toRaw(fieldModel.value));
303
+ };
304
+ const getSubFormRowIndex = () => {
305
+ return subFormRowIndex.value;
306
+ };
307
+ watch(() => widget.validation, () => {
308
+ buildFieldRules();
309
+ }, { deep: true });
310
+ watch(() => {
311
+ var _widget$props11;
312
+ return (_widget$props11 = widget.props) === null || _widget$props11 === void 0 ? void 0 : _widget$props11.defaultValue;
313
+ }, (val) => {
314
+ syncUpdateFormModel(val);
315
+ });
316
+ onMounted(async () => {
317
+ if (isFieldWidget.value) initFieldModel();
318
+ await registerToRefList();
319
+ await handleOnMounted();
320
+ buildFieldRules();
321
+ });
322
+ onBeforeUnmount(() => {
323
+ unregisterFromRefList();
324
+ });
325
+ return {
326
+ formModel,
327
+ context,
328
+ fieldEditor,
329
+ fieldModel,
330
+ oldFieldValue,
331
+ fieldReadonlyFlag,
332
+ loading,
333
+ rules,
334
+ customClass,
335
+ label,
336
+ size,
337
+ isReadMode,
338
+ handleHidden,
339
+ handleDisabled,
340
+ getPropName,
341
+ formConfig,
342
+ subFormName,
343
+ subFormData,
344
+ field: widget,
345
+ widget,
346
+ dataSource,
347
+ handleOnMounted,
348
+ handleOnChange,
349
+ handleFocusCustomEvent,
350
+ handleBlurCustomEvent,
351
+ onClick,
352
+ executeWidgetEvent,
353
+ executeFunction,
354
+ asyncExecuteFunction,
355
+ setValue,
356
+ getValue,
357
+ resetField,
358
+ refreshDefaultValue,
359
+ emitFieldDataChange,
360
+ syncUpdateFormModel,
361
+ buildFieldRules,
362
+ clearFieldRules,
363
+ clearValidate,
364
+ setReadonly,
365
+ setDisabled,
366
+ setHidden,
367
+ setRequired,
368
+ setLabel,
369
+ setReadMode,
370
+ addCssClass,
371
+ removeCssClass,
372
+ getPageInstance,
373
+ getFieldEditor,
374
+ getEl,
375
+ getVfCtx,
376
+ focus,
377
+ showFileList,
378
+ i18nt,
379
+ i18n2t,
380
+ designState,
381
+ isSubFormField,
382
+ subFormRowIndex,
383
+ defineExposed: {
384
+ widget,
385
+ field: widget,
386
+ fieldModel,
387
+ fieldEditor,
388
+ isReadMode,
389
+ formModel,
390
+ getSubFormRowIndex,
391
+ setValue,
392
+ getValue,
393
+ resetField,
394
+ setReadonly,
395
+ setDisabled,
396
+ setHidden,
397
+ setRequired,
398
+ setLabel,
399
+ setReadMode,
400
+ addCssClass,
401
+ removeCssClass,
402
+ clearValidate,
403
+ focus,
404
+ getEl,
405
+ getFieldEditor,
406
+ getPageInstance,
407
+ getInstance,
408
+ getVfCtx,
409
+ i18nt
410
+ }
411
+ };
501
412
  }
502
413
  //#endregion
503
414
  export { useField };