init: 数字员工平台初始代码

包含前端(Vue3 + VueFlow 画布)、后端(Go)、文档体系。
- 工作台画布:节点拖放、连线模式、右键菜单、AI 助手
- 后端:连接器 API、专员种子数据
- 导航:左侧导航、工坊、市场、控制台
This commit is contained in:
eaiadmin
2026-08-18 20:19:58 +08:00
commit 4e8817d768
239 changed files with 48631 additions and 0 deletions
+576
View File
@@ -0,0 +1,576 @@
# eaisalestrain_app — API 文档
> **版本:V1.1 | 协议:HTTP/JSON | 认证:JWT Bearer**
> **最后更新:2026-08-15**
>
> **⚠️ 本文档为 V1.1 设计期基线,后端已重写为 Go + Gin(见 docs/changelog.md V1.2)。** V1.4–V1.7 新增的岗位(`/api/positions`)、部门(`/api/departments`)、消息(`/api/notifications`)、积分(`/api/points`)、证书(`/api/exam/certificates`)、错题本(`/api/exam/mistakes`)、学习档案(`/api/my/profile`)等接口未收录于本文档,以 `docs/changelog.md` 为准。
---
## 通用约定
### 认证方式
所有 API(除 login 外)需在请求头携带:`Authorization: Bearer <token>`
### 响应格式
```json
{
"data": { ... },
"error": null,
"message": "success"
}
```
错误响应:
```json
{
"data": null,
"error": "error_code",
"message": "人类可读的错误描述"
}
```
### HTTP 状态码
| 状态码 | 含义 |
|--------|------|
| 200 | 成功 |
| 201 | 创建成功 |
| 400 | 请求参数错误 |
| 401 | 未认证 / token 无效 |
| 403 | 无权限(非管理员访问管理接口) |
| 404 | 资源不存在 |
| 409 | 资源冲突(如用户名重复) |
| 500 | 服务器内部错误 |
---
## 1. 认证 API
### `POST /api/auth/login`
**描述:** 登录获取 JWT Token
**请求体:**
```json
{
"username": "string",
"password": "string"
}
```
**响应:**
```json
{
"data": {
"token": "string",
"expires_in": 28800,
"user": {
"id": 1,
"username": "string",
"full_name": "string",
"role": "employee"
}
}
}
```
### `GET /api/auth/me`
**描述:** 获取当前登录用户信息
**认证:** 必需
---
## 2. 公司介绍培训 API
### `GET /api/company-train`
**描述:** 获取公司介绍内容
**认证:** 必需
**响应:**
```json
{
"data": {
"content": "公司简介HTML/文本",
"medias": [
{
"id": 1,
"filename": "公司介绍.pptx",
"file_ext": "pptx",
"preview_url": "/api/media/preview/1"
}
]
}
}
```
### `POST /api/company-train/suggest-material`
**描述:** 员工提交素材建议(弹窗)
**认证:** 必需
**请求体:** `multipart/form-data`
- `file`: 文件
- `remark`: 备注说明(可选)
---
## 3. 产品知识 API
### `GET /api/products`
**描述:** 获取产品列表
**参数:** `?category=capital_consulting`(可选,按分类筛选)
**认证:** 必需
### `GET /api/products/{id}`
**描述:** 获取产品详情
**认证:** 必需
### `POST /api/products` (管理员)
**描述:** 新增产品
**认证:** 需 admin 角色
### `PUT /api/products/{id}` (管理员)
**描述:** 编辑产品
### `DELETE /api/products/{id}` (管理员)
**描述:** 停用产品(软删除)
### `POST /api/products/import` (管理员)
**描述:** 批量导入产品(Excel / JSON)
---
## 4. 销售培训 API
### `GET /api/courses`
**描述:** 获取课程列表
**参数:** `?category=capital_script`(可选)
**认证:** 必需
### `GET /api/courses/{id}`
**描述:** 获取课程详情(含绑定产品信息)
**认证:** 必需
### `POST /api/courses` (管理员)
**描述:** 新增课程
**认证:** 需 admin 角色
### `PUT /api/courses/{id}` (管理员)
**描述:** 编辑课程,绑定/解绑产品
---
## 5. 考试 API
### 5.1 题库管理(管理员)
#### `GET /api/exam/questions`
**描述:** 题目列表
**参数:** `?domain=company&status=active`
**认证:** 需 admin 角色
#### `POST /api/exam/questions`
**描述:** 新增题目
**认证:** 需 admin 角色
**请求体:**
```json
{
"domain": "company",
"course_id": null,
"type": "single",
"stem": "博昇的主营业务包括?",
"options": [
{"key": "A", "text": "资本咨询"},
{"key": "B", "text": "AI产业落地"},
{"key": "C", "text": "房地产开发"},
{"key": "D", "text": "以上都是"}
],
"answer": ["D"],
"explanation": "博昇双主营业务为资本咨询与AI产业落地"
}
```
#### `PUT /api/exam/questions/{id}`
**描述:** 编辑题目
#### `DELETE /api/exam/questions/{id}`
**描述:** 停用题目
### 5.2 考试配置(管理员)
#### `GET /api/exam/papers`
**描述:** 考试配置列表
#### `POST /api/exam/papers`
**描述:** 创建考试配置
**认证:** 需 admin 角色
**请求体:**
```json
{
"name": "公司介绍正式考试",
"type": "formal",
"domain": "company",
"question_count": 20,
"total_score": 100,
"pass_score": 60,
"duration_minutes": 30,
"randomize": true
}
```
### 5.3 学员端考试
#### `GET /api/exam/list`
**描述:** 我的考试列表(所有可用考试 + 状态)
**认证:** 必需
#### `GET /api/exam/cover?id={paperId}`
**描述:** 考试封面/说明
**认证:** 必需
#### `POST /api/exam/start`
**描述:** 开始考试,下发题目
**认证:** 必需
**请求体:**
```json
{
"paper_id": 1
}
```
**响应:**
```json
{
"data": {
"session_id": "exam-uuid",
"exam_name": "公司介绍正式考试",
"time_limit_min": 30,
"questions": [
{
"id": 1,
"order": 1,
"type": "single",
"stem": "博昇的主营业务包括?",
"options": [
{"key": "A", "text": "资本咨询"},
{"key": "B", "text": "AI产业落地"}
]
}
]
}
}
```
#### `POST /api/exam/submit`
**描述:** 交卷判分
**认证:** 必需
**请求体:**
```json
{
"session_id": "exam-uuid",
"answers": {"1": "D", "2": ["A","B"], "3": "true"},
"time_spent_sec": 1200
}
```
**响应(正式考试):**
```json
{
"data": {
"session_id": "exam-uuid",
"exam_name": "公司介绍正式考试",
"score": 85,
"total_score": 100,
"pass_score": 60,
"passed": true,
"correct_count": 17,
"wrong_count": 3,
"detail": [
{"question_id": 1, "is_correct": true, "user_answer": "D", "correct_answer": "D"}
]
}
}
```
**响应(自测):** 同上,但不会持久化到 exam_record
#### `GET /api/exam/record`
**描述:** 我的考试记录列表
**认证:** 必需(员工仅自己,管理员可看全部)
**参数:** `?page=1&size=20`
#### `GET /api/exam/record/{recordId}`
**描述:** 考试记录详情(答题明细回溯)
**认证:** 必需
---
## 6. 素材/媒体 API
### `POST /api/media/upload`
**描述:** 上传文件(文档 ≤ 200MB 直传)
**认证:** 必需
**请求体:** `multipart/form-data`
- `file`: 文件
- `bind_type`: company / product / course / none
- `bind_id`: 绑定实体 ID(可选)
### `POST /api/media/upload-init`
**描述:** 初始化分片上传(视频 > 100MB)
**认证:** 必需
**请求体:**
```json
{
"filename": "training.mp4",
"file_size": 524288000,
"bind_type": "course",
"bind_id": 1
}
```
**响应:**
```json
{
"data": {
"upload_id": "uuid",
"chunk_size": 5242880,
"chunk_count": 100
}
}
```
### `POST /api/media/upload-chunk`
**描述:** 上传分片
**认证:** 必需
**请求体:** `multipart/form-data`
- `upload_id`: 上传会话 ID
- `chunk_index`: 分片序号(从 0 开始)
- `file`: 分片二进制
### `POST /api/media/upload-complete`
**描述:** 完成分片上传,合并文件
**认证:** 必需
**请求体:**
```json
{
"upload_id": "uuid"
}
```
### `GET /api/media/preview/{mediaId}`
**描述:** 获取预览 URL / 信息(仅 approved 素材)
**认证:** 必需
### `GET /api/media/status/{mediaId}`
**描述:** 查询素材状态(含提取进度)
**认证:** 必需
---
## 7. 素材审批 API(管理员)
### `GET /api/media/audit-list`
**描述:** 待审批素材列表
**参数:** `?status=pending&page=1&size=20`
**认证:** 需 admin 角色
### `POST /api/media/audit/{mediaId}`
**描述:** 审批素材
**认证:** 需 admin 角色
**请求体:**
```json
{
"action": "approve",
"reject_reason": "内容不符合要求(驳回时必填)"
}
```
---
## 8. 知识源入库 API(管理员)
> 结构化知识源(`docs/knowledge_source/*.md`)的扫描、审批、摄入。完整设计见 `04_Backend/BE05_Knowledge_Ingest_Module.md`。
### `POST /api/knowledge/scan`
**描述:** 扫描 knowledge_source 目录,为新增/变更的 md 建 pending 记录
**认证:** 需 admin 角色
**响应:**
```json
{
"data": {
"results": [
{"file_path": "02_资本咨询类.md", "status": "created", "title": "资本咨询类(表1)"}
]
}
}
```
### `GET /api/knowledge/audit-list`
**描述:** 知识源审批列表
**参数:** `?status=pending&page=1&size=20`
**认证:** 需 admin 角色
### `POST /api/knowledge/audit/{sourceId}`
**描述:** 审批知识源(approve → 同步摄入 product/question/chunk;reject → 必填理由)
**认证:** 需 admin 角色
**请求体:**
```json
{
"action": "approve",
"reject_reason": "内容不符合要求(驳回时必填)"
}
```
**响应(approve):**
```json
{
"data": {
"status": "approved",
"source_id": 1,
"products": 3,
"chunks": 3,
"questions": 4
}
}
```
### `GET /api/knowledge/status/{sourceId}`
**描述:** 查询知识源审批/摄入状态
**认证:** 必需
---
## 9. AI PathCoach API
### `POST /api/ai-chat/message`
**描述:** 发送消息给 AI PathCoach
**认证:** 必需
**请求体:**
```json
{
"message": "请介绍一下资本咨询类产品",
"context": {
"product_id": 1,
"page": "product_detail"
}
}
```
**响应(SSE 流式):**
```
data: {"type": "text", "content": "资本咨询类产品主要包括..."}
data: {"type": "done"}
```
### `GET /api/ai-chat/quick-actions`
**描述:** 获取快捷按钮列表
**认证:** 必需
**响应:**
```json
{
"data": {
"actions": [
{"id": "scenario", "label": "客户情景演练"},
{"id": "commission", "label": "查询佣金/规则"},
{"id": "compare", "label": "产品对比"}
]
}
}
```
### `POST /api/ai-chat/quick-action`
**描述:** 触发快捷动作
**认证:** 必需
**请求体:**
```json
{
"action_id": "commission",
"params": {"product_code": "ZQ-001"}
}
```
---
## 10. 系统管理 API(管理员)
### 10.1 用户管理
#### `GET /api/system/users`
**描述:** 用户列表
**认证:** 需 admin 角色
#### `POST /api/system/users`
**描述:** 创建用户
**认证:** 需 admin 角色
**请求体:**
```json
{
"username": "zhangsan",
"password": "初始密码",
"full_name": "张三",
"role": "employee"
}
```
#### `PUT /api/system/users/{id}`
**描述:** 编辑用户(可禁用、改角色)
### 10.2 考试成绩管理
#### `GET /api/system/exam-records`
**描述:** 全部考试成绩(支持按用户/考试筛选)
**认证:** 需 admin 角色
#### `GET /api/system/exam-records/{id}`
**描述:** 考试记录详情
### 10.3 系统参数配置
#### `GET /api/system/config`
**描述:** 获取所有系统参数
**认证:** 需 admin 角色
#### `PUT /api/system/config`
**描述:** 更新系统参数
**认证:** 需 admin 角色
**请求体:**
```json
{
"configs": {
"llm_base_url": "http://192.168.1.100:11434/v1",
"llm_api_key": "sk-xxx",
"llm_model": "qwen2.5:7b",
"jwt_expire_minutes": 480
}
}
```
---
## 11. 健康检查
### `GET /api/health`
**描述:** 服务健康检查
**认证:** 不需要
**响应:**
```json
{
"status": "ok",
"service": "eaisalestrain-app",
"version": "1.1.0"
}
```