change:按照要求修改

- 车辆生命周期点击维保记录跳转该记录的详情页,而不是列表页
- 装卸车流转的轮胎安装的里程改名为车辆里程
master
zch 2 days ago
parent 29c115b2a1
commit 2c7779ab55

@ -247,12 +247,28 @@
$("#lifecycleFrame").attr("src", "about:blank");
}
function openMaintenanceOrderTabFromLifecycle() {
// 子 iframe 不直接创建页签:由车辆列表页所在主 iframe 调用 RuoYi openTab才能正确挂到后台页签容器。
$.modal.openTab("维保工单列表", ctx + "tyre/order");
function openMaintenanceOrderDetailTabFromLifecycle(orderId, orderNo) {
var normalizedOrderId = $.common.nullToStr(orderId);
if (!/^\d+$/.test(normalizedOrderId)) {
// 子 iframe 传来的主键只作为导航参数使用,父页再校验一次避免拼接异常详情地址。
$.modal.alertWarning("工单ID无效无法打开维保工单详情");
return;
}
var tabTitle = buildMaintenanceOrderDetailTitle(orderNo);
// 页签必须由车辆列表所在主 iframe 发起RuoYi 才能把详情页挂到后台主框架,而不是抽屉 iframe 内部。
$.modal.openTab(tabTitle, ctx + "tyre/order/edit/" + encodeURIComponent(normalizedOrderId));
closeLifecycleDrawer();
}
function buildMaintenanceOrderDetailTitle(orderNo) {
var text = $.common.nullToStr(orderNo);
if (!text || text === "-") {
return "维保工单详情";
}
// 页签标题不承载 HTML去掉尖括号可避免异常工单号影响主框架页签 DOM。
return "维保工单详情 - " + text.replace(/[<>]/g, "");
}
function escapeHtml(value) {
return String(value)
.replace(/&/g, "&amp;")

@ -432,7 +432,8 @@
</div>
<div class="row">
<div class="col-lg-4 col-md-5 col-sm-12">
<!-- 暂时隐藏基础信息与当前装车轮胎,避免车辆详情对话框出现左右分栏导致主视图宽度不足。 -->
<!--<div class="col-lg-4 col-md-5 col-sm-12">
<div class="info-card">
<div class="section-title"><i class="fa fa-bookmark"></i>基本信息</div>
<table class="info-table" id="vehicleInfo"></table>
@ -444,9 +445,9 @@
<div class="text-center text-muted-dash" style="padding: 40px 0;">正在加载...</div>
</div>
</div>
</div>
</div>-->
<div class="col-lg-8 col-md-7 col-sm-12">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="info-card">
<div class="section-title"><i class="fa fa-wrench"></i>轮位视图</div>
<div id="latestMaintenance">
@ -457,7 +458,7 @@
<div class="timeline-card">
<div class="timeline-header">
<span class="title">生命周期</span>
<span class="mini-tip">按时间倒序展示维保工单,点击记录打开维保工单列表页签</span>
<span class="mini-tip">按时间倒序展示维保工单,点击记录打开维保工单详情页签</span>
</div>
<ul class="life-list" id="timelineList"></ul>
<div class="text-center text-muted-dash" id="emptyTimeline" style="display: none; padding: 80px 0;">
@ -491,8 +492,9 @@
}
var data = result.data || {};
renderSummary(data);
renderVehicleInfo(data.car || {});
renderMountedTyres(data.mountedTyres || []);
// 基本信息与当前装车轮胎已从页面隐藏,保留汇总和生命周期即可让主内容与对话框等宽。
// renderVehicleInfo(data.car || {});
// renderMountedTyres(data.mountedTyres || []);
// 维保历史已合并到生命周期聚合接口,页面不再额外调用独立列表接口,避免同一车牌重复查数。
renderTimeline(data.maintenanceList || []);
});
@ -565,7 +567,12 @@
$("#emptyTimeline").hide();
var html = [];
$.each(maintenanceRows, function (index, item) {
html.push('<li class="life-item clickable-title" onclick="goMaintenanceList()" title="打开维保工单列表页签">');
var orderId = item.orderId == null ? item.id : item.orderId;
// 生命周期页嵌在车辆抽屉 iframe 中,只把业务主键交给父页,由父页接管主框架页签与抽屉关闭。
html.push('<li class="life-item clickable-title" data-order-id="'
+ encodeURIComponent(displayValue(orderId)) + '" data-order-no="'
+ encodeURIComponent(displayValue(item.orderNo))
+ '" onclick="openMaintenanceOrderDetail(this)" title="打开维保工单详情页签">');
html.push('<span class="life-dot maintenance"></span>');
html.push('<div class="life-time">' + safeText(item.maintainDate) + '</div>');
html.push('<div class="life-title">' + safeText(eventTitle(item)) + '</div>');
@ -816,15 +823,26 @@
return displayValue(value);
}
function goMaintenanceList() {
// 生命周期页嵌在车辆列表抽屉 iframe 中,交给父页打开后台页签并关闭抽屉,避免子 iframe 找错页签容器。
if (window.parent && typeof window.parent.openMaintenanceOrderTabFromLifecycle === "function") {
window.parent.openMaintenanceOrderTabFromLifecycle();
function openMaintenanceOrderDetail(target) {
var orderId = decodeURIComponent($(target).attr("data-order-id") || "");
var orderNo = decodeURIComponent($(target).attr("data-order-no") || "");
if (!/^\d+$/.test(orderId)) {
// 没有有效工单主键时禁止拼接详情 URL避免无意义请求或路径污染。
$.modal.alertWarning("该维保记录缺少有效工单ID无法打开详情");
return;
}
// 兜底:若未来生命周期页被独立打开,仍按 RuoYi 页签方式进入维保工单列表。
var modalApi = window.parent && window.parent.$ && window.parent.$.modal ? window.parent.$.modal : $.modal;
modalApi.openTab("维保工单列表", ctx + "tyre/order");
// 生命周期页嵌在车辆列表抽屉 iframe 中,必须交给父页打开主框架页签并关闭抽屉。
if (window.parent && typeof window.parent.openMaintenanceOrderDetailTabFromLifecycle === "function") {
window.parent.openMaintenanceOrderDetailTabFromLifecycle(orderId, orderNo);
return;
}
// 兜底:若未来生命周期页被独立打开,仍按 RuoYi 页签方式进入对应工单详情。
$.modal.openTab(buildMaintenanceOrderDetailTitle(orderNo), ctx + "tyre/order/edit/" + encodeURIComponent(orderId));
}
function buildMaintenanceOrderDetailTitle(orderNo) {
var text = displayValue(orderNo);
return text == "-" ? "维保工单详情" : "维保工单详情 - " + text;
}
</script>
</body>

@ -428,7 +428,7 @@
<div th:text="${#strings.isEmpty(item.createBy) ? '操作人:-' : '操作人:' + item.createBy}">操作人:-</div>
<div th:text="${#strings.isEmpty(item.carNo) ? '车辆:-' : '车辆:' + item.carNo}">车辆:-</div>
<div th:text="${#strings.isEmpty(item.wheelPostion) ? '轮位:-' : '轮位:' + item.wheelPostion}">轮位:-</div>
<div th:text="${item.mileage == null ? '里程:-' : '里程:' + item.mileage + ' km'}">里程:-</div>
<div th:text="${item.mileage == null ? '车辆里程:-' : '车辆里程:' + item.mileage + ' km'}">车辆里程:-</div>
<div th:text="${#strings.isEmpty(item.patternDepth) ? '花纹深度:-' : '花纹深度:' + item.patternDepth + ' mm'}">花纹深度:-</div>
<!-- 三项归属已由装卸记录查询返回,缺哪项省略哪项,避免历史脏数据展示整行占位。 -->
<div th:if="${!#strings.isEmpty(item.team) or !#strings.isEmpty(item.company) or !#strings.isEmpty(item.carTeam)}">

Loading…
Cancel
Save