Files
shanxia2.0/docs/superpowers/plans/2026-10-25-mobile-dispatch-calendar.md
T

9.3 KiB
Raw Blame History

小程序 H5 派车日历实施计划

目标: 在小程序运输管理中新增派车日历入口,按已确认的手机设计实现日期纵向列表。

架构: 复用通用 mp-webview 容器、一次性换票登录、现有运输计划 API 和桌面日历纯数据模型。新增 /m/pl/dispatch-calendar 独立移动页面,不嵌入桌面月历,不新增业务写接口。模式选择 P27(业务派生视图),壳/导航参考 web-admin/src/views/m/pl/plan-cert/index.vue,日历布局以已确认手机原型为准。

工作区: 沿用当前 codex/mobile-eight-pages-qa 开发分支及已有未提交的日历模型;不复制/重置其他在途修改。

实施与验收

  • 编写 web-admin/scripts/mobile-dispatch-calendar.test.ts:日期升序、只展示任务日期及定位空日期、车辆过滤、计划去重、送货段合并。先运行确认新增模型尚不存在,再实现 views/m/pl/dispatch-calendar/model.ts。
  • 新建 index.vue / calendar.scss:统一整页滚动,日期内车辆单列;车牌醒目,任务紧凑 2px 间距;月份切换、车辆筛选、日期定位、今天;合计底部弹层。保留客户简称及别名;不显示司机、不提供编辑。
  • 处理鉴权就绪后加载、请求过期丢弃、切月失败重试、空月/空日、会话切换清理;复用 loadMonthPlans 拉完整月数据。
  • 在 staticRoutes.ts 注册移动路由;启动标题直接使用 MpWebviewShell.vue 已有 route.meta 回退,不需要更改共享壳;miniprogram/config/workbench-menus.js 增加运输管理菜单,config/api.js 指向通用 H5 壳。
  • 新增 docs/sql/migrations/2026-10-25-mini-dispatch-calendar-menu.sql,追加 SQL 基线。只给已有运输计划/日历查看角色补移动入口和祖先菜单,不新增业务写权限、不恢复软删除授权。检查目标菜单树后执行并核验重复执行无新增。
  • 增加浏览器验证 scripts/test-mobile-dispatch-calendar.mjs:模拟换票,真实页面在 375/320px 无横向溢出/日内滚动,汇总、筛选、日期、跨月、失败重试;桌面模型回归。
  • 对改动运行格式/lint、构建及类型检查(区分仓库既有错误);检查小程序路由映射,更新前端、小程序和根知识图谱;记录结果及发布边界。

发布需要更新 H5 资源和小程序包;本任务完成开发与验证,不将本地构建描述为已发布微信。

验证记录(2026-10-25)

  • 模型测试:pnpm exec tsx --test scripts/mobile-dispatch-calendar.test.ts scripts/pl-dispatch-calendar.test.ts,21 项通过。
  • 浏览器:node scripts/test-mobile-dispatch-calendar.mjs 通过。使用模拟换票和计划接口,运行真实 Vue 页面;覆盖 320/375/414px、密集日期 13 辆车、送货段合并/去重、筛选、定位空日、空月、失败重试、快速切月旧响应丢弃和返回工作台。未声明微信真机联调完成。
  • ESLint、Prettier、Stylelint 通过;pnpm build 成功(45.55s)。vue-tsc --noEmit 仍有 509 项仓库既有错误,新增派车日历文件 0 项。
  • HBuilderX 发布 CLI 因未登录未执行;使用本机配套 uni-app 编译器及其依赖完成 mp-weixin 本地编译,产物 /tmp/mobile-calendar-mp-weixin。核对产物 config 中存在新菜单、权限码和 H5 路径,通用页面编译为原生 web-view。既有 uniCloud、统计 Appid、旧选择器警告未改动。没有上传微信。
  • 菜单迁移在当前配置数据库运行两次,均为 1 个新菜单、6 个角色授权,所有角色均具备移动根与运输目录祖先授权;执行前备份 /tmp/mobile-calendar-menu-backup-20261025.json(权限 600)。
  • 独立代码审查无阻断项;前端、小程序和根知识图谱更新完成。
  • 发布时需部署 H5 并重新编译/发布小程序包(当前 miniprogram 环境为 local,未擅自修改环境配置);首次入口上线后才可从正式微信菜单访问。

后续调整:Vant 选择器和默认折叠(2026-10-25)

  • CalendarPickers.vue 使用 Vant Field + Popup + Picker 选择车辆,月份/定位日期使用 DatePicker,确认才提交草稿,取消保持原条件;输入区域、图标与键盘 Enter 均可打开弹层。
  • 日期改用 Vant Collapse,进入页面及切月/车辆筛选后默认全部折叠;日期定位仅定位,点击标题展开明细。合计按钮独立打开汇总,不触发折叠状态变化。
  • 浏览器回归覆盖选择器确认/取消、月份两列、日期三列、默认折叠、点击合计不展开及 320/375/414px 布局,通过;模型测试 21 项通过,ESLint/Stylelint/Prettier 通过。
  • H5 生产构建通过(59.46s);全仓类型检查仍为既有问题,派车日历文件无类型错误。只调整 H5 页面,无需更改菜单授权或小程序原生壳。

