268 lines
7.4 KiB
TypeScript
268 lines
7.4 KiB
TypeScript
/**
|
||
* GERP 后端统一响应格式
|
||
* 所有 API(包括兼容的 PascalCase 路径与现代 DRF 路径)都遵循该格式
|
||
*/
|
||
export interface ApiResult<T = unknown> {
|
||
/** 业务状态码:0 表示成功,非 0 表示失败 */
|
||
code: number
|
||
/** 提示消息 */
|
||
msg: string
|
||
/** 业务数据 */
|
||
data: T
|
||
}
|
||
|
||
/** 分页响应数据 */
|
||
export interface PagedData<T> {
|
||
/** 当前页数据列表 */
|
||
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<string, unknown>, column: ColumnSchema) => string
|
||
/** 码表名,配合 /API/FormAPI/CodeDisplay 翻译 */
|
||
codeTable?: string
|
||
/** type=status 时的状态映射 */
|
||
statusMap?: Record<string, StatusMapEntry>
|
||
/** 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<string, unknown>
|
||
}
|
||
|
||
/**
|
||
* 用户作用域(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
|
||
}
|