3d6e297147
- 保险记录批量导入时,前端读取 Excel 并规范日期格式为 YYYY-MM-DD,兼容多种日期写法 - 重写 `handleImport` 支持自定义上传逻辑,调用归一化处理后再上传文件 - 添加日期归一化相关方法,确保不合法或已标准格式保持原值 - 设备台账界面新增批量删除按钮及相关逻辑,支持多选数据批量删除并提示确认 - 补充导出含创建时间和更新时间的后端修复说明,避免导出时间字段为空问题 - 说明后端导出分配逻辑,强调导出字段由后端控制,前端修改导出列无效
5.5 KiB
5.5 KiB
2026-09-17 工作日志
运单管理详情:打卡时间轴改为按打卡顺序展示
- 文件:
src/views/business/components/waybill-manage-page.vue(详情页「执行详情 → 打卡详情」tab) - 需求:时间轴不再固定按流程节点顺序(发货/在途/到货/卸货/签收/回单),改为按打卡时间先后展示。
- 实现(不改后端、不改原始数据):
- 新增 computed
orderedWaybillPunchRecords:映射出punchedAt(毫秒时间戳)后排序 —— 已打卡记录按打卡时间升序排在前,未打卡记录保持后端返回的节点顺序排在其后;时间相同用原索引稳定排序。 - 新增 method
waybillPunchRecordTimestamp(record):punched === false或statusName === '未打卡'直接返回 null(防止后端返回计划时间造成误序);优先this.$dayjs(text).valueOf(),失败兜底new Date(text.replace(/-/g,'/'))(兼容 Safari)。 - 模板
el-timeline的v-for改用orderedWaybillPunchRecords;key由record.nodeCode || record.id || index改为${nodeCode||id||'punch'}-${index},避免同节点多次打卡(在途)时 key 重复。
- 新增 computed
- 校验:项目根目录临时脚本
_verify-sfc.mjs(@vue/compiler-sfc parse + compileScript + compileTemplate)通过,已删除脚本。 - 注意:
getPunchRecords(src/api/business/waybill-manage.js→/punch-records)后端未提供节点排序字段,排序只能在前端做。
保险记录批量导入:前端归一化日期格式
- 文件:
src/views/vehicle/insurance-record.vue(仅此一个文件) - 背景:保险记录批量导入是后端驱动——前端
handleImport经importBlob把原始 Excel 直接 POST 到/blade-transport/insurance-record/import-insurance-record,前端不解析行。后端只认2026-09-01,2026-9-1导入失败。 - 决策:用户选择前端归一化(不动后端)。把
openImportDialog改为自写httpRequest:用xlsx读取 Excel → 把日期列(开始日期/结束日期/开票日期)2026-9-1归一为2026-09-01→ 重写成新 File 再交给handleImportExcel上传;复用其失败明细下载与成功刷新逻辑。无日期列时回退为原文件(行为不变)。 - 关键方法:
normalizeExcelDates/readExcelRows/writeExcelFile/normalizeDateString(正则^(\d{4})[-/.年](\d{1,2})[-/.月](\d{1,2})日?$,用new Date校验合法性后补零;非法/已标准格式返回 null 保持原值)。 - 校验:本机 dev(localhost:2889)待用户部署自测。注意所有单元格经
sheet_to_json(raw:false)后均为字符串,与 transport-plan-import 的客户端解析模式一致。
车/船务模块导出 xlsx「创建时间/更新时间」为空(后端 tms-api 修复)
- 现象:
/vehicle/insurance-record批量导出的 xlsx 里「创建时间」「更新时间」两列空白,「更新人」有值。用户要求车/船务模块所有页面统一修。 - 定位:导出由后端生成(前端只传查询参数,
exportColumns参数后端未使用)。实测~/Downloads/保险记录2026-09-17 20_46_08.xlsx:K/M 列单元格无<v>节点(值 null),E/F/J 日期列是数值 46266.0(带 numFmtyyyy-MM-dd,WPS 显示为日期)。 - 根因:Service 用 BladeX
org.springblade.core.tool.utils.BeanUtil(继承 SpringBeanUtils)做copyProperties。实体TenantEntity.createTime/updateTime是java.util.Date,导出类字段是java.time.LocalDateTime→ Spring BeanUtils 类型不兼容静默跳过,值为 null。而「更新人」是手动UserCache.getUserRealName(...)赋值的,所以有值。(Hutool 的 BeanUtil 能转 Date→LocalDateTime,但本项目用的是 BladeX 版本,不能。) - 佐证:项目里正常的导出(Waybill / LoadingManage / CustomerArchive / CommonCargo)时间字段一律用
java.util.Date,并在 Service 里手动excel.setCreateTime(record.getCreateTime())。 - 修复(后端仓库
/Users/gxwebsoft/JAVA/tms-api,blade-transport 模块):在 13 个导出方法里补显式赋值(Date→LocalDateTime 用 BladeXDateUtil.fromDate,Func.isEmpty判空),不改 Excel 类字段类型(避免影响自定义 converter 与导入模板)。excel.setCreateTime(Func.isEmpty(x.getCreateTime()) ? null : DateUtil.fromDate(x.getCreateTime())); excel.setUpdateTime(Func.isEmpty(x.getUpdateTime()) ? null : DateUtil.fromDate(x.getUpdateTime())); - 涉及文件(13 个 Service + 1 新建 Excel 类 + 设备台账 controller/接口):InsuranceRecord / ViolationRecord / MaintenanceRecord / MaintenancePlan / TireReplacementRecord / AccidentRecord / AnnualInspectionRecord / MileageRecord / TransportChangeRecord / EtcRecord / OilElectricRecord / OtherExpenseRecord / EquipmentLedger。
- 设备台账特殊:原
EquipmentLedgerExcel根本没有审计列(前端列表有),新建EquipmentLedgerExportExcel extends EquipmentLedgerExcel(创建时间/更新人/更新时间),导出链路改用新类,导入模板仍用旧类不受影响。 - 未验证:本机无 mvn(仅 IDEA 内置),且离线模式缺
blade-bom无法编译;用 javap 确认DateUtil.fromDate(Date)存在 + 逐行 grep 复核代替。需用户在 IDEA 里编译并重新部署后自测。 - 同类隐患(本次未改,其他模块):TemporaryCreditLimit、ProcessConfig、CommonRoute、CommonAddress、ContractManage、ProjectApply、ShippingTemplate 的导出 Excel 也是 LocalDateTime 且未手动 set 时间。