admin
|
b4ae0e6da0
|
feat(mobile-uni): 彻底完成登录页、首页、学习中心与问答页UI/UX极简重构及单条消息追问功能
|
2026-07-23 02:16:57 +08:00 |
|
admin
|
455267cf6f
|
feat: add realtime practice voice selector
|
2026-07-22 12:24:46 +08:00 |
|
admin
|
87772cc64c
|
feat: add qwen realtime practice beta
|
2026-07-22 09:29:39 +08:00 |
|
admin
|
2488febf19
|
Merge branch 'codex/personal-assistant-phase2' into codex/multi-tenant-knowledge-platform
# Conflicts:
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrModelSeedServiceTest.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java
# docs/API_INTEGRATION.md
# docs/个人AI助理阶段二专项TechSpec.md
# docs/个人AI助理阶段二开发推进计划.md
# frontend/src/views/knowledge/processing.vue
# mobile-uni/src/pages/user/sop/index.vue
# mobile-uni/src/services/api.ts
# mobile-uni/src/services/personal-assistant.ts
# mobile-uni/tests/personal-assistant.test.mjs
# scripts/demo-check.sh
# scripts/personal-assistant-smoke.sh
|
2026-07-22 08:54:04 +08:00 |
|
admin
|
c38a723ae4
|
Merge branch 'codex/brd-release-20260715' into codex/multi-tenant-knowledge-platform
# Conflicts:
# AGENTS.md
# README.md
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrOrgSyncService.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrOrgSyncServiceTest.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java
# docs/20260708/uni-app用户侧前端重建计划.md
# docs/API_INTEGRATION.md
# docs/BRD_IMPLEMENTATION_AUDIT.md
# docs/BRD_PRODUCTION_MIGRATION_RUNBOOK.md
# docs/DEMO_ACCEPTANCE.md
# docs/DEV_SETUP.md
# docs/FIGMA_IMPLEMENTATION_MATRIX.md
# docs/README.md
# frontend/src/views/knowledge/processing.vue
# mobile-uni/src/pages/supervisor/assign/index.vue
# mobile-uni/src/pages/supervisor/index/index.vue
# mobile-uni/src/pages/supervisor/profile/index.vue
# mobile-uni/src/pages/supervisor/review/index.vue
# mobile-uni/src/pages/supervisor/reviews/index.vue
# mobile-uni/src/pages/supervisor/team/index.vue
# mobile-uni/src/pages/user/cases/index.vue
# mobile-uni/src/pages/user/practice/index.vue
# mobile-uni/src/pages/user/profile/index.vue
# mobile-uni/src/pages/user/sop/index.vue
# mobile-uni/src/pages/user/today/index.vue
# mobile-uni/src/types/api.ts
# scripts/tests/aihr-schema-migrations.test.sh
|
2026-07-22 08:41:49 +08:00 |
|
admin
|
4536d607e3
|
feat: add project-scoped work assistant results
|
2026-07-21 04:44:15 +08:00 |
|
admin
|
7716f0040d
|
feat(mobile): AI question generation panel in supervisor exam editor
Hints input + preset chips + count picker; generated questions land in
the existing editor blocks for the supervisor to review before publish.
|
2026-07-20 10:16:40 +08:00 |
|
admin
|
0a5fc9a463
|
feat(assistant): unify confirmed memory capture
|
2026-07-20 02:30:06 +08:00 |
|
admin
|
61bc7191d1
|
feat(web-ai): support qwen image search safely
|
2026-07-19 22:58:20 +08:00 |
|
admin
|
925b48e436
|
feat(work-report): add voice-first reporting flow
|
2026-07-19 12:17:11 +08:00 |
|
admin
|
24da833fa6
|
feat(personal-assistant): add confirmed project memory
|
2026-07-19 08:19:24 +08:00 |
|
admin
|
9210b7dde6
|
feat(speech): switch mentor voice to anna and slow warm speed to 0.88
diana auditioned too bright for the mentor persona; anna measures
steadier (median F0 220Hz, lowest variance) in production auditions.
|
2026-07-19 03:01:48 +08:00 |
|
admin
|
4c2b5deb00
|
feat(mobile): redesign today home and switch mentor persona to female
- today: immersive community hero + hold-to-talk voice card, numbered
schedule rows, common-functions grid (learning/report/question-board)
- login: female mentor bust; sop: female mentor chat avatars
- speech: raise browser-fallback mentor pitch to match female voice
|
2026-07-19 02:38:18 +08:00 |
|
admin
|
064816a784
|
feat(knowledge): add short-term ask memory
|
2026-07-18 21:22:49 +08:00 |
|
admin
|
68d5600534
|
feat(speech): add role-aware emotional TTS profiles
|
2026-07-18 18:27:14 +08:00 |
|
 adminandClaude Fable 5
