| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- import type { BasicTableProps, TableActionType, FetchParams, BasicColumn } from '../types/table';
- import type { PaginationProps } from '../types/pagination';
- import type { DynamicProps } from '/#/utils';
- import type { FormActionType } from '/@/components/Form';
- import type { WatchStopHandle } from 'vue';
- import { getDynamicProps } from '/@/utils';
- import { ref, onUnmounted, unref, watch, toRaw } from 'vue';
- import { isProdMode } from '/@/utils/env';
- import { error } from '/@/utils/log';
- type Props = Partial<DynamicProps<BasicTableProps>>;
- type UseTableMethod = TableActionType & {
- getForm: () => FormActionType;
- };
- export function useTable(
- tableProps?: Props
- ): [(instance: TableActionType, formInstance: UseTableMethod) => void, TableActionType] {
- const tableRef = ref<Nullable<TableActionType>>(null);
- const loadedRef = ref<Nullable<boolean>>(false);
- const formRef = ref<Nullable<UseTableMethod>>(null);
- let stopWatch: WatchStopHandle;
- function register(instance: TableActionType, formInstance: UseTableMethod) {
- isProdMode() &&
- onUnmounted(() => {
- tableRef.value = null;
- loadedRef.value = null;
- });
- if (unref(loadedRef) && isProdMode() && instance === unref(tableRef)) return;
- tableRef.value = instance;
- formRef.value = formInstance;
- tableProps && instance.setProps(getDynamicProps(tableProps));
- loadedRef.value = true;
- stopWatch?.();
- stopWatch = watch(
- () => tableProps,
- () => {
- tableProps && instance.setProps(getDynamicProps(tableProps));
- },
- {
- immediate: true,
- deep: true,
- }
- );
- }
- function getTableInstance(): TableActionType {
- const table = unref(tableRef);
- if (!table) {
- error(
- 'The table instance has not been obtained yet, please make sure the table is presented when performing the table operation!'
- );
- }
- return table as TableActionType;
- }
- const methods: TableActionType & {
- getForm: () => FormActionType;
- } = {
- reload: async (opt?: FetchParams) => {
- getTableInstance().reload(opt);
- },
- setProps: (props: Partial<BasicTableProps>) => {
- getTableInstance().setProps(props);
- },
- redoHeight: () => {
- getTableInstance().redoHeight();
- },
- setLoading: (loading: boolean) => {
- getTableInstance().setLoading(loading);
- },
- getDataSource: () => {
- return toRaw(getTableInstance().getDataSource());
- },
- getColumns: ({ ignoreIndex = false }: { ignoreIndex?: boolean } = {}) => {
- const columns = getTableInstance().getColumns({ ignoreIndex }) || [];
- return toRaw(columns);
- },
- setColumns: (columns: BasicColumn[]) => {
- getTableInstance().setColumns(columns);
- },
- setTableData: (values: any[]) => {
- return getTableInstance().setTableData(values);
- },
- setPagination: (info: Partial<PaginationProps>) => {
- return getTableInstance().setPagination(info);
- },
- deleteSelectRowByKey: (key: string) => {
- getTableInstance().deleteSelectRowByKey(key);
- },
- getSelectRowKeys: () => {
- return toRaw(getTableInstance().getSelectRowKeys());
- },
- getSelectRows: () => {
- return toRaw(getTableInstance().getSelectRows());
- },
- clearSelectedRowKeys: () => {
- getTableInstance().clearSelectedRowKeys();
- },
- setSelectedRowKeys: (keys: string[] | number[]) => {
- getTableInstance().setSelectedRowKeys(keys);
- },
- getPaginationRef: () => {
- return getTableInstance().getPaginationRef();
- },
- getSize: () => {
- return toRaw(getTableInstance().getSize());
- },
- updateTableData: (index: number, key: string, value: any) => {
- return getTableInstance().updateTableData(index, key, value);
- },
- getRowSelection: () => {
- return toRaw(getTableInstance().getRowSelection());
- },
- getCacheColumns: () => {
- return toRaw(getTableInstance().getCacheColumns());
- },
- getForm: () => {
- return (unref(formRef) as unknown) as FormActionType;
- },
- setShowPagination: async (show: boolean) => {
- getTableInstance().setShowPagination(show);
- },
- getShowPagination: () => {
- return toRaw(getTableInstance().getShowPagination());
- },
- expandAll: () => {
- getTableInstance().expandAll();
- },
- collapseAll: () => {
- getTableInstance().collapseAll();
- },
- };
- return [register, methods];
- }
|