2026-10-17-mp-pl-plan-cert-delivery.md 7.7 KB

危化品证上传移动 H5 交付核验

状态:用户第三次界面校准已在源码中完成并通过审查修复后的浏览器回归;当前总目标还包含 CRM 六页,图谱与全量门禁在总目标收尾统一执行。菜单 SQL 已按用户后续授权在测试库执行;未部署、未进行微信真机验收,生产库未执行。

范围

设计:2026-10-17-mp-webview-pl-plan-cert-design.md。 计划:../plans/2026-10-17-mp-webview-pl-plan-cert.md。

独立移动模块 /m/pl/plan-cert,小程序运输管理工作台 code pl-plan-cert-webview,入口权限 mini:pl:plan-cert:list。Web 页面与既有后端不修改;移除导出,保留已确认设计中的全部移动功能。

需求核验表

要求 当前证据 / 状态
复用 H5 WebView、运输工作台入口 入口配置及路由测试 3/3 通过;独立规格审查通过
五个文字 Tab 及默认查询 model 与浏览器交互通过
筛选、搜索、日期、分页与完整卡片字段 搜索/日期/动态候选项上下文/文本、日期、数字、枚举、合同侧别、排序参数/加载更多失败重试/乱序请求通过;字段完整性由独立规格审查核对
独立详情、关联合同、运输复制与链接 /m/pl/plan-cert/:id 直达/刷新/路由 ID 切换通过;普通固定绿顶栏、三 Tab、无票根/Hero;只读合同商机/报价关联及别名补全、金额独立权限、关联计划打开、司机/现场复制、磅单二维码预览均通过
产品分组证书上传、预览、下载、移除 3种证书槽位、最新详情、上传中保存/关闭拦截、失败保留重试、载荷白名单、预览/下载/移除及取消不写入通过
单条/批量齐备与取消、权限、状态限制 model 及浏览器批量1成功1失败1跳过、单条取消、权限失败关闭写入口通过
375/414px 移动样式、附件卡片 顶栏、状态 Tab、三栏筛选和列表卡片横向铺满视口;列表/筛选/详情/上传截图及横向溢出断言通过;72×72 缩略图及编辑态下载/删除 44px 命中区互不重叠
不修改 Web 及共享后端行为 8 个关键文件 SHA256 与实施前全部一致
其他问题只记录 见 2026-10-17-mp-pl-plan-cert-existing-issues.md,未修改其中的既有问题
构建、目标 lint、类型检查、图谱更新 本阶段生产构建、目标 ESLint/Stylelint 通过;全量类型检查仍被仓库既有错误阻断且目标路径无诊断;图谱在 CRM 六页完成后统一更新

已执行的验证

  • node --test scripts/mp-pl-plan-cert-entry.test.mjs:先3项失败(缺入口/路由/SQL),补齐后3项通过。
  • pnpm exec tsx --test src/views/m/pl/plan-cert/model.test.ts src/views/m/crm/customer/model.test.ts scripts/crm-existing-issues.test.ts:19项通过,其中8项为本次危化证规则、11项为前序客户功能回归。补充的日期上下文、品牌别名及合同补全测试均先失败后通过。
  • node --check miniprogram/config/api.js、node --check miniprogram/config/workbench-menus.js:通过。
  • 开发阶段仅只读确认菜单链 1 → MINI_PL_ROOT,并检查 SQL 两段 SELECT 的执行计划;当时未执行写语句。后续获用户授权后的实际执行与提交验证见下方记录。
  • node scripts/test-mp-pl-plan-cert.mjs:最终通过并自然退出,152次模拟API调用,无未知接口、无页面脚本异常。覆盖携带 mpTicket 直达详情和刷新、列表跳转、路由 ID 切换、详情内上传与齐备/取消齐备原位刷新;页面与共享组件使用真实代码,仅网络边界替身,不写真实数据库。
  • 浏览器验证边界:筛选断言验证真实前端序列化及配对展示,替身没有重做后端全部列筛选算法;PDF校验请求、弹层和尺寸,不代表微信内核原生PDF渲染已验收;二维码图片使用本地替身,不访问真实二维码服务。
  • 截图:/tmp/shanxia-plan-cert-e2e/ 下 list-375/414.png、filters-375/414.png、detail-375/414.png、upload-375/414.png、attachment-preview-375.png、feedback-preview-414.png。已人工检查,预览和下载互不覆盖。
  • pnpm build:本次独立详情阶段 fresh 通过(4943 modules,38.13秒);仍有既有组件重名和包体积警告。
  • pnpm exec eslint src/views/m/pl/plan-cert scripts/mp-pl-plan-cert-entry.test.mjs scripts/mp-pl-plan-cert-fixture.mjs scripts/test-mp-pl-plan-cert.mjs、目标 Stylelint 与 Prettier:通过。
  • pnpm exec vue-tsc --noEmit:仍被仓库大量既有错误阻断;过滤输出未发现本目标路径诊断。总目标收尾将重新生成统一基线证据。
  • 图谱更新延后到 CRM 六页代码全部完成后统一执行,避免共享脏工作区并发覆盖。