|
0a7eb38e05
|
feat: work-report module V1 — four report types with review flow
客户 2026-07-18 语音需求落地:「报」分四种——优秀案例/操作视频/
完整SOP/有用知识,员工提交、主管或运营审核。
后端(新包 org.dromara.aihr.report):
- aihr_work_report 表(自建,utf8mb4_general_ci 显式声明,含提交人/
审核人/状态/附件 OSS 编号,提交人与状态双索引)
- POST /api/aihr/work-report/reports 员工提交(类型/标题/说明校验)
- POST /attachment 附件上传(≤100MB,OSS 落盘,ossId 字符串安全)
- GET /reports/mine 我的上报;GET /reports 审核队列(canModerate 门禁,
复用社区 Policy);POST /{id}/review APPROVE/REJECT
(仅 PENDING 可审,重复审核 400)
- 审核通过后的入库动作留给运营在案例库/知识库人工完成(不自动入库,
遵守'入知识库必须人工确认'原则)
员工端:
- 新页 pages/user/report(替换'建设中'占位):四类型卡片选择、
标题+说明(说明支持录音转写)、附件选择上传(视频类必传校验)、
我的上报列表(待审核/已通过/已驳回+审核意见)
- 「我」页常用功能入口文案更新
生产验证(端到端):
- API:员工提交→我的上报可见→员工查审核队列403→主管队列可见
→审核通过→重复审核400 全通过
- UI:我页入口→上报页→选类型→填表→提交→列表显示'待审核',
历史记录显示'已通过'+审核意见
- 后端发布(备份 ruoyi-admin.jar.bak-20260718123032,25s恢复),
H5 已发布(备份 h5-before-20260718123032)
二期待办:主管端待审列表页(现主管可用接口审核)、通过后一键转
案例库/知识库、上报采纳积分奖励(等客户定规则)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-18 12:38:14 +08:00 |
|
 adminandClaude Fable 5
|
a90f241def
|
fix(mobile): overnight audit round — IA cleanup, internal codes, exam guard
夜间自迭代体检(生产四tab+7子页,截图+console+接口+文案标志采集)
发现三类问题,本轮修复:
1. 信息架构(采纳用户建议):今日页「我的地图」四宫格三项与底部tab
重复(问/练),仅学习中心/工作上报有增量 → 整块从今日页移除,
「学习中心/我的训练概况/工作上报」下沉到「我」页新「常用功能」组
(图标+标题+说明行,与我的积分同列);今日页保留小贴士条,
页面高度显著缩短、不再与tab栏功能重复。
2. 内部编码泄漏:派发 reason 里的调度批次码(AUTO22-20260717
PILOT-04)在今日「今日安排」、练页「最近练过」、学习中心
「昨日错题重练」三处原样示人 → 新增 services/text.ts
stripInternalCodes(剥前缀码保留人话,整行为码则回退默认文案),
三处渲染点统一接入。
3. 功能不通:直接访问 /pages/user/exam/index(无id)会请求
/api/aihr/mobile/exams/0 → 服务端500 → load() 增加 id 守卫,
显示「请从学习中心·考试任务进入」且不再发请求。
同时:今日「打字问」描述改为不换行文案(原两行文案窄列截断)。
验证:本地7项断言全过;生产复核 map removed/code clean/
profile entries/exam guard/exams|0 not fired 全 true。
发布备份 h5-before-20260718055449。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-18 05:56:15 +08:00 |
|
 adminandClaude Fable 5
