8.6 KiB
派车日历接入实施计划
用户已确认独立 HTML 的最终设计并授权接入 Web 运输管理,位于库存管理之后。
目标:新增 /pl/calendar-module/dispatch-calendar,真实运输计划月历,只读、不新增业务表。
模式:P27 衍生业务视图;参考 web-admin/src/views/pl/plan/index.vue 的数据读取、web-admin/src/views/demo/unit/index.vue 的面板/控件。日历主体遵循本次批准的原型。
实现:Vue 3 + Element Plus + Fresh Mint;沿用 planApi.list 的租户与数据范围。
- model.ts:日期生成、整月分页加载、计划转任务、货品去重计次、车辆/司机交集筛选;先写行为测试验证跨年、闰月、多货品和分页。
- index.vue / calendar.scss:月份切换、日期定位、车辆司机筛选、刷新/重置/打印,月历完整周,车辆最多2列;车牌突出;不显示车辆车次/司机副标题;每日汇总透明底边框,文字数量展示。
- 路由放在 PlStockModule 后,菜单权限 pl:dispatch-calendar:list,显式日历图标。补充可幂等执行的菜单 SQL;仅沿用已有运输计划查看角色及 Web 祖先。
- 验证行为测试、定向 lint、类型检查/构建、浏览器布局、菜单位置与真实数据。进行独立代码审查。
- 按要求增量更新前端和根知识图谱。
数据规则:按 planDate(不使用 createDate 兜底)分日;排除 draft/cancelled;一计划一车次;同一计划同一货品仅计一次,混装货品分别计入各货品次数;司机选项不暴露电话等无关信息。没有司机/车辆分别提供缺失项筛选。
加载:按月边界请求,每页500,完整读取所有分页;失败不显示部分月份;快速切月用请求序号防止旧响应覆盖新月份。打印克隆当前筛选的月历到隔离 iframe,避免打印后台侧栏。
当前目录含其他未提交工作,所有改动仅增量添加,不重置或格式化已有业务修改。原型文件保持独立,不向仓库导入示例数据。
验证记录:8项行为测试通过,浏览器回归覆盖菜单、真实组件的筛选/切月/两列布局和异常重试;菜单迁移已在当前 backend/.env 配置库执行,新增目录和页面各1条、5个已有运输计划角色的目录/页面关系共10条。独立审查通过。全量 vue-tsc 仍有509项其他模块既存错误,新增日历文件0项;生产构建通过。前端与根知识图谱已完成增量更新(超出可视化节点上限,仅更新 JSON 和报告)。生产包浏览器验证另覆盖隔离打印及打印后 iframe 清理。
2026-10-25 用户确认后的界面精简
- 删除检索控件上方标签和司机筛选,只保留月份、日期定位、车辆筛选。
- 本日历按用户指定使用原设计蓝色
#1f4e79,同时覆盖专属日期/车辆弹层,不改变其他页面主题。 - 日历请求通过
includeCustomerShortNames=1获取只读calendarRoute;对已授权运输计划引用的客户批量读取同租户且未删除的简称,空简称回退全称,无客户关联保留计划名称。 - 多站路线按站点顺序展示;装货段自身名称优先于遗留供方,避免错误替换路线实体。
- 验证补充:简称及全称回退、租户/软删除边界、无关联客户、供应方与装货站点差异;浏览器检查标签/司机条件移除和蓝色配色。
多任务日自适应列数
- 按当天车辆组/货品种类数量选择目标列数:0~1 项一列,2~5 项两列,6 项及以上三列。
- 每个星期列按本月最繁忙日期设置最小宽度(156 / 304 / 452px),标题与日期同步对齐,桌面容器不足时横向滚动。
- 日格内容宽度达到 280px 使用两列,420px 使用三列;窄屏按实际宽度降列,打印保留七天等宽避免横向裁切。
- 保留完整车次、醒目车牌、蓝色配色、透明总计区域;验证普通/繁忙日期和筛选后的布局。
七天完整展示与车辆按车次数排序(取代繁忙日期加宽方案)
- 桌面七天固定等宽,取消按数据量设置最小列宽,日历无横向滚动。
- 保留每车一张卡,车辆按当天车次数从多到少稳定排序,车内任务顺序不变。同排卡片外框对齐。
- 每天日期下方仅一个纵向滚动区,最高 460px;卡片按实际可用宽度选择一至三列,不能挤宽七天。
- 货品和路线各预留两行,悬停查看完整文字;打印解除高度与行数限制,输出完整任务。
- 验证繁忙日七列等宽、无横向溢出、不同车次数卡片倒序排列且同排对齐,窄屏和打印不丢数据。
去除日格滚动与汇总按钮弹出
- 每天内容不限制高度、不单独滚动;保持七天等宽、自适应内部列数及车辆车次倒序,只使用月历整体纵向滚动。
- 每日货品汇总收为「合计 N 车次」按钮,点击显示带日期的货品汇总浮层,点击外部关闭。
- 浮层沿用蓝色配色;正常日历只展示按钮和车辆卡片,减少常驻内容高度。
- 打印保留完整每日汇总和全部车辆任务;共享 CalendarSummary 组件防止屏幕与打印统计不一致。
- 验证按钮开关、统计内容、日格无独立滚动、七列无横向溢出、排序和打印。
相同任务合并显示车次
- 同一天、同一车辆下,货品组合(含名称/规格显示)及完整路线相同的计划合并为一条任务,显示 N 车次。
- 不合并不同货品或相反方向路线;货品组合的先后顺序不影响合并。
- 保留原计划用于每日合计、货品汇总与车辆排序;合并卡片悬停可查看所有计划编号。打印与页面采用相同合并结果。
先拆送货段,再合并展示(替代整计划串联路线)
- 每个运输计划的送货段分别生成“装货地 → 当前送货地”,仅展示该送货段货品;多段缺货品时不借用全计划货品。
- 后端显式日历请求为装货/送货段分别返回只读 calendarCustomerName,保留客户简称规则与原始客户字段。
- 同车同日相同货品、装货及送货客户/地址的段再次合并;不同送货地址不会误并。
- 用户确认保持一个计划一车次:顶部合计与货品汇总按不同计划去重;合并明细额外记录段数,段数大于车次时显示“1车次 / 2段次”。
- 原始段、段序及货品归属不变;无结构化送货段的旧计划保持一条,单段缺货品可回退计划货品。
- 验证一计划三段分别对应货品及收货方、相同段再合并、总车次不膨胀、简称/全称回退与租户隔离。
Web 日计划复制(2026-10-25)
- 每个本月日格操作行最右添加带图标的「复制」,与山峡车辆、全部、合计同排;无当前可见任务、加载中或加载失败时禁用。
- 只复制当前日格过滤后的任务,按车辆一行,格式「• 车牌 / 货品 起点 - 终点 / 其他任务 / 计划备注」。沿用简称、货品别名、车辆排序与任务合并;合并多车次和同计划重复段保留数量,真实备注压为单行并去重,不补造截图示例内容。
- 点击时读取当前日期,以日历天差判断:明天「明日计划」、后天「后日计划」,其余(含今天、过去日期)「运输计划」,附 MM.DD。跨月/跨年/闰日同样适用。
- 复用剪贴板工具,成功或失败明确提示,不发起消息发送。打印继续隐藏整个操作行。
- 测试先验证缺少 formatter 时失败,再实现;新增标题边界、文本格式/简称/备注/筛选、送货段合并三项测试,连同已有模型共 26 项通过。浏览器验证真实剪贴板、筛选、日期标题、空日禁用、复制失败及四按钮同行/七列无横向溢出。
- 最终验证:26 项模型测试、浏览器完整回归(含真实剪贴板读取、明后日标题、按日范围复制、失败提示及四按钮同排)、ESLint/Stylelint/Prettier 均通过;生产构建成功(52.82s)。全仓类型检查仍为既有 509 项问题,派车日历及复制文件无错误。只读代码复查无阻断项。
合计移到日期标题栏(2026-10-25)
- 将原合计按钮及货品汇总浮层入口移到每天标题栏正中间,日期在左、星期在右;保留当前筛选统计及点击汇总功能。
- 下方仅山峡车辆、全部、复制三按钮,复制仍最右。打印保留原完整统计,窄列不撑宽七天。
- 浏览器验证合计位于标题容器正中且不与日期/星期重叠,三按钮同排;统计弹层、筛选、复制、打印与窄屏回归通过。