import { CreateElement, VNode } from 'vue' import { EmptyRender, EmptyRenderParams } from '../table' import { ColumnCellRenderOptions, ColumnContentRenderOptions, ColumnCellRenderParams } from '../column' import { ColumnExportCellRenderParams, ColumnExportFooterRenderParams } from './export' import { ColumnEditRenderOptions, ColumnEditRenderParams } from './edit' import { ColumnFooterRenderParams } from './footer' import { ColumnFilterRenderOptions, ColumnFilterRenderParams, ColumnFilterMethodParams, ColumnFilterResetParams } from './filter' import { ToolbarButtonRenderOptions, ToolbarButtonRenderParams } from '../toolbar' import { FormItemRenderOptions, FormItemRenderParams, FormItemVisibleParams, FormItemResetParams } from '../form-item' /** * 渲染器 */ export interface renderer { mixin(map: { [name: string]: RendererMapOptions }): renderer; get(name: string): RendererMapOptions; add(name: string, options: RendererMapOptions): renderer; delete(name: string): renderer; } export interface RendererMapOptions { // 筛选渲染 className?: string; isFooter?: boolean; renderFilter?(h: CreateElement, renderOpts: ColumnFilterRenderOptions, params: ColumnFilterRenderParams): VNode[] | string[]; filterMethod?(params: ColumnFilterMethodParams): boolean; filterResetMethod?(params: ColumnFilterResetParams): void; // 单元格渲染 renderHeader?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnCellRenderParams | ColumnEditRenderParams): VNode[] | string[]; renderDefault?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnCellRenderParams | ColumnEditRenderParams): VNode[] | string[]; renderFooter?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnFooterRenderParams): VNode[] | string[]; cellExportMethod?(params: ColumnExportCellRenderParams): string; footerCellExportMethod?(params: ColumnExportFooterRenderParams): string; // 编辑渲染 autofocus?: string; renderEdit?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnCellRenderParams | ColumnEditRenderParams): VNode[] | string[]; renderCell?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnCellRenderParams | ColumnEditRenderParams): VNode[] | string[]; editCellExportMethod?(params: ColumnExportCellRenderParams): string; // 内容渲染 renderExpand?(h: CreateElement, renderOpts: ColumnContentRenderOptions, params: ColumnCellRenderParams | ColumnEditRenderParams): VNode[] | string[]; // 工具栏-按钮渲染 renderButton?(h: CreateElement, renderOpts: ToolbarButtonRenderOptions, params: ToolbarButtonRenderParams): VNode[] | string[]; // 表单-项渲染 renderItem?(h: CreateElement, renderOpts: FormItemRenderOptions, params: FormItemRenderParams): VNode[] | string[]; itemVisibleMethod?(params: FormItemVisibleParams): boolean; itemResetMethod?(params: FormItemResetParams): void; // 空内容渲染 renderEmpty?(h: CreateElement, renderOpts: EmptyRender, params: EmptyRenderParams): VNode[] | string[]; [key: string]: any; } /** * 渲染选项 */ export class RenderOptions { /** * 渲染器名称 */ name: string; /** * 目标组件渲染的参数 */ props?: { [key: string]: any }; /** * 目标组件渲染的属性 */ attrs?: { [key: string]: any }; /** * 目标组件渲染的事件 */ events?: { [key: string]: Function }; [key: string]: any; } /** * 渲染参数 */ export class RenderParams {} /** * 选项参数 */ export interface OptionProps extends RenderParams { value?: string; label?: string; disabled?: string; } /** * 分组选项参数 */ export interface OptionGroupProps extends RenderParams { options?: string; label?: string; disabled?: boolean; }