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。
|
||||
文件差异内容过多而无法显示
加载差异
在新工单中引用
屏蔽一个用户