R84 R86 收口用户开通界面与自动化回归

这个提交包含在:
2026-05-05 00:06:12 +08:00
父节点 d791357ca2
当前提交 6f22dbb1c4
共修改 10 个文件,包含 738 行新增和 46 行删除
+113
查看文件
@@ -29,6 +29,119 @@
- 数据库/分支:`hyb_oa_manual_trialrun_20260428172231 / 2bce9c9`
- 执行人:`Codex Playwright 辅助复核`
## R79 公网部署态辅助复核(2026-05-04)
当前已核实部署基线:
- 公网地址:`https://oa.hyinda.com`
- 服务器:`118.89.77.218`
- 反向代理:`caddy`
- SSH:常规 `deploy`,系统配置 `root`
- 部署目录:`/opt/hyb-oa-trialrun`
- 远端容器命令:`docker-compose`
Codex 可代做:
1. SSH 登录服务器做只读巡检。
2. 执行 `deploy/trialrun/deploy.sh`、`/ready`、`smoke-external-deps.js`、`smoke-trialrun-runtime.js`。
3. 查看 `Caddyfile`、容器状态、日志、feature flag 与工作区配置。
4. 在你提供账号后执行 `smoke-live` 和 Playwright 公网只读复核。
必须人工配合:
1. 企业微信后台配置工作台入口与 OAuth 回调。
2. 提供独立 smoke 账号凭据,不使用真实业务账号。
3. 若需要真实企微绑定、手机扫码、二次验证,必须由你本人完成。
最小人工操作清单:
1. 企微后台配置:
- 工作台入口 URL:`https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fportal`
- OAuth 回调 URL:`https://oa.hyinda.com/api/auth/wecom/callback`
2. 提供至少两组公网只读 smoke 账号:
- `smoke-admin`
- `smoke-employee`
3. 若公网运行时 smoke 继续提示公告或搜索缺失,用管理员账号进入“功能开关”页,核对:
- `portal_home_v1`
- `announcements_v1`
- `global_search_v1`
- `wecom_entry_v1`
4. 若你让我继续代跑公网 smoke,只需要把账号标识和密码给我;我会继续完成自动化部分。
## R80 企微公网启用回填(2026-05-04)
- 企业微信域名校验文件已可访问:
- `https://oa.hyinda.com/WW_verify_StBYfdlboMaIoRRE.txt`
- 公网企微入口运行时已启用:
- 远端 `.env`:`WECOM_ENABLED=true`、`WECOM_ENTRY_ENABLED=true`、`WECOM_OAUTH_ENABLED=true`
- 数据库 `feature_flags`:`wecom_entry_v1=inherit`
- 自动化核验已完成:
- `GET https://oa.hyinda.com/api/auth/wecom/config` 返回 `status=ready`
- `GET https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fportal` 返回 `302`,并跳转到 `open.weixin.qq.com`
- Playwright 公网登录页快照已确认出现“使用企业微信进入工作台”按钮
- Playwright 点击后,桌面浏览器落到企微提示页“请在企业微信客户端打开链接”,符合预期
- 截图:`output/playwright/2026-05-04-wecom-login-page.png`
你现在必须人工完成的动作:
1. 用手机企业微信或桌面企业微信打开该应用,不要用普通浏览器代替。
2. 若首次进入后回到 OA 登录页并带 `wecom=unbound`:
- 用已有 OA 账号密码登录
- 进入“个人设置”
- 执行企微绑定
- 绑定成功后,再次从企业微信工作台进入 OA
3. 首次人工闭环时,建议只用 1 个员工测试账号,不要直接用高权限真实业务账号。
4. 若你完成首次绑定后要我继续代跑公网 smoke,再把该 smoke 账号标识告诉我,我继续补 Playwright / curl 只读核验。
## R81 企微回调身份取证(2026-05-04)
- 当前线上已追加最小安全诊断:
- 企微回调若缺少 `UserId`,server 会记录:
- `requestId`
- `mode`
- `hasUserId`
- `hasOpenId`
- `hasDeviceId`
- 不记录 token、secret、完整敏感回包。
- 当前服务器复核结果:
- `https://oa.hyinda.com/ready`:正常
- `https://oa.hyinda.com/api/auth/wecom/config`:`status=ready`
- `https://oa.hyinda.com/api/auth/wecom/login?returnTo=%2Fportal`:仍返回 `302` 到企微 OAuth
你现在需要做的人工操作:
1. 在手机企业微信里进入工作台,打开 OA 应用一次。
2. 如果仍然失败,不要反复点,先停在错误页。
3. 记录以下任一信息发给我:
- 页面里的 `requestId`
- 错误截图
- 大致时间点(精确到分钟)
4. 如果页面重新跳回登录页,也把最终 URL 或截图发给我。
我收到后会立刻去服务器抓对应日志,判断腾讯这次回包到底是:
- 有 `OpenId` 但没有 `UserId`
- 还是两个字段都没有
- 还是另外一种接口异常
## R83-R86 用户开通与首次绑定收口(2026-05-04)
- 本轮新增自动化覆盖:
- `client/tests/e2e/user-onboarding.spec.ts`
- 管理员在“系统用户管理”中创建用户时,不再手填工号和初始密码。
- 创建成功后,页面展示系统生成的员工号与一次性口令。
- 新用户首次登录后,被强制跳转到“修改密码”页,改密成功再进入 Portal。
- `client/tests/e2e/wecom-first-bind.spec.ts`
- 企业微信未绑定场景回退到密码登录页后,用户仍可继续进入目标页。
- 当前代码口径:
- 单个新建用户:系统自动生成员工号,管理员只维护基础资料与角色。
- 首次登录:使用一次性口令登录,必须先改密。
- 企微首次绑定:服务端已支持“未绑定回退登录后自动补绑定”的闭环,不再要求用户必须手动去“个人设置”补绑定。
- 仍需人工完成的最小动作:
1. 把本轮代码部署到目标环境。
2. 用真实手机企业微信打开 OA 应用一次,确认真实 OAuth 回调、cookie 与企业身份都正常。
3. 若仍失败,记录 `requestId`、错误截图和时间点给我,我继续抓线上日志定位。
## 员工路径
账号:员工测试账号。