first commit

This commit is contained in:
liu
2026-07-13 15:23:29 +08:00
commit 50885a98c8
473 changed files with 33772 additions and 0 deletions
+163
View File
@@ -0,0 +1,163 @@
import type {
TableProps,
TableColumnType,
CardProps,
FormInstance,
PaginationProps,
} from 'antd';
import type {ReactNode, RefObject, Dispatch, SetStateAction} from 'react';
import type { FormColumn } from '@/components/XinFormField/FieldRender/typings';
import type { SearchFormProps } from './SearchForm';
import type {XinFormProps, XinFormRef} from '@/components/XinForm/typings';
/**
* 表单模式
*/
export type FormMode = 'create' | 'update';
/**
* 表格列配置
*/
export type XinTableColumn<T = any> = Omit<TableColumnType<T>, 'dataIndex'> & {
hideInSearch?: boolean;
hideInForm?: boolean;
hideInTable?: boolean;
hideInUpdate?: boolean;
hideInCreate?: boolean;
search?: FormColumn<T>;
} & FormColumn<T>;
/**
* 表格操作栏按钮
*/
export type OperateNode = {
/** 删除按钮 */
del: ReactNode;
/** 编辑按钮 */
edit: ReactNode;
}
/**
* 顶部操作按钮渲染
*/
export type ActionNode = {
/** 新增按钮 */
add: ReactNode;
/** 搜索按钮 */
search: ReactNode;
/** 关键字搜索框 */
keywordSearch: ReactNode;
}
/**
* 顶部右侧工具栏渲染
*/
export type ToolBarNode = {
/** 刷新按钮 */
reload: ReactNode;
/** 密度设置按钮 */
columnHeight: ReactNode;
/** 边框设置按钮 */
hideBorder: ReactNode;
/** 列设置按钮 */
columnSetting: ReactNode;
}
/**
* XinTable 实例
*/
export interface XinTableInstance<T = any> {
/** 刷新表格(保持当前页) */
reload: (resetPage?: boolean) => Promise<void>;
/** 重置表格到第一页并刷新 */
reset: () => Promise<void>;
/** 获取当前数据源 */
getDataSource: () => T[];
/** 设置数据源 */
setDataSource: Dispatch<SetStateAction<T[]>>;
/** 获取数据总数 */
getTotal: () => number;
/** 获取加载状态 */
getLoading: () => boolean;
/** 设置加载状态 */
setLoading: Dispatch<SetStateAction<boolean>>;
/** 设置分页参数 */
setPageInfo: (page?: number, pageSize?: number) => void;
/** 获取表单实例 */
getForm: () => XinFormRef<T> | null | undefined;
/** 获取搜索表单实例 */
getSearchForm: () => FormInstance<T> | undefined;
}
export interface SorterParams {
field: string;
order: 'asc' | 'desc';
}
/** 请求参数类型 */
export interface RequestParams extends Record<string, any> {
page?: number;
pageSize?: number;
filter?: Record<string, any>;
sorter?: SorterParams;
keywordSearch?: string;
}
/**
* XinTable 组件属性
*/
export interface XinTableProps<T = any> extends Omit<TableProps<T>, 'columns' | 'rowKey' | 'onChange' | 'pagination'> {
/** API 地址 */
api: string;
/** 权限名称前缀 */
accessName: string;
/** 主键 */
rowKey: string;
/** 列配置 */
columns: XinTableColumn<T>[];
/** 表格 ref */
tableRef?: RefObject<XinTableInstance<T> | null>;
/** 新增按钮显示 */
addShow?: boolean;
/** 编辑按钮显示 */
editShow?: boolean | ((record: T) => boolean);
/** 删除按钮显示 */
deleteShow?: boolean | ((record: T) => boolean);
/** 搜索栏显示 */
searchShow?: boolean;
/** 表格操作列显示 */
operateShow?: boolean;
/** 分页显示 */
paginationShow?: boolean;
/** 快速搜索显示 */
keywordSearchShow?: boolean;
/** 表单属性 */
formProps?: Omit<XinFormProps<T>, 'onFinish' | 'modalProps' | 'columns' | 'formRef' | 'layoutType'> | false;
/** 表单属性 */
modalProps?: XinFormProps<T>['modalProps'];
/** 搜索栏属性 */
searchProps?: Omit<SearchFormProps<T>, 'form'> | false;
/** 操作栏属性 */
operateProps?: TableColumnType<T>;
/** 卡片属性 */
cardProps?: Pick<CardProps, 'variant' | 'hoverable' | 'size' | 'classNames' | 'styles'>;
/** 分页配置 */
pagination?: Omit<PaginationProps, 'total' | 'onChange' | 'current'>;
/** 顶部操作栏渲染 */
actionBarRender?: ((dom: ActionNode) => ReactNode[]);
/** 工具栏渲染 */
toolBarRender?: ((dom: ToolBarNode) => ReactNode[]);
/** 表格操作栏渲染 */
operateRender?: ((record: T, dom: OperateNode) => ReactNode[]);
/** 自定义请求 */
handleRequest?: (params: RequestParams) => Promise<{ data: T[]; total: number }>;
/** 请求参数处理 */
requestParams?: (params: RequestParams) => RequestParams;
/** 自定义表单请求 */
handleFinish?: (values: T, mode: FormMode, formRef: RefObject<XinFormRef<T> | null>, defaultValue?: T) => Promise<boolean>;
}