变更隔离与审查

  • 规格审查发现并修复本模块的快捷日期facet上下文、筛选选中文字遮挡、产品品牌别名、合同关联补全及反馈附件触达区域问题;复审通过。
  • 本轮独立详情审查继续发现并修复 Teleport 弹层未命中详情页约束、编辑态附件操作命中区重叠、只读权限空底栏、旧票根/旧自定义顶部样式残留、顶部 Tab/筛选未 full-bleed、E2E 强制退出等问题;永久断言先复现后转绿。
  • 最终复审继续校准附件:保持 72×72 发票夹式卡片,删除角标与下载入口各自保留 44×44 且互不重叠,不再出现可见操作底栏;权限失败与只读提示移至详情 Tab 后,且无写权限时不渲染底部操作区。
  • 入口/菜单SQL独立规格和质量审查通过;菜单权限测试改为精确检查 Web m.perms = 'pl:plan-cert:list',避免误匹配移动权限字符串。
  • 以下8个文件SHA256与本次实施前一致:Web危化品列表及列筛定义、Web证书上传弹窗、共享危化品检查、后端计划路由及计划服务、既有移动运输详情、共享 mp-webview.scss。
  • 继续使用用户确认的当前 V1.5 工作区,保留全部原有修改;未提交、推送、合并或清理用户文件。

数据库与发布

  • 无业务表结构或模型迁移。
  • 菜单脚本:docs/sql/migrations/2026-10-17-mini-pl-plan-cert-webview-menus.sql。
  • 菜单 SQL 已在测试库执行;生产库未执行。角色仍需保留对应 Web 上传/齐备业务权限,本脚本不扩大这些写权限。
  • 首次发布仍需要部署 H5、发布带新入口的小程序包。生产库 SQL 需另行授权,执行前核对父菜单并备份菜单及授权表。
  • 尚未进行微信真机验证、部署或发布;模拟浏览器验证不能替代这些步骤。

测试库执行记录(2026-10-17,用户后续授权)

  • 目标:backend/.env 对应的 47.99.164.66:3306 / shanxia2.0,MySQL 5.7.36;未连接生产库写入。
  • 执行前确认移动父链 1 → MINI_PL_ROOT 唯一、目标菜单尚不存在、两张目标表均为 InnoDB。
  • 执行前完整备份 sys_menu 255行、sys_role_menu 1375行至本机临时文件 /var/folders/v5/ylmpvkjd4zxcf20pzbys3stc0000gn/T/shanxia-plan-cert-menu-backup-zu0_vlar/before.json,目录权限700、文件权限600。备份不包含数据库密码。
  • 事务新增1个“危化品证上传”移动菜单(ID 329823eb-e3af-49b2-b656-08f2c2a713f3,权限 mini:pl:plan-cert:list),新增5条角色菜单绑定:管理员、销售主管、销售计划员、销售实录员、销售办证员。父级授权原已完整,无需新增。
  • 提交前核对所有已有菜单行未改、授权变化仅为上述5条移动叶子绑定;无SQL警告,未修改业务表或Web权限。
  • 事务提交后通过新数据库连接复核:菜单启用且可见、5角色各有唯一有效叶子绑定、移动根和运输父级授权链完整,验证通过。