UNPKG

@opensig/opendesign

Version:

508 lines (507 loc) 15.9 kB
import { Component, ExtractPropTypes, PropType, Ref, VNode } from 'vue'; import { TableRowT } from '../table'; export declare const DataTableSizes: readonly ["medium", "small"]; export type DataTableSizeT = (typeof DataTableSizes)[number]; /** * 表头风格类型 * @since 1.2.2 */ export declare const DataTableHeaderStyles: readonly ["fill", "split-line"]; export type DataTableHeaderStyleT = (typeof DataTableHeaderStyles)[number]; /** * 排序模式类型 * - single: 单条件排序,点击排序时清空其他列的排序 * - multiple: 多条件排序,支持同时按多列排序,通过 sortSequence 维护排序条件的操作序列, * 序列仅记录操作先后,优先级由调用者自行解读 * @since 1.2.5 */ export declare const DataTableSortModes: readonly ["single", "multiple"]; export type DataTableSortModeT = (typeof DataTableSortModes)[number]; export declare const DataTableFixedTypes: readonly [true, "left", "right"]; export type DataTableFixedT = (typeof DataTableFixedTypes)[number]; /** * 被选项通用类型 * @template TLabel - label字段的类型,默认any * @template TValue - value字段的类型,默认any * @since 1.2.2 */ export interface DataTableColumnFilterOption<TLabel = any, TValue = any> { /** * 标签文本,用于渲染 */ label: TLabel; /** * 选项值 */ value: TValue; [key: string]: any; } /** * 筛选条件为“空”时的值 * @since 1.2.2 */ export declare const TABLE_EMPTY_OPTION_VALUE: "__null__"; /** * 筛选条件为单选时,筛选条件为“全选”时的值 * @since 1.2.2 */ export declare const TABLE_ALL_OPTION_VALUE: "__all__"; /** * 获取筛选项数组的方法,支持异步返回 * @param {EffectiveDataTableColumnT} option.column 当前列的配置 * @param {DataTableColumnFilterOption} option.emptyOption 空值选项,根据需求采用 * @since 1.2.2 */ export type DataTableColumnFilterOptionsFn<TLabel = any, TValue = any> = (option: { column: EffectiveDataTableColumnT; emptyOption: { label: string; value: typeof TABLE_EMPTY_OPTION_VALUE; }; }) => DataTableColumnFilterOption<TLabel, TValue>[] | Promise<DataTableColumnFilterOption<TLabel, TValue>[]>; /** * 单元格渲染方法入参 */ export interface DataTableColumnFormatterOptions { /** * 当前行的数据 */ row: any; /** * 当前列的配置 */ column: EffectiveDataTableColumnT; /** * 单元格默认的渲染值 */ cellValue: string | number | unknown; /** * 当前行的索引 */ rowIndex: number; /** * 当前列的索引 */ colIndex: number; } /** * 单元格的渲染方法 * @returns 可返回 string(纯文本)、VNode(h 函数创建)、Component(defineComponent 创建)、 * 或函数式组件 `() => VNode`(推荐用于 JSX/TSX 场景) */ export type DataTableColumnFormatter = (options: DataTableColumnFormatterOptions) => Component | VNode | string; /** * 表格行级共享插槽类型 * @description ODataTable 与 TableRow 共用的行级插槽,包括行展开插槽和单元格自定义插槽(td_ 前缀) */ export type DataTableRowSlots = { /** 行展开插槽 */ expand?: (scope: { row: TableRowT; rowIndex: number; }) => any; } & Record<`td_${string}`, (options: { column: EffectiveDataTableColumnT; row: TableRowT; cellValue: any; index: number; }) => any>; /** * 合并单元格的计算方法 * @since 1.2.2 */ export type DataTableSpanMethod = (options: DataTableColumnFormatterOptions) => { colSpan?: number; rowSpan?: number; } | void; /** * 行展开的计算方法,返回 false 则不可被展开 * @returns 可返回 Component、VNode、string、或函数式组件 `() => VNode`(推荐 JSX/TSX 场景); * 返回 false 表示该行不可展开 * @since 1.2.2 */ export type DataTableExpandMethod = (row: any, rowIndex: number) => Component | VNode | string | false; /** * 列筛选配置类型 * @since 1.2.2 */ export type DataTableColumnFilterT = { /** * 获取筛选可选项的方法,支持异步返回 * @param option.column 当前列的配置 * @param option.emptyOption 内置的"空值"选项,可直接放入返回数组以支持筛选空值数据 * @since 1.2.2 */ optionsFn: DataTableColumnFilterOptionsFn; /** * 移动端弹窗的title */ optionTitle?: string; /** * 是否支持多选 * @default true */ multiple?: boolean; /** * 是否显示选项筛选输入框 * @default (optionsCount) => optionsCount > 8 */ showInput?: boolean | ((optionsCount: number) => boolean); }; /** * 列的配置 */ export interface DataTableColumnT { /** * 列的数据字段名,对应行数据对象的 key */ key: string; /** * 列表头文本,可传入字符串、VNode 或 Component 来自定义表头渲染 */ label?: string | Component | VNode; /** * 列表头的描述文案,会以气泡的形式展示在表头旁 * @since 1.2.2 */ description?: string | Component | VNode; /** * 单元格渲染方法,可返回 string、VNode、Component 或函数式组件 `() => VNode` */ formatter?: DataTableColumnFormatter; /** * 列固定方向,true 等同 'left' * @important IOS 端不支持多列固定 */ fixed?: DataTableFixedT; /** * 是否是作为竖向表头列 * @default false * @since 1.2.2 */ asHeader?: boolean; /** 列的宽度 */ width?: number | string; /** 列的最小宽度 */ minWidth?: number | string; /** 列的最大宽度 */ maxWidth?: number | string; /** * 表头是否显示溢出隐藏气泡,传入数字以设置最大行数 * @default 1 * @since 1.2.2 */ showHeaderOverflowToolTip?: boolean | number; /** * 表体是否显示溢出隐藏气泡,传入数字以设置最大行数 * @default false * @since 1.2.2 */ showOverflowToolTip?: boolean | number; /** * 排序方式绑定的条件对象的key * @important sortMode 为 single 时为单条件排序,当前列排序修改后会清空其他列的排序; * sortMode 为 multiple 时为多条件排序,通过 sortSequence 维护排序条件的操作序列 * @since 1.2.2 */ sortKey?: string; /** * 列表头筛选配置 * @since 1.2.2 */ filter?: DataTableColumnFilterT; /** * 表头单元格的自定义colspan * @important 仅支持同层级兄弟单元格之间的合并 * @since 1.2.2 */ customColSpan?: number; /** * 嵌套表头配置 */ children?: DataTableColumnT[]; } export type EffectiveDataTableColumnCommonT = { formatter: DataTableColumnFormatter; colSpan?: number; rowSpan?: number; /** 列宽调整后的宽度,用于计算固定列的定位值 */ resizeWidth?: number; /** 列的最小宽度 - 通过容器宽度计算后 */ _minWidth?: number; /** 列的最大宽度 - 通过容器宽度计算后 */ _maxWidth?: number; fixed?: 'left' | 'right'; /** fix为undefined或left时当前列的left值 */ left?: number; /** fix为right时当前列的right值 */ right?: number; /** 是否是最后一个左固定列,用于控制表头样式 */ isLastLeftFixedCol?: boolean; /** 是否是第一个右固定列,用于控制表头样式 */ isFirstRightFixedCol?: boolean; /** 是否是最左边的列 */ isFirstCol?: boolean; /** 是否是最右边的列 */ isLastCol?: boolean; /** 表头是否由于自定义表头单元格合并而被合并后,不渲染 */ headerHidden?: boolean; colRef?: HTMLTableColElement; thRef?: HTMLTableCellElement; /** * 嵌套表头配置 */ children?: EffectiveDataTableColumnT[]; parent?: EffectiveDataTableColumnT; }; export type EffectiveDataTableColumnT = DataTableColumnT & EffectiveDataTableColumnCommonT; export declare const dataTableProps: { /** * @zh-CN 表格数据 * @en-US Table data */ readonly data: { readonly type: PropType<TableRowT[]>; readonly required: true; }; /** * @zh-CN 列配置, IOS端不支持多列固定 * @en-US Table column schema, not support multi-column fixed in IOS */ readonly columns: { readonly type: PropType<DataTableColumnT[]>; readonly required: true; }; /** * @zh-CN 表格尺寸 * @en-US table size */ readonly size: { readonly type: PropType<DataTableSizeT>; readonly default: "medium"; }; /** * @zh-CN 表格高度,超出时固定表头滚动 * @en-US Table Height: Fixed Header with Scrollable Body When Exceeding Height */ readonly height: { readonly type: PropType<number | string>; }; /** * @zh-CN 表格最大高度,超出时固定表头滚动 * @en-US Table Max Height: Fixed Header with Scrollable Body When Exceeding Height */ readonly maxHeight: { readonly type: PropType<number | string>; readonly default: "fit-content"; }; /** * @zh-CN 内部table元素最小宽度,超出时出现横向滚动条 * @en-US min-width of the inner table element; a horizontal scrollbar will appear when it exceeds the available width. */ readonly minTableWidth: { readonly type: PropType<number | string>; }; /** * @zh-CN 表格数据行唯一标识字段名 * @en-US Unique Identifier Field Name for Table Data Rows */ readonly rowKey: { readonly type: PropType<string | ((row: TableRowT) => string)>; readonly default: "id"; }; /** * @zh-CN 合并单元格的计算方法,已被合并的单元格不会再次被合并 * @en-US Calculation Methods for Merged Cells. Cells that have already been merged cannot be merged again */ readonly spanMethod: { readonly type: PropType<DataTableSpanMethod>; readonly default: () => () => undefined; }; /** * @zh-CN 是否展示header * @en-US Whether to show the header. * @since 1.2.2 */ readonly showHeader: { readonly type: BooleanConstructor; readonly default: true; }; /** * @zh-CN 表头风格 * @en-US table header style * @since 1.2.2 */ readonly headerStyle: { readonly type: PropType<DataTableHeaderStyleT>; readonly default: "fill"; }; /** * @zh-CN 排序模式,single 为单条件排序,multiple 为多条件排序 * @en-US Sort mode, 'single' for single-condition sort, 'multiple' for multi-condition sort * @since 1.2.5 */ readonly sortMode: { readonly type: PropType<DataTableSortModeT>; readonly default: "single"; }; /** * @zh-CN 行展开的计算方法,返回 `false` 则不可被展开 * @en-US Calculation Methods for Row expansion. Returns `false` if the row cannot be expanded. * @since 1.2.2 */ readonly expandMethod: { readonly type: PropType<DataTableExpandMethod>; }; /** * @zh-CN 表格是否可以调整列宽 * @en-US Resize column width */ readonly columnResizable: { readonly type: BooleanConstructor; readonly default: false; }; /** * @zh-CN 表格是否可以行选择 * @en-US Whether row selection is available for the table. * @since 1.2.2 */ readonly selection: { readonly type: BooleanConstructor; readonly default: false; }; /** * @zh-CN 选择时指示行是否可被选择的键名 * @en-US Key name for indicating row selectability during selection * @since 1.2.2 */ readonly disabledProp: { readonly type: StringConstructor; readonly default: "disabled"; }; /** * @zh-CN 树形表格选择时是否遵循父子不关联 * @en-US Whether to disable parent-child association in tree table selection * @since 1.2.2 */ readonly checkStrictly: { readonly type: BooleanConstructor; readonly default: true; }; readonly stripe: { readonly type: BooleanConstructor; readonly default: false; }; readonly border: { readonly type: PropType<import('..').TableBorderT>; readonly default: "row"; }; /** * @zh-CN 单元格为空时的展示文案,默认为 '--' * @en-US Render text when cell value is empty */ readonly defaultEmptyCellText: { readonly type: StringConstructor; readonly default: "--"; }; readonly emptyLabel: { readonly type: StringConstructor; }; readonly loading: { readonly type: BooleanConstructor; }; readonly loadingLabel: { readonly type: StringConstructor; }; readonly highlightCurrentRow: { readonly type: BooleanConstructor; readonly default: false; }; }; export type DataTablePropsT = ExtractPropTypes<typeof dataTableProps>; /** rowKey对应的值的可能类型 */ export type DataTableRowKeyValue = string | number; /** * 筛选条件值类型 * @since 1.2.2 */ export type DataTableConditionValue = string | number | boolean; /** * 筛选条件更新事件传参 * @since 1.2.2 */ export type DataTableConditionUpdatePayload<T = DataTableConditionValue> = { /** 对应column的key */ key: string; /** 选中的值,由于是多选,所以是数组类型 */ newVal: T[]; }; /** * 排序方式常量 * - ASC (1): 升序排序 * - DESC (-1): 降序排序 * - NA (undefined): 不排序,用于初始化 conditions 中的排序字段 * @since 1.2.2 */ export declare const DataTableSortMethod: { /** 升序排序 */ readonly ASC: 1; /** 降序排序 */ readonly DESC: -1; /** 不排序 */ readonly NA: undefined; }; export type DataTableSortMethodT = (typeof DataTableSortMethod)[keyof typeof DataTableSortMethod]; /** * 排序更新事件传参 * @since 1.2.2 */ export type DataTableSortUpdatePayload = { /** 对应column的sortKey */ key: string; /** 排序方向 */ newVal?: DataTableSortMethodT; /** * 排序条件的操作序列,详细说明见 sortSequence prop * @since 1.2.5 */ sortSequence: string[]; }; /** * 单行数据选中、取消事件传参 * @since 1.2.2 */ export type DataTableSelectionPayload = { /** 对应行数据的rowKey对应的值 */ key: DataTableRowKeyValue; /** 是否被选中 */ selected: boolean; }; /** * 选中状态变更事件传参 * @since 1.2.2 */ export type DataTableSelectionChangePayload = { /** 改变前对应行数据的rowKey对应的值 */ prev: DataTableRowKeyValue[]; /** 改变后对应行数据的rowKey对应的值 */ cur: DataTableRowKeyValue[]; }; export type DataTableExposed = { /** 计算当前行的rowKey的方法 */ getRowKey: (row: TableRowT, rowIndex: number) => DataTableRowKeyValue; /** 所有列配置的基于key的map */ dataColumnMap: Map<string, EffectiveDataTableColumnT>; /** 所有的列的扁平数组 */ dataColumns: Ref<EffectiveDataTableColumnT[]>; /** 列根据层级关系构造的二维数组 */ groupColumns: Ref<EffectiveDataTableColumnT[][]>; /** 全选 @since 1.2.2 */ selectAll: () => void; /** 清空全选 @since 1.2.2 */ clearAll: () => void; /** 展开全部 @since 1.2.2 */ expandAll: () => void; /** 收起全部 @since 1.2.2 */ foldAll: () => void; };