UNPKG

el-plus-powerful-table

Version:

## [DOCS](https://peng-xiao-shuai.github.io/vite-vue-admin-docs/zh-CN/component_directive/component/powerful-table-doc.html)

1,314 lines (1,235 loc) 28.2 kB
import type { ElTable } from 'element-plus/es' import type { EmitEnum } from '../powerful-table/src/powerful-table-data' import type { CSSProperties, Component, Plugin, SetupContext, VNode, VideoHTMLAttributes, WatchStopHandle, h as createElement, } from 'vue' import type { FDatePicker, FInput, FSelect } from '../filter' import type { ButtonProps, ElTooltipProps, ImageProps, InputProps, LinkProps, PaginationProps, RateProps, SwitchProps, TableColumnCtx, TableProps, TagProps, TreeNode, } from 'element-plus' export interface PowerfulTableData<Row = any> { listLoading: boolean develop: boolean[] currentPage: number pageSize: number watchCache: WatchStopHandle[] currentSelect: PowerfulTableProps<Row>['list'] otherSelect: PowerfulTableProps<Row>['list'] operate: PowerfulTableOperateData total: number } export interface StateData<Row = any> { tableLists: PowerfulTableProps<Row>['list'] isPC: boolean isTable: boolean } // usePowerfulTableStates 函数的返回类型 export interface PowerfulTableStatesReturn<Row = any> { Size: 'large' | 'default' | 'small' multipleTable: import('vue').Ref<InstanceType<typeof ElTable> | null> filterComponents: import('vue').Ref< InstanceType<typeof FSelect | typeof FInput | typeof FDatePicker>[] | null > powerfulTableData: PowerfulTableData<Row> injectProps: Record<string, any> stateData: StateData<Row> } export type PowerfulTableExpose<Row = any> = Readonly<{ $slots: SetupContext['slots'] $attrs: SetupContext['attrs'] $refs: { /** * 表格 Ref 实例 */ multipleTable: import('vue').Ref<InstanceType<typeof ElTable> | null> /** * 筛选组件 Ref 实例 */ filterComponents: import('vue').Ref< InstanceType<typeof FSelect | typeof FInput | typeof FDatePicker>[] | null > } /** * 组件 props */ props: PowerfulTableProps<Row> /** * 全局注入数据 */ injectProps: InjectProps /** * 过滤隐藏后的列 */ headerLists: PowerfulTableHeader<Row>[] /** * 内置数据也就是 vue2 中的 data */ powerfulTableData: PowerfulTableData<Row> /** * 状态数据 */ stateData: StateData<Row> /** * 重置数据发送请求 */ resetList: ((params?: object) => void) | undefined /** * 重新发送请求 */ getListData: ((params?: object) => void) | undefined /** * 添加选中行 */ handleSelectionChange: (e: Row[]) => void /** * 重新计算表格布局位置 */ anewRender: () => void }> /* ------ props ------ */ export interface PowerfulTableProps<Row = any> { list: Row[] btnConfig?: BtnConfig.Config<Row> size?: Size selectData?: any[] isSelect?: boolean selectable?: (row: Row, index: number) => boolean selectCompare?: string[] header: PowerfulTableHeader<Row>[] operateData?: PowerfulTableOperateData /** * 是否开启分页 * @default true */ isPagination?: boolean tree?: PowerfulTableTree<Row> /** * el-pagination props * @see https://element-plus.gitee.io/zh-CN/component/pagination.html#%E5%B1%9E%E6%80%A7 */ paginationProperty?: Partial<PaginationProps> /** * el-table props * @see https://element-plus.gitee.io/zh-CN/component/table.html#table-%E5%B1%9E%E6%80%A7 */ property?: Partial<TableProps<Row>> // 2.1.16 listRequest?: { listApi: (params: object) => Promise<any> /** * 查询条件 * @default {[pageNoKey]: 1, [pageSizeKey]: 10} */ listQuery?: object /** * 条数 key * @default 'pageSize' */ pageSizeKey?: string /** * 页数 key * @default 'pageNo' */ pageNoKey?: string /** * 网络请求返回的目标对象 key * @default 'data.result' */ responseKey?: string // 例如 'data.data.result' /** * 网络请求返回的目标对象中的属性 key * @default 'rows' */ listsKey?: string /** * 条数 key * @default 'pageSize' */ totalKey?: string } } /** * tree 树结构数据 */ export type PowerfulTableTree<Row = any> = { lazy?: boolean load?: (row: Row, treeNode: TreeNode, resolve: (data: Row[]) => void) => void props?: { children: string; hasChildren: string } } /* ------ operateData 批量操作 ------ */ // operates 批量操作下拉框数据 export type PowerfulTableLabelValue = { /** * 显示在页面的 label */ label: string /** * 变量接收的值 */ value: string | number [s: string]: string | number } // operateData 批量操作 export interface PowerfulTableOperateData { /** * 当前批量操作下拉框选中的值 * @default '' */ value?: PowerfulTableLabelValue['value'] /** * `@batchOperate` 事件返回的对象中 ids 组成的值。假设为 id 时,那 `@batchOperate` 事件中 ids 值为 `[选中数据].map(item => item.id)` * @default 'id' */ prop?: string /** * 样式 * @deprecated */ style?: CSSProperties /** * `el-select` 组件 `props` * @see https://element-plus.gitee.io/zh-CN/component/select.html#select-attributes */ selectProperty?: InstanceType< typeof import('element-plus')['ElSelect'] >['$props'] /** * `el-button` 组件 `props` * @see https://element-plus.gitee.io/zh-CN/component/button.html#button-attributes */ btnProperty?: Partial<ButtonProps> /** * `el-tooltip` 组件 `props` * @see https://element-plus.gitee.io/zh-CN/component/tooltip.html#tooltip-attributes */ tooltipProperty?: Partial<ElTooltipProps> /** * 批量操作按钮 * @default [] */ operates: PowerfulTableLabelValue[] } /* ------ header 表格头部数据 ------ */ // header 表格头部数据 export interface PowerfulTableHeader<Row = any> { /** * 是否显示溢出提示 * @default false */ overflowTooltip?: boolean /** * 列标签 */ label: string /** * 是否默认显示列 * @default true */ defaultShow?: boolean /** * 是否默认在表头显示过滤按钮 */ defaultFilter?: boolean // 当前列是否在表头显示过滤按钮 /** * 列的最小宽度 * @default 140 */ minWidth?: string | number /** * 列的宽度 * @default '100%' */ width?: string | number /** * 是否显示或显示过滤列 * @default undefined */ isShowOrFilterColumn?: false | 'show' | 'filter' /** * 是否可排序 * @default false */ sortable?: boolean | 'custom' /** * 是否固定列 * @default false */ fixed?: boolean | 'left' | 'right' /** * 表格头部文本对齐方式 * @default 'center' */ headerAlign?: 'left' | 'center' | 'right' /** * 自定义表格头部插槽名称 */ headerSlotName?: string /** * 单元格显示数据 */ props: PowerfulTableHeaderProps<Row>[] | PowerfulTableHeaderProps<Row> /** * el-tableColumn props 表格列属性 * @see https://element-plus.gitee.io/zh-CN/component/table.html#table-column-%E5%B1%9E%E6%80%A7 */ property?: Partial<TableColumnCtx<Row>> } export type SetDataType<T extends keyof _TYPE, Row = any> = { [key in keyof _TYPE<Row>[T]]: _TYPE<Row>[T][key] } export type PowerfulTableHeaderPropsData<Row = any> = | { type: 'image' data?: SetDataType<'image', Row> } | { type: 'text' data?: SetDataType<'text', Row> } | { type: 'switch' data?: SetDataType<'switch', Row> } | { type: 'btn' data?: SetDataType<'btn', Row> } | { type: 'video' data?: SetDataType<'video', Row> } | { type: 'input' data?: SetDataType<'input', Row> } | { type: 'iconfont' data?: SetDataType<'iconfont', Row> } | { type: 'tag' data?: SetDataType<'tag', Row> } | { type: 'rate' data?: SetDataType<'rate', Row> } | { type: 'href' data?: SetDataType<'href', Row> } | { type: 'slot' data?: SetDataType<'slot', Row> } | { type: 'textarea' data?: SetDataType<'textarea', Row> } | { type?: undefined data?: SetDataType<'text', Row> } export interface PowerfulTableBaseProps<Row = any> { /** * 属性:字符串类型 */ prop: string /** * 过滤器:可选的PowerfulTableFilter数组,或一个函数用于接收行和索引作为参数并返回字符串或数字 */ filters?: | PowerfulTableFilter[] | ((row: Row, index?: number) => string | number) /** * 文本:可选的字符串 */ text?: string /** * 插槽名称:可选的字符串 */ slotName?: string /** * 渲染函数 */ render?: ( /** * h 是一个函数,用来创建虚拟节点 */ h: typeof createElement, /** * 当前行数据 */ row: Row, index: number ) => VNode | string | number | JSX.Element /** * 预留字段,可选类型为字符串或 `HTMLElement` */ reserve?: string | HTMLElement /** * 元素的样式 */ style?: CSSProperties /** * 是否为过滤项 */ filterItem?: boolean // 指定过滤项 /** * 过滤类型,可选值为'select''date''input' */ filtersType?: 'select' | 'date' | 'input' /** * 自定义过滤器 */ customFilter?: ( /** * value 值 */ v: string | (number | string)[], /** * 单元格配置数据 */ column: PowerfulTableHeader<Row>, /** * resolve 用于设置过滤后数据 */ resolve: (value: any[]) => void ) => void } /** * props 单元格数据 */ export type PowerfulTableHeaderProps<Row = any> = PowerfulTableHeaderPropsData<Row> & PowerfulTableBaseProps<Row> & { /** * 数据:可选的SetDataType方法的参数 */ data?: SetDataType<T, Row> /** * 类型:可选的_TYPE枚举类型的关键字 * @default 'text' */ type?: keyof _TYPE } export type _TYPE<Row = any> = { image: ImageDataType<Row> text: TextDataType<Row> switch: SwitchDataType<Row> btn: BtnDataType<Row>[] | (BtnDataType<Row>[] | BtnDataType<Row>)[] video: VideoDataType<Row> input: InputDataType<Row> iconfont: IconFontDataType<Row> tag: TagDataType<Row> rate: RateDataType<Row> href: LinkDataType<Row> slot: null textarea: InputDataType<Row> } export type EventType = Exclude<keyof _TYPE, 'slot' | 'btn' | 'href'> export type PowerfulTableFilter = { /** * 文本对应的值 */ key: string | number /** * 显示的文本 */ value: string } type ElComponentProp<P = any, Row = any> = | Partial<P> | (({ /** * 当前行数据 */ row, /** * 当前行索引 */ index, /** * 单元格配置数据 */ props, }: { row: Row index: number props: PowerfulTableHeaderProps<Row> }) => Partial<P>) export type OnEmit<T> = Partial<{ /** * 点击事件 */ click: (params: T, ...arg: any) => void }> export type TextDataType<Row = any> = { /** * 超出多少的行数使用 ... 代替 */ line?: number /** * 是否显示 “展开 / 收起” 操作按钮 */ develop?: boolean /** * 事件合集 */ on?: OnEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 当前行下标 */ index: number /** * 当前行数据 */ row: Row }> /** * 格式化函数 */ formatting?: ({ /** * 当前行数据 */ row, /** * 当前行索引 */ index, /** * 单元格配置数据 */ props, }: { row: Row index?: number props: PowerfulTableHeaderProps<Row> }) => string | number } export type ImageEmit<T> = { /** * 可选的加载回调函数,用于加载数据 * @param params 调用该函数时传递的参数 * @param arg 可变参数 * @returns 无返回值 */ load?: (params: T, ...arg: any) => void /** * 可选的错误回调函数,用于处理错误 * @param params 调用该函数时传递的参数 * @param arg 可变参数 * @returns 无返回值 */ error?: (params: T, ...arg: any) => void /** * 可选的切换回调函数,用于切换状态 * @param params 调用该函数时传递的参数 * @param arg 可变参数 * @returns 无返回值 */ switch?: (params: T, ...arg: any) => void /** * 可选的关闭回调函数,用于关闭组件 * @param params 调用该函数时传递的参数 * @param arg 可变参数 * @returns 无返回值 */ close?: (params: T, ...arg: any) => void /** * 可选的显示回调函数,用于显示组件 * @param params 调用该函数时传递的参数 * @param arg 可变参数 * @returns 无返回值 */ show?: (params: T, ...arg: any) => void } export type ImageDataType<Row = any> = { /** * 图片的样式 */ style: CSSProperties /** * 图片事件合集 */ on?: ImageEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 当前行下标 */ index: number /** * 当前行数据 */ row: Row }> /** * el-image props 图片属性 * @see https://element-plus.gitee.io/zh-CN/component/image.html#image-attributes */ property?: ElComponentProp<ImageProps, Row> } export type BtnDataType<Row = any> = { /** * 提示文本 */ tip?: string /** * 按钮文本 */ text?: string /** * 点击事件 */ click?: ({ /** * 单元格配置数据 */ props, /** * 自定义数据,data.params 数据,原封不动返回 */ params, /** * 当前行数据 */ row, /** * 当前行索引 */ index, /** * 当前按钮索引 */ btnIndex, }: { props: PowerfulTableHeaderProps<Row> params: any row: Row index: number btnIndex: number[] }) => void beforeClick?: ( { row, index, btnIndex, props, params, }: { /** * 当前行数据 */ row: Row /** * 当前行索引 */ index: number /** * 当前按钮索引 */ btnIndex: number[] /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 自定义数据,data.params 数据,原封不动返回 */ params: any }, /** * resolve 调用表示成功,往下继续执行 */ resolve: (value: unknown) => void ) => void /** * 是否为更多操作按钮 */ isMore?: boolean /** * 元素样式 */ style?: CSSProperties /** * 是否显示按钮 * @param row 行数据 * @param index 行索引 * @returns 是否显示按钮 */ showBtn?: ((row: Row, index: number) => boolean) | boolean /** * 自定义参数 */ params?: any /** * el-tooltip props 提示框属性 * @see https://element-plus.gitee.io/zh-CN/component/tooltip.html#attributes */ tipProperty?: Partial<ElTooltipProps> /** * el-button props 按钮属性 * @see https://element-plus.gitee.io/zh-CN/component/button.html#button-attributes */ property?: ElComponentProp<ButtonProps, Row> } export type SwitchEmit<T> = { /** * change 事件 */ change?: (params: T, ...arg: any) => void } export type SwitchDataType<Row = any> = { /** * 元素样式 */ style?: CSSProperties on?: SwitchEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 当前行下标 */ index: number /** * 当前行数据 */ row: Row }> /** * el-switch props 开关属性 * @see https://element-plus.gitee.io/zh-CN/component/switch.html#attributes */ property?: ElComponentProp<SwitchProps, Row> } export type InputEmit<T> = { /** * 可选的模糊函数,用于处理模糊事件 * @param params T类型的参数 * @param ...arg 任意数量的参数 * @returns 无返回值 */ blur?: (params: T, ...arg: any) => void /** * 可选的改变函数,用于处理改变事件 * @param params T类型的参数 * @param ...arg 任意数量的参数 * @returns 无返回值 */ change?: (params: T, ...arg: any) => void /** * 可选的输入函数,用于处理输入事件 * @param params T类型的参数 * @param ...arg 任意数量的参数 * @returns 无返回值 */ input?: (params: T, ...arg: any) => void /** * 可选的聚焦函数,用于处理聚焦事件 * @param params T类型的参数 * @param ...arg 任意数量的参数 * @returns 无返回值 */ focus?: (params: T, ...arg: any) => void /** * 可选的清除函数,用于处理清除事件 * @param params T类型的参数 * @param ...arg 任意数量的参数 * @returns 无返回值 */ clear?: (params: T, ...arg: any) => void } export type InputDataType<Row = any> = { /** * 表示一个可选的符号,类型为字符串 */ symbol?: string /** * 表示一个可选的样式对象,类型为CSSProperties */ style?: CSSProperties /** * 表示一个可选的slot属性,类型为 'prepend' | 'append' | 'prefix' | 'suffix' * @see https://element-plus.gitee.io/zh-CN/component/input.html#slots */ slot?: 'prepend' | 'append' | 'prefix' | 'suffix' /** * 表示一个可选的on属性,类型为 InputEmit接口的实例 */ on?: InputEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * index属性表示当前行在表格中的索引值 */ index: number /** * row属性表示当前行的数据对象 */ row: Row }> /** * 表示一个可选的property属性,类型为 ElComponentProp<InputProps, Row>的实例 */ property?: ElComponentProp<InputProps, Row> } /** * 视频事件发射类型 */ export type VideoEmit<T> = { /** * 播放事件 * @param params 参数 * @param arg 附加参数 * @returns 无返回值 */ play?: (params: T, ...arg: any) => void /** * 暂停事件 * @param params 参数 * @param arg 附加参数 * @returns 无返回值 */ pause?: (params: T, ...arg: any) => void } export type VideoDataType<Row = any> = { /** * 元素样式 */ style?: CSSProperties /** * 视频事件 */ on?: VideoEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 数字类型的索引 */ index: number /** * 表格行数据 */ row: Row }> /** * 视频属性 * @see https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/video */ property?: ElComponentProp<VideoHTMLAttributes, Row> } export type IconFontDataType<Row = any> = { /** * 类型为 string[] 或 string 的可选类名 */ class?: string[] | string /** * 可选的事件处理函数,返回值为包含属性、索引和行对象的 PowerfulTableHeaderProps 对象 */ on?: OnEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 数字类型的索引 */ index: number /** * 表格行数据 */ row: Row }> /** * 类似 CSS 的样式对象 */ style?: CSSProperties } export type RateEmit<T> = { /** * change 事件 */ change?: (params: T, ...arg: any) => void } export type RateDataType<Row = any> = { /** * 样式属性 */ style?: CSSProperties /** * 事件合集 */ on?: RateEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 数字类型的索引 */ index: number /** * 表格行数据 */ row: Row }> /** * el-rate props 评分属性 * @see https://element-plus.gitee.io/zh-CN/component/rate.html#attributes */ property?: ElComponentProp<RateProps, Row> } export type LinkDataType<Row = any> = { /** * 原生 target 属性,类型为 '_self' | '_blank' | '_parent' | '_top' */ target?: '_self' | '_blank' | '_parent' | '_top' /** * 样式属性 */ style?: CSSProperties /** * 链接文字 */ text?: string | ((row: Row) => string) /** * 事件合集 */ on?: OnEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 数字类型的索引 */ index: number /** * 表格行数据 */ row: Row }> /** * el-link props 链接属性 * @see https://element-plus.gitee.io/zh-CN/component/link.html#attributes */ property?: ElComponentProp<LinkProps, Row> } export type TagEmit<T> = { /** * 点击事件回调函数,可选参数 * * @param params T类型的参数 * @param ...arg 任意数量的参数 */ click?: (params: T, ...arg: any) => void /** * 关闭事件回调函数,可选参数 * * @param params T类型的参数 * @param ...arg 任意数量的参数 */ close?: (params: T, ...arg: any) => void } export type TagDataType<Row = any> = { /** * 可选的CSS样式对象 */ style?: CSSProperties /** * 可选的函数,用于设置每个标签的颜色 * @param row 行数据 * @param tag 标签内容 * @returns 标签颜色 */ color?: (row: Row, tag: string) => string /** * 可选的数字,用于设置标签数量 */ number?: number /** * 事件合集 */ on?: TagEmit<{ /** * 单元格配置数据 */ props: PowerfulTableHeaderProps<Row> /** * 数字类型的索引 */ index: number /** * 表格行数据 */ row: Row }> /** * el-tag props 标签属性 * @see https://element-plus.gitee.io/zh-CN/component/tag.html#attributes */ property?: ElComponentProp<TagProps, Row> } export interface LangPackages { [s: string]: { [s: string]: string | ((...arg: any) => string) } } // 组件注入数据 export type InjectProps = { /** * 语言包 * @see https://github.com/peng-xiao-shuai/el-plus-powerful-table/blob/master-ts/packages/locale/packages.ts */ locale?: LangPackages /** * 列表请求配置 */ listRequest?: { /** * 查询条件 * @default {[pageNoKey]: 1, [pageSizeKey]: 10} */ listQuery?: object /** * 条数 key * @default 'pageSize' */ pageSizeKey?: string /** * 页数 key * @default 'pageNo' */ pageNoKey?: string /** * 网络请求返回的目标对象 key * @default 'data.result' */ responseKey?: string // 例如 'data.data.result' /** * 网络请求返回的目标对象中的属性 key * @default 'rows' */ listsKey?: string /** * 条数 key * @default 'pageSize' */ totalKey?: string } /** * 空数据时显示的组件 */ emptyElement?: Component } // btnPlus组件 export namespace BtnConfig { export type BtnList<Row = any> = { /** * 表格按钮的样式对象 */ style?: CSSProperties /** * 按钮是否禁用 */ disabled?: boolean /** * 按钮的操作类型,可选值为 'none', 'single', 'batch' */ operateType?: 'none' | 'single' | 'batch' /** * 按钮显示的文本内容 */ text?: string /** * 按钮提示信息 */ tip?: string /** * 按钮功能,将会返回到 `@btn-plus-change` 中 effect */ effect?: string /** * 是否显示按钮,返回值为布尔值 */ showBtn?: (() => boolean) | boolean /** * 按钮点击事件回调函数 * @param btnItem 按钮对象 * @param rows 行数据对象数组 */ click?: ({ btnItem, rows }: { btnItem: BtnList; rows: Row }) => void /** * 按钮点击前的回调函数 * @param btnItem 按钮对象 * @param rows 行数据对象数组 * @param resolve 调用后执行后续操作 */ beforeClick?: ( { btnItem, rows, }: { btnItem: BtnList rows: Row }, resolve: (value: boolean) => void ) => void /** * 按钮组件的属性对象 * @see https://element-plus.gitee.io/zh-CN/component/button.html#attributes */ property?: ElComponentProp<ButtonProps, any> } export type Config<Row> = { /** * 左侧按钮列表 */ btnList?: BtnList<Row>[] /** * 右侧按钮列表 */ btnRightList?: BtnList<Row>[] } } export type SFCWithInstall<T> = T & Plugin export type ThemeType = 'primary' | 'success' | 'warning' | 'danger' | 'info' export type Size = '' | 'large' | 'default' | 'small' export type ComponentEvent<Row = any> = { /** * 组件名称,可以是_TYPE类型的关键字或者'filter' */ componentName: keyof _TYPE | 'filter' /** * 事件类型 */ eventType: string /** * 行数据 */ row: Row /** * 索引(可选) */ index?: number /** * 单元格配置 */ props: PowerfulTableHeaderProps<any>[] | PowerfulTableHeaderProps<any> } export type EmitType = `${EmitEnum}` // 定义自定义事件上参数 export type EmitTypeArgs<Row = any> = { [EmitEnum.BtnPlusChange]: { effect: BtnConfig.BtnList['effect'] rows: Row[] } [EmitEnum.BtnClick]: Parameters<NonNullable<BtnDataType['click']>>[0] [EmitEnum.SizeChange]: { params: { pageNum: number; pageSize: number } select: Row[] } [EmitEnum.ComponentEvent]: ComponentEvent<Row> [EmitEnum.BatchOperate]: { ids: (string | number)[] item: PowerfulTableLabelValue rows: Row[] } [EmitEnum.SortCustom]: { column: any; prop: string; order: string } } // 函数类型 export interface Handlers<Row = any> { [EmitEnum.BtnPlusChange]: ( payload: EmitTypeArgs<Row>[EmitEnum.BtnPlusChange] ) => void [EmitEnum.BtnPlusRefresh]: () => void [EmitEnum.BtnClick]: (payload: EmitTypeArgs<Row>[EmitEnum.BtnClick]) => void [EmitEnum.SizeChange]: ( payload: EmitTypeArgs<Row>[EmitEnum.SizeChange] ) => void [EmitEnum.ComponentEvent]: ( payload: EmitTypeArgs<Row>[EmitEnum.ComponentEvent], ...args: any ) => void [EmitEnum.BatchOperate]: ( payload: EmitTypeArgs<Row>[EmitEnum.BatchOperate] ) => void [EmitEnum.SortCustom]: ( payload: EmitTypeArgs<Row>[EmitEnum.SortCustom] ) => void } // 自定义事件类型 export type EmitEventType<Row = any> = { ( e: EmitEnum.BtnPlusChange, payload: EmitTypeArgs<Row>[EmitEnum.BtnPlusChange] ): void (e: EmitEnum.BtnPlusRefresh): void (e: EmitEnum.BtnClick, payload: EmitTypeArgs<Row>[EmitEnum.BtnClick]): void ( e: EmitEnum.SizeChange, payload: EmitTypeArgs<Row>[EmitEnum.SizeChange] ): void ( e: EmitEnum.ComponentEvent, payload: EmitTypeArgs<Row>[EmitEnum.ComponentEvent], ...args: any ): void ( e: EmitEnum.BatchOperate, payload: EmitTypeArgs<Row>[EmitEnum.BatchOperate] ): void (e: EmitEnum.Select, ...args: any): void (e: EmitEnum.SelectionChange, ...args: any): void (e: EmitEnum.SelectAll, ...args: any): void (e: EmitEnum.CellMouseEnter, ...args: any): void (e: EmitEnum.CellMouseLeave, ...args: any): void (e: EmitEnum.CellClick, ...args: any): void (e: EmitEnum.CellDblclick, ...args: any): void (e: EmitEnum.CellContextmenu, ...args: any): void (e: EmitEnum.RowClick, ...args: any): void (e: EmitEnum.RowContextmenu, ...args: any): void (e: EmitEnum.RowDblclick, ...args: any): void (e: EmitEnum.HeaderClick, ...args: any): void (e: EmitEnum.HeaderContextmenu, ...args: any): void (e: EmitEnum.FilterChange, ...args: any): void (e: EmitEnum.CurrentChange, ...args: any): void (e: EmitEnum.HeaderDragend, ...args: any): void (e: EmitEnum.ExpandChange, ...args: any): void ( e: EmitEnum.SortCustom, payload: EmitTypeArgs<Row>[EmitEnum.SortCustom] ): void }