|
f7eff14342
|
feat(mobile): voice-first master replies with WeChat-style unread dot and 转文字
客户 2026-07-18 追加要求:师傅回复先以语音消息呈现(微信式),
未读带红点,点击播放,可选「转文字」展开全文;同时优化长文刷屏布局。
speech.ts:
- 播放控制器新增 preload(text):预合成 TTS 并写入源缓存(不播放),
供语音气泡在首次点击前显示时长;失败返回 null
- 新增 measureAudioDuration(source):经 metadata 探测音频秒长(8s 超时兜底)
sop/index.vue:
- MasterMsg 增加 voiceStatus(preparing/ready/unavailable)/voiceDuration/
unread/transcriptOpen
- 答案到达即后台预合成语音(说话内容=直接答案 answer 字段),
就绪后气泡显示「🔊 N"」+未读红点;点击播放(再点停止,播放态变色),
播放即清红点;「转文字」灰 chip 展开完整结构化内容
(要点/提醒/引用/总结卡/反馈),微信同款交互
- TTS 不可用或答案为空时自动回退为纯文本气泡(播报按钮保留),
训练概况等数据型回复直接文本呈现
- 布局优化:头部压缩,长文默认收进「转文字」,线程不再整段刷屏
验证:
- 本地:时长 13" 真实测得、红点播放后消失、转文字展开全文,3 张截图目检
- 生产冒烟:语音气泡+时长+红点+转文字 chip 全部就位
- H5 已发布(备份 h5-before-20260718045801)
说明:每条答案一次 TTS 合成调用(有缓存),试点量级成本可忽略;
练页会话化(批次二)将复用同一套语音气泡形态。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-18 04:59:11 +08:00 |
|
 adminandClaude Fable 5
|
dfd82e1886
|
fix: unify all aihr collations, stop silent logout on biz 403, enable knowledge apps
线上现象:「问」页语音提问报 401(请求不带 token),用户观察为
「点了几个页面后登录状态失效」。
根因链(逐环生产验证):
1. 问师傅 /api/knowledge/query 对真实登录返回业务 403
「当前登录端未启用知识问答应用」——生产 aihr_knowledge_app 为空表,
多租户知识平台的应用注册/空间绑定/角色授权从未在生产配置(P1 遗留)。
2. 前端 readPayload 把 403 也视为认证失败并 clearAuth() —— 业务 403
触发静默登出,localStorage token 被清。
3. 之后语音 ASR 请求裸奔 -> 401「未能读取到有效 token」。
同期回归:凌晨对 aihr_practice_assignment.ext_party_id 的单列 collation
热修复,使其与 aihr_practice_session(仍 0900_ai_ci)的 JOIN 反向失配,
/practice/mistakes 500。
修复:
- backend/script/sql/update/aihr_20260718_unify_all_collations_mysql8.sql:
47 张 aihr 表全部 CONVERT 到运行时基准 collation(生产=general_ci),
终结 collation 打地鼠;本地验证后已在生产执行
(schema 备份 /opt/wygj/backups/aihr-schema-before-unify-20260718041407.sql),
13 项移动端接口回归全 200(含 mistakes)。
- api.ts/auth.ts:本地登录态仅在真正 401(HTTP 或业务码)时清除,并经
redirectToLoginForAuthLoss 记住当前页自动回登录(2s 防抖,登录页内不跳);
业务 403(权限拒绝,如录音归属/知识空间)只报错不登出;
authenticatedFileUrl 同步收紧(403 不再清登录态)。
- 生产数据配置(幂等 INSERT,业务范围保守):
· aihr_knowledge_app 注册 yc_admin(pc)/yc_mobile(app) SESSION 应用
· yc_mobile 绑定 SOP 域 5 库(1001/1002/1003/1201/1202),
employee/supervisor ROLE READ;yc_admin 绑定全部 13 库,
hr_operator/superadmin MANAGE
· 财务/销售/行政等大库(1004-1010)暂仅管理端,待业务确认再放开
生产验证:
- 问师傅 query 200,真实回答+引用「投诉处理 SOP v1.0」
- E2E:登录后全 tab 浏览+语音+文字提问,token 全程稳定(storage 打桩零触发)
- 无效 token 点语音提问 -> 自动回登录页(原为死胡同 toast)
- H5 已发布(备份 h5-before-20260718042238)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-18 04:24:45 +08:00 |
|
 adminandClaude Fable 5
