From 4b951d07a071ca3f6023bc2783f2cb941b223ea1 Mon Sep 17 00:00:00 2001 From: let5sne Date: Fri, 10 Jul 2026 00:57:55 +0800 Subject: [PATCH] feat(mobile): add employee learning page --- docs/BACKLOG.md | 2 +- docs/DEMO_ACCEPTANCE.md | 4 +- mobile-uni/src/pages.json | 6 + mobile-uni/src/pages/user/learning/index.vue | 513 +++++++++++++++++++ mobile-uni/src/pages/user/today/index.vue | 4 + scripts/demo-check.sh | 5 + 6 files changed, 531 insertions(+), 3 deletions(-) create mode 100644 mobile-uni/src/pages/user/learning/index.vue diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index a42afa99..d349e2ab 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -98,7 +98,7 @@ ### 零散待办 - **总结卡「保存图片」按钮**(设计基准 summary-modal 图内有):需 html2canvas 类依赖做 DOM 转图,2026-07-05 P0-2 实现时按"不加依赖"红线砍掉;引依赖或后端出图方案定型后补。 -- **员工端「学」板块**(我的地图橙色块):当前进「建设中」整页,承接 B8 五段旅程的岗前课程/每日小训模块。 +- **员工端「学」板块**(我的地图橙色块):已在 `mobile-uni/src/pages/user/learning/index.vue` 落成第一版,从今日任务、岗位 SOP 检索和训练前预习卡读取现有真实接口;后续再接课程/考试/视频学习数据。 ## Future Enhancements diff --git a/docs/DEMO_ACCEPTANCE.md b/docs/DEMO_ACCEPTANCE.md index 7acd220a..1e695a8e 100644 --- a/docs/DEMO_ACCEPTANCE.md +++ b/docs/DEMO_ACCEPTANCE.md @@ -1,6 +1,6 @@ # 一期 MVP 演示与验收清单 -本文件是 MVP 现场演示入口:先跑预检,再按演示流逐条点击。当前证明一期 MVP 路径可讲、可点、可截图;用户侧三端已在 `mobile-uni/` 按真实页面栈重建,portless 入口为 `https://wygj-mobile-uni.localhost/h5/`,已接手机号登录、问师傅、员工训练、案例素材、候选人面试/资料和主管复盘/派专项;员工端训练完成后写入 `aihr_practice_session`,用于训练历史、主管待复盘列表和能力画像;候选人端面试复用 AI 面试 API,补充资料上传写 `sys_oss` 和 `aihr_candidate_material`,HR 可在管理端审核通过/驳回;SOP 检索已可查本地 MySQL seed 片段,并支持 txt/md/PDF/Word/Excel/PPT 上传解析为本地 fragment,配置 vector 模型后会写入 embedding 并尽力同步 Qdrant,管理端 AI 面试和案例沉淀按真实模型/ASR 优先验收。 +本文件是 MVP 现场演示入口:先跑预检,再按演示流逐条点击。当前证明一期 MVP 路径可讲、可点、可截图;用户侧三端已在 `mobile-uni/` 按真实页面栈重建,portless 入口为 `https://wygj-mobile-uni.localhost/h5/`,已接手机号登录、问师傅、员工训练、员工学习、案例素材、候选人面试/资料和主管复盘/派专项;员工端训练完成后写入 `aihr_practice_session`,用于训练历史、主管待复盘列表和能力画像;候选人端面试复用 AI 面试 API,补充资料上传写 `sys_oss` 和 `aihr_candidate_material`,HR 可在管理端审核通过/驳回;SOP 检索已可查本地 MySQL seed 片段,并支持 txt/md/PDF/Word/Excel/PPT 上传解析为本地 fragment,配置 vector 模型后会写入 embedding 并尽力同步 Qdrant,管理端 AI 面试和案例沉淀按真实模型/ASR 优先验收。 ## 演示前预检 @@ -15,7 +15,7 @@ | 顺序 | 页面 | 点击路径 | 必须看到 | |---|---|---|---| | 1 | 首页 `/index` | 打开首页 | 只展示“首页 / AI面试 / 三角色对练 / 案例沉淀 / SOP知识库 / 资料处理 / 系统设置-模型配置” | -| 2 | uni-app 三端 `https://wygj-mobile-uni.localhost/h5/#/pages/user/today/index`、`/pages/candidate/index/index`、`/pages/supervisor/index/index` | 打开后先手机号登录;已配置 `AIHR_SMS_LOGIN_TEMPLATE_ID` 时可真实收短信,新手机号会自动注册;员工端今日页进入问师傅、练习、案例素材和个人页;练习页完成开始练习、提交回应、结束评分、每日三题提交;问师傅页可检索、反馈、生成总结卡;案例素材页可上传语音并回读入库记录;候选人端点“开始面试/面试练习”和“补充资料”;主管端查看团队画像、待复盘、标记已复盘并从画像派专项 | 员工端显示评分、“训练完成,主管端待复盘已更新”、训练历史和能力画像;底部 tab 整页切换(员工端为 今日/练/问/我);未实现入口进「建设中」整页(返回按钮),无死按钮;主管端待复盘列表增加,复盘详情可看评分、话术、导师改写,并可标记已复盘;从团队画像派专项后最近专项立即回读;候选人端可拉题/答题/评分,资料上传后显示审核状态;HR 审核后候选人端显示 `已通过/已驳回` | +| 2 | uni-app 三端 `https://wygj-mobile-uni.localhost/h5/#/pages/user/today/index`、`/pages/candidate/index/index`、`/pages/supervisor/index/index` | 打开后先手机号登录;已配置 `AIHR_SMS_LOGIN_TEMPLATE_ID` 时可真实收短信,新手机号会自动注册;员工端今日页进入问师傅、练习、学习页、案例素材和个人页;学习页读取今日任务、岗位 SOP 和训练前预习卡;练习页完成开始练习、提交回应、结束评分、每日三题提交;问师傅页可检索、反馈、生成总结卡;案例素材页可上传语音并回读入库记录;候选人端点“开始面试/面试练习”和“补充资料”;主管端查看团队画像、待复盘、标记已复盘并从画像派专项 | 员工端显示评分、“训练完成,主管端待复盘已更新”、训练历史和能力画像;学习页不再落到「建设中」,内容来自现有任务、知识库和预习卡接口;底部 tab 整页切换(员工端为 今日/练/问/我);未实现入口进「建设中」整页(返回按钮),无死按钮;主管端待复盘列表增加,复盘详情可看评分、话术、导师改写,并可标记已复盘;从团队画像派专项后最近专项立即回读;候选人端可拉题/答题/评分,资料上传后显示审核状态;HR 审核后候选人端显示 `已通过/已驳回` | | 3 | AI面试 `/recruit/interview` | 生成题目 → 填满参考回答或输入真实回答 → 完成评分 | 配置 chat 模型时真实生成题目和评分;未配置时用本地 Rubric 估分,不返回固定候选人分数;应看到新增面试记录 | | 4 | 三角色对练 `/train/practice` | 开始对练 → 填入参考回复或输入真实回复 → 继续一轮 → 结束并评分 | 已完成闭环、导师改写、新增对练记录;数据库已启用 chat 模型时,客户回复与评分为真实 LLM 生成(回复不再是固定台词,分数随话术变化),未配置时使用本地剧本兜底 | | 5 | 案例沉淀 `/knowledge/cases` | 上传真实语音 → ASR 转写 → AI 整理 → 送审 → 入库 → 查看样片 | 已完成闭环,案例列表新增真实转写生成的记录;视频仍用样片兜底 | diff --git a/mobile-uni/src/pages.json b/mobile-uni/src/pages.json index b4745569..c2b8de67 100644 --- a/mobile-uni/src/pages.json +++ b/mobile-uni/src/pages.json @@ -31,6 +31,12 @@ "navigationBarTitleText": "案例素材" } }, + { + "path": "pages/user/learning/index", + "style": { + "navigationBarTitleText": "学" + } + }, { "path": "pages/auth/login/index", "style": { diff --git a/mobile-uni/src/pages/user/learning/index.vue b/mobile-uni/src/pages/user/learning/index.vue new file mode 100644 index 00000000..3377d32a --- /dev/null +++ b/mobile-uni/src/pages/user/learning/index.vue @@ -0,0 +1,513 @@ + + + + + diff --git a/mobile-uni/src/pages/user/today/index.vue b/mobile-uni/src/pages/user/today/index.vue index 42ff5c8c..042adf5f 100644 --- a/mobile-uni/src/pages/user/today/index.vue +++ b/mobile-uni/src/pages/user/today/index.vue @@ -243,6 +243,10 @@ const openTool = (title: string) => { uni.switchTab({ url: '/pages/user/practice/index' }); return; } + if (title.includes('学') || title.includes('案例学习')) { + uni.navigateTo({ url: '/pages/user/learning/index' }); + return; + } if (title.includes('案例') || title.includes('素材') || title.includes('提交')) { uni.navigateTo({ url: '/pages/user/cases/index' }); return; diff --git a/scripts/demo-check.sh b/scripts/demo-check.sh index 6bcb244c..c17b5b7a 100755 --- a/scripts/demo-check.sh +++ b/scripts/demo-check.sh @@ -129,6 +129,7 @@ contains frontend/src/router/index.ts "/system/model" contains mobile-uni/package.json "aihr-mobile-uni" contains mobile-uni/src/pages.json "pages/user/today/index" +contains mobile-uni/src/pages.json "pages/user/learning/index" contains mobile-uni/src/pages.json "pages/supervisor/index/index" contains mobile-uni/src/pages.json "pages/candidate/index/index" contains mobile-uni/src/pages/auth/login/index.vue "/resource/sms/code" @@ -144,6 +145,10 @@ contains mobile-uni/src/services/knowledge.ts "/api/knowledge/summary-card" contains mobile-uni/src/services/case.ts "/api/knowledge/case/upload" contains mobile-uni/src/services/candidate.ts "/api/recruit/interview/start" contains mobile-uni/src/services/candidate.ts "/api/aihr/mobile/candidate/materials" +contains mobile-uni/src/pages/user/learning/index.vue "岗位 SOP" +contains mobile-uni/src/pages/user/learning/index.vue "getPracticeAssignments" +contains mobile-uni/src/pages/user/learning/index.vue "searchKnowledge" +contains mobile-uni/src/pages/user/learning/index.vue "getPracticePrepCard" contains frontend/src/views/recruit/interview.vue "建议复试" contains frontend/src/views/train/practice.vue "导师改写" contains frontend/src/views/knowledge/cases.vue "真实语音"