usePage增加许多配置项,另外增加一些回调函数、插槽等等,修改逻辑增强配置灵活性
zk authored at 2023-11-21 17:42:23
3.03 KiB
NewLife.QuickVue
import { TableProps } from "element-plus";
import { Ref } from "vue";
import { ColumnConfig } from "../../form/model/form";
import { TableColumn, TableMoreProps } from "../../table/type";
import { ColumnKind } from "/@/api/page";

export type EditWrapper = 'div' | 'dialog' | 'drawer';

export interface TableDemoState {
	tableData: {
		data: EmptyObjectType[];
		header: TableColumn[];
		config: {
			total: number;
			loading: boolean;
			isBorder: boolean;
			isSelection: boolean;
			isSerialNo: boolean;
			isOperate: boolean;
		};
		search: ColumnConfig[];
		param: {
			pageNum: number;
			pageSize: number;
		};
	};
}

type EventSettingRefConfig<T> = T extends ColumnKind.LIST ? Array<TableColumn> : Array<ColumnConfig>

export interface EventSettingRef {
	type: ColumnKind;
	config: Ref<EventSettingRefConfig<EventSettingRef['type']>>;
	formData?: Ref<EmptyObjectType>;
}

// type UsePagePropsList = {
// 	in: ColumnKind.LIST
// } & TableColumn
// type UsePagePropsForm = {
// 	in: ColumnKind.ADD | ColumnKind.DETAIL | ColumnKind.EDIT | ColumnKind.SEARCH
// } & ColumnConfig
// type UsePagePropsCommon = ({in?: ColumnKind[]} & TableColumn) | ({ in?: ColumnKind[]} & ColumnConfig);

export interface ColumnIn {
	in?: ColumnKind | Array<ColumnKind>;
}
export interface MoreProp extends ColumnIn {
	/**参数名 */
	prop: string | Array<string>;
}
export interface UsePageProps {
	/** 表单配置 */
	columns?: Array<(Omit<TableColumn, 'prop'> & MoreProp) | (Omit<ColumnConfig, 'prop'> & MoreProp)>;
	/** 表格配置 */
	tableConfig?: Partial<TableProps<EmptyObjectType>> & Partial<TableMoreProps> & {
		api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
		url?: string;
		requestProps?: EmptyObjectType;
		handleWidth?: number;
	},
	detailConfig?: {
		api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
		url?: string;
		requestProps?: EmptyObjectType | ((row: EmptyObjectType) => EmptyObjectType);
	},
	addConfig?: {
		api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
		url?: string;
		requestProps?: EmptyObjectType;
	},
	editConfig?: {
		api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
		url?: string;
		requestProps?: EmptyObjectType;
	},
	onAddClick?: () => void;
	onAddBefore?: (data: EmptyObjectType, addFun: Function) => void;
	onAddAfter?: (data: EmptyObjectType) => void;
	onEditClick?: (data: EmptyObjectType) => void;
	onEditBefore?: (data: EmptyObjectType, editFun: Function) => void;
	onEditAfter?: (data: EmptyObjectType) => void;
	onDelBefore?: (data: EmptyObjectType, delFun: Function) => void;
	onDelAfter?: (data: EmptyObjectType) => void;
}

export interface PageHandle {
	reload: () => void;
}

export interface ProvidePage {
	tableColumns: Ref<TableColumn[]>;
	searchColumns: Ref<ColumnConfig[]>;
	editColumns: Ref<ColumnConfig[]>;
	addColumns: Ref<ColumnConfig[]>;
	detailColumns: Ref<ColumnConfig[]>;
	searchForm: Ref<EmptyObjectType>;
	infoForm: Ref<EmptyObjectType>;
	pageProps: UsePageProps;
	handle: PageHandle,
}