|
a4bbfc2222
|
fix: stop snowflake ossId precision loss and daily-drill audio identity mismatch
线上现象:对练页录音转写后提交回应,报「录音不属于当前账号,请重新录音后提交」。
根因A(前端,截图直接原因):OSS 编号是雪花 ID(如 2078204068457525249),
超出 JS Number 安全整数范围,后端按 RuoYi 规范序列化为字符串,但前端 4 处
用 Number() 强转(对练 ASR、每日题 ASR、每日题恢复列表、候选人面试 ASR),
精度丢失成 …5200,后端按错误 oss_id 查归属 COUNT=0 → 误报。
生产铁证:同一暂存行,正确 id 查得 1 行,JS 强转后的 id 查得 0 行;
用损坏 id 提交 turn 复现原报错,用字符串正确 id 提交成功。
修复A:speech.ts 新增 normalizeOssId(纯字符串校验透传,禁止 Number 强转),
4 处调用点改为字符串保存,practice/candidate 服务签名与状态类型放宽为
number|string(types/api.ts 本就是 number|string,Jackson 字符串转 Long 无损)。
根因B(后端,潜伏):answerDailyDrill 用组织 extPartyId(如 1003)做录音
归属身份校验,而暂存写入的是登录手机号——每日题语音提交必失败。
修复B:新增 validateAudioOwnershipByUser,按服务端登录 owner_user_id
(与暂存同源、不可伪造)校验,对练路径(身份一致)保持原校验不变。
发布与验证:
- H5 已发布(备份 /opt/wygj/backups/h5-before-20260718035416)
- 后端 jar 已发布重启(备份 /opt/wygj/app/ruoyi-admin.jar.bak-20260718035552),
15s 恢复,重启后对练 turn+字符串 ossId 生产复核通过
- 每日题语音路径为逻辑级+数据级验证(该账号今日无待训练每日题,
业务级复验待下一次每日题窗口)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-18 03:57:47 +08:00 |
|
 adminandClaude Fable 5
