import { VNode, ComponentPublicInstance } from "vue"; import { BreakPoint, Responsive } from "@/components/Grid/interface"; import { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults"; import { ProTableProps } from "@/components/ProTable/index.vue"; import ProTable from "@/components/ProTable/index.vue"; import { DefaultRow } from "element-plus/es/components/table/src/table/defaults"; export interface EnumProps { label?: string; // 选项框显示的文字 value?: string | number | boolean | any[]; // 选项框值 disabled?: boolean; // 是否禁用此选项 tagType?: string; // 当 tag 为 true 时,此选择会指定 tag 显示类型 children?: EnumProps[]; // 为树形选择时,可以通过 children 属性指定子选项 [key: string]: any; } export type TypeProps = "index" | "selection" | "expand"; export type SearchType = | "input" | "input-number" | "select" | "select-v2" | "tree-select" | "cascader" | "date-picker" | "time-picker" | "time-select" | "switch" | "slider"; export type SearchRenderScope = { searchParam: { [key: string]: any }; placeholder: string; clearable: boolean; options: EnumProps[]; data: EnumProps[]; }; export type SearchProps = { el?: SearchType; // 当前项搜索框的类型 props?: any; // 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件 key?: string; // 当搜索项 key 不为 prop 属性时,可通过 key 指定 order?: number; // 搜索项排序(从大到小) span?: number; // 搜索项所占用的列数,默认为1列 offset?: number; // 搜索字段左侧偏移列数 defaultValue?: string | number | boolean | any[]; // 搜索项默认值 render?: (scope: SearchRenderScope) => VNode; // 自定义搜索内容渲染(tsx语法) } & Partial>; export type FieldNamesProps = { label: string; value: string; children?: string; }; export type RenderScope = { row: T; $index: number; column: TableColumnCtx; [key: string]: any; }; export type HeaderRenderScope = { $index: number; column: TableColumnCtx; [key: string]: any; }; export interface ColumnProps extends Partial, "children" | "renderCell" | "renderHeader">> { tag?: boolean; // 是否是标签展示 isShow?: boolean; // 是否显示在表格当中 search?: SearchProps | undefined; // 搜索项配置 enum?: EnumProps[] | ((params?: any) => Promise); // 枚举类型(字典) isFilterEnum?: boolean; // 当前单元格值是否根据 enum 格式化(示例:enum 只作为搜索项数据) fieldNames?: FieldNamesProps; // 指定 label && value && children 的 key 值 headerRender?: (scope: HeaderRenderScope) => VNode; // 自定义表头内容渲染(tsx语法) render?: (scope: RenderScope) => VNode | string; // 自定义单元格内容渲染(tsx语法) _children?: ColumnProps[]; // 多级表头 } export type ProTableInstance = Omit, keyof ComponentPublicInstance | keyof ProTableProps>;