每日自有车辆筛选(2026-10-25)

  • 后端新增日历只读 calendarVehicleType:匹配当前车辆的安排运输快照优先;无有效快照的旧记录按车辆 ID 补查,缺 ID 才按车牌精确补查。查询限定当前租户和未删除车辆;未知类型不算自有。沿用已授权计划列表,不新增业务写接口或表。
  • 共享日历模型新增 filterVehicleScope,每天默认 self,all 包含承运商及未知车辆。合计/货品汇总/打印与当天筛选结果一致;保留仅有承运商的日期,以便切换全部。
  • Web 日格和小程序展开后的日期内容区各增加两个独立按钮;每一天的选择互不影响。切月恢复默认;顶部车辆检索仍与每日条件共同生效。
  • 小程序“今天”按钮的内容容器和文字显式水平、垂直居中。
  • 验证:先新增前后端失败用例,再实现;回归旧日历测试、双端实际页面的独立切换与汇总,以及窄屏布局。检查类型、构建和代码审查后更新知识图谱。
  • 每日归属筛选验证结果:后端 11 项、前端模型 23 项通过;双端独立日期切换与合计回归通过。Today 文案偏移来自 Vant 空白伪元素参与 gap,清除纯文字按钮 gap 后 320/375/414px 居中断言通过。构建与图谱更新完成,无数据库结构变更。

单行筛选及汇总入口调整(2026-10-25)

  • 小程序移除日期筛选,月份、今天、车辆单行展示。月份点击 Vant DatePicker 选择(不再占用顶部空间展示左右切月按钮);今天仍定位当前日。车辆 Vant Picker 内加入 Search,按车牌子串匹配、忽略大小写及首尾空格;空结果提示,确认不会误选全部;取消保持原值。
  • 日期默认折叠不变。标题只显示日期、星期和静态车次,整条标题仅负责展开收起;合计入口移至展开内容区,与山峡车辆、全部并排,弹出汇总不改变折叠状态。
  • Web 每日范围筛选与合计同一行、等高,窄日格图标在文字上方;通过局部样式清除组件默认图标后间距,避免文字不必要换行。打印隐藏整行操作区,保留当天统计。
  • 浏览器验证:移除日期控件、搜索命中/无结果/取消/确认、独立日期筛选及合计、默认折叠、月份、今天、错误重试、快速切月、打印、七列无横向溢出;移动 320/375/414px 三项同排且触达高度 44px,今天居中。双端通过,使用模拟业务接口,未声明微信真机或生产部署完成。
  • 共享模型 23 项通过;局部 ESLint、Stylelint、Prettier 通过。全仓 vue-tsc 仍为既有 509 项错误,本轮派车日历文件无错误。只读复查无阻断项。
  • 最终生产构建成功(55.18s);前端和根知识图谱更新完成。浏览器脚本显式关闭 context,双端测试均正常退出(exit 0)。

标题车次可点与复制入口(2026-10-25)

  • 按最新要求,标题中的静态车次改为深绿色白字按钮,数字加大加粗;点击打开当日汇总,阻止 click/keydown/keyup 冒泡,保持日期原有折叠状态。按钮最小触达 44px,右侧留间隔避开展开箭头;标题可换行适应窄屏。
  • 展开内容的合计按钮改为 Vant「复制」,位于全部右侧;使用与 Web 相同的日计划文本函数和剪贴板工具。当前日期车辆范围与顶部车辆筛选共同作用于复制结果,0 车次禁用;按点击当日计算明日/后日/运输计划标题,成功与失败有提示。
  • 仅调整 H5 日历,未改原生壳、接口或授权。
  • 增加浏览器断言:标题为按钮,折叠/展开时查看汇总、键盘查看均不切换折叠;原合计入口消失;复制仅当前筛选车辆、明日标题、空结果禁用、失败反馈;320/375/414px 触达尺寸及与箭头间距。
  • 先验证旧标题 SPAN 不能通过新按钮断言,再实现。共享模型与复制格式共 26 项通过;只读复查无阻断项。
  • 最终浏览器回归通过(含真实剪贴板及失败场景),ESLint/Stylelint/Prettier 通过;生产构建成功(1m 4s)。全仓类型检查仍为既有 509 项问题,日历及复制文件无错误;未发布微信或生产环境。

车次数改为普通文字按钮(2026-10-25)

  • 按最新反馈移除车次数绿色背景和图标,字号/字重与日期标题统一为 17px/600,文字颜色继承标题;数字不单独放大。
  • 保留 44px 点击区域、与展开箭头间隔、点击汇总及阻止折叠事件冒泡;复制入口不变。