R98 A3-A8 回填公网验证证据
这个提交包含在:
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"generatedAt": "2026-05-06T12:27:27.400Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"viewport": {
|
||||
"width": 390,
|
||||
"height": 844,
|
||||
"deviceScaleFactor": 3
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"id": "login",
|
||||
"path": "/login",
|
||||
"role": "public",
|
||||
"screenshot": "artifacts/r98-public/screenshots/r98-login-390x844.png",
|
||||
"url": "https://oa.hyinda.com/login",
|
||||
"viewportWidth": 390,
|
||||
"viewportHeight": 844,
|
||||
"documentScrollWidth": 390,
|
||||
"bodyClientWidth": 390,
|
||||
"hasHorizontalOverflow": false,
|
||||
"visibleTableCount": 0,
|
||||
"offscreenControlCount": 0,
|
||||
"offscreenControls": [],
|
||||
"overflowSample": []
|
||||
},
|
||||
{
|
||||
"id": "mobile-home",
|
||||
"path": "/mobile",
|
||||
"role": "employee",
|
||||
"screenshot": "artifacts/r98-public/screenshots/r98-mobile-home-390x844.png",
|
||||
"url": "https://oa.hyinda.com/mobile",
|
||||
"viewportWidth": 390,
|
||||
"viewportHeight": 844,
|
||||
"documentScrollWidth": 390,
|
||||
"bodyClientWidth": 390,
|
||||
"hasHorizontalOverflow": false,
|
||||
"visibleTableCount": 0,
|
||||
"offscreenControlCount": 0,
|
||||
"offscreenControls": [],
|
||||
"overflowSample": []
|
||||
},
|
||||
{
|
||||
"id": "mobile-approvals",
|
||||
"path": "/mobile/approvals",
|
||||
"role": "admin",
|
||||
"screenshot": "artifacts/r98-public/screenshots/r98-mobile-approvals-390x844.png",
|
||||
"url": "https://oa.hyinda.com/mobile/approvals",
|
||||
"viewportWidth": 390,
|
||||
"viewportHeight": 844,
|
||||
"documentScrollWidth": 390,
|
||||
"bodyClientWidth": 390,
|
||||
"hasHorizontalOverflow": false,
|
||||
"visibleTableCount": 0,
|
||||
"offscreenControlCount": 0,
|
||||
"offscreenControls": [],
|
||||
"overflowSample": []
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"path": "/invoice-pool",
|
||||
"role": "employee",
|
||||
"screenshot": "artifacts/r98-public/screenshots/r98-invoice-pool-390x844.png",
|
||||
"url": "https://oa.hyinda.com/invoice-pool",
|
||||
"viewportWidth": 390,
|
||||
"viewportHeight": 844,
|
||||
"documentScrollWidth": 390,
|
||||
"bodyClientWidth": 390,
|
||||
"hasHorizontalOverflow": false,
|
||||
"visibleTableCount": 0,
|
||||
"offscreenControlCount": 0,
|
||||
"offscreenControls": [],
|
||||
"overflowSample": []
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"path": "/reimbursements",
|
||||
"role": "employee",
|
||||
"screenshot": "artifacts/r98-public/screenshots/r98-reimbursements-390x844.png",
|
||||
"url": "https://oa.hyinda.com/reimbursements",
|
||||
"viewportWidth": 390,
|
||||
"viewportHeight": 844,
|
||||
"documentScrollWidth": 390,
|
||||
"bodyClientWidth": 390,
|
||||
"hasHorizontalOverflow": false,
|
||||
"visibleTableCount": 0,
|
||||
"offscreenControlCount": 0,
|
||||
"offscreenControls": [],
|
||||
"overflowSample": []
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"path": "/workflow/tasks",
|
||||
"role": "admin",
|
||||
"screenshot": "artifacts/r98-public/screenshots/r98-workflow-tasks-390x844.png",
|
||||
"url": "https://oa.hyinda.com/workflow/tasks",
|
||||
"viewportWidth": 390,
|
||||
"viewportHeight": 844,
|
||||
"documentScrollWidth": 390,
|
||||
"bodyClientWidth": 390,
|
||||
"hasHorizontalOverflow": false,
|
||||
"visibleTableCount": 0,
|
||||
"offscreenControlCount": 0,
|
||||
"offscreenControls": [],
|
||||
"overflowSample": []
|
||||
}
|
||||
],
|
||||
"issues": []
|
||||
}
|
||||
@@ -6,18 +6,70 @@
|
||||
|
||||
- 本地发布门禁。
|
||||
- 公网部署与运行时配置核查。
|
||||
- 公网 live smoke、移动视觉巡检和真实 OCR 复核。
|
||||
- 备份恢复与企业微信真机人工配合说明。
|
||||
- 公网 live smoke、移动视觉巡检和真实腾讯 OCR 复核。
|
||||
- DB + storage 备份恢复演练。
|
||||
- 企业微信真机复核说明。
|
||||
|
||||
## 已执行
|
||||
## 执行结果
|
||||
|
||||
| 项目 | 命令 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| Issue CSV 校验 | `python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-06_19-54-01-r98-public-trialrun-closeout.csv` | 通过 |
|
||||
| 本地静态发布门禁 | `bash scripts/qa/run-release-gate.sh static` | 通过 |
|
||||
| 本地 smoke 门禁 | `bash scripts/qa/run-release-gate.sh smoke-local` | 8 passed |
|
||||
| 公网部署 | `bash deploy/trialrun/deploy.sh` | 通过,远端重建 `hyb-oa-trialrun-server` |
|
||||
| 公网 ready | `curl -fsS https://oa.hyinda.com/ready` | `data.ok=true` |
|
||||
| 远端 runtime smoke | `docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env exec -T server node src/scripts/smoke-trialrun-runtime.js` | 通过 |
|
||||
| 远端 external deps smoke | 部署脚本自动执行 `smoke-external-deps.js` | 通过,企微入口/OAuth、腾讯 OCR、消息桥接配置齐全 |
|
||||
| 前端产物指纹 | 容器内 grep `invoice-pool-mobile-list`、`reimbursements-mobile-list`、`mobile-capture-file`、`workflow-tasks-mobile-list`、`mobile-today-focus` | 均存在 |
|
||||
| 公网 live smoke | 使用 `SMOKE001/SMOKE002` 独立账号临时随机密码执行 `bash scripts/qa/run-web-gates.sh smoke-live` | 3 passed |
|
||||
| 移动视觉巡检 | Playwright 390x844 手机视口打开 6 个公网页面并截图 | 6 页均无横向溢出、无可操作元素出屏、无可见桌面表格 |
|
||||
| 真实腾讯 OCR | `PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 ... npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list --timeout=360000` | 1 passed,真实 PDF 上传后识别为 `available` |
|
||||
| DB 备份恢复 | 远端 `backup-db.sh` 后恢复到临时库 `hyb_oa_restore_check_r98` | 临时库 public schema 表数 96,演练后已删除 |
|
||||
| Storage 备份恢复 | 远端 `backup-storage.sh` 后恢复到 `/tmp/hyb-oa-storage-restore-check-r98-*` | 可解包,文件数 8,演练后已清理 |
|
||||
| 企微 OAuth 入口 | `GET /api/auth/wecom/login?returnTo=%2Fmobile` | HTTP 302 到企业微信 OAuth,`redirect_uri=https://oa.hyinda.com/api/auth/wecom/callback` |
|
||||
|
||||
## 关键证据
|
||||
|
||||
- 移动视觉报告:`artifacts/r98-public/mobile-visual-audit.json`
|
||||
- 移动截图:
|
||||
- `artifacts/r98-public/screenshots/r98-login-390x844.png`
|
||||
- `artifacts/r98-public/screenshots/r98-mobile-home-390x844.png`
|
||||
- `artifacts/r98-public/screenshots/r98-mobile-approvals-390x844.png`
|
||||
- `artifacts/r98-public/screenshots/r98-invoice-pool-390x844.png`
|
||||
- `artifacts/r98-public/screenshots/r98-reimbursements-390x844.png`
|
||||
- `artifacts/r98-public/screenshots/r98-workflow-tasks-390x844.png`
|
||||
- 最新 DB 备份:`/opt/hyb-oa-trialrun/deploy/trialrun/backups/hyb-oa-db-20260506_204004.dump`
|
||||
- 最新 Storage 备份:`/opt/hyb-oa-trialrun/deploy/trialrun/backups/hyb-oa-storage-20260506_204005.tar.gz`
|
||||
- 最新真实 OCR 记录:
|
||||
- 上传人:`[email protected]`
|
||||
- 文件:`北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf`
|
||||
- provider:`tencent`
|
||||
- 状态:`available`
|
||||
- 金额:`1683`
|
||||
- 销售方:`北京悦海堂餐饮管理有限公司`
|
||||
- 购买方:`合肥海音达科技有限公司`
|
||||
- 开票日期:`2026-03-11`
|
||||
|
||||
## 本轮修正
|
||||
|
||||
- `login-portal-ux.spec.ts` 已按移动优先策略修正:企业微信 WebView 密码登录后允许进入 `/mobile`。
|
||||
- `live-invoice-ocr*.spec.ts` 支持使用 `PLAYWRIGHT_OCR_LIVE_IDENTIFIER/PASSWORD` 或 `LIVE_SMOKE_EMPLOYEE_*`,避免使用真实员工账号跑 live OCR。
|
||||
- live OCR 用例结尾改为清理测试上下文 cookies,不再依赖页面菜单退出,避免 OCR 已成功但退出菜单阻塞导致误失败。
|
||||
- 远端备份目录原为 `root:root`,导致 `deploy` 用户无法备份;已用 root SSH 修复为 `deploy:deploy` 后完成演练。
|
||||
|
||||
## 企微真机复核步骤
|
||||
|
||||
自动化已确认企微配置为 `ready`,OAuth 入口会跳到企业微信授权,并携带 `returnTo=/mobile`。真机仍建议你在手机上复核一次:
|
||||
|
||||
1. 打开企业微信。
|
||||
2. 进入工作台,点击“海音达 OA”。
|
||||
3. 已绑定账号预期:无需输入 OA 密码,直接进入移动工作台 `/mobile`。
|
||||
4. 若提示未绑定,点击“使用账号绑定/登录”,用 OA 账号登录一次,之后再次从工作台打开应直接进入 `/mobile`。
|
||||
5. 若仍回到登录页,记录手机页面 URL 和错误文案,我再查对应 `requestId`。
|
||||
|
||||
## 备注
|
||||
|
||||
- `smoke-local` 首次暴露旧用例仍假设企微 WebView 登录后进入 `/portal`。已按当前产品策略修正为验证默认进入 `/mobile`。
|
||||
- 前端构建仍出现既有 Vite circular chunk 和大 chunk 警告,不阻塞本轮试运行收口。
|
||||
- `smoke-local` 首次暴露旧用例仍假设企微 WebView 登录后进入 `/portal`,已按当前策略修正为 `/mobile`。
|
||||
- 公网 live smoke 首次用默认种子密码登录失败;已改用独立 smoke 账号并在远端重置临时随机密码,密码未写入仓库、未输出。
|
||||
- 前端构建仍存在既有 Vite circular chunk 和大 chunk 警告,不阻塞本轮试运行收口,但建议后续单独做构建分包治理。
|
||||
|
||||
二进制文件未显示。
|
之后 宽度: | 高度: | 大小: 230 KiB |
二进制文件未显示。
|
之后 宽度: | 高度: | 大小: 89 KiB |
二进制文件未显示。
|
之后 宽度: | 高度: | 大小: 144 KiB |
二进制文件未显示。
|
之后 宽度: | 高度: | 大小: 128 KiB |
二进制文件未显示。
|
之后 宽度: | 高度: | 大小: 282 KiB |
二进制文件未显示。
|
之后 宽度: | 高度: | 大小: 119 KiB |
在新工单中引用
屏蔽一个用户