@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.
@@ -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?: string[];
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
- isView: import('vue').ComputedRef<boolean>;
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
- set(formData2, field, get(form.value, field));
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
- val = props.column.fields.map((field) => {
396
- return get(form.value, field);
397
- }).filter((e) => !isEmptyStrOrNull(e));
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
- set(form.value, field, val == null ? void 0 : val[index]);
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
- const isView = computed(() => {
420
- return toValue(props.column.isView) ?? props.isView;
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
- isView
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: column.isView,
504
+ isView,
469
505
  key: getField(column)
470
506
  });
471
507
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ftjs/core",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "keywords": [],
5
5
  "author": "",
6
6
  "license": "MIT",