Files
GERP/src/types/api.ts
T

268 lines
7.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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
}