import type { FlatColumnItem } from '../../setting/columnGroupTypes'; /** * 查询项配置 */ export interface QueryItem { /** 字段名 */ field: string; /** 是否隐藏 */ hidden?: boolean; } /** * 逻辑操作符 // P0 */ export type LogicOperator = 'AND' | 'OR'; /** * 查询规则操作符 // P0 */ export type RuleOperator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'contains' | 'startsWith' | 'endsWith' | 'isEmpty' | 'isNotEmpty' | 'between'; /** * 单条查询规则 // P0 */ export interface QueryRule { /** 规则ID */ id: string; /** 字段名 */ field: string; /** 操作符 */ operator: string; /** 值 */ value: any; } /** * 查询规则组 // P0 */ export interface QueryRuleGroup { /** 组ID */ id: string; /** 逻辑连接符 */ logic: LogicOperator; /** 子规则或子组 */ children: (QueryRule | QueryRuleGroup)[]; } /** * 查询配置结构 */ export interface QueryConfig { /** 查询项配置列表 (按顺序排列) */ items: QueryItem[]; /** 查询表单默认值 */ defaultValues?: Record; /** 查询模式: simple(简单表单) | advanced(高级组合器) // P0 */ mode?: 'simple' | 'advanced'; /** 高级模式下的规则树 // P0 */ rules?: QueryRuleGroup; } /** * 查询方案 */ export interface QueryScheme { /** 方案唯一标识 */ id: string; /** 方案名称 */ name: string; /** 方案描述 */ description?: string; /** 查询配置 */ queryConfig: QueryConfig; /** 是否为默认方案 */ isDefault: boolean; /** 是否为系统方案(不可删除) */ isSystem: boolean; /** 创建时间戳(由存储适配器自动生成) */ createdAt?: number; /** 最后更新时间戳(由存储适配器自动生成) */ updatedAt?: number; /** 创建用户ID(可选) */ createdBy?: string; /** 是否为全局方案 @author nokecy */ isGlobal?: boolean; } /** * 列方案(集中式 API 使用) * 使用扩展的列配置格式,包含分组层级结构 */ export interface ColumnScheme { /** 方案唯一标识 */ id: string; /** 方案名称 */ name: string; /** 方案描述 */ description?: string; /** 完整的列配置数据(包含分组层级结构) */ columnConfig: FlatColumnItem[]; /** AG-Grid 过滤器模型数据(可选) */ filterModel?: any; /** 是否为默认方案 */ isDefault: boolean; /** 是否为系统方案(不可删除) */ isSystem: boolean; /** 创建时间戳(由存储适配器自动生成) */ createdAt?: number; /** 最后更新时间戳(由存储适配器自动生成) */ updatedAt?: number; /** 创建用户ID(可选) */ createdBy?: string; /** 方案来源标识(便于前端区分展示,由前端计算) */ isGlobal?: boolean; } /** * 方案同步数据结构 */ export interface SchemeSyncDataDto { /** 列方案,按 GridId 分组 */ columnSchemes: Record; /** 查询方案,按 GridId 分组 */ querySchemes: Record; /** 当前激活方案,Key 为 GridId */ currentSchemes: Record; /** 服务器当前时间戳(毫秒) */ syncTime: number; /** 数据版本号 */ version: number; } /** * 当前方案 DTO */ export interface CurrentSchemeDto { /** 列方案ID */ columnSchemeId?: string | null; /** 查询方案ID */ querySchemeId?: string | null; } /** * 方案存储适配器接口 * * 支持两种实现: * - LocalStorageAdapter: 本地存储 * - BackendApiAdapter: 远程 API */ export interface SchemeStorageAdapter { /** * 获取用户所有方案数据 (初始化时调用一次) * @returns 所有表格的方案数据 */ loadAllSchemes(): Promise; /** * 保存/更新列方案 * @param gridId 表格ID * @param scheme 方案对象 (id 存在表示更新,不存在表示新增) * @returns 保存后的方案对象 */ saveColumnScheme(gridId: string, scheme: ColumnScheme): Promise; /** * 删除列方案 * @param gridId 表格ID * @param schemeId 方案ID */ deleteColumnScheme(gridId: string, schemeId: string): Promise; /** * 保存/更新查询方案 * @param gridId 表格ID * @param scheme 方案对象 * @returns 保存后的方案对象 */ saveQueryScheme(gridId: string, scheme: QueryScheme): Promise; /** * 删除查询方案 * @param gridId 表格ID * @param schemeId 方案ID */ deleteQueryScheme(gridId: string, schemeId: string): Promise; /** * 设置当前方案 * @param gridId 表格ID * @param columnSchemeId 列方案ID (null 表示清除) * @param querySchemeId 查询方案ID (null 表示清除) */ setCurrentScheme(gridId: string, columnSchemeId: string | null, querySchemeId: string | null): Promise; /** * 将方案应用到全局(管理员操作) * 将指定的用户方案复制为 UserId=null 的全局方案 * @param gridId 表格标识 * @param schemeId 源方案ID(用户的方案) * @returns 全局方案ID * @throws 403 - 无权限 * @throws 404 - 源方案不存在 */ applyToGlobal?(gridId: string, schemeId: string): Promise; /** * 重置当前用户配置,回退到全局配置 * 删除当前用户在指定表格的所有个人方案 * @param gridId 表格标识 */ resetToGlobal?(gridId: string): Promise; /** * 重置所有用户配置(管理员操作) * 删除指定表格下所有用户的个人方案,保留全局方案 * @param gridId 表格标识 * @throws 403 - 无权限 */ resetAllUsers?(gridId: string): Promise; } /** * 适配器配置基类 */ export interface SchemeStorageConfig { /** 是否启用调试日志 */ enableDebugLog?: boolean; }