/** * AG-Grid Plus 完整类型定义 * * 此文件定义了 AgGridPlus 组件的所有核心类型接口, * 用于替换代码中的 any 类型,提高类型安全性 */ import { ColumnState, GridApi, ColDef, ICellRendererParams } from 'ag-grid-community'; import { ReactNode } from 'react'; /** * 分页状态 */ export interface PaginationState { /** 当前页码 (1-based) */ current: number; /** 每页显示条数 */ pageSize: number; /** 总数据量 */ total: number; } /** * 选中行状态 */ export interface SelectionState { /** 选中的行键值集合 */ [key: string]: boolean; } /** * 查询过滤器状态 */ export interface QueryFilterState { /** 字段到过滤值的映射 */ [field: string]: any; } /** * 列单元格样式配置 */ export interface ColumnCellConfig { /** 单元格样式类 */ cellClass?: string; /** 是否禁用表头过滤按钮 */ suppressHeaderFilterButton?: boolean; /** 分组名称 */ groupName?: string; } /** * 列单元格配置映射 */ export type ColumnCellConfigMap = Record; /** * 请求参数 */ export interface RequestParams { /** 跳过的记录数 (分页用) */ skipCount: number; /** 最大返回记录数 (分页用) */ maxResultCount: number; /** 当前页码 */ current: number; /** 排序字段 */ sort?: string; /** 过滤器参数 */ filter?: any; /** 额外的网格参数 */ [key: string]: any; } /** * 请求响应 */ export interface RequestResponse { /** 数据列表 */ items: T[]; /** 总记录数 */ totalCount: number; /** 错误信息 (可选) */ error?: string; /** 响应状态码 (可选) */ statusCode?: number; } /** * 请求函数签名 */ export type RequestFunction = (params: RequestParams, sort: string | undefined, filter: any) => Promise>; /** * 树形数据节点 */ export interface TreeNode { /** 节点唯一标识 */ [key: string]: any; /** 子节点数组 */ children?: TreeNode[]; } /** * 树形数据配置 */ export interface TreeDataConfig { /** 树节点键名 (默认: "id") */ treeKeyName?: string; /** 父节点键名 (默认: "parentId") */ treeParentName?: string; } /** * 枚举值项 */ export interface ValueEnumItem { /** 枚举值 */ value: any; /** 显示标签 */ label: string; /** 标签颜色 (可选) */ color?: string; /** 是否为默认值 (可选) */ default?: boolean; } /** * 计算类型 */ export type CalculationType = 'sum' | 'avg' | 'standardDeviation' | false; /** * 扩展的列定义 (已在 interface.tsx 中定义为 AgGridColumnPropsClone) * 此处提供类型引用和文档 */ export interface ExtendedColDef extends ColDef { /** 是否精确查询 */ exactQuery?: boolean; /** 是否在表格中隐藏 */ hideInTable?: boolean; /** 是否在搜索表单中隐藏 */ hideInSearch?: boolean; /** 查询字段名 (不同于显示字段) */ queryField?: string; /** 查询区独立标题;优先于列方案中的表头名称。@author nokecy */ searchTitle?: string; /** 是否文本缩略显示并使用 tooltip */ ellipsis?: boolean; /** 枚举值配置 */ valueEnum?: ValueEnumItem[]; /** * `valueEnum` **未命中**时的渲染接管(`null` / `undefined` / 空串 / 后端新增码值都走这里)。 * 不传则原样输出该值(历史行为,向后兼容)。业务侧据此输出中性「—」/「未知(原码)」。 * 命中枚举项的渲染不受它影响。 */ enumFallbackRenderer?: (params: ICellRendererParams) => ReactNode; /** 自定义搜索组件 */ searchComponent?: ReactNode | ((props: any) => JSX.Element); /** 搜索组件属性 */ searchComponentProps?: any; /** 查询组件的枚举数据源。@author nokecy */ enum?: any[]; /** 搜索表单排序顺序 */ searchSort?: number; /** 列计算类型 */ calculateType?: CalculationType; /** 计算结果小数位数 (默认: 2) */ transactionAmount?: number; /** 是否使用千分位格式化 */ formatWithCommas?: boolean; /** 自定义单元格渲染器 (用于跳过计算) */ customCellRenderer?: (params: any) => any; /** 列分组的子列 (支持列分组功能) */ children?: ExtendedColDef[]; } /** * 扩展的列状态 (包含 AG-Grid 列状态 + 自定义属性) */ export interface ExtendedColumnState extends ColumnState { /** 列字段名 */ field?: string; /** 单元格样式类 */ cellClass?: string; /** 是否禁用表头过滤按钮 */ suppressHeaderFilterButton?: boolean; /** 分组名称 */ groupName?: string; /** 其他自定义属性 */ [key: string]: any; } /** * 工具栏渲染函数参数 */ export interface ToolBarRenderParams { /** Grid API 引用 */ gridApi?: GridApi; /** 筛选字符串 */ filter?: string; /** 查询过滤器对象 */ queryFilter?: QueryFilterState; /** 分页信息 */ paginationInfo?: { /** @deprecated 改用 page */ current: number; /** @deprecated 改用 page/pageSize */ skipCount: number; /** @deprecated 改用 page/pageSize */ maxResultCount: number; /** 当前页码(1-based) * @author nokecy */ page?: number; /** 每页条数 * @author nokecy */ pageSize?: number; }; } /** * 工具栏渲染函数签名 */ export type ToolBarRenderFunction = (gridApi?: GridApi, filter?: string, queryFilter?: QueryFilterState, paginationInfo?: ToolBarRenderParams['paginationInfo']) => ReactNode[]; /** * 查询表单项 */ export interface QueryFormItem { /** 字段名 */ field: string; /** 表头名称 */ headerName: string; /** 查询区独立标题。@author nokecy */ searchTitle?: string; /** 排序顺序 */ order: number; /** 是否精确查询 */ exactQuery?: boolean; /** 搜索组件 */ searchComponent?: ReactNode | ((props: any) => JSX.Element); /** 搜索组件属性 */ searchComponentProps?: any; /** 枚举值 */ valueEnum?: ValueEnumItem[]; /** 其他扩展属性 */ [key: string]: any; } /** * 查询表单带顺序的项 (继承自 querySchemes) */ export interface QueryFormItemWithOrder extends QueryFormItem { /** 显示顺序 */ order: number; } /** * Grid 引用方法 */ export interface GridRefMethods { /** 刷新数据 */ onRefresh: () => void; } /** * 数据类型推断结果 */ export interface DataTypeInference { /** 数据类型 */ type: 'number' | 'string' | 'boolean' | 'date'; /** 计算类型 (仅对数值类型有效) */ calculateType?: CalculationType; } /** * Grid 上下文值 */ export interface GridPlusContextValue { /** 查询方案管理器 */ querySchemeManager?: any; /** 列配置方案管理器 */ columnSchemeManager?: any; /** Grid API 引用 */ gridApi?: GridApi; /** 是否就绪 */ ready: boolean; } /** * 分页大小选项 */ export type PageSizeOptions = number[]; /** * 默认分页配置 */ export interface DefaultPaginationConfig { /** 默认分页大小 */ pageSize: number; /** 分页大小选项 */ pageSizeOptions: PageSizeOptions; /** 隐藏分页时的默认大小 */ hidePaginationSize: number; } /** * 选中行变化回调 */ export type OnSelectedRowsChange = (selectedRows: any[]) => void; /** * Grid 就绪回调 */ export type OnGridReady = (params: { api: GridApi; columnApi?: any; }) => void; /** * 方案变化回调 */ export type OnSchemeChange = (scheme: T | null) => void; /** * 方案保存回调 */ export type OnSchemeSave = (scheme: T) => void; /** * 方案删除回调 */ export type OnSchemeDelete = (schemeId: string) => void; /** * 可空类型 */ export type Nullable = T | null | undefined; /** * 记录类型 (键值对) */ export type RecordType = Record; /** * 深度部分可选 */ export type DeepPartial = { [P in keyof T]?: T[P] extends object ? DeepPartial : T[P]; }; /** * 列定义数组类型 */ export type ColumnDefs = ExtendedColDef[]; /** * 列状态数组类型 */ export type ColumnStates = ExtendedColumnState[]; /** * 行数据数组类型 */ export type RowDataArray = T[]; /** * 查询表单项数组类型 */ export type QueryFormItems = QueryFormItem[]; /** * 扩展字段定义(来自后端 ABP 配置) */ export interface EntityExtensionField { name: string; displayName: string; description?: string | null; /** 数据类型: String, Int, Long, Decimal, Double, Float, Boolean, DateTime, Date, Guid, Enum, Text */ dataType: string; maxLength?: number | null; precision?: number | null; scale?: number | null; isRequired?: boolean; sortOrder?: number; uiComponent?: string | null; placeholder?: string | null; defaultValue?: any; componentProps?: string | null; validationRules?: string | null; } /** * 单个实体的扩展配置 */ export interface EntityExtensionConfig { entityType: string; displayName: string; moduleName: string; fields: EntityExtensionField[]; } /** * 实体扩展配置映射(key: 实体类型全名) */ export type HostEntityExtensions = Record;