88 行
6.9 KiB
Markdown
88 行
6.9 KiB
Markdown
# 本地浏览器复核
|
||
|
||
## 结论摘要
|
||
|
||
- 复核基线:本地 `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 结果替代。
|