wupengfei
8 天以前 a04b2d215ec4290e3acf55a0bdab56f1d1fbb551
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { ColumnsRenderProps } from '@bole-core/components';
import { MaybeRef } from 'vue';
 
export type UsePortraitTableColumnsItem<TData extends object = object> = ColumnsRenderProps & {
  label?: string;
  key?: keyof TData;
};
 
export type UsePortraitTableOptions<TData extends object> = {
  data: Ref<TData>;
  columns?: UsePortraitTableColumnsItem<TData>[];
};
 
export function usePortraitTable<TData extends object>(options: UsePortraitTableOptions<TData>) {
  const portraitTableProps = computed(
    () =>
      ({
        data: options.data.value,
        columns: options.columns ?? [],
      } as any)
  );
 
  return {
    portraitTableProps,
  };
}
 
type UsePortraitTableWithAttachmentOptions<
  TData extends object,
  TAnnexItem extends object = object
> = UsePortraitTableOptions<TData> & {
  annexList: Ref<TAnnexItem[]>;
  columnsRenderProps?: { [key in keyof TAnnexItem]?: ColumnsRenderProps };
};
 
export function usePortraitTableWithAttachment<
  TData extends object,
  TAnnexItem extends object = object
>(options: UsePortraitTableWithAttachmentOptions<TData, TAnnexItem>) {
  const { annexList, columnsRenderProps } = options;
  const { portraitTableProps } = usePortraitTable(options);
 
  const portraitTableWithAttachmentProps = computed(() => ({
    annexList: annexList.value,
    portraitTableProps: portraitTableProps.value,
    columnsRenderProps,
  }));
 
  return { portraitTableWithAttachmentProps };
}