UNPKG

vxe-table-demonic

Version:

一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...

275 lines (236 loc) 11.2 kB
import { SlotVNodeType, VNodeStyle, VNodeClassName } from '../component' import { VxeTableDefines, VxeTableConstructor, VxeTablePrivateMethods, VxeTablePropTypes, VxeTableDataRow } from '../table' import { VxeGridConstructor } from '../grid' import { VxeColumnPropTypes } from '../column' import { VxeFilterPanel } from '../filter' import { VxeToolbarPropTypes } from '../toolbar' import { FormItemRenderOptions, FormItemTitleRenderParams, FormItemContentRenderParams, FormItemVisibleParams, FormItemResetParams } from '../form-item' /* eslint-disable no-use-before-define */ type RendererOptions = DefineRendererOption<VxeGlobalRendererHandles.RenderResult> export interface DefineRendererOption<T> { /** * @deprecated 已废弃 */ className?: string // 筛选渲染 filterClassName?: string | ((params: VxeGlobalRendererHandles.RenderFilterParams<any>) => string | VNodeClassName) showFilterFooter?: boolean renderFilter?(renderOpts: VxeGlobalRendererHandles.RenderFilterOptions, params: VxeGlobalRendererHandles.RenderFilterParams<any>): T filterMethod?(params: VxeGlobalRendererHandles.FilterMethodParams<any>): boolean filterRemoteMethod?(params: VxeGlobalRendererHandles.FilterRemoteMethod<any>): boolean filterResetMethod?(params: VxeGlobalRendererHandles.FilterResetMethodParams<any>): void filterRecoverMethod?(params: VxeGlobalRendererHandles.FilterRecoverMethodParams<any>): void // 默认行为 defaultFilterMethod?(params: VxeGlobalRendererHandles.FilterMethodParams<any>): boolean // 单元格渲染 cellClassName?: string | ((params: VxeGlobalRendererHandles.RenderDefaultParams<any>) => string | VNodeClassName) cellStyle?: VNodeStyle | ((params: VxeGlobalRendererHandles.RenderDefaultParams<any>) => VNodeStyle) renderHeader?(renderOpts: VxeGlobalRendererHandles.RenderHeaderOptions, params: VxeGlobalRendererHandles.RenderHeaderParams<any>): T renderDefault?(renderOpts: VxeGlobalRendererHandles.RenderDefaultOptions, params: VxeGlobalRendererHandles.RenderDefaultParams<any>): T renderFooter?(renderOpts: VxeGlobalRendererHandles.RenderFooterOptions, params: VxeGlobalRendererHandles.RenderFooterParams<any>): T exportMethod?(params: VxeGlobalRendererHandles.ExportMethodParams<any>): string footerExportMethod?(params: VxeGlobalRendererHandles.FooterExportMethodParams<any>): string // 编辑渲染 autofocus?: string | ((params: VxeGlobalRendererHandles.RenderEditParams<any> | VxeGlobalRendererHandles.RenderCellParams<any>) => HTMLElement | null) autoselect?: boolean renderEdit?(renderOpts: VxeGlobalRendererHandles.RenderEditOptions<any>, params: VxeGlobalRendererHandles.RenderEditParams<any>): T renderCell?(renderOpts: VxeGlobalRendererHandles.RenderCellOptions<any>, params: VxeGlobalRendererHandles.RenderCellParams<any>): T // 内容渲染 renderExpand?(renderOpts: VxeGlobalRendererHandles.RenderExpandOptions, params: VxeGlobalRendererHandles.RenderExpandParams<any>): T // 工具栏-按钮渲染 toolbarButtonClassName?: string | ((params: VxeGlobalRendererHandles.RenderButtonParams<any>) => string | VNodeClassName) renderToolbarButton?(renderOpts: VxeGlobalRendererHandles.RenderButtonOptions, params: VxeGlobalRendererHandles.RenderButtonParams<any>): T toolbarToolClassName?: string | ((params: VxeGlobalRendererHandles.RenderToolParams<any>) => string | VNodeClassName) renderToolbarTool?(renderOpts: VxeGlobalRendererHandles.RenderToolOptions, params: VxeGlobalRendererHandles.RenderToolParams<any>): T // 表单-项渲染 itemClassName?: string | ((params: VxeGlobalRendererHandles.RenderItemTitleParams) => string | VNodeClassName) itemStyle?: VNodeStyle | ((params: VxeGlobalRendererHandles.RenderItemTitleParams) => VNodeStyle) itemContentClassName?: string | ((params: VxeGlobalRendererHandles.RenderItemTitleParams) => string | VNodeClassName) itemContentStyle?: VNodeStyle | ((params: VxeGlobalRendererHandles.RenderItemTitleParams) => VNodeStyle) itemTitleClassName?: string | ((params: VxeGlobalRendererHandles.RenderItemTitleParams) => string | VNodeClassName) itemTitleStyle?: VNodeStyle | ((params: VxeGlobalRendererHandles.RenderItemTitleParams) => VNodeStyle) renderItemTitle?(renderOpts: VxeGlobalRendererHandles.RenderItemTitleOptions, params: VxeGlobalRendererHandles.RenderItemTitleParams): T renderItemContent?(renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: VxeGlobalRendererHandles.RenderItemContentParams): T itemVisibleMethod?(params: VxeGlobalRendererHandles.ItemVisibleMethodParams): boolean itemResetMethod?(params: VxeGlobalRendererHandles.ItemResetMethodParams): void // 空内容渲染 renderEmpty?(renderOpts: VxeGlobalRendererHandles.RenderEmptyOptions, params: VxeGlobalRendererHandles.RenderEmptyParams): T } export namespace VxeGlobalRendererHandles { export type RenderResult = SlotVNodeType | SlotVNodeType[] export interface RenderFilterOptions extends VxeColumnPropTypes.FilterRender {} export interface RenderParams {} export type RenderFilterParams<D = VxeTableDataRow> = { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> $panel: VxeFilterPanel column: { filters: VxeTableDefines.FilterOption[] } & VxeTableDefines.ColumnInfo<D> columnIndex: number $columnIndex: number $rowIndex: number } export type FilterMethodParams<D = VxeTableDataRow> = { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> value: any option: VxeTableDefines.FilterOption cellValue: any row: any column: VxeTableDefines.ColumnInfo<D> } export interface FilterRemoteMethod<D = VxeTableDataRow> extends VxeTableDefines.FilterChangeParams<D> { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> } export interface FilterResetMethodParams<D = VxeTableDataRow> { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> options: VxeTableDefines.FilterOption[] column: VxeTableDefines.ColumnInfo<D> } export interface FilterRecoverMethodParams<D = VxeTableDataRow> { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> option: VxeTableDefines.FilterOption column: VxeTableDefines.ColumnInfo<D> } export interface RenderHeaderOptions extends VxeGlobalRendererHandles.RenderOptions { } export interface RenderHeaderParams<D = VxeTableDataRow> { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> column: VxeTableDefines.ColumnInfo<D> columnIndex: number $columnIndex: number $rowIndex: number } export type RenderDefaultOptions<D = VxeTableDataRow> = VxeColumnPropTypes.EditRender<D> export type RenderDefaultParams<D = VxeTableDataRow> = RenderEditParams<D> export interface RenderFooterOptions extends VxeGlobalRendererHandles.RenderOptions { } export interface RenderFooterParams<D = VxeTableDataRow> { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> column: VxeTableDefines.ColumnInfo<D> columnIndex: number _columnIndex: number $columnIndex: number $rowIndex: number items: any[] data: D[][] } export interface ExportMethodParams<D = VxeTableDataRow> { row: D column: VxeTableDefines.ColumnInfo<D> options: VxeTablePropTypes.ExportHandleOptions } export interface FooterExportMethodParams<D = VxeTableDataRow> { items: any[] _columnIndex: number column: VxeTableDefines.ColumnInfo<D> options: VxeTablePropTypes.ExportHandleOptions } export type RenderEditOptions<D = VxeTableDataRow> = VxeColumnPropTypes.EditRender<D> export interface RenderEditParams<D = VxeTableDataRow> { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> $grid: VxeGridConstructor<D> | null column: VxeTableDefines.ColumnInfo<D> columnIndex: number $columnIndex: number rowid: string row: D rowIndex: number $rowIndex: number isHidden: boolean fixed: VxeColumnPropTypes.Fixed type: string } export type RenderCellOptions<D = VxeTableDataRow> = VxeColumnPropTypes.EditRender<D> export type RenderCellParams<D = VxeTableDataRow> = { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> $grid: VxeGridConstructor<D> | null column: VxeTableDefines.ColumnInfo<D> columnIndex: number $columnIndex: number rowid: string row: D rowIndex: number $rowIndex: number isHidden: boolean fixed: VxeColumnPropTypes.Fixed type: string } export interface RenderExpandOptions extends VxeColumnPropTypes.ContentRender { } export type RenderExpandParams<D = VxeTableDataRow> = RenderEditParams<D> export interface RenderButtonOptions extends VxeGlobalRendererHandles.RenderOptions { } export interface RenderButtonParams<D = VxeTableDataRow> { $grid: VxeGridConstructor | null $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> button: VxeToolbarPropTypes.ButtonConfig } export interface RenderToolOptions extends VxeGlobalRendererHandles.RenderOptions { } export interface RenderToolParams<D = VxeTableDataRow> { $grid: VxeGridConstructor | null $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> tool: VxeToolbarPropTypes.ToolConfig } export type RenderItemTitleOptions = FormItemRenderOptions export type RenderItemTitleParams = FormItemTitleRenderParams export type RenderItemContentOptions = FormItemRenderOptions export type RenderItemContentParams = FormItemContentRenderParams export type ItemVisibleMethodParams = FormItemVisibleParams export type ItemResetMethodParams = FormItemResetParams export type RenderEmptyOptions = VxeTablePropTypes.EmptyRender export interface RenderEmptyParams<D = VxeTableDataRow> { $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D> } /** * 渲染选项 */ export interface RenderOptions { /** * 渲染器名称 */ name?: string /** * 目标组件渲染的参数 */ props?: { [key: string]: any } /** * 目标组件渲染的属性 */ attrs?: { [key: string]: any } /** * 目标组件渲染的事件 */ events?: { [key: string]: (...args: any[]) => any } /** * 多目标渲染 */ children?: any[] /** * 渲染类型 */ cellType?: 'string' | 'number' } /** * 选项参数 */ export interface RenderOptionProps { value?: string label?: string key?: string } /** * 分组选项参数 */ export interface RenderOptionGroupProps { options?: string label?: string key?: string } } /** * 渲染器 */ export interface VxeGlobalRenderer { mixin(options: { [name: string]: RendererOptions }): VxeGlobalRenderer get(name: string | null | undefined): DefineRendererOption<VxeGlobalRendererHandles.RenderResult> add(name: string, options: RendererOptions): VxeGlobalRenderer delete(name: string): void }