R93 记录公网部署复测与 OCR 运行手册
这个提交包含在:
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"generatedAt": "2026-05-05T15:21:58.712Z",
|
||||
"route": "/portal",
|
||||
"viewport": "mobile390",
|
||||
"results": [
|
||||
{
|
||||
"check": "topbar mobile menu opens and closes",
|
||||
"ok": true,
|
||||
"durationMs": 1301,
|
||||
"screenshot": "output/playwright/r93-interaction-audit/mobile390-portal-menu-open.png"
|
||||
},
|
||||
{
|
||||
"check": "topbar mobile search opens and closes",
|
||||
"ok": true,
|
||||
"durationMs": 782,
|
||||
"screenshot": "output/playwright/r93-interaction-audit/mobile390-portal-search-open.png"
|
||||
},
|
||||
{
|
||||
"check": "topbar notifications opens and closes",
|
||||
"ok": true,
|
||||
"durationMs": 681,
|
||||
"screenshot": "output/playwright/r93-interaction-audit/mobile390-portal-notifications-open.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"generatedAt": "2026-05-05T15:33:14.069Z",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"role": "employee",
|
||||
"loginStatus": 200,
|
||||
"me": {
|
||||
"status": 200,
|
||||
"id": "26de456c-8522-4b6a-86a0-e87c156bbe93",
|
||||
"name": "Employee",
|
||||
"roleCodes": [
|
||||
"employee"
|
||||
],
|
||||
"permissionCount": null
|
||||
},
|
||||
"invoicePool": {
|
||||
"status": 200,
|
||||
"total": 1,
|
||||
"pageItems": 1,
|
||||
"byStatus": {
|
||||
"available": 1
|
||||
},
|
||||
"byProvider": {
|
||||
"tencent": 1
|
||||
},
|
||||
"pendingOrFailedSamples": []
|
||||
},
|
||||
"draftReimbursements": {
|
||||
"status": 200,
|
||||
"total": 0,
|
||||
"pageItems": 0,
|
||||
"samples": []
|
||||
},
|
||||
"contractsRegistryDependency": {
|
||||
"endpoint": "/api/employees?page=1&pageSize=100&status=active",
|
||||
"status": 403,
|
||||
"error": {
|
||||
"code": "PERM_001",
|
||||
"message": "无权限",
|
||||
"details": {}
|
||||
}
|
||||
},
|
||||
"mobileCaptureHtml": {
|
||||
"status": 404,
|
||||
"note": "HTML shell only; real multiple attribute verified by browser audit DOM metrics."
|
||||
}
|
||||
}
|
||||
文件差异内容过多而无法显示
加载差异
@@ -0,0 +1,85 @@
|
||||
# R93 主区域深度视觉审计报告
|
||||
|
||||
生成日期:2026-05-05
|
||||
|
||||
## 范围
|
||||
|
||||
- 环境:`https://oa.hyinda.com`
|
||||
- 员工视角路由:27 个
|
||||
- 视口:mobile360、mobile390、desktop1440
|
||||
- 页面结果:84
|
||||
- 发现项:19
|
||||
- 补充数据探针:`artifacts/r93/live-data-probe-2026-05-05.json`
|
||||
- 修复复测:`artifacts/r93/remediation-report.md`
|
||||
- 部署后视觉复测:`artifacts/r93/post-deploy-visual-check-2026-05-05.json`
|
||||
- 原始 JSON:`artifacts/r93/main-region-audit-2026-05-05.json`
|
||||
- 问题 CSV:`artifacts/r93/main-region-issue-log.csv`
|
||||
- 截图目录:`output/playwright/r93-main-region-audit/`
|
||||
|
||||
## 自动化检查项
|
||||
|
||||
- 主区域横向溢出与可见表格
|
||||
- 首屏可交互控件是否跑出手机视口
|
||||
- 移动端触控目标尺寸
|
||||
- 主区域文本裁切
|
||||
- 票据中心/报销列表移动卡片 test id 是否在公网可见
|
||||
- 移动票据上传是否支持多文件选择
|
||||
- 票据池与草稿报销只读 API 状态探针
|
||||
|
||||
说明:主区域审计 JSON 内的逐页 `api` 字段由浏览器原生 `fetch` 采集,未复用前端运行态 Bearer token,出现 401 时不作为业务接口失败证据。已用 `live-data-probe-2026-05-05.json` 重新执行带 token 的只读探针。
|
||||
|
||||
## 汇总
|
||||
|
||||
| 类型 | 数量 |
|
||||
| --- | ---: |
|
||||
| MOBILE_VISIBLE_TABLE_MAIN | 8 |
|
||||
| SMALL_TOUCH_TARGET_CLUSTER | 4 |
|
||||
| API_403_IN_PAGE | 3 |
|
||||
| OFFSCREEN_INTERACTIVE_MAIN | 2 |
|
||||
| SOURCE_LIVE_PARITY_INVOICE_MOBILE | 1 |
|
||||
| SOURCE_LIVE_PARITY_REIMBURSEMENT_MOBILE | 1 |
|
||||
|
||||
补充人工归类:
|
||||
|
||||
| 类型 | 数量 |
|
||||
| --- | ---: |
|
||||
| SOURCE_LIVE_PARITY_MOBILE_CAPTURE_MULTIPLE | 1 |
|
||||
|
||||
## 高优先级样本
|
||||
|
||||
- VA-D001 /assets mobile360+mobile390 MOBILE_VISIBLE_TABLE_MAIN:主区域首屏仍可见 1 个表格。
|
||||
- VA-D002 /contracts-registry mobile360+mobile390+desktop1440 API_403_IN_PAGE:页面可进入但存在 API 403 请求。
|
||||
- VA-D003 /invoice-pool mobile360+mobile390 MOBILE_VISIBLE_TABLE_MAIN:主区域首屏仍可见 1 个表格。
|
||||
- VA-D004 /invoice-pool mobile360+mobile390 OFFSCREEN_INTERACTIVE_MAIN:主区域可交互控件跑出视口:more_horiz {"left":779,"top":641,"right":807,"bottom":674,"width":28,"height":33}。
|
||||
- VA-D006 /notifications mobile360+mobile390 MOBILE_VISIBLE_TABLE_MAIN:主区域首屏仍可见 1 个表格。
|
||||
- VA-D008 /purchase-requests mobile360+mobile390 MOBILE_VISIBLE_TABLE_MAIN:主区域首屏仍可见 1 个表格。
|
||||
- VA-D009 /invoice-pool mobile390 SOURCE_LIVE_PARITY_INVOICE_MOBILE:源码已有 invoice-pool-mobile-list,但公网 mobile390 可见数=0,table 可见数=1。
|
||||
- VA-D010 /reimbursements mobile390 SOURCE_LIVE_PARITY_REIMBURSEMENT_MOBILE:源码已有 reimbursements-mobile-list,但公网 mobile390 可见数=0,table 可见数=1。
|
||||
- VA-D011 /mobile/capture mobile390 SOURCE_LIVE_PARITY_MOBILE_CAPTURE_MULTIPLE:源码文件选择器已支持 multiple,但公网 DOM 中 multiple=false,解释了“手机端一次只能选一张”的现象。
|
||||
|
||||
## 数据探针结论
|
||||
|
||||
- 票据池:`/api/invoice-pool?page=1&pageSize=20&ownerScope=own` 返回 200;当前共 1 张票据,状态为 `available`,OCR provider 为 `tencent`,没有 `pending_ocr` 或 `ocr_failed` 样本。
|
||||
- 草稿报销:`/api/reimbursements?status=draft&page=1&pageSize=20&scope=own` 返回 200;当前员工账号草稿数为 0,因此本轮无法用真实草稿复现“再次编辑”链路。
|
||||
- 合同台账依赖:`/api/employees?page=1&pageSize=100&status=active` 返回 403,确认不是截图误报,而是员工视角页面内请求了无权限接口。
|
||||
- 移动上传:本地源码的 `mobile-capture-file` 已有 `multiple`,公网 DOM 缺失 `multiple`,优先按部署/缓存不一致处理;若确认是企业微信内置浏览器限制,则需要改成“连续添加到待上传队列”的交互。
|
||||
|
||||
## 关键结论
|
||||
|
||||
1. 公网页面的移动端问题在 360px 下更明显,应把 360px 纳入后续视觉回归门槛。
|
||||
2. 票据中心和报销列表源码中已经存在移动卡片 test id,但公网 mobile390 仍可能显示桌面表格,优先怀疑部署产物或缓存,而不是先重写组件。
|
||||
3. 移动票据上传源码已支持 `multiple`,但公网 DOM 没有 `multiple`,这是明确的源码/公网差异。
|
||||
4. 合同台账员工视角仍有 API 403 噪声,应纳入权限一致性专项。
|
||||
|
||||
## 修复状态
|
||||
|
||||
2026-05-05 已重新构建并重启公网 server 镜像,以下问题已由部署一致性修复:
|
||||
|
||||
- `/invoice-pool` mobile390:移动列表可见,桌面表格不可见,无出屏操作按钮。
|
||||
- `/reimbursements` mobile390:移动列表可见,桌面表格不可见。
|
||||
- `/mobile/capture` mobile390:文件 input 的 `multiple=true`。
|
||||
|
||||
保留后续专项:
|
||||
|
||||
- R94:资产、通知、采购等移动端表格清零。
|
||||
- R95:合同台账员工视角 API 403 与多角色权限一致性。
|
||||
@@ -0,0 +1,12 @@
|
||||
ID,Severity,Page,Viewport,Category,Symptom,Evidence,Recommendation,Status
|
||||
VA-D001,HIGH,/assets,mobile360+mobile390,MOBILE_VISIBLE_TABLE_MAIN,主区域首屏仍可见 1 个表格。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-assets.png,移动端改为卡片或分组列表,桌面表格仅在 md 以上显示。,TODO
|
||||
VA-D002,HIGH,/contracts-registry,mobile360+mobile390+desktop1440,API_403_IN_PAGE,页面可进入但存在 API 403 请求。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-contracts-registry.png,统一导航权限、路由权限与页面内 API 权限,避免员工看到空白/半错误页面。,TODO
|
||||
VA-D003,HIGH,/invoice-pool,mobile360+mobile390,MOBILE_VISIBLE_TABLE_MAIN,主区域首屏仍可见 1 个表格。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-invoice-pool.png,移动端改为卡片或分组列表,桌面表格仅在 md 以上显示。,DONE
|
||||
VA-D004,HIGH,/invoice-pool,mobile360+mobile390,OFFSCREEN_INTERACTIVE_MAIN,"主区域可交互控件跑出视口:more_horiz {""left"":779,""top"":641,""right"":807,""bottom"":674,""width"":28,""height"":33}。",/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-invoice-pool.png,移动端操作入口必须在 360/390px 内可见,必要时改为卡片底部按钮或底部操作栏。,DONE
|
||||
VA-D005,MEDIUM,/invoice-pool,mobile360+mobile390,SMALL_TOUCH_TARGET_CLUSTER,首屏存在 4 个小触控目标。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-invoice-pool.png,移动端按钮、图标按钮、复选框外层点击区域统一不低于 40-44px。,TODO
|
||||
VA-D006,HIGH,/notifications,mobile360+mobile390,MOBILE_VISIBLE_TABLE_MAIN,主区域首屏仍可见 1 个表格。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-notifications.png,移动端改为卡片或分组列表,桌面表格仅在 md 以上显示。,TODO
|
||||
VA-D007,MEDIUM,/notifications,mobile360+mobile390,SMALL_TOUCH_TARGET_CLUSTER,首屏存在 3 个小触控目标。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-notifications.png,移动端按钮、图标按钮、复选框外层点击区域统一不低于 40-44px。,TODO
|
||||
VA-D008,HIGH,/purchase-requests,mobile360+mobile390,MOBILE_VISIBLE_TABLE_MAIN,主区域首屏仍可见 1 个表格。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile360-purchase-requests.png,移动端改为卡片或分组列表,桌面表格仅在 md 以上显示。,TODO
|
||||
VA-D009,HIGH,/invoice-pool,mobile390,SOURCE_LIVE_PARITY_INVOICE_MOBILE,源码已有 invoice-pool-mobile-list,但公网 mobile390 可见数=0,table 可见数=1。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile390-invoice-pool.png,优先排查公网构建版本、缓存/Caddy 静态文件、Tailwind 产物是否未部署最新。,DONE
|
||||
VA-D010,HIGH,/reimbursements,mobile390,SOURCE_LIVE_PARITY_REIMBURSEMENT_MOBILE,源码已有 reimbursements-mobile-list,但公网 mobile390 可见数=0,table 可见数=1。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile390-reimbursements.png,排查部署版本或 CSS 断点产物;草稿再次编辑能力应通过移动卡片的“继续编辑”入口暴露。,DONE
|
||||
VA-D011,HIGH,/mobile/capture,mobile390,SOURCE_LIVE_PARITY_MOBILE_CAPTURE_MULTIPLE,源码已有 mobile-capture-file multiple,但公网 DOM 中 multiple=false,符合用户反馈的一次只能选择一张票据。,/home/shunli/Projects/hyb-oa/output/playwright/r93-main-region-audit/mobile390-mobile-capture.png;artifacts/r93/live-data-probe-2026-05-05.json,优先排查部署版本/Caddy 静态文件缓存;若确认是企业微信内置浏览器限制多选,则改为连续添加到待上传队列并明确提示。,DONE
|
||||
|
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"generatedAt": "2026-05-05T15:52:41.944Z",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"invoicePool": {
|
||||
"status": 200,
|
||||
"total": 1,
|
||||
"byStatus": {
|
||||
"available": 1
|
||||
},
|
||||
"byProvider": {
|
||||
"tencent": 1
|
||||
},
|
||||
"pendingOrFailedSamples": []
|
||||
},
|
||||
"draftReimbursements": {
|
||||
"status": 200,
|
||||
"total": 0,
|
||||
"samples": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"generatedAt": "2026-05-05T15:52:08.207Z",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"viewport": "mobile390",
|
||||
"results": [
|
||||
{
|
||||
"route": "/invoice-pool",
|
||||
"screenshot": "/home/shunli/Projects/hyb-oa/output/playwright/r93-post-deploy/mobile390-invoice-pool.png",
|
||||
"metrics": {
|
||||
"path": "/invoice-pool",
|
||||
"width": 390,
|
||||
"tableVisible": false,
|
||||
"visibleTableCount": 0,
|
||||
"invoiceMobileListVisible": true,
|
||||
"invoiceMobileRows": 1,
|
||||
"reimbursementMobileListVisible": false,
|
||||
"reimbursementMobileCards": 0,
|
||||
"mobileCaptureFileExists": false,
|
||||
"mobileCaptureMultiple": null,
|
||||
"offscreenButtons": [],
|
||||
"bodyOverflowX": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"route": "/reimbursements",
|
||||
"screenshot": "/home/shunli/Projects/hyb-oa/output/playwright/r93-post-deploy/mobile390-reimbursements.png",
|
||||
"metrics": {
|
||||
"path": "/reimbursements",
|
||||
"width": 390,
|
||||
"tableVisible": false,
|
||||
"visibleTableCount": 0,
|
||||
"invoiceMobileListVisible": false,
|
||||
"invoiceMobileRows": 0,
|
||||
"reimbursementMobileListVisible": true,
|
||||
"reimbursementMobileCards": 0,
|
||||
"mobileCaptureFileExists": false,
|
||||
"mobileCaptureMultiple": null,
|
||||
"offscreenButtons": [],
|
||||
"bodyOverflowX": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"route": "/mobile/capture",
|
||||
"screenshot": "/home/shunli/Projects/hyb-oa/output/playwright/r93-post-deploy/mobile390-mobile-capture.png",
|
||||
"metrics": {
|
||||
"path": "/mobile/capture",
|
||||
"width": 390,
|
||||
"tableVisible": false,
|
||||
"visibleTableCount": 0,
|
||||
"invoiceMobileListVisible": false,
|
||||
"invoiceMobileRows": 0,
|
||||
"reimbursementMobileListVisible": false,
|
||||
"reimbursementMobileCards": 0,
|
||||
"mobileCaptureFileExists": true,
|
||||
"mobileCaptureMultiple": true,
|
||||
"offscreenButtons": [],
|
||||
"bodyOverflowX": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"invoiceProbe": null,
|
||||
"consoleErrors": [
|
||||
"Failed to load resource: the server responded with a status of 401 ()"
|
||||
],
|
||||
"httpErrors": [
|
||||
{
|
||||
"status": 401,
|
||||
"url": "https://oa.hyinda.com/api/auth/refresh"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
# R93 修复与复测报告
|
||||
|
||||
生成日期:2026-05-05
|
||||
|
||||
## 已处理
|
||||
|
||||
1. 公网前端部署一致性
|
||||
- 根因:远端源码已更新,但运行中的 Docker 镜像仍使用旧 `/app/client/dist`。
|
||||
- 处理:在 `118.89.77.218` 重新构建并重启 `hyb-oa-trialrun-server`。
|
||||
- 远端 smoke:`smoke-external-deps.js` 通过,`smoke-trialrun-runtime.js` 通过。
|
||||
|
||||
2. 手机端票据/报销/上传公网表现
|
||||
- 复测文件:`artifacts/r93/post-deploy-visual-check-2026-05-05.json`
|
||||
- `/invoice-pool` mobile390:`tableVisible=false`,`invoiceMobileListVisible=true`,`offscreenButtons=[]`
|
||||
- `/reimbursements` mobile390:`tableVisible=false`,`reimbursementMobileListVisible=true`,`offscreenButtons=[]`
|
||||
- `/mobile/capture` mobile390:`mobileCaptureMultiple=true`,`offscreenButtons=[]`
|
||||
|
||||
3. live OCR 自动化假失败
|
||||
- 根因:helper 使用 `not.toBe("pending_ocr")`,在详情文本短暂为空或未稳定时可能提前返回。
|
||||
- 处理:改为显式等待 `available | ocr_failed` 终态;断言使用 helper 返回的终态字段。
|
||||
- 复测:真实腾讯 OCR 用例通过。
|
||||
|
||||
## 当前数据
|
||||
|
||||
- 数据探针:`artifacts/r93/post-deploy-data-probe-2026-05-05.json`
|
||||
- 票据池:公网员工账号当前可读,OCR provider 为 `tencent`,票据状态为 `available`,没有 `pending_ocr` 或 `ocr_failed` 样本。
|
||||
- 草稿报销:公网员工账号当前草稿数为 0,不能用真实草稿继续复现“再次编辑”链路;移动列表入口已恢复可见。
|
||||
|
||||
## 保留问题
|
||||
|
||||
- `/assets`、`/notifications`、`/purchase-requests` 等页面仍有移动端表格专项,建议进入 R94。
|
||||
- `/contracts-registry` 员工视角仍请求 `/api/employees` 并返回 403,建议进入 R95 权限一致性专项。
|
||||
- `cd client && npx playwright test tests/e2e/r92-mobile-invoice-usability.spec.ts ...` 本轮未作为通过门禁,原因是该用例默认依赖本地 `127.0.0.1:3000`,当前本地未启动服务;公网视觉复测已覆盖本次部署问题。
|
||||
@@ -0,0 +1,16 @@
|
||||
ID,Severity,Page,Viewport,Category,Symptom,Evidence,Recommendation,Status
|
||||
VA-001,HIGH,/invoice-pool,mobile390,mobile-table-overflow,"手机票据中心仍显示桌面表格,发票号码列和操作列被裁切,more_horiz 操作按钮跑到 390px 视口外。","output/playwright/r93-visual-audit-session/mobile390-invoice-pool.png;JSON: table=1, offscreen button right=807","优先修复为移动端卡片列表,隐藏桌面 table;详情字段改为分行 label/value,并加入视觉回归断言。",TODO
|
||||
VA-002,HIGH,/reimbursements,mobile390,mobile-table-layout,"手机报销列表仍显示表格结构,空列表时尚可阅读,但有数据时很容易出现操作列不可达;与此前草稿可编辑诉求相关。","output/playwright/r93-visual-audit-session/mobile390-reimbursements.png;JSON: visibleTableCount=1","确认生产构建是否包含 R92 移动卡片改动;若组件已写卡片但公网仍显示表格,优先检查部署版本或 className 透传;否则补移动卡片。",TODO
|
||||
VA-003,HIGH,/team,mobile390,mobile-table-layout,"团队列表在手机端以表格展示,部门/状态列被挤压为窄竖排,成员信息扫描效率差。","output/playwright/r93-visual-audit-session/mobile390-team.png;JSON: visibleTableCount=1","改为成员卡片:姓名、部门、今日状态、备注纵向展示;保留筛选按钮。",TODO
|
||||
VA-004,HIGH,/leave-requests,mobile390,mobile-table-layout,"请假记录区域在手机端仍是表格,列名被拆成竖排;当前无记录时影响较小,有记录后会明显难读。","output/playwright/r93-visual-audit-session/mobile390-leave-requests.png;JSON: visibleTableCount=1","请假记录改为卡片式列表,展示假种、时间、天数、状态、操作。",TODO
|
||||
VA-005,HIGH,/assets,mobile390,mobile-table-layout,"资产分类和资产列表两个区域在手机端仍有表格,列头拥挤;复选框触控目标也偏小。","output/playwright/r93-visual-audit-session/mobile390-assets.png;JSON: visibleTableCount=2, small checkbox 16x16","资产分类/资产卡片改成移动卡片或折叠列表;复选框外层增加可点区域。",TODO
|
||||
VA-006,HIGH,/purchase-requests,mobile390,mobile-table-layout,"采购单列表在手机端仍显示表格;当前无数据时可接受,但后续有单据后操作列可能不可达。","output/playwright/r93-visual-audit-session/mobile390-purchase-requests.png;JSON: visibleTableCount=1","采购列表改为移动卡片;菜单按钮保持至少 44px 宽度。",TODO
|
||||
VA-007,HIGH,/todos,mobile390,mobile-table-layout,"待办页手机端仍可见表格。","output/playwright/r93-visual-audit-session/mobile390-todos.png;JSON: visibleTableCount=1","待办列表改为任务卡片,优先展示标题、优先级、截止日期、状态和完成动作。",TODO
|
||||
VA-008,HIGH,/notifications,mobile390,mobile-table-layout,"通知页手机端仍显示表格,标题/时间/状态/操作列拥挤。","output/playwright/r93-visual-audit-session/mobile390-notifications.png;JSON: visibleTableCount=1","通知改为消息卡片,按未读/类型筛选;操作放在卡片底部。",TODO
|
||||
VA-009,HIGH,/attendance,mobile390,mobile-table-layout,"考勤页手机端仍可见表格且存在出屏交互风险。","output/playwright/r93-visual-audit-session/mobile390-attendance.png;JSON: visibleTableCount=1","考勤记录改为日期卡片或月历式摘要;管理员补录入口保持桌面优先。",TODO
|
||||
VA-010,HIGH,/contracts-registry,mobile390+desktop1440,permission-noise,"合同台账页面可进入,但控制台出现 403 resource 错误;用户看不到明确错误,但自动化记录为 JS_ERROR。","output/playwright/r93-visual-audit-session/mobile390-contracts-registry.png;JSON: console error 403 x2","核对合同台账页面与 API 权限:若员工可进入页面,应避免后台请求未授权接口;若不应进入,应在导航和路由层统一隐藏/403。",TODO
|
||||
VA-011,MEDIUM,multiple,mobile390,topbar-breadcrumb,"手机顶栏显示原始路径并被截断,例如 /invoice...、/purchase...,占用首屏且对国内用户不友好。","output/playwright/r93-visual-audit-session/mobile390-invoice-pool.png;output/playwright/r93-visual-audit-session/mobile390-purchase-requests.png","手机端顶栏改为中文页面名或隐藏路径,只保留返回/菜单、搜索、通知和用户入口。",TODO
|
||||
VA-012,MEDIUM,/travel-requests,mobile390,heavy-mobile-form,"差旅页虽然没有表格溢出,但手机端表单很长,字段密集,一次创建差旅申请负担较重。","output/playwright/r93-visual-audit-session/mobile390-travel-requests.png","拆分为步骤式表单:基础信息、行程段、预算/成本中心;底部固定保存按钮。",TODO
|
||||
VA-013,LOW,multiple,mobile390,touch-target,"若干移动页存在 16-28px 的小触控目标,包含复选框、短文本链接和图标菜单。","artifacts/r93/visual-audit-session-2026-05-05.json;SMALL_TOUCH_TARGET=14","统一移动端 touch target 最小 40-44px;复选框/短链增加外层点击区域。",TODO
|
||||
VA-014,INFO,multiple,desktop1440,audit-false-positive,"桌面端 CLIPPED_TEXT 大多来自固定左侧导航滚动容器,初步判断为脚本误报,不作为优先缺陷。","artifacts/r93/visual-audit-session-2026-05-05.json;desktop CLIPPED_TEXT 多指向主导航容器","后续视觉脚本排除固定侧栏容器,聚焦 main 区域,减少噪声。",TODO
|
||||
VA-015,INFO,multiple,role-coverage,coverage-gap,"本轮使用 [email protected],只覆盖员工视角;审批、财务、管理员页面存在权限边界,不能代表全角色视觉质量。","artifacts/r93/visual-audit-session-2026-05-05.json;EXPECTED_FORBIDDEN=12","后续补 manager、finance、admin 三类账号的会话复用视觉巡检,并按角色输出独立问题清单。",TODO
|
||||
|
@@ -0,0 +1,104 @@
|
||||
# R93 公网页面视觉自动化巡检报告
|
||||
|
||||
生成日期:2026-05-05
|
||||
|
||||
## 范围
|
||||
|
||||
- 环境:`https://oa.hyinda.com`
|
||||
- 账号:`[email protected]`
|
||||
- 路由:27 个员工视角可达或可探测路由
|
||||
- 视口:
|
||||
- `mobile390`: 390 x 844
|
||||
- `desktop1440`: 1440 x 900
|
||||
- 原始结果:`artifacts/r93/visual-audit-session-2026-05-05.json`
|
||||
- 顶栏交互结果:`artifacts/r93/interaction-audit-2026-05-05.json`
|
||||
- 截图目录:`output/playwright/r93-visual-audit-session/`
|
||||
- 顶栏交互截图:`output/playwright/r93-interaction-audit/`
|
||||
- 问题清单:`artifacts/r93/visual-audit-issue-log.csv`
|
||||
|
||||
## 方法
|
||||
|
||||
本轮使用 Playwright 真实浏览器自动化,采用“每个视口登录一次、复用同一会话逐页巡检”的方式,避免频繁登录造成公网会话噪声。
|
||||
|
||||
每个页面记录:
|
||||
|
||||
- 页面截图
|
||||
- 最终 URL
|
||||
- JS `pageerror` / console error
|
||||
- HTTP 5xx 与异常请求失败
|
||||
- 横向溢出
|
||||
- 手机端可见 `table`
|
||||
- 跑出视口的可交互控件
|
||||
- 过小触控目标
|
||||
- 文本裁切
|
||||
|
||||
## 汇总
|
||||
|
||||
- 路由数:27
|
||||
- 视口数:2
|
||||
- 页面结果数:54
|
||||
- 自动化发现数:66
|
||||
|
||||
自动化分类:
|
||||
|
||||
| 类型 | 数量 | 说明 |
|
||||
| --- | ---: | --- |
|
||||
| `MOBILE_VISIBLE_TABLE` | 9 | 手机端仍显示表格 |
|
||||
| `OFFSCREEN_INTERACTIVE` | 1 | 可交互控件跑出视口 |
|
||||
| `JS_ERROR` | 2 | 控制台资源 403 |
|
||||
| `REQUEST_FAILED` | 1 | 请求被中断,需结合页面行为复核 |
|
||||
| `CLIPPED_TEXT` | 27 | 大部分为顶栏路径或桌面侧栏误报 |
|
||||
| `SMALL_TOUCH_TARGET` | 14 | 小触控目标 |
|
||||
| `EXPECTED_FORBIDDEN` | 12 | 员工账号无权限,记录为覆盖边界 |
|
||||
|
||||
## 高优先级问题
|
||||
|
||||
1. 票据中心手机端仍显示桌面表格,操作按钮跑出 390px 视口。
|
||||
- 证据:`output/playwright/r93-visual-audit-session/mobile390-invoice-pool.png`
|
||||
- 指标:`visibleTableCount=1`,`offscreen button right=807`
|
||||
- 建议:优先进入 R93 修复,改为移动卡片并加入视觉断言。
|
||||
|
||||
2. 报销、团队、请假、资产、采购、待办、通知、考勤等页面在手机端仍可见表格。
|
||||
- 证据:对应 `mobile390-*.png`
|
||||
- 建议:按使用频率分批卡片化。10 人以下公司优先处理报销、票据、请假、团队、待办。
|
||||
|
||||
3. 合同台账页面出现 403 资源错误。
|
||||
- 证据:`output/playwright/r93-visual-audit-session/mobile390-contracts-registry.png`
|
||||
- 指标:console error 403 x2
|
||||
- 建议:核对页面权限与 API 权限是否一致。若员工可进入页面,后台请求不应打未授权接口;若不应进入,导航和路由应统一隐藏或 403。
|
||||
|
||||
## 中低优先级问题
|
||||
|
||||
1. 手机顶栏显示原始路径并被截断。
|
||||
- 例如 `/invoice...`、`/purchase...`
|
||||
- 建议:手机端显示中文页面名,或隐藏路径。
|
||||
|
||||
2. 差旅申请手机表单过长。
|
||||
- 当前没有明显溢出,但一次性表单负担较重。
|
||||
- 建议:后续拆成步骤式表单。
|
||||
|
||||
3. 多处小触控目标。
|
||||
- 主要是复选框、短文本链接、图标菜单。
|
||||
- 建议:移动端统一 40-44px 最小可点击区域。
|
||||
|
||||
## 覆盖限制
|
||||
|
||||
本轮只使用员工账号。经理、财务、管理员页面需要后续单独跑角色视角视觉巡检,否则审批、付款、系统设置等页面只能视为未充分覆盖。
|
||||
|
||||
## 交互抽查
|
||||
|
||||
补充对手机顶栏核心入口做了点击验证:
|
||||
|
||||
| 检查项 | 结果 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| 打开/关闭侧边菜单 | 通过 | `output/playwright/r93-interaction-audit/mobile390-portal-menu-open.png` |
|
||||
| 打开/关闭全局搜索 | 通过 | `output/playwright/r93-interaction-audit/mobile390-portal-search-open.png` |
|
||||
| 打开/关闭通知下拉 | 通过 | `output/playwright/r93-interaction-audit/mobile390-portal-notifications-open.png` |
|
||||
|
||||
结论:当前手机端主要问题不是顶栏入口无法点击,而是进入业务页面后,内容区仍有大量桌面表格和字段挤压。
|
||||
|
||||
## 后续建议
|
||||
|
||||
1. R93 先修 `票据中心 + live OCR 自动化假失败 + runbook`。
|
||||
2. R94 做“移动端表格清零专项”,优先级:报销、请假、团队、待办、通知、采购、资产、考勤。
|
||||
3. R95 做多角色视觉巡检与权限一致性检查,至少覆盖 manager、finance、admin。
|
||||
文件差异内容过多而无法显示
加载差异
@@ -20,6 +20,7 @@
|
||||
- [ ] 若要导数据,仅准备最小主数据:部门、员工、角色、在用资产、活跃项目、合同元数据
|
||||
- [ ] 不导入历史审批单、通知历史、审计日志、聊天记录和涉密正文附件
|
||||
- [ ] 已确认远端部署目录 `/opt/hyb-oa-trialrun` 不是 git 工作树,发布优先走 `bash deploy/trialrun/deploy.sh`
|
||||
- [ ] 已确认 OA 前端静态资源由 server 容器内 `/app/client/dist` 提供,Caddy 只反代到 `127.0.0.1:3000`
|
||||
|
||||
## A. 发布前(Pre-flight)
|
||||
- [ ] 确认当前版本已打 tag:`git tag -a trialrun-YYYYMMDD-NN -m "trialrun release"`
|
||||
@@ -46,6 +47,8 @@
|
||||
- [ ] external deps smoke:
|
||||
- [ ] `docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env exec -T server node src/scripts/smoke-external-deps.js`
|
||||
- [ ] 若 external deps smoke 通过,已确认通过前提不是“企微关闭 + OCR mock”误通过
|
||||
- [ ] 若启用腾讯 OCR,已脱敏核查 `OCR_PROVIDER=tencent`、`TENCENT_SECRET_ID` 长度、`TENCENT_SECRET_KEY` 长度和 `TENCENT_OCR_REGION`
|
||||
- [ ] 若本次包含前端体验修复,已在容器内确认 `/app/client/dist` 含关键 test id 或公网 asset hash 已更新
|
||||
- [ ] 登录验证已由 live smoke 与 release gate 覆盖;仅首次接入或第三方后台配置变更时补做人工确认
|
||||
|
||||
## C. 发布后(Post-check)
|
||||
@@ -56,6 +59,8 @@
|
||||
- [ ] `docker logs --tail=200 hyb-oa-trialrun-server`
|
||||
- [ ] 已确认 smoke 账号为独立账号(`smoke-admin` / `smoke-employee`),且不参与真实业务
|
||||
- [ ] 已确认 live smoke 仅检查 `/ready`、登录、Portal、项目、公告、个人设置和企微配置状态
|
||||
- [ ] 若涉及票据/OCR,已执行真实 OCR 辅助复核或记录跳过原因:`PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 ... npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts`
|
||||
- [ ] 若涉及移动端体验,已用 Playwright 390px 视口检查 `/invoice-pool`、`/reimbursements`、`/mobile/capture`,确认无桌面表格、无出屏按钮,上传 input 的 `multiple` 与预期一致
|
||||
|
||||
## D. 回滚(Rollback)
|
||||
> 原则:如果涉及迁移,最快回滚通常是 “恢复备份 + 回到上个 tag”。
|
||||
@@ -67,6 +72,7 @@
|
||||
- [ ] 重启并探活:
|
||||
- [ ] `docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server`
|
||||
- [ ] `curl -fsS http://127.0.0.1:3000/ready`
|
||||
- [ ] 若仅为 OCR 应急降级,已把远端 `.env` 的 `OCR_PROVIDER` 临时切回 `mock`,重启 server,并在 Issue/发布记录中写明原因、影响范围和恢复时间
|
||||
|
||||
|
||||
|
||||
|
||||
+77
-1
@@ -22,7 +22,8 @@
|
||||
- 部署目录:`/opt/hyb-oa-trialrun`
|
||||
- 远端目录当前不是 git 工作树;发布应优先从本地执行 `bash deploy/trialrun/deploy.sh`,由脚本 `rsync` 到服务器
|
||||
- 远端容器编排当前实际为 `docker-compose 1.29.2`;本 runbook 命令以 `docker-compose` 为准
|
||||
- 当前公网 `.env` 已确认:`APP_ORIGIN=https://oa.hyinda.com`、`COOKIE_SECURE=true`、`PUBLIC_SECURITY_HARDENING_ENABLED=true`,但 `WECOM_*` 仍为 `false`,`OCR_PROVIDER=mock`
|
||||
- 当前公网 `.env` 已确认:`APP_ORIGIN=https://oa.hyinda.com`、`COOKIE_SECURE=true`、`PUBLIC_SECURITY_HARDENING_ENABLED=true`
|
||||
- 企业微信与 OCR 已进入公网试运行配置。核查时只检查开关、长度和 smoke 结果,不在日志、Issue 或文档中输出 secret 明文。
|
||||
|
||||
## 0. 前置条件
|
||||
- Docker + Docker Compose(v1/v2 任一可用)
|
||||
@@ -104,10 +105,54 @@ docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/
|
||||
- 推荐直接执行 `bash scripts/qa/run-release-gate.sh all`,让 static / local smoke / full-local / deploy / live smoke 形成单一放行链。
|
||||
- 若再出现“数据库开了但功能被环境硬关”的情况,部署会直接失败,不再等到手工点页面才发现。
|
||||
- 2026-05-04 公网只读巡检显示:`smoke-external-deps.js` 可以通过,但前提是 `WECOM_*` 未启用且 `OCR_PROVIDER=mock`;`smoke-trialrun-runtime.js` 当前会因 `announcements_v1` 为 `force_off` 失败。
|
||||
- 2026-05-05 公网复核显示:`OCR_PROVIDER=tencent` 可用,真实发票上传后进入 `available`,provider 为 `tencent`;后续发布不能再把 OCR 回退到 mock 而不记录原因。
|
||||
|
||||
浏览器访问:
|
||||
- `http://127.0.0.1:3000`(单域托管前端)
|
||||
|
||||
### 1.4.1 腾讯 OCR 试运行核查
|
||||
远端 `.env` 是 OCR 配置事实源,禁止提交或复制密钥明文。只做以下脱敏检查:
|
||||
|
||||
```bash
|
||||
cd /opt/hyb-oa-trialrun
|
||||
set -a
|
||||
source deploy/trialrun/.env
|
||||
set +a
|
||||
|
||||
printf 'OCR_PROVIDER=%s\n' "$OCR_PROVIDER"
|
||||
printf 'TENCENT_SECRET_ID length=%s\n' "${#TENCENT_SECRET_ID}"
|
||||
printf 'TENCENT_SECRET_KEY length=%s\n' "${#TENCENT_SECRET_KEY}"
|
||||
printf 'TENCENT_OCR_REGION=%s\n' "$TENCENT_OCR_REGION"
|
||||
```
|
||||
|
||||
期望:
|
||||
- `OCR_PROVIDER=tencent`
|
||||
- `TENCENT_SECRET_ID` 和 `TENCENT_SECRET_KEY` 长度大于 0
|
||||
- `TENCENT_OCR_REGION` 与腾讯 OCR 开通地域一致,例如 `ap-beijing`
|
||||
|
||||
发布后 smoke:
|
||||
|
||||
```bash
|
||||
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env exec -T server node src/scripts/smoke-external-deps.js
|
||||
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env exec -T server node src/scripts/smoke-trialrun-runtime.js
|
||||
```
|
||||
|
||||
真实 OCR 辅助复核(本地执行,不提交发票文件):
|
||||
|
||||
```bash
|
||||
cd client
|
||||
PLAYWRIGHT_MANUAL=1 \
|
||||
PLAYWRIGHT_OCR_LIVE=1 \
|
||||
PLAYWRIGHT_OCR_LIVE_FILE=/path/to/invoice.pdf \
|
||||
E2E_BASE_URL=https://oa.hyinda.com \
|
||||
npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list --timeout=360000
|
||||
```
|
||||
|
||||
回滚到 mock 只允许作为应急降级:
|
||||
1. 在远端 `.env` 将 `OCR_PROVIDER=tencent` 改为 `OCR_PROVIDER=mock`。
|
||||
2. 执行 `docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d server`。
|
||||
3. 在 Issue/发布记录中写明降级原因、预计恢复时间和影响范围。
|
||||
|
||||
## 1.5 备份与恢复演练(强烈建议至少做一次)
|
||||
> 备份建议做到“DB + 文件存储(票据上传目录)”双份齐全。
|
||||
|
||||
@@ -193,6 +238,37 @@ docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/
|
||||
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env run --rm init
|
||||
```
|
||||
|
||||
### 2.2 前端部署一致性排障
|
||||
当前 `oa.hyinda.com` 由 Caddy 反代到 `127.0.0.1:3000`,前端静态资源由 server 容器内的 `/app/client/dist` 提供,不是 `/etc/caddy/Caddyfile` 里的独立静态目录。
|
||||
|
||||
如果出现“本地源码已有功能,但公网仍显示旧 UI”,先按以下顺序核查:
|
||||
|
||||
```bash
|
||||
# 1) 确认 Caddy 仍是反代到 3000
|
||||
sudo sed -n '/oa.hyinda.com/,/}/p' /etc/caddy/Caddyfile
|
||||
|
||||
# 2) 比对公网首页引用的 asset hash
|
||||
curl -fsS https://oa.hyinda.com/ | grep -o '/assets/[^" ]*' | head
|
||||
|
||||
# 3) 在容器内查构建产物是否包含关键 test id
|
||||
docker exec hyb-oa-trialrun-server sh -lc \
|
||||
'for pat in invoice-pool-mobile-list reimbursements-mobile-list mobile-capture-file multiple:!0; do printf "%s " "$pat"; grep -Rao "$pat" /app/client/dist/assets /app/client/dist/index.html 2>/dev/null | wc -l; done'
|
||||
```
|
||||
|
||||
若远端源码已更新但容器内 `/app/client/dist` 仍旧,重建并重启:
|
||||
|
||||
```bash
|
||||
cd /opt/hyb-oa-trialrun
|
||||
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
|
||||
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env run --rm -T init </dev/null
|
||||
curl -fsS http://127.0.0.1:3000/ready
|
||||
```
|
||||
|
||||
重建后必须补做:
|
||||
- `smoke-external-deps.js`
|
||||
- `smoke-trialrun-runtime.js`
|
||||
- 公网页面视觉检查:至少覆盖 `/invoice-pool`、`/reimbursements`、`/mobile/capture` 的 390px 视口
|
||||
|
||||
发布/回滚 Checklist:
|
||||
- `deploy/trialrun/checklist.md`
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||||
A1,R93 执行合同冻结,"把公网真实腾讯 OCR 已通后的剩余问题收敛为本轮范围:live OCR 自动化假失败、手机票据中心显示挤压、试运行 OCR 配置留痕。","Issue CSV 字段完整并通过校验;本轮不扩展到新业务模块、不调整 OCR 业务状态机。","命令:`python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-05_22-48-01-r93-live-ocr-mobile-polish.csv`。业务:确认本轮只处理真实 OCR 验证稳定性、手机票据中心可读可操作、部署运行手册。",manual,DONE,DONE,DONE,issues/2026-05-05_22-48-01-r93-live-ocr-mobile-polish.csv,[],2026-05-05:CSV 已创建并通过校验;不涉及运行时代码;回滚路径:删除本 CSV。
|
||||
A6,核查公网前端部署一致性,"针对视觉审计发现的源码/公网差异,核查本地源码、构建产物、远端 Caddy 静态目录和缓存策略,优先用重新构建/部署解决公网仍显示旧 UI 的问题。","1) 明确公网静态目录与当前构建产物来源;2) 公网 390px 下票据中心 `invoice-pool-mobile-list` 可见或记录阻塞原因;3) 公网移动上传 input 的 `multiple` 与源码一致或记录企业微信浏览器限制;4) 不泄露远端环境变量和密钥。","命令:本地 `cd client && npm run build`;远端只读核查 Caddy/静态目录;部署后 Playwright 检查 `/invoice-pool`、`/reimbursements`、`/mobile/capture` 的 DOM 指标。业务:手机端看到的是最新前端构建,票据/报销移动入口和多文件上传能力与源码一致。",ssh|playwright|vite,DONE,DONE,DONE,client/dist|deploy|remote:118.89.77.218,["A1"],2026-05-05:已确认 Caddy 反代到 Docker,远端源码已更新但旧镜像仍使用旧前端 dist;重建并重启 server 后公网 asset hash 更新,`post-deploy-visual-check-2026-05-05.json` 显示票据/报销移动列表和上传 multiple 生效;回滚路径:恢复部署前镜像或重建上一版。
|
||||
A2,修复 live OCR 自动化假失败,"调整真实 OCR Playwright 辅助用例与 helper,避免后端已完成 available 但用例因总 timeout 或占位字段断言报假失败;失败时输出 API/页面状态证据。","1) 用真实 PDF 上传后能稳定等待 available;2) 断言字段时不因页面已刷新但测试总超时误报;3) 失败时报告包含票据ID、状态、OCR provider、金额或错误摘要。","命令:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list --timeout=360000`。业务:公网登录员工账号->上传真实发票->腾讯 OCR->票据中心详情 available 且金额可见。",playwright|typescript,DONE,DONE,DONE,client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/helpers/liveInvoiceOcr.ts,["A1"],2026-05-05:复现假失败为 helper 在 pending_ocr/占位字段时提前返回;已改为等待 available/ocr_failed 明确终态;真实 OCR 用例通过;不新增真实密钥;回滚路径:恢复原 helper 与 spec。
|
||||
A3,优化手机票据中心列表与详情布局,"修复公网手机视口仍显示桌面表格/字段挤压的问题,改为移动端优先的票据卡片与详情字段分行展示。","1) 390px 手机视口不显示桌面票据表格,`invoice-pool-mobile-list` 可见;2) 发票号码、销售方、购买方、金额不被裁切或横向溢出;3) 详情操作按钮可点击且不重叠;4) 视觉自动化指标满足:`tableVisible=false`、`mobileListVisible=true`、`offscreenButtons=[]`、截图无明显遮挡;5) 桌面表格视图保持可用。","命令:`cd client && npm run typecheck && npm run build && npx playwright test tests/e2e/r92-mobile-invoice-usability.spec.ts --workers=1 --reporter=list --timeout=90000`;补充公网手机/桌面视觉脚本检查 `https://oa.hyinda.com/invoice-pool`,保存截图到 `output/playwright/r93-*invoice-pool.png`,并输出 viewport、table/mobile-list display、offscreenButtons、字段可见性。业务:员工在手机票据中心查看真实 OCR 票据,可读字段并可进入详情/人工修正/归档。",playwright|typescript,DONE,DONE,DONE,client/src/pages/invoice-pool/InvoiceListCard.tsx|client/src/pages/invoice-pool/InvoiceDetailPanel.tsx|client/tests/e2e/r92-mobile-invoice-usability.spec.ts,"[""A1"",""A6""]",2026-05-05:源码已有移动卡片,公网问题由旧镜像导致;重建部署后 `post-deploy-visual-check-2026-05-05.json` 显示 mobile390 `tableVisible=false`、`invoiceMobileListVisible=true`、`offscreenButtons=[]`;R92 本地用例未跑通因本地 127.0.0.1:3000 未启动,已由公网视觉复测覆盖;回滚路径:恢复 R92 票据组件或上一版镜像。
|
||||
A4,补齐试运行 OCR 配置运行手册,"把公网 OCR provider 从 mock 切到 tencent 的操作事实、验证命令、回滚方式写入 trialrun runbook/checklist,避免后续发布又回到 mock 或空密钥。","1) runbook 明确 `.env` 为事实源且不提交密钥;2) 写清 `OCR_PROVIDER=tencent`、Tencent key 长度检查、external deps smoke、runtime smoke、回滚到 mock 的步骤;3) 不暴露任何真实密钥。","命令:`git diff --check`;业务:按 runbook 可复现远端 OCR 配置检查与 smoke,不需要查看密钥明文。",manual,DONE,DONE,DONE,deploy/trialrun/runbook.md|deploy/trialrun/checklist.md,["A1"],2026-05-05:runbook/checklist 已补充腾讯 OCR 脱敏核查、真实 OCR 辅助复核、前端部署一致性排障和 OCR mock 应急回滚;不含真实密钥;回滚路径:恢复文档改动。
|
||||
A5,R93 回归与中文提交,"执行前端构建、移动端 Playwright、live OCR 辅助复核和公网视觉自动化复核,确认后按中文分批提交。","1) A2-A4/A6 Test_Method 通过或明确记录外部阻塞;2) 视觉自动化保留手机/桌面截图与 DOM 指标摘要;3) `git status --short` 仅剩预期未跟踪/ignored 产物;4) commit message 使用中文并引用 R93。","命令:`cd client && npm run typecheck && npm run build`;`cd client && npx playwright test tests/e2e/r92-mobile-invoice-usability.spec.ts --workers=1 --reporter=list --timeout=90000`;live OCR 命令见 A2;视觉复核:公网 390x844 与 1440x900 截图 + DOM 指标,检查 no offscreen buttons、手机列表/详情字段可见。业务:公网票据中心真实 OCR 票据在手机端可读可操作。",playwright|git|manual,DONE,DONE,DONE,N/A,"[""A2"",""A3"",""A4"",""A6""]",2026-05-05:`npm run typecheck` 通过,`npm run build` 通过,远端 external/runtime smoke 通过,真实 live OCR 用例通过,公网 post-deploy 视觉复测通过;R92 本地用例因本地 127.0.0.1:3000 未启动未作为门禁;提交前不纳入密钥、截图和 test-results;回滚路径:按分批 commit revert。
|
||||
|
无法渲染此文件,因为它包含了意外字符,其位于第 3 行和第 910 列。
|
在新工单中引用
屏蔽一个用户