From b57f010af2a700bcbc1af25d8ee94898022a24a5 Mon Sep 17 00:00:00 2001 From: zch Date: Mon, 27 Apr 2026 16:10:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=BD=AE=E8=83=8E=E8=AF=A6=E6=83=85):=20?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E8=BD=AE=E8=83=8E=E8=AF=A6=E6=83=85=E9=A1=B5?= =?UTF-8?q?=E4=B8=BA=E6=8A=BD=E5=B1=89=E5=BC=8F=E5=B8=83=E5=B1=80=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=9F=E5=91=BD=E5=91=A8=E6=9C=9F=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构轮胎详情页为右侧抽屉式布局,提升用户体验和操作流畅性: - 复用pdaQueryTyreTimeLine,直接让tyreDetil2接口使用 baseTyreService.pdaQueryTyreTimeLine(baseTyre),接收BaseTyre返回Map resultMap。 - 重构前端调用接口接收数据 主要变更包括: 1. 将详情页改为抽屉式设计,保持列表上下文不丢失 2. 优化生命周期记录展示,区分出入库和装卸车记录 3. 新增标准气压字段并展示在基础信息中 4. 简化控制器逻辑,复用PDA查询接口 5. 增强移动端适配和交互体验 --- .../controller/tyre/BaseTyreController.java | 97 +--- .../templates/tyre/tyre/statDetail.html | 3 +- .../templates/tyre/tyre/typreDetill2.html | 542 ++++++++++-------- .../resources/templates/tyre/tyre/tyre.html | 128 ++++- .../com/ruoyi/system/domain/BaseTyre.java | 3 + .../service/impl/BaseTyreServiceImpl.java | 5 +- .../resources/mapper/tyre/BaseTyreMapper.xml | 14 +- 7 files changed, 437 insertions(+), 355 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java index a9223211..9407413c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java @@ -404,100 +404,19 @@ public class BaseTyreController extends BaseController return getDataTable(list); } - @GetMapping("/detail2/{tyreId}") - public String tyreDetil2(@PathVariable("tyreId") Long tyreId, Model model) + @GetMapping("/detail2") + public String tyreDetil2(BaseTyre baseTyre, Model model) { - // 1. 根据 ID 查询轮胎数据 - BaseTyre tyre = baseTyreService.selectBaseTyreById(tyreId); - if (tyre == null) { - // 处理未找到轮胎的情况 + if (baseTyre == null || (baseTyre.getTyreId() == null && StringUtils.isBlank(baseTyre.getKeyParam()))) { return "error/404"; } - model.addAttribute("tyre", tyre); - // 用最少规则给详情页一个当前状态展示,避免页面出现完全空白的核心业务信息。 - model.addAttribute("tyreStatusText", StringUtils.isNotBlank(tyre.getCarNo()) ? "在车" : "在库"); - // 2. 查询并整合所有记录 - List timelineItems = new ArrayList<>(); - - // --- 2.1 查询并转换入库记录 --- - RecordWarehousing warehousingQuery = new RecordWarehousing(); - warehousingQuery.setTyreRfid(tyre.getTyreEpc()); - List warehousingList = recordWarehousingService.selectRecordWarehousingList(warehousingQuery); - if (warehousingList != null) { - for (RecordWarehousing item : warehousingList) { - TimelineItem timelineItem = new TimelineItem(); - timelineItem.setId(item.getId()); - - // 核心修改:根据 type 字段判断是入库还是出库 - if (item.getType() != null && item.getType().equals("1")) { - // 1 代表 出库 - timelineItem.setTitle("轮胎出库:"+item.getCreateBy()); - timelineItem.setIcon("fa-sign-out"); // 或者是 fa-truck (卡车图标) - timelineItem.setColor("warning"); // 橙色/黄色,代表离开 - timelineItem.setTime(item.getCreateTime()); - } else { - // 0 代表 入库 (默认情况) - timelineItem.setTitle("轮胎入库:"+item.getCreateBy()); - timelineItem.setIcon("fa-sign-in"); // 或者是 fa-inbox (盒子图标) - timelineItem.setColor("primary"); // 蓝色,代表进入 - timelineItem.setTime(item.getCreateTime()); - } - - timelineItem.setType("warehousing"); - timelineItem.setDetail("仓库:" + "轮胎仓库"); // 如果有仓库名称字段,可以替换 "轮胎仓库" - - - timelineItems.add(timelineItem); - } + // 与 PDA 时间线接口保持同一个 service 返回结构;列表页传 tyreId,PDA 仍可传 keyParam。 + Map resultMap = baseTyreService.pdaQueryTyreTimeLine(baseTyre); + if (resultMap == null || resultMap.isEmpty()) { + return "error/404"; } - - // --- 2.2 查询并转换安装记录 --- - RecordTyreInstall installQuery = new RecordTyreInstall(); - installQuery.setTyreRfid(tyre.getTyreEpc()); - List installList = recordTyreInstallService.selectRecordTyreInstallList(installQuery); - if (installList != null) { - for (RecordTyreInstall item : installList) { - TimelineItem timelineItem = new TimelineItem(); - timelineItem.setId(item.getId()); - timelineItem.setTitle("轮胎安装:"+item.getCreateBy()); - timelineItem.setType("install"); - timelineItem.setDetail("车辆:" + item.getCarNo() + " | 轮位:" + item.getWheelPostion()); - timelineItem.setTime(item.getCreateTime()); - timelineItem.setIcon("fa-car"); - timelineItem.setColor("success"); - timelineItems.add(timelineItem); - } - } - - // --- 2.3 查询并转换检查记录 --- - RecordCheck checkQuery = new RecordCheck(); - checkQuery.setTyreRfid(tyre.getTyreEpc()); - List checkList = recordCheckService.selectRecordCheckList(checkQuery); - if (checkList != null) { - for (RecordCheck item : checkList) { - TimelineItem timelineItem = new TimelineItem(); - timelineItem.setId(item.getId()); - timelineItem.setTitle("轮胎检查"+item.getCreateBy()); - timelineItem.setType("check"); - timelineItem.setDetail(buildCheckDetail(item)); -// timelineItem.setDetail("深度:" + "17.8mm"); - timelineItem.setTime(item.getCreateTime()); - timelineItem.setIcon("fa-check-circle"); - timelineItem.setColor("warning"); - timelineItems.add(timelineItem); - } - } - - // --- 2.4 按时间排序 (最新在最上面) --- - timelineItems = timelineItems.stream() - .sorted(Comparator.comparing(TimelineItem::getTime, Comparator.nullsLast(Comparator.reverseOrder()))) - .collect(Collectors.toList()); - - // 3. 传给前端 - model.addAttribute("timelineItems", timelineItems); - - // 库存盘点链路统一切到新版详情模板,保留旧模板文件给其他场景继续观察或回退。 + model.addAttribute("resultMap", resultMap); return prefix + "/typreDetill2"; } diff --git a/ruoyi-admin/src/main/resources/templates/tyre/tyre/statDetail.html b/ruoyi-admin/src/main/resources/templates/tyre/tyre/statDetail.html index f56ed5d6..3dc6ed7a 100644 --- a/ruoyi-admin/src/main/resources/templates/tyre/tyre/statDetail.html +++ b/ruoyi-admin/src/main/resources/templates/tyre/tyre/statDetail.html @@ -200,7 +200,8 @@ } function openTyreDetail(tyreId, tyreNo) { - var url = prefix + "/detail2/" + tyreId; + // tyreDetil2 直接接收 BaseTyre,库存盘点页按 tyreId 参数绑定,避免再走旧路径。 + var url = prefix + "/detail2?tyreId=" + encodeURIComponent(tyreId); // 先在当前 iframe 上下文创建页签,确保 createMenuItem 能拿到 frameElement; // 然后再关闭弹窗,避免出现“只关窗不跳转”的问题。 $.modal.openTab("轮胎详情-" + tyreNo, url); diff --git a/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html b/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html index f4bfa38c..e5e58b72 100644 --- a/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html +++ b/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html @@ -3,365 +3,397 @@ - -
-
-
+ +
+
+
-
胎号:-
-
-
所在车辆:-
-
所属公司:-
-
所属修理厂:-
-
所属车队:-
+
胎号:-
+
+ RFID:- + / + 自编号:-
- -
- - - +
+ 在库/待入库 +
-
-
-
-
基本信息
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
胎号-轮胎自编号-
RFID标签-轮胎品牌-
轮胎花纹-轮胎层级-
轮胎规格-
+
+
基础档案
+
+
+
轮胎品牌
+
-
- -
-
状态信息
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
轮胎类别-初始花纹深度(mm)-
当前车辆-当前轮位-
+
+
轮胎规格
+
-
- -
-
其他
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RFID-入库时间-
备注-
+
+
轮胎层级
+
-
+
+
+
轮胎花纹
+
-
+
+
+
轮胎类别
+
-
+
+
+
初始花纹深度
+
-
+
+
+
标准气压
+
-
+
+
+
建档时间
+
-
+
-
-
-
- 生命周期 - 按时间倒序展示 -
-
    -
  • - -
    -
    -
    轮胎入库
    -
    -
    -
  • -
-
- 暂无生命周期记录 -
+
+
当前位置
+
+
+
所属公司
+
-
+
+
修理厂
+
-
+
+
+
车队
+
-
+
+
+
当前车辆
+
-
+
+
+
当前轮位
+
-
+
+
+
创建人
+
-
+
+
+
备注
+
-
+
+
+
+ +
+
生命周期
+
+ 出入库记录:0 + 装卸车记录:0 +
+ +
+
出入库流转
+
    +
  • + +
    +
    轮胎入库
    +
    -
    +
    +
    +
    操作人:-
    +
    RFID:-
    +
    品牌:-
    +
    规格:-
    +
    备注:-
    +
    +
  • +
+
+ +
+
装卸车流转
+
    +
  • + +
    +
    轮胎安装
    +
    -
    +
    +
    +
    操作人:-
    +
    车辆:-
    +
    轮位:-
    +
    里程:-
    +
    花纹深度:-
    +
    车队:-
    +
    备注:-
    +
    +
  • +
+
+ +
+ 暂无生命周期记录
-