tdesign-pro-component
Version:
ProComponents tdesign-vue-next + Vue3 + TS
93 lines (92 loc) • 3.38 kB
TypeScript
import { BasicValueType, Optional, PromiseFunction, VueNode, WithFalse } from '@tdesign-pro-component/utils';
import { FilterKey } from '../ProForm';
import { ProFormDatePickerProps } from '../ProFormDatePicker';
import { ProFormSelectProps } from '../ProFormSelect';
import { ProFormInputNumberProps } from '../ProFormInputNumber';
import { ProFormTextareaProps } from '../ProFormTextarea';
import { ProFormTextProps } from '../ProFormText';
import { ProFormRadioProps } from '../ProFormRadio';
import { ProFormCheckboxProps } from '../ProFormCheckbox';
import { BaseTableCol, FormRule, PrimaryTableOnEditedContext, TableEditableCellConfig, TableProps } from 'tdesign-vue-next';
import { Ref } from 'vue';
export interface ProTableProps<T = any> {
rowKey?: string;
options: ProTableOption<T>[];
request: <REQ, RES>(data: ProTableRequest<REQ>) => Promise<ProTableResult<RES>>;
dragAble?: boolean;
dragType?: 'row' | 'col' | 'row-handler';
dragHandler?: (params: any) => any[];
empty?: VueNode | string;
tableProps?: TableProps;
selectData?: BasicValueType[];
selectAble?: boolean;
selectType?: 'single' | 'multiple';
editAble?: boolean;
hideFooter?: boolean;
dataActions?: VueNode | string;
expanedRow?: VueNode | string;
formHeader?: VueNode | string;
hideForm?: boolean;
dataActionsAlign?: 'left' | 'right';
bordered?: boolean;
[name: string]: any;
}
interface ProTableTitle {
formTitle: VueNode;
tableTitle: VueNode;
}
export interface ProTableOption<T> {
key: string;
title: string | ProTableTitle;
render?: (row: T, rowIndex?: number) => VueNode;
hideInTable?: boolean;
titleRender?: (...args: any[]) => VueNode;
tableColumnsProps?: Optional<BaseTableCol, 'colKey'>;
ellipsis?: boolean;
ellipsisTitle?: boolean;
fixed?: 'left' | 'right';
sorter?: boolean;
width?: string | number;
footer?: (...args: any[]) => VueNode;
tableType?: WithFalse<'single' | 'multiple'>;
edit?: TableEditableCellConfig & {
beforeEdit?: () => Promise<any>;
onEditSuccess?: (data?: PrimaryTableOnEditedContext<T>) => void;
onEditFail?: (e: any) => void;
};
hideInSearch?: boolean;
placeholder?: string;
type?: 'text' | 'number' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'date' | 'date-range';
span?: number;
data?: any[] | PromiseFunction<any[]>;
labelAlign?: 'left' | 'right' | 'top';
disabled?: boolean;
rules?: FormRule[];
checkboxProps?: Optional<ProFormCheckboxProps, FilterKey>;
radioProps?: Optional<ProFormRadioProps, FilterKey>;
textProps?: Optional<ProFormTextProps, FilterKey>;
numberProps?: Optional<ProFormInputNumberProps, FilterKey>;
textareaProps?: Optional<ProFormTextareaProps, FilterKey>;
selectProps?: Optional<ProFormSelectProps, FilterKey>;
datePickerProps?: Optional<ProFormDatePickerProps, FilterKey>;
readonly?: boolean;
}
export interface ProTableRequest<T = any> {
form: T;
pageNum: number;
pageSize: number;
[name: string]: any;
}
export interface ProTableResult<T = any> {
list: T[];
total: number;
success: boolean;
[name: string]: any;
}
export interface ProTableRef {
reset: () => void;
reload: () => void;
getTableData: () => Ref<any[]>;
getFormValue: () => any;
}
export {};