6.9 KiB
6.9 KiB
本地浏览器复核
结论摘要
- 复核基线:本地
HEAD 8f8606c328c4754901e045c34b071ecd36215bd3。 RESP-TABLE-001:P1 / CONFIRMED。768×1024 与 1024×768 均没有页面级横向滚动,但共享表格容器固定为overflow-x: hidden,表格右侧被裁切且用户不能横向滚动恢复;1024×768 下五个受检页面的右侧操作均不可达。MOB-ARCHIVE-001:P2 / CONFIRMED。375×812 下空态、列表卡片、角色范围和底栏安全间距通过;详情展开后,长标识会把“历史详情”内部内容撑宽并被overflow-x: hidden裁切,页面本身又不提供横向滚动。- 两组桌面标题动作均保持一行、完整位于视口内,标题区无横向溢出。本轮没有确认标题动作换行故障。
- 本轮没有访问公网、真实账号或真实业务数据;所有 API 响应均为本地合成 mock,浏览器上下文阻断 Service Worker,未发现未知 API、控制台错误或页面异常。
验证边界
- 服务:仅监听
127.0.0.1的本地 Vite。 - 浏览器:本地 Playwright Chromium,
serviceWorkers: "block",prefers-reduced-motion: reduce。 - 网络:只允许本地 Vite 同源请求;本轮外部来源请求数为 0。
- 数据:全部为
SYN-*合成对象;未使用真实姓名、票据、合同正文、账号、凭据、银行信息或原始 payload。 - 角色 fixture:移动空态使用
employee,移动有记录/详情使用hr,桌面页面使用admin。 - 页面加载、截图和量测均由
/tmp临时脚本执行,未修改业务代码或测试代码。
375×812 移动企微审批归档
空态与列表
| 场景 | 角色 | 最终 URL | H1 | 页面横溢 | 桌面表格 | 底栏遮挡 | 结论 |
|---|---|---|---|---|---|---|---|
| 空态 | employee |
/mobile/wecom-approval-archive |
企微审批历史 | 375 / 375,0px |
0 | 滚动到底后末段距底栏 18.5px | PASS |
| 有记录 | hr |
/mobile/wecom-approval-archive |
企微审批历史 | 375 / 375,0px |
0,显示 1 张移动卡片 | 滚动到底后末段距底栏 18.5px | PASS |
角色范围符合 fixture:employee 只显示“与我相关 / 直属团队”,hr 额外显示“HR/管理员全量”。长申请人名称和长单号在列表卡片中可换行,没有形成页面级横向溢出。
详情展开
- 最终 URL 和标题保持不变。
- 内部移动滚动容器宽度为
375 / 375,滚动到底后详情末段与固定底栏仍有 18.5px 净距,底栏没有遮挡末尾内容。 - “历史详情”面板
clientWidth=351px、scrollWidth=457px,内部内容向右超出约105px。 - 面板计算样式为
overflow-x: hidden;文档和移动滚动容器都没有横向滚动,因此超出内容被裁切且用户无法恢复查看。 - 该问题只在长详情合成数据下确认;空态和列表态没有同类右侧溢出。
据此,移动路由不能整体判定为失败:空态、列表、角色范围与底栏通过;详情长标识裁切作为 P2 / CONFIRMED 独立保留。
桌面中间断点量测
所有页面最终 URL 均与目标路由一致,浏览器标题为“海音达工作台”,页面 document.scrollWidth 均等于 viewport;问题发生在共享表格容器内部。
| viewport | 路由 | H1 | 容器 client/scroll | 可裁切宽度 | overflow-x | 右侧操作初始可达 |
|---|---|---|---|---|---|---|
| 768×1024 | /projects |
项目 | 702 / 760 | 58px | hidden | 否 |
| 768×1024 | /assets |
资产 | 702 / 760 | 58px | hidden | 否 |
| 768×1024 | /contracts-registry |
合同 | 702 / 760 | 58px | hidden | 是;截图中“编辑/更多”均可见,但容器合同仍失败 |
| 768×1024 | /payment-batches |
付款 | 702 / 760 | 58px | hidden | 否 |
| 768×1024 | /reimbursements |
我的报销 | 702 / 760 | 58px | hidden | 否 |
| 1024×768 | /projects |
项目 | 654 / 760 | 106px | hidden | 否 |
| 1024×768 | /assets |
资产 | 654 / 760 | 106px | hidden | 否 |
| 1024×768 | /contracts-registry |
合同 | 654 / 760 | 106px | hidden | 否 |
| 1024×768 | /payment-batches |
付款 | 654 / 760 | 106px | hidden | 否 |
| 1024×768 | /reimbursements |
我的报销 | 654 / 760 | 106px | hidden | 否 |
裁切后的操作在程序化设置 scrollLeft 后可以重新进入容器,但 overflow-x: hidden 不向用户提供横向滚动,因此不视为可达。标题动作方面:五页在两个 viewport 下均为 1 行,资产页的两个标题动作也未换行;标题动作完整位于 viewport 内,标题容器横溢均为 0。
当前主证据
证据目录:research/evidence/local-browser-8f8606c/。
- 结构化量测:
metrics.json - 移动空态:
mobile-375x812-wecom-archive-empty-employee.png - 移动空态底部:
mobile-375x812-wecom-archive-empty-employee-bottom.png - 移动列表:
mobile-375x812-wecom-archive-record-hr.png - 移动列表底部:
mobile-375x812-wecom-archive-record-hr-bottom.png - 移动详情:
mobile-375x812-wecom-archive-detail-hr.png - 移动详情底部:
mobile-375x812-wecom-archive-detail-hr-bottom.png - 768×1024:
desktop-768x1024-projects.png、desktop-768x1024-assets.png、desktop-768x1024-contracts-registry.png、desktop-768x1024-payment-batches.png、desktop-768x1024-reimbursements.png - 1024×768:
desktop-1024x768-projects.png、desktop-1024x768-assets.png、desktop-1024x768-contracts-registry.png、desktop-1024x768-payment-batches.png、desktop-1024x768-reimbursements.png
research/screenshots/mobile-wecom-approval-archive-375.png 已人工复核,画面本身使用 synthetic 内容,但缺少本轮精确 SHA、角色和尺寸量测合同,因此只作为旧辅助截图,不作为当前 finding 的主证据。
证据完整性与脱敏复核
metrics.json只记录本地 URL、当前 SHA、viewport、最终路由、页面标题、角色代码、DOM 尺寸、截图文件名和诊断计数。- 对
metrics.json进行敏感关键词复核,未发现公网域名、邮箱、密码、token、Secret、账号、银行资料、企业微信完整标识或真实业务字段。 - 两个移动上下文和两个桌面上下文均为未知 API 0、console error 0、page error 0、外部来源请求 0。
- Service Worker 在浏览器上下文层阻断;本轮页面没有发起 Service Worker 请求。
建议验收合同
- 共享表格修复后,两组 viewport 的容器应满足:右侧操作完整可见,或容器提供用户可操作的横向滚动;页面级
document.scrollWidth继续等于 viewport。 - 移动详情修复后,“历史详情”面板应满足
scrollWidth <= clientWidth + 2px,长字段名、长人员摘要、长单号和 finding 类型均可换行,不通过隐藏溢出来消除页面横滚。 - 修复回归继续使用本地合成数据;真机企业微信 WebView 仍保持
EXTERNAL_GATED,不能由本轮 Chromium 结果替代。