feat: complete aihr mvp mobile workflow
This commit is contained in:
@@ -2,12 +2,13 @@
|
||||
|
||||
## 项目定位
|
||||
|
||||
这是“物业AI人力资源系统”一期 Demo 工程。目标是用 RuoYi-Vue-Plus + plus-ui 先跑通本地账号登录和可演示业务壳,再实现 AI HR 的最小英雄路径。
|
||||
这是“物业AI人力资源系统”一期 MVP 版工程。目标是用 RuoYi-Vue-Plus + plus-ui 跑通本地账号登录、可演示业务路径和 AI HR 的最小英雄路径。
|
||||
|
||||
## 工程边界
|
||||
|
||||
- `backend/` 是 `dromara/RuoYi-Vue-Plus` 的 `5.X` 分支检出。
|
||||
- `frontend/` 是 `CrazyLionCat/plus-ui` 的 `5.X` 分支检出。
|
||||
- `frontend/` 是 `CrazyLionCat/plus-ui` 的 `5.X` 分支检出,只承载管理端。
|
||||
- `mobile/` 是独立移动端工程,承载员工端、候选人端、主管端;当前是 Vue/Vite H5,三端首页按 `docs/prototypes/*端-首页.png` 实现,后续确定小程序技术栈后再迁移到 uni-app/Taro。
|
||||
- 本项目自己的本地编排放在根目录:`docker-compose.dev.yml`、`scripts/`;运行说明在 `docs/DEV_SETUP.md`。
|
||||
- 除非确实要接业务模块,不要改上游框架默认配置;本地端口和开关优先放根目录脚本里覆盖。
|
||||
|
||||
@@ -18,8 +19,10 @@
|
||||
- MinIO:API `127.0.0.1:9000`,Console `127.0.0.1:9001`,账号 `ruoyi / ruoyi123`,bucket `ruoyi`。
|
||||
- Qdrant:REST `127.0.0.1:6333`,默认 collection `aihr_knowledge`;可用 `AIHR_QDRANT_URL`、`AIHR_QDRANT_COLLECTION`、`AIHR_QDRANT_API_KEY` 覆盖。
|
||||
- 资料导入根目录:默认 `./.data/import`,由 `scripts/dev-backend.sh` 传入 `aihr.import.root`;也可用 `AIHR_IMPORT_ROOT` 覆盖。
|
||||
- 本地私密配置:根目录 `.env.local` 已被 `.gitignore` 忽略,`scripts/dev-backend.sh` 会自动加载;阿里云短信密钥只放这里或外部环境变量,不写入 `application-*.yml`。
|
||||
- 后端:`./scripts/dev-backend.sh`,端口 `8080`。
|
||||
- 前端:`./scripts/dev-frontend.sh`,端口 `5173`。
|
||||
- 管理端前端:`./scripts/dev-frontend.sh`,端口 `5173`。
|
||||
- 移动端前端:`./scripts/dev-mobile.sh`,端口 `5174`。
|
||||
- 重置数据:`./scripts/reset-dev-db.sh`,会删除并重建本地 `ry-vue`。
|
||||
|
||||
导入 SQL 必须带 `--default-character-set=utf8mb4`,否则中文昵称可能按错误字符集导入并触发字段长度问题。
|
||||
@@ -27,6 +30,7 @@
|
||||
## 验证口径
|
||||
|
||||
- 前端首页:`http://127.0.0.1:5173/`
|
||||
- 移动端首页:`http://127.0.0.1:5174/h5/user`
|
||||
- 租户接口:`http://127.0.0.1:5173/dev-api/auth/tenant/list`
|
||||
- 验证码接口:`http://127.0.0.1:5173/dev-api/auth/code`
|
||||
- 默认登录:租户 `000000`,管理员 `admin / admin123`。
|
||||
@@ -36,7 +40,7 @@
|
||||
- 页面标题在 `frontend/.env.development` 与 `frontend/.env.production`。
|
||||
- 侧栏 logo 在 `frontend/src/assets/logo/logo.png`。
|
||||
|
||||
## Demo 前端边界
|
||||
## MVP 管理端前端边界
|
||||
|
||||
- 首页:`frontend/src/views/index.vue`,路由 `/index`。
|
||||
- AI 面试:`frontend/src/views/recruit/interview.vue`,路由 `/recruit/interview`。
|
||||
@@ -44,22 +48,29 @@
|
||||
- 案例沉淀:`frontend/src/views/knowledge/cases.vue`,路由 `/knowledge/cases`。
|
||||
- SOP 知识库:`frontend/src/views/knowledge/sop.vue`,路由 `/knowledge/sop`。
|
||||
- 资料处理:`frontend/src/views/knowledge/processing.vue`,路由 `/knowledge/processing`。
|
||||
- Demo 阶段侧栏只保留“首页 / AI面试 / 三角色对练 / 案例沉淀 / SOP知识库 / 资料处理 / 系统设置-模型配置”。过滤逻辑在 `frontend/src/layout/components/Sidebar/index.vue`,不要在未明确要求时恢复若依默认全量菜单。
|
||||
- 模型配置:`frontend/src/views/system/model/index.vue`,路由 `/system/model`。
|
||||
- MVP 阶段侧栏只保留“首页 / AI面试 / 三角色对练 / 案例沉淀 / SOP知识库 / 资料处理 / 系统设置-模型配置”。过滤逻辑在 `frontend/src/layout/components/Sidebar/index.vue`,不要在未明确要求时恢复若依默认全量菜单。
|
||||
- 移动端三端首页:`mobile/src/App.vue`,路由 `/h5/user`、`/h5/candidate`、`/h5/supervisor`,分别对应用户/员工端、候选人端、主管端;兼容 `/h5/employee`、`/h5/admin`,但移动端不要把主管端等同后台系统管理员。
|
||||
- 移动端首页接口:`GET /api/aihr/mobile/home/{role}`,当前 `@SaIgnore` 公开只读 seed,用于 H5 首屏 API 优先 + 本地 fallback;后续确定小程序登录后再接移动端 token,不复用管理后台登录态。
|
||||
- 移动端手机号登录:验证码发送走 `GET /resource/sms/code?phonenumber=...`,登录走 `POST /auth/mobile/sms-login`;短信发送复用 `sms.blends.config1` 阿里云配置。手机号不存在时自动注册 `app_user`,备注为“移动端短信自动注册”。模板 ID 用 `AIHR_SMS_LOGIN_TEMPLATE_ID`,AccessKey/Secret/签名用 `ALIYUN_SMS_ACCESS_KEY_ID`、`ALIYUN_SMS_ACCESS_KEY_SECRET`、`ALIYUN_SMS_SIGN_NAME`,本地放 `.env.local`。
|
||||
- 移动端员工训练闭环:员工端首页“开始训练”复用 `POST /api/train/practice/start`、`/turn`、`/finish`,请求必须带移动端登录返回的 `Authorization` 与 `clientid`;`mode=mobile` 完成后写入 `aihr_practice_session`,并更新主管端首页完训率、“待复盘对练”、员工训练历史和能力画像。主管端复盘详情查 `GET /api/aihr/mobile/practice/reviews/{id}`,标记复盘用 `POST /api/aihr/mobile/practice/reviews/{id}/reviewed`。
|
||||
- 当前业务页已用 seed 数据跑通可演示闭环;后端 API 对接先看 `docs/API_INTEGRATION.md`。
|
||||
- 后端业务代码不要塞进上游 `ruoyi-demo`;自有 API 放在 `backend/ruoyi-modules/ruoyi-aihr`,再接入 `ruoyi-admin`。
|
||||
- AI 面试页、三角色对练页、案例沉淀页、SOP 知识库页已是 API 优先 + 本地 fallback;SOP 知识库优先查 `aihr_knowledge_fragment` 的 MySQL Fulltext,并在 vector 模型和 Qdrant 可用时做混合召回;支持 `.txt/.md/.markdown/.pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx` 上传解析入库。
|
||||
- SOP 上传接口是 `POST /api/knowledge/doc/upload`,表单字段为 `file` 和 `category`;当前限制 100MB 内,支持 txt/md/PDF/Word/Excel/PPT,先写 MinIO/`sys_oss` 再绑定 `aihr_knowledge_attach.oss_id`,同一知识库同名文件会替换旧 fragment。若数据库启用 `category=vector` 的模型配置,会同步调用 OpenAI-compatible `/embeddings`,写入 `embedding_json` 并尽力 upsert 到 Qdrant;Qdrant 不可用时保留 MySQL Fulltext/seed fallback。
|
||||
- AI 面试页、三角色对练页、案例沉淀页、SOP 知识库页和移动端三端首页已是 API 优先 + 本地 fallback;SOP 知识库优先查 `aihr_knowledge_fragment` 的 MySQL Fulltext,并在 vector 模型和 Qdrant 可用时做混合召回;支持 `.txt/.md/.markdown/.pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx` 及图片 `.jpg/.jpeg/.png/.gif/.webp/.bmp` 上传解析入库。
|
||||
- SOP 上传接口是 `POST /api/knowledge/doc/upload`,表单字段为 `file` 和 `category`;当前限制 100MB 内,支持 txt/md/PDF/Word/Excel/PPT 及图片,先写 MinIO/`sys_oss` 再绑定 `aihr_knowledge_attach.oss_id`,同一知识库同名文件会替换旧 fragment。若数据库启用 `category=vector` 的模型配置,会同步调用 OpenAI-compatible `/embeddings`,写入 `embedding_json` 并尽力 upsert 到 Qdrant;配置缺失或外部 embedding 失败才用 `local-hash-v1` 兜底,Qdrant 不可用时保留 MySQL Fulltext/seed fallback。
|
||||
- 图片视觉 OCR:上传图片时经 `visionRuntime()` 找启用模型(优先 `aihr_model_config.category='vision'`,无则回退 `category='chat'`),把图片编码成 base64 data URL 调 OpenAI-compatible `/chat/completions` 提取文字再切分入库;无视觉模型返回空正文、fragment 为 0,不报错。资料处理页“图片 OCR”开关读 `imageOcrEnabled = visionRuntime().isPresent()`,未配置时灰显“即将支持”。不依赖 Tesseract。
|
||||
- 向量库状态接口是 `GET /api/knowledge/doc/vector-index-status`,重建接口是 `POST /api/knowledge/doc/rebuild-vector-index`;外部 embedding 成功但 Qdrant collection 维度不一致时不要静默降级,走状态提示和重建。
|
||||
- 资料处理接口是 `GET /api/knowledge/processing/overview`,直接聚合 `aihr_knowledge_attach`、`aihr_knowledge_fragment` 和 `sys_oss.ext1`;`POST /api/knowledge/doc/import-local` 保留同步导入,`POST /api/knowledge/doc/import-local-task` + `GET /api/knowledge/doc/import-tasks` 用于页面启动后台目录导入和轮询进度。目录只能是 `aihr.import.root` 下的相对路径,逐文件复用上传解析链路。
|
||||
- seed service 阶段已完成;后续按 `docs/RUOYI_AI_INCREMENTAL_MIGRATION.md` 分片迁移 `ruoyi-ai` 的知识库、文档解析、RAG、chat 能力。
|
||||
- 迁移时不要整包搬 `ruoyi-chat`;优先在 `ruoyi-aihr` 内吸收必要表、service、loader 和检索接口,并保留 seed fallback。
|
||||
- 已落地的 seed 演示流不要退回静态壳:AI 面试、三角色对练、案例沉淀、SOP 知识库。
|
||||
- 本项目 AI 表前缀用 `aihr_*`:知识库是 `aihr_knowledge_info/attach/fragment`,模型配置是 `aihr_model_provider/config`。
|
||||
- 已落地的 seed 演示流不要退回静态壳:AI 面试、三角色对练、案例沉淀、SOP 知识库、移动端三端首页。
|
||||
- 本项目 AI 表前缀用 `aihr_*`:知识库是 `aihr_knowledge_info/attach/fragment`,模型配置是 `aihr_model_provider/config`,移动端训练记录是 `aihr_practice_session`。
|
||||
|
||||
## 业务文档
|
||||
|
||||
- 总入口:`README.md`
|
||||
- 文档索引:`docs/README.md`
|
||||
- Demo 范围和止损线:`docs/AI人力资源系统一期Demo作战清单.md`
|
||||
- MVP 范围和止损线:`docs/AI人力资源系统一期MVP版作战清单.md`
|
||||
- 后端 API 对接:`docs/API_INTEGRATION.md`
|
||||
- 业务需求:`docs/物业AI人力资源系统业务需求文档BRD.md`
|
||||
- 开发规格:`docs/物业AI人力资源系统开发规格TechSpec.md`
|
||||
|
||||
Reference in New Issue
Block a user