@ftjs/core 0.1.3 → 0.2.1
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.
- package/dist/form/columns.d.ts +6 -2
- package/dist/form/define-component.d.ts +4 -0
- package/dist/form/use-form-item.d.ts +10 -1
- package/dist/index.js +46 -10
- package/package.json +1 -1
package/dist/form/columns.d.ts
CHANGED
|
@@ -27,11 +27,11 @@ export interface FtFormColumnBase<FormData extends Record<string, any>> {
|
|
|
27
27
|
*
|
|
28
28
|
* 如: [startTime, endTime]
|
|
29
29
|
*
|
|
30
|
-
* 注意: 第一个字段需要尽量是基础类型的值(这个值会用于watch, expect等操作)
|
|
30
|
+
* 注意: 第一个字段需要尽量是基础类型的值(这个值会用于watch, expect等操作),中间字段则可以用'-'来忽略,后面字段可以直接忽略
|
|
31
31
|
*
|
|
32
32
|
* 如人员信息: [staffId, staffInfoObj, deptInfoObj, ...]
|
|
33
33
|
*/
|
|
34
|
-
fields?:
|
|
34
|
+
fields?: (RecordPath<FormData> | "-")[];
|
|
35
35
|
/**
|
|
36
36
|
* 字段标题
|
|
37
37
|
*
|
|
@@ -72,6 +72,10 @@ export interface FtFormColumnBase<FormData extends Record<string, any>> {
|
|
|
72
72
|
}[];
|
|
73
73
|
valueGetter?: (val: any) => any;
|
|
74
74
|
valueSetter?: (val: any) => any;
|
|
75
|
+
/**
|
|
76
|
+
* getFormData 时,对数据进行格式化,不会影响 Form 中的值
|
|
77
|
+
*/
|
|
78
|
+
formatGetFormData?: (val: any) => any;
|
|
75
79
|
/**
|
|
76
80
|
* props 配置,子类定义
|
|
77
81
|
*/
|
|
@@ -25,6 +25,10 @@ export interface FtFormIntrinsicProps<FormData extends Record<string, any>, Type
|
|
|
25
25
|
* 如果`formData`不为`undefined`或者`null`,则双向绑定这个值,否则 FtForm内部会生成一个内部值
|
|
26
26
|
*/
|
|
27
27
|
formData?: FormData;
|
|
28
|
+
/**
|
|
29
|
+
* 是否查看模式
|
|
30
|
+
*/
|
|
31
|
+
isView?: boolean;
|
|
28
32
|
/**
|
|
29
33
|
* 内部 form 组件 props
|
|
30
34
|
*/
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
+
import { VNodeChild } from 'vue';
|
|
1
2
|
import { FtFormColumnBase } from './columns';
|
|
2
3
|
import { CommonFormItemProps, FormTypeMap } from './define-component';
|
|
4
|
+
type Slots = (props: {
|
|
5
|
+
value: any;
|
|
6
|
+
isView: boolean;
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}) => VNodeChild;
|
|
9
|
+
export type CommonSlots<T extends readonly string[]> = {
|
|
10
|
+
[K in T[number]]?: Slots;
|
|
11
|
+
};
|
|
3
12
|
interface UseFormItemOptions<FormData extends Record<string, any>, Type extends keyof FormTypeMap<FormData>> {
|
|
4
13
|
/** 通用 props */
|
|
5
14
|
props: CommonFormItemProps<FormTypeMap<FormData>[Type]["columns"]>;
|
|
@@ -17,6 +26,6 @@ interface UseFormItemOptions<FormData extends Record<string, any>, Type extends
|
|
|
17
26
|
*/
|
|
18
27
|
export declare const useFormItem: <FromData extends Record<string, any>, Type extends keyof FormTypeMap<FromData>>(options: UseFormItemOptions<FtFormColumnBase<FormData>, Type>) => {
|
|
19
28
|
valueComputed: import('vue').WritableComputedRef<any, any>;
|
|
20
|
-
|
|
29
|
+
slots: Record<string, (props?: any) => VNodeChild> | undefined;
|
|
21
30
|
};
|
|
22
31
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -345,7 +345,11 @@ const useForm = (props, formData, runtimePropsKeys) => {
|
|
|
345
345
|
visibleColumns.value.forEach((usefulColumn) => {
|
|
346
346
|
const { fields } = getFieldsAndValues(usefulColumn);
|
|
347
347
|
fields.forEach((field) => {
|
|
348
|
-
|
|
348
|
+
let value = get(form.value, field);
|
|
349
|
+
if (usefulColumn.formatGetFormData) {
|
|
350
|
+
value = usefulColumn.formatGetFormData(value);
|
|
351
|
+
}
|
|
352
|
+
set(formData2, field, value);
|
|
349
353
|
});
|
|
350
354
|
});
|
|
351
355
|
return formData2;
|
|
@@ -388,13 +392,25 @@ const useFormItem = (options) => {
|
|
|
388
392
|
valueSetter = props.column.valueSetter;
|
|
389
393
|
}
|
|
390
394
|
const { form } = useFormInject();
|
|
395
|
+
const fieldsData = ref([]);
|
|
391
396
|
const valueComputed = computed({
|
|
392
397
|
get() {
|
|
393
398
|
let val;
|
|
394
399
|
if (props.column.fields) {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
400
|
+
const length = Math.max(
|
|
401
|
+
props.column.fields.length,
|
|
402
|
+
fieldsData.value.length
|
|
403
|
+
);
|
|
404
|
+
const valArr = Array(length).fill(void 0);
|
|
405
|
+
for (let i = 0; i < length; i++) {
|
|
406
|
+
const field = props.column.fields[i];
|
|
407
|
+
if (field && field !== "-") {
|
|
408
|
+
valArr[i] = get(form.value, field);
|
|
409
|
+
} else if (fieldsData.value[i]) {
|
|
410
|
+
valArr[i] = fieldsData.value[i];
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
val = valArr;
|
|
398
414
|
} else if (props.column.field) {
|
|
399
415
|
val = get(form.value, props.column.field);
|
|
400
416
|
} else {
|
|
@@ -406,8 +422,14 @@ const useFormItem = (options) => {
|
|
|
406
422
|
set(val) {
|
|
407
423
|
if (valueSetter) val = valueSetter(val);
|
|
408
424
|
if (props.column.fields) {
|
|
425
|
+
const valArr = val ?? [];
|
|
426
|
+
fieldsData.value = valArr;
|
|
409
427
|
props.column.fields.forEach((field, index) => {
|
|
410
|
-
|
|
428
|
+
const v = valArr[index];
|
|
429
|
+
if (field === "-") {
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
set(form.value, field, v);
|
|
411
433
|
});
|
|
412
434
|
} else if (props.column.field) {
|
|
413
435
|
set(form.value, props.column.field, val);
|
|
@@ -416,12 +438,24 @@ const useFormItem = (options) => {
|
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
});
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
441
|
+
let slots;
|
|
442
|
+
if (props.column.slots) {
|
|
443
|
+
slots = Object.fromEntries(
|
|
444
|
+
Object.entries(props.column.slots).map(([key, value]) => {
|
|
445
|
+
return [
|
|
446
|
+
key,
|
|
447
|
+
(scopedProps) => value({
|
|
448
|
+
value: valueComputed.value,
|
|
449
|
+
isView: props.isView,
|
|
450
|
+
scopedProps
|
|
451
|
+
})
|
|
452
|
+
];
|
|
453
|
+
})
|
|
454
|
+
);
|
|
455
|
+
}
|
|
422
456
|
return {
|
|
423
457
|
valueComputed,
|
|
424
|
-
|
|
458
|
+
slots
|
|
425
459
|
};
|
|
426
460
|
};
|
|
427
461
|
const defineFtForm = (setup, renderMap, _runtimeProps) => {
|
|
@@ -435,6 +469,7 @@ const defineFtForm = (setup, renderMap, _runtimeProps) => {
|
|
|
435
469
|
"formData",
|
|
436
470
|
"internalFormProps",
|
|
437
471
|
"onSubmit",
|
|
472
|
+
"isView",
|
|
438
473
|
"onUpdate:formData",
|
|
439
474
|
..._runtimeProps
|
|
440
475
|
];
|
|
@@ -462,10 +497,11 @@ const defineFtForm = (setup, renderMap, _runtimeProps) => {
|
|
|
462
497
|
return null;
|
|
463
498
|
}
|
|
464
499
|
const component = renderMap.get(column.type);
|
|
500
|
+
const isView = toValue(column.isView) ?? props.isView;
|
|
465
501
|
return h(component, {
|
|
466
502
|
column,
|
|
467
503
|
// 是否为查看模式
|
|
468
|
-
isView
|
|
504
|
+
isView,
|
|
469
505
|
key: getField(column)
|
|
470
506
|
});
|
|
471
507
|
})
|