@opensig/opendesign
Version:
508 lines (507 loc) • 15.9 kB
TypeScript
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;
};