import { VXEComponent, SlotVNodeType } from './component' import { VxeTableConstructor, VxeTableDataRow, VxeTableDefines, VxeTablePropTypes } from './table' import { VxeGlobalRendererHandles } from './v-x-e-table' import { VxeFilterPanel } from './module/filter' import { VxeTooltipPropTypes } from './tooltip' /* eslint-disable no-use-before-define */ /** * 组件 - 表格列 * @example import { VxeColumn } from 'vxe-table' */ export const VxeColumn: VXEComponent, VxeColumnEventProps, VxeColumnSlots> /** * 组件 - 表格列 */ export const Column: typeof VxeColumn export namespace VxeColumnPropTypes { export type ColId = string | number export type Type = 'seq' | 'radio' | 'checkbox' | 'expand' | 'html' | null export type Field = string export type Title = string export type Width = number | string export type MinWidth = number | string export type MaxWidth = number | string export type Resizable = boolean export type Fixed = 'left' | 'right' | '' | null export type Align = 'left' | 'center' | 'right' | '' | null export type HeaderAlign = Align export type FooterAlign = Align export type ShowOverflow = VxeTablePropTypes.ShowOverflow export type ShowHeaderOverflow = ShowOverflow export type ShowFooterOverflow = ShowOverflow export type ClassName = string | ((params: VxeGlobalRendererHandles.RenderCellParams) => string | any[] | { [key: string]: boolean }) export type HeaderClassName = string | ((params: VxeGlobalRendererHandles.RenderHeaderParams) => string | any[] | { [key: string]: boolean }) export type FooterClassName = string | ((params: VxeGlobalRendererHandles.RenderFooterParams) => string | any[] | { [key: string]: boolean }) export type Formatter = ((params: { cellValue: any column: VxeTableDefines.ColumnInfo row: D }) => string | number) | any[] | string export type Sortable = boolean export type SortBy = string | ((params: { row: D column: VxeTableDefines.ColumnInfo }) => string | number) export type SortType = 'auto' | 'string' | 'number' | null export interface Filter { label?: string | number value?: any data?: any resetValue?: any checked?: boolean } export type Filters = Filter[] export type FilterMultiple = boolean interface FilterMethodParams { $table: VxeTableConstructor, value: any option: VxeTableDefines.FilterOption cellValue: any row: D column: VxeTableDefines.ColumnInfo } export type FilterMethod = (params: FilterMethodParams) => boolean interface FilterResetMethodParams { options: VxeTableDefines.FilterOption[] column: VxeTableDefines.ColumnInfo } export type FilterResetMethod = (params: FilterResetMethodParams) => void interface FilterRecoverMethodParams { option: VxeTableDefines.FilterOption column: VxeTableDefines.ColumnInfo } export type FilterRecoverMethod = (params: FilterRecoverMethodParams) => void /** * 筛选渲染配置项 */ export interface FilterRender extends VxeGlobalRendererHandles.RenderOptions { options?: any[] optionProps?: VxeGlobalRendererHandles.RenderOptionProps optionGroups?: any[] optionGroupProps?: VxeGlobalRendererHandles.RenderOptionGroupProps content?: string } export type TreeNode = boolean export type Visible = boolean interface ExportMethodParams { $table: VxeTableConstructor, row: D column: VxeTableDefines.ColumnInfo } export type ExportMethod = (params: ExportMethodParams) => string | number interface HeaderExportParams { $table: VxeTableConstructor, options: VxeTablePropTypes.ExportConfig column: VxeTableDefines.ColumnInfo } export type HeaderExportMethod = (params: HeaderExportParams) => string | number interface FooterExportParams { $table: VxeTableConstructor, items: any[] row: any column: VxeTableDefines.ColumnInfo _columnIndex: number } export type FooterExportMethod = (params: FooterExportParams) => string | number export interface TitlePrefix { useHTML?: VxeTooltipPropTypes.UseHTML content?: VxeTooltipPropTypes.Content enterable?: VxeTooltipPropTypes.Enterable theme?: VxeTooltipPropTypes.Theme icon?: string /** * @deprecated 已废弃,请使用 content */ message?: string } export interface TitleHelp extends TitlePrefix { } export interface TitleSuffix { useHTML?: VxeTooltipPropTypes.UseHTML content?: VxeTooltipPropTypes.Content enterable?: VxeTooltipPropTypes.Enterable theme?: VxeTooltipPropTypes.Theme icon?: string } export type CellType = 'auto' | 'number' | 'string' export interface CellRender extends VxeGlobalRendererHandles.RenderOptions { events?: { [key: string]: (cellParams: VxeColumnSlotTypes.DefaultSlotParams, ...args: any[]) => any } options?: any[] optionProps?: VxeGlobalRendererHandles.RenderOptionProps optionGroups?: any[] optionGroupProps?: VxeGlobalRendererHandles.RenderOptionGroupProps content?: string } /** * 编辑渲染配置项 */ export interface EditRender extends VxeGlobalRendererHandles.RenderOptions { events?: { [key: string]: (cellParams: VxeColumnSlotTypes.EditSlotParams, ...args: any[]) => any } enabled?: boolean options?: any[] optionProps?: VxeGlobalRendererHandles.RenderOptionProps optionGroups?: any[] optionGroupProps?: VxeGlobalRendererHandles.RenderOptionGroupProps autofocus?: string autoselect?: boolean defaultValue?: ((params: { column: VxeTableDefines.ColumnInfo }) => any) | null | undefined | string | number | RegExp | object | any[] | Date immediate?: boolean content?: string placeholder?: string } /** * 内容渲染配置项 */ export interface ContentRender extends VxeGlobalRendererHandles.RenderOptions { options?: any[] optionProps?: VxeGlobalRendererHandles.RenderOptionProps optionGroups?: any[] optionGroupProps?: VxeGlobalRendererHandles.RenderOptionGroupProps } export type Params = any export type Slots = { /** * 只对 type=checkbox,radio 有效,自定义标题模板 */ title?: string | ((params: VxeColumnSlotTypes.HeaderSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 只对 type=radio 有效,自定义单选框模板 */ radio?: string | ((params: VxeColumnSlotTypes.RadioSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 只对 type=checkbox 有效,自定义复选框模板 */ checkbox?: string | ((params: VxeColumnSlotTypes.CheckboxSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 自定义显示内容模板 */ default?: string | ((params: VxeColumnSlotTypes.DefaultSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 自定义表头内容的模板 */ header?: string | ((params: VxeColumnSlotTypes.HeaderSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 自定义表尾内容的模板 */ footer?: string | ((params: VxeColumnSlotTypes.FooterSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 只对 type=expand 有效,自定义展开后的内容模板 */ content?: string | ((params: VxeColumnSlotTypes.ContentSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 只对 filter-render 启用时有效,自定义筛选模板 */ filter?: string | ((params: VxeColumnSlotTypes.FilterSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 只对 edit-render 启用时有效,自定义可编辑组件模板 */ edit?: string | ((params: VxeColumnSlotTypes.EditSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 只对 edit-render 启用时有效,自定义可编辑组件模板 */ valid?: string | ((params: VxeColumnSlotTypes.ValidSlotParams) => SlotVNodeType[] | SlotVNodeType) | null /** * 已废弃 * @deprecated */ icon?: string | ((params: VxeColumnSlotTypes.IconSlotParams) => SlotVNodeType[] | SlotVNodeType) | null } } export type VxeColumnProps = { colId?: VxeColumnPropTypes.ColId /** * 渲染类型 */ type?: VxeColumnPropTypes.Type /** * 列字段名 */ field?: VxeColumnPropTypes.Field /** * 列标题 */ title?: VxeColumnPropTypes.Title /** * 列宽度 */ width?: VxeColumnPropTypes.Width /** * 列最小宽度,把剩余宽度按比例分配 */ minWidth?: VxeColumnPropTypes.MinWidth /** * 列最大宽度 */ maxWidth?: VxeColumnPropTypes.MaxWidth /** * 是否允许拖动列宽调整大小 */ resizable?: VxeColumnPropTypes.Resizable /** * 将列固定在左侧或者右侧 */ fixed?: VxeColumnPropTypes.Fixed /** * 列对其方式 */ align?: VxeColumnPropTypes.Align /** * 表头对齐方式 */ headerAlign?: VxeColumnPropTypes.HeaderAlign /** * 表尾列的对齐方式 */ footerAlign?: VxeColumnPropTypes.FooterAlign /** * 当内容过长时显示为省略号 */ showOverflow?: VxeColumnPropTypes.ShowOverflow /** * 当表头内容过长时显示为省略号 */ showHeaderOverflow?: VxeColumnPropTypes.ShowHeaderOverflow /** * 当表尾内容过长时显示为省略号 */ showFooterOverflow?: VxeColumnPropTypes.ShowFooterOverflow /** * 给单元格附加 className */ className?: VxeColumnPropTypes.ClassName /** * 给表头单元格附加 className */ headerClassName?: VxeColumnPropTypes.HeaderClassName /** * 给表尾单元格附加 className */ footerClassName?: VxeColumnPropTypes.FooterClassName /** * 格式化显示内容 */ formatter?: VxeColumnPropTypes.Formatter /** * 是否允许排序 */ sortable?: VxeColumnPropTypes.Sortable /** * 自定义排序的属性 */ sortBy?: VxeColumnPropTypes.SortBy /** * 排序的字段类型,比如字符串转数值等 */ sortType?: VxeColumnPropTypes.SortType /** * 配置筛选条件数组 */ filters?: VxeColumnPropTypes.Filter[] /** * 筛选是否允许多选 */ filterMultiple?: VxeColumnPropTypes.FilterMultiple /** * 自定义筛选方法 */ filterMethod?: VxeColumnPropTypes.FilterMethod /** * 筛选模板配置项 */ filterRender?: VxeColumnPropTypes.FilterRender /** * 指定为树节点 */ treeNode?: VxeColumnPropTypes.TreeNode /** * 是否可视 */ visible?: VxeColumnPropTypes.Visible /** * 自定义表尾单元格数据导出方法 */ headerExportMethod?: VxeColumnPropTypes.HeaderExportMethod /** * 自定义单元格数据导出方法 */ exportMethod?: VxeColumnPropTypes.ExportMethod /** * 自定义表尾单元格数据导出方法 */ footerExportMethod?: VxeColumnPropTypes.FooterExportMethod /** * 已废弃,被 titlePrefix 替换 * @deprecated */ titleHelp?: VxeColumnPropTypes.TitleHelp /** * 标题前缀图标配置项 */ titlePrefix?: VxeColumnPropTypes.TitlePrefix /** * 标题后缀图标配置项 */ titleSuffix?: VxeColumnPropTypes.TitleSuffix /** * 单元格值类型 */ cellType?: VxeColumnPropTypes.CellType /** * 单元格渲染配置项 */ cellRender?: VxeColumnPropTypes.CellRender /** * 单元格编辑渲染配置项 */ editRender?: VxeColumnPropTypes.EditRender /** * 内容渲染配置项 */ contentRender?: VxeColumnPropTypes.ContentRender /** * 额外的参数 */ params?: VxeColumnPropTypes.Params } export type VxeColumnEventProps = { // } export namespace VxeColumnSlotTypes { export interface FilterSlotParams { $panel: VxeFilterPanel column: { filters: VxeTableDefines.FilterOption[] } & VxeTableDefines.ColumnInfo columnIndex: number $columnIndex: number $rowIndex: number } export interface EditSlotParams { column: VxeTableDefines.ColumnInfo columnIndex: number $columnIndex: number row: D rowIndex: number $rowIndex: number } export interface FooterSlotParams { row: D rowIndex: number column: VxeTableDefines.ColumnInfo columnIndex: number _columnIndex: number $columnIndex: number $rowIndex: number items: any[] data: D[][] } export interface HeaderSlotParams extends VxeTableDefines.CellRenderHeaderParams { } export interface ContentSlotParams { column: VxeTableDefines.ColumnInfo columnIndex: number $columnIndex: number row: D rowIndex: number $rowIndex: number isHidden: boolean fixed: VxeColumnPropTypes.Fixed type: string } export interface DefaultSlotParams extends VxeTableDefines.CellRenderBodyParams { } export interface CheckboxSlotParams extends DefaultSlotParams { checked: boolean indeterminate: boolean } export interface RadioSlotParams extends DefaultSlotParams { checked: boolean } export interface IconSlotParams extends DefaultSlotParams { } export interface ValidSlotParams extends DefaultSlotParams { rule: VxeTableDefines.ValidatorRule content: string } } export interface VxeColumnSlots { /** * 自定义显示内容模板 */ default: (params: VxeColumnSlotTypes.DefaultSlotParams) => any /** * 自定义表头内容的模板 */ header: (params: VxeColumnSlotTypes.HeaderSlotParams) => any /** * 自定义表尾内容的模板 */ footer: (params: VxeColumnSlotTypes.FooterSlotParams) => any /** * 只对 type=checkbox,radio 有效,自定义标题模板 */ title: (params: VxeColumnSlotTypes.HeaderSlotParams) => any /** * 只对 type=checkbox 有效,自定义复选框模板 */ checkbox: (params: VxeColumnSlotTypes.CheckboxSlotParams) => any /** * 只对 type=radio 有效,自定义单选框模板 */ radio: (params: VxeColumnSlotTypes.RadioSlotParams) => any /** * 只对 type=expand 有效,自定义展开后的内容模板 */ content: (params: VxeColumnSlotTypes.ContentSlotParams) => any /** * 只对 filter-render 启用时有效,自定义筛选模板 */ filter: (params: VxeColumnSlotTypes.FilterSlotParams) => any /** * 只对 edit-render 启用时有效,自定义可编辑组件模板 */ edit: (params: VxeColumnSlotTypes.EditSlotParams) => any /** * 只对 edit-render 启用时有效,自定义展示错误校验模板 */ valid: (params: VxeColumnSlotTypes.ValidSlotParams) => any /** * 已废弃 * @deprecated */ icon: (params: VxeColumnSlotTypes.IconSlotParams) => any }