learning-backup

04 · API 设计

版本 v0.2 | 创建 2026-06-10 | 最后编辑 2026-06-10 | 状态 草稿 | 作者 XXX

数据以 03-data-model.md 为准;产品口径见 01-product-design.md


1. 通用约定

1.1 统一响应

// 成功
{ "code": 0, "message": "ok", "data": { /* ... */ }, "request_id": "..." }
// 分页 data
{ "list": [ /* ... */ ], "total": 128, "page": 1, "page_size": 20 }
// 失败
{ "code": 1004, "message": "员工不存在", "data": null, "request_id": "..." }

1.2 列表查询通用参数

page(默认1) page_size(默认20,max100) keyword sort(如 -created_at) org_id/scope(数据权限范围)+ 各资源特有筛选。

1.3 鉴权与权限


2. 分模块接口清单

表格列:方法 | 路径(省略 /api/v1 前缀)| 说明 | 权限点。

2.1 认证 auth

方法 路径 说明 权限
POST /auth/login 账号密码登录,返回 JWT + 用户信息 公开
POST /auth/logout 注销(JWT 加黑名单) 登录
GET /auth/me 当前用户(含 roles/perms/org_path)✅ 登录
GET /users?keyword= 账号列表(审批人选择 / 账号管理,范围收敛)✅ 登录
GET /healthz 健康检查 公开

2.2 组织架构 org

方法 路径 说明 权限
GET /orgs/tree 组织主体树 org:read
POST/PUT/DELETE /orgs,/orgs/{id} 增改删(软删) org:write
GET /departments/tree?org_id= 部门树 org:read
POST/PUT/DELETE /departments,/departments/{id} 增改删 org:write
POST /departments/{id}:move 移动节点(更新子树 path) org:write
GET/POST/PUT/DELETE /positions 岗位维护 org:read/write
GET/POST/PUT/DELETE /job-levels 职级序列维护 org:read/write
GET /orgs/chart?root=&view= 架构图数据(org/dept/report 视图) org:read

2.3 员工花名册 employee

方法 路径 说明 权限
GET /employees 列表(多维筛选 + 分页 + 排序) employee:read
GET /employees/{id} 档案详情(含各 Tab 聚合或分接口) employee:read
POST/PUT /employees,/employees/{id} 新增/编辑(一般经流程,直改受限) employee:write
GET /employees/{id}/timeline 该员工的 hr_events 时间线 employee:read
POST /employees:import 批量导入(上传 Excel,返回校验报告) employee:import
GET /employees:import/template 下载导入模板 employee:import
GET /employees:export 导出当前筛选结果 Excel employee:export
GET/PUT /list-prefs/{list_key} 列表列偏好读写 登录
GET/POST/PUT /employee-fields 可配置字段维护 admin:config

2.4 入离调转 process + 审批 approval

方法 路径 说明 权限
GET /processes?type=&status= 流程单列表 transfer:read
POST /processes 发起(type=onboard/offboard/transfer/regularize) transfer:apply
GET /processes/{id} 详情(表单 + 审批轨迹 + 时间线)✅ transfer:read
POST /processes/{id}/approve 审批通过(当前步)✅ transfer:approve
POST /processes/{id}/reject 驳回 ✅ transfer:approve
GET /approvals/todo 我的待办审批 ✅ 登录
GET /approvals/mine 我发起的 ✅ 登录

实现说明:动作端点采用 gin 友好的子路径风格 /{id}/approve|reject(而非 :approve 冒号式)。submit/cancel 暂未实现:当前 POST /processes 直接进入 pending(发起即提交),后续可补草稿态。发起入参:{type, employee_id, payload, approver_ids[]};id 类字段均为字符串。

生效(最后一步通过)由服务端在事务内落地(更新员工 + 履历 + 动态 + 流程状态)。

2.5 合同 contract

方法 路径 说明 权限
GET /contracts?status=&expiring_in=&employee_id= 列表(含到期筛选)✅ contract:read
POST /contracts 签订 ✅ contract:write
GET /contracts/:id 详情 ✅ contract:read
POST /contracts/:id/renew 续签(生成新合同关联旧)✅ contract:write
DELETE /contracts/:id 终止 ✅ contract:write
GET /contracts/reminders?days= 到期提醒列表(含剩余天数,工作台用)✅ contract:read
GET/POST /contract-templates 模板管理 ✅ contract:write