|
0ec0e585f7
|
fix(mobile): distinguish auth failure from HR mismatch on position sync page
问题:登录态失效(token 冻结/无效,后端返 401)时,同步岗位页把认证错误
误显示成「人力系统中未匹配到当前手机号的在职岗位,请联系 HR」,员工被
困在该页无路可退。
修复:
- api.ts: 新增 ApiError(statusCode/bizCode) 类型化错误与 isAuthApiError,
readPayload/parsePayloadText/XHR 路径统一抛出带状态码的错误,消息不变
- position.ts: fetchOrgPositionResult 返回四态判别结果
matched/unmatched/unauthorized/error;hydratePositionFromOrg 行为不变
- position/index.vue: 按四态分支处理——
· unauthorized -> 清除登录态并自动回登录页(保留 redirect)
· error -> 提示「网络异常…请重试」,保留重试按钮
· unmatched -> 才显示联系 HR 文案
并新增「退出重新登录」链接(确认弹窗后清登录态回登录页),
避免任何异常场景下用户被困无退出路径
验证(构建产物 + 生产 API,Playwright 五场景全过,截图见
.data/visual-audit-20260718/position-fix/):
S1 固定码真实登录->今日页(保洁岗匹配) S2 无效token->自动回登录
S3 断网->网络异常提示留在本页 S4 有效token->自动通过
S5 退出链接->确认->回登录且登录态已清
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-18 03:39:20 +08:00 |
|
admin
|
6bdc86e3fc
|
feat: restore learning feedback and knowledge capabilities
|
2026-07-18 00:50:11 +08:00 |
|
admin
|
5d82ff7b21
|
fix(mobile): complete SOP focus regression
|
2026-07-17 04:29:32 +08:00 |
|
admin
|
0745d51e57
|
fix(mobile): focus SOP answers after search
|
2026-07-17 04:25:26 +08:00 |
|
admin
|
e93421ca1e
|
fix(aihr): close Figma UI regression gaps
|
2026-07-17 04:17:14 +08:00 |
|
admin
|
82d93a1af1
|
feat(aihr): allow employees to complete onboarding tasks
|
2026-07-15 02:49:40 +08:00 |
|
admin
|
2f21895597
|
feat(aihr): add candidate voice interview answers
|
2026-07-15 02:45:00 +08:00 |
|
admin
|
40574c204d
|
fix(aihr): separate onboarding and candidate review states
|
2026-07-15 02:39:29 +08:00 |
|
admin
|
09c3cbecb0
|
fix(aihr): protect case media playback
|
2026-07-15 01:23:41 +08:00 |
|
admin
|
a7938a77e4
|
fix(mobile): close employee supervisor deep links
|
2026-07-14 20:28:41 +08:00 |
|
admin
|
f0662bedcd
|
fix(aihr): expose enabled scenarios to supervisors
|
2026-07-14 13:55:09 +08:00 |
|
admin
|
b8be1bb6e4
|
fix(aihr): align app case permissions with brd
|
2026-07-14 11:15:07 +08:00 |
|
admin
|
2cae83ff1b
|
fix(aihr): scope mobile home metrics by identity
|
2026-07-14 10:23:56 +08:00 |
|
admin
|
9bbfd575a3
|
feat(aihr): add voice answers to daily drills
|
2026-07-14 05:44:26 +08:00 |
|
admin
|
153382cb57
|
feat(aihr): add scoped case detail view
|
2026-07-14 05:04:01 +08:00 |
|
admin
|
e4931753a3
|
fix(mobile): refresh official position on login
|
2026-07-14 04:59:30 +08:00 |
|
admin
|
07ab28fd7b
|
feat(aihr): trace sop feedback to search review
|
2026-07-14 04:18:09 +08:00 |
|
admin
|
d3552cc22d
|
feat(aihr): add pilot satisfaction evidence loop
|
2026-07-14 04:13:02 +08:00 |
|
admin
|
5e3dfd0085
|
fix(mobile): fail closed on org role lookup errors
|
2026-07-14 03:32:44 +08:00 |
|
admin
|
f9bce8f0ef
|
feat(aihr): expose position SOP learning scope
|
2026-07-14 03:29:59 +08:00 |
|
admin
|
d98ff0ff8b
|
feat(aihr): add employee mistake book audit
|
2026-07-14 03:23:49 +08:00 |
|
admin
|
87360a25d3
|
feat(aihr): align figma pages for release
|
2026-07-14 02:04:36 +08:00 |
|
admin
|
39fec1f73a
|
feat(personal): add reviewed enterprise publishing
|
2026-07-12 23:51:12 +08:00 |
|
admin
|
661980f43f
|
feat(personal): export reviewed outlines to pptx
|
2026-07-12 23:23:04 +08:00 |
|
admin
|
0868f0adb5
|
feat(personal): add editable report outlines
|
2026-07-12 23:03:36 +08:00 |
|
admin
|
4d393d1751
|
feat(personal): show scanned PDF OCR progress
|
2026-07-12 21:45:28 +08:00 |
|
admin
|
0d64cf0f21
|
fix(mobile): preserve assistant IDs and scope state
|
2026-07-12 12:15:02 +08:00 |
|
admin
|
36b7bf28bf
|
fix(personal): align assistant citations and UI state
|
2026-07-12 12:07:28 +08:00 |
|
admin
|
c8ef15ee9e
|
feat(mobile): add personal assistant knowledge flow
|
2026-07-12 11:57:02 +08:00 |
|
admin
|
c66fc4e4b0
|
feat(mobile): finish employee app page polish
|
2026-07-11 18:59:30 +08:00 |
|