/** * GERP 后端统一响应格式 * 所有 API(包括兼容的 PascalCase 路径与现代 DRF 路径)都遵循该格式 */ export interface ApiResult { /** 业务状态码:0 表示成功,非 0 表示失败 */ code: number /** 提示消息 */ msg: string /** 业务数据 */ data: T } /** 分页响应数据 */ export interface PagedData { /** 当前页数据列表 */ list: T[] /** 总条数 */ total: number /** 当前页码(从 1 开始) */ page: number /** 每页大小 */ pageSize: number } /** statusMap 单个状态的渲染配置 */ export interface StatusMapEntry { /** 显示文本 */ text: string /** Element Plus tag 类型:primary/success/warning/danger/info */ type?: 'primary' | 'success' | 'warning' | 'danger' | 'info' /** 自定义颜色(覆盖 type) */ color?: string } /** codeTable 码表条目 */ export interface CodeTableEntry { /** 码值 */ code: string | number /** 显示文本 */ label: string } /** EntityPicker(实体选择器)配置,替代原生 CompanyUtils.epColumn */ export interface EntityPickerConfig { /** 搜索接口 URL,如 /API/FormAPI/UserSearch */ api: string /** HTTP 方法,默认 GET */ method?: 'GET' | 'POST' /** 显示字段名,如 UserName */ labelField: string /** 值字段名(主键),如 UserUUID */ valueField: string /** 副文本字段名(可选,如 UserEmail) */ secondaryField?: string /** 占位符 */ placeholder?: string /** 搜索参数名,默认 keyword */ searchParam?: string /** 响应数据路径,默认 data */ resultPath?: string /** 关联码表名(可选,用于回显翻译) */ codeTable?: string } /** * 后端 FormAPI Columns 返回的列定义 * 兼容旧 GERP TableEngine 的 column schema,前端用 vxe-table / FormKit 渲染 * * 字段命名遵循原生 TableEngine 约定(camelCase),与后端 Columns 接口返回一致 */ export interface ColumnSchema { // === 基础 === /** 字段名(对应数据库列) */ field: string /** 显示标题 */ title: string /** 英文标题(可选回退) */ titleEn?: string /** 别名(可选) */ label?: string /** * 控件/渲染类型 * 渲染 + 编辑共用:text/string/number/textarea/select/date/datetime/time/ * boolean/switch/checkbox/radio/tags/password/email/tel/phone/url/color/ * file/image/hidden/entityPicker/readonly/divider/html/status/uuid */ type?: string // === 主键 === /** 是否主键(单主键) */ isPrimary?: boolean /** 原生 primaryKey 别名(与 isPrimary 等价,对齐 TableEngine) */ primaryKey?: boolean /** 复合主键字段名数组(原生 PrimaryKeys) */ primaryKeys?: string[] // === 表格展示 === /** 是否在表格中显示 */ visible?: boolean /** 是否可排序 */ sortable?: boolean /** 列宽可拖拽调整(默认 true) */ resizable?: boolean /** 固定列:left/right */ fixed?: 'left' | 'right' /** 列宽 */ width?: number | string /** 最小列宽 */ minWidth?: number /** 弹性增长(custom 模式) */ flex?: number /** 超长截断(默认跟随 vxe-table show-overflow) */ ellipsis?: boolean /** 最大长度(同时用于截断与表单校验) */ maxLength?: number /** 自定义渲染函数名(前端字段,后端不返回;对应原生 formatter/render) */ _render?: string /** 原生 formatter 函数引用(前端运行时注入,非后端字段) */ formatter?: (value: unknown, row: Record, column: ColumnSchema) => string /** 码表名,配合 /API/FormAPI/CodeDisplay 翻译 */ codeTable?: string /** type=status 时的状态映射 */ statusMap?: Record /** type=tags 时的分隔符(默认逗号) */ tagsSeparator?: string // === 表单 === /** 是否可编辑(默认 true) */ editable?: boolean /** 表单中隐藏 */ hideInForm?: boolean /** 是否必填 */ required?: boolean /** 必填但允许提交空值(原生特有,跳过 required 校验) */ passEmpty?: boolean /** 禁用 */ disabled?: boolean /** 默认值 */ defaultValue?: unknown /** 占位符 */ placeholder?: string // === 数值约束 === /** 最小值 */ min?: number /** 最大值 */ max?: number /** 步长 */ step?: number // === 文本校验 === /** 最小长度 */ minLength?: number /** 精确长度 */ length?: number /** 正则校验 */ pattern?: string // === 选项 === /** 选项列表(type 为 select/radio/checkbox 时使用) */ options?: Array<{ label: string; value: string | number; disabled?: boolean }> // === 特定控件 === /** textarea 行数(默认 3) */ rows?: number /** checkbox 文本 */ checkboxLabel?: string /** file/image 接受的文件类型 */ accept?: string /** file 多选 */ multiple?: boolean /** 表单项下方说明文字 */ description?: string // === 实体选择器 === /** type=entityPicker 时的配置 */ entityPicker?: EntityPickerConfig // === 分隔/HTML === /** type=divider 时的分隔文本 */ text?: string /** type=html 时的自定义 HTML */ html?: string } /** 菜单项 */ export interface MenuItem { /** 菜单 ID */ Id?: number /** 菜单名/显示文本 */ Title: string /** 菜单图标(Font Awesome 或 Element Plus Icon 名) */ Icon?: string /** 后端原始页面路径(如 pages/workorder/admin.html),转换后存 Path */ Page?: string /** 跳转路径(前端路由,由 Page 规范化而来) */ Path?: string /** 子菜单 */ Children?: MenuItem[] /** 排序 */ Sort?: number /** 菜单类型:directory/menu/button */ Type?: 'directory' | 'menu' | 'button' /** 权限标识 */ Permission?: string } /** 当前登录用户信息 */ export interface UserInfo { /** 用户 UUID */ UserUUID: string /** 用户名 */ UserName: string /** 显示名 */ DisplayName?: string /** 邮箱 */ Email?: string /** 头像 URL */ Avatar?: string /** 当前角色 */ CurrentRole?: string /** 角色列表 */ Roles?: string[] /** 是否管理员 */ IsAdmin?: boolean /** 个人配置 */ Config?: Record } /** * 用户作用域(role_scope) * * 对齐原生 GERP.CheckAdmin().role_scope,用于用户管理页按角色差异化显示与隔离 * - admin:管理员,全公司可见,可跨公司特权 * - dept_manager:部门负责人,仅本部门 * - workgroup_lead:工作组组长,仅本工作组 * - member:普通组员,仅自己 */ export interface RoleScope { /** 作用域类型 */ Type: 'admin' | 'dept_manager' | 'workgroup_lead' | 'member' /** 类型显示文本 */ TypeLabel?: string /** 是否管理员 */ IsAdmin?: boolean /** 是否部门负责人 */ IsDeptManager?: boolean /** 是否工作组组长 */ IsWorkgroupLead?: boolean /** 是否普通组员 */ IsMember?: boolean /** 所属部门 UUID */ DeptUUID?: string /** 所属工作组 UUID */ WorkgroupUUID?: string } /** CheckAdmin 接口返回结果 */ export interface AdminCheckResult { /** 是否管理员 */ is_admin?: boolean /** 用户作用域 */ role_scope?: RoleScope | null }