实现说明:终止采用 DELETE /contracts/:id(而非 POST /contracts/:id/terminate)。原因是 gin radix 路由在「:id 参数节点下两个同优先级静态子节点(renew/terminate)」叠加「/contracts/contract-templates 前缀分裂」时,存在跨编译不确定的「已注册却不可达」缺陷;改为 DELETE 后 :id 不再有两个静态子节点,20/20 次构建稳定可达。后端 gin 已升级至 v1.12。详见 docs/07 工程经验。

2.6 档案库 archive

方法 路径 说明 权限
GET/POST/PUT /archive-categories 分类维护 archive:admin
GET /archives?category=&employee_id= 档案列表 archive:read
POST /archives 上传档案(附件) archive:admin
POST /archives/{id}:borrow 发起借阅(走审批) archive:borrow
POST /borrows/{id}:return 归还 archive:borrow
GET /borrows?status= 借阅单列表/我的借阅 archive:read

2.7 任职奖惩 performance

方法 路径 说明 权限
GET/POST /qualifications 任职资格 qualification:read/write
GET/POST /promotions 晋升(可走审批,联动职级) reward:write
GET/POST /rewards-punishments 奖惩录入/查询 reward:write
GET/POST /appraisals:import 考核结果导入归档 reward:write

2.8 员工关怀 care

方法 路径 说明 权限
GET/POST/PUT /care-rules 关怀规则 care:write
GET /care/upcoming?month= 当月生日/周年/节日名单 care:read
GET/POST /care-records 关怀记录(标记已关怀) care:write
GET /care/stats 关怀统计 care:read

2.9 统计分析 analytics(✅ 全部已实现,结果按 org_path 子树收敛)

方法 路径 说明 权限
GET /analytics/overview?scope= 工作台/看板汇总指标卡 stat:read
GET /analytics/structure?dim= 人员结构(按 dept/position/level/gender/edu/age) stat:read
GET /analytics/turnover?from=&to= 入离职趋势(按月) stat:read
GET /analytics/tenure 司龄分布 stat:read
GET /analytics/headcount 编制 vs 实有 stat:read

2.10 人事报表 report

方法 路径 说明 权限
GET/POST/PUT /report-templates 报表模板 report:read
POST /reports:generate 生成报表(预览/导出) report:export
GET /reports/{job_id}/download?format=excel\|pdf 下载 report:export
GET/POST /report-jobs 定时任务(cron)配置/列表 report:export

2.11 人事动态 / 操作日志 timeline + audit

方法 路径 说明 权限
GET /timeline?employee_id=&type=&from=&to= 人事动态时间线(hr_events) employee:read
GET /audit-logs?user=&path=&from=&to= 操作日志检索 audit:read
GET /audit-logs:export 导出日志 audit:read

2.12 系统设置 admin

方法 路径 说明 权限
GET/POST/PUT /roles 角色与权限点 admin:role
GET/POST/PUT /dicts/{category} 数据字典 admin:dict
GET/POST/PUT /reminder-rules 提醒规则(合同/生日/转正) admin:config
GET/POST/PUT /users 账号管理(启停/绑定员工/改角色) admin:role

3. 错误码规范

区间 含义 示例
0 成功 0 ok
1000–1099 通用/参数 1001 参数错误 1002 校验失败 1003 资源不存在 1004 资源冲突
1100–1199 鉴权 1101 未登录 1102 token 失效 1103 无权限 1104 数据范围越权
1200–1299 业务-流程 1201 流程状态不允许此操作 1202 非当前审批人 1203 流程已生效
1300–1399 业务-数据 1301 组织有下属不可删 1302 工号重复 1303 合同期限非法
1400–1499 导入导出 1401 模板不匹配 1402 行级校验失败(附详情)
5000+ 系统错误 5000 内部错误 5001 依赖不可用

导入类错误在 data 内附行级明细:{ "errors": [{"row":3,"field":"phone","msg":"格式错误"}], "success": 47, "failed": 3 }


4. 约定细节


变更记录

版本 日期 作者 说明
v0.1 2026-06-10 XXX 初稿:统一约定、12 模块端点清单、错误码、约定细节
v0.2 2026-06-10 XXX 对齐实现:process 动作改子路径风格、标注已实现端点(process/analytics)