✨ 完善变更记录、客商评分与车辆表单
变更记录详情统一为居中分页弹窗,并去掉经办人等信息行。 客商评分支持删除、提交前自评校验、复评后才能审批,以及 0 分提交。 车辆外廓尺寸和载质量单位改到输入框内,认证审核标签按四字换行,使用部门必填并默认当前部门。 临时额度的 -1 占位金额显示为空。新增项目编号可留空由系统生成。 修复缓存总单页在打开新增项目时误请求缺少 id 的详情接口。 详情页状态与运输方式标签样式统一。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,7 +1,17 @@
|
||||
<template>
|
||||
<div v-loading="loading" class="master-detail">
|
||||
<section v-if="master" class="detail-overview">
|
||||
<div class="detail-heading"><div><h2>多联总单详情 <span>|</span> {{ master.masterNo }}</h2><el-tag :type="statusType(master.businessStatus)" class="status-text">{{ statusName(master.businessStatus) }}</el-tag><el-tag v-if="transportFlowLabel" type="info" class="transport-flow-tag">{{ transportFlowLabel }}</el-tag></div></div>
|
||||
<div class="detail-heading">
|
||||
<div>
|
||||
<h2>多联总单详情 <span>|</span> {{ master.masterNo }}</h2>
|
||||
<el-tag :type="statusType(master.businessStatus)">{{
|
||||
statusName(master.businessStatus)
|
||||
}}</el-tag>
|
||||
<el-tag v-if="transportFlowLabel" type="primary" class="transport-flow-tag">{{
|
||||
transportFlowLabel
|
||||
}}</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
<dl class="detail-meta">
|
||||
<div>
|
||||
<dt>客户</dt>
|
||||
@@ -132,6 +142,7 @@ export default {
|
||||
dateRange() { return this.master?.planStartTime && this.master?.planEndTime ? `${String(this.master.planStartTime).slice(0, 10)} ~ ${String(this.master.planEndTime).slice(0, 10)}` : '-'; },
|
||||
},
|
||||
async mounted() {
|
||||
if (!this.id) return;
|
||||
this.loading = true;
|
||||
try {
|
||||
const res = await api.getDetail(this.id);
|
||||
@@ -282,8 +293,36 @@ export default {
|
||||
<style scoped lang="scss">
|
||||
.master-detail { padding-bottom: 20px; color: #303133; }
|
||||
.detail-overview, .execution-detail-card { margin-bottom: 8px; border: 1px solid #eff1f7; background: #fff; }
|
||||
.detail-heading { display: flex; align-items: center; justify-content: space-between; padding: 18px 24px; h2 { display: inline-block; margin: 0 16px 0 0; font-size: 20px; } h2 span { margin: 0 8px; color: #909399; font-weight: 400; } }
|
||||
.transport-flow-tag { margin-left: 8px; }
|
||||
.detail-heading {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 18px 24px;
|
||||
|
||||
h2 {
|
||||
display: inline-block;
|
||||
margin: 0 16px 0 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
h2 span {
|
||||
margin: 0 8px;
|
||||
color: #909399;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
:deep(.el-tag) {
|
||||
height: 28px;
|
||||
padding: 0 12px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
font-size: 13px;
|
||||
line-height: 28px;
|
||||
}
|
||||
}
|
||||
.transport-flow-tag {
|
||||
margin-left: 8px;
|
||||
}
|
||||
.detail-meta { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px 24px; margin: 0; padding: 0 24px 20px; dt { margin-bottom: 6px; color: #909399; font-size: 13px; } dd { display: flex; flex-wrap: wrap; gap: 8px 16px; margin: 0; color: #303133; font-size: 14px; word-break: break-all; } :deep(.el-link) { font-size: 14px; } }
|
||||
.route-map { display: flex; align-items: flex-start; padding: 16px 24px 20px; border-top: 1px solid #eff1f7; overflow-x: auto; }
|
||||
.route-map__node { display: grid; flex: 0 0 150px; justify-items: center; gap: 6px; text-align: center; strong { font-size: 16px; white-space: nowrap; } small { color: #606266; white-space: nowrap; } }
|
||||
|
||||
@@ -295,6 +295,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
async load() {
|
||||
if (!this.id) return;
|
||||
this.loading = true;
|
||||
try {
|
||||
const res = await api.getDetail(this.id);
|
||||
|
||||
@@ -1774,12 +1774,17 @@
|
||||
<div class="waybill-manage-page__waybill-heading">
|
||||
<strong>运单详情</strong>
|
||||
<span>{{ detailRow.waybillNo || '-' }}</span>
|
||||
<span class="detail-status-text status-text-success">{{
|
||||
displayStatus(detailRow, 'businessStatus')
|
||||
}}</span>
|
||||
<span class="detail-status-text detail-transport-type">
|
||||
{{ getTransportTypeLabel(waybillTransportMode(detailRow)) || '-' }}
|
||||
</span>
|
||||
<el-tag :type="statusTagType(detailRow.businessStatus)">
|
||||
{{ displayStatus(detailRow, 'businessStatus') }}
|
||||
</el-tag>
|
||||
<el-tag type="primary">
|
||||
{{
|
||||
detailRow.transportTypeName ||
|
||||
getTransportTypeLabel(detailRow.transportType) ||
|
||||
waybillTransportMode(detailRow) ||
|
||||
'-'
|
||||
}}
|
||||
</el-tag>
|
||||
<el-link
|
||||
v-if="detailRow.id"
|
||||
class="waybill-manage-page__waybill-route-change-link"
|
||||
@@ -2184,7 +2189,11 @@
|
||||
/>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="司机上传" name="driverUpload">
|
||||
<el-tab-pane
|
||||
v-if="waybillDriverUploads.length"
|
||||
label="司机上传"
|
||||
name="driverUpload"
|
||||
>
|
||||
<div
|
||||
v-loading="waybillPunchRecordsLoading"
|
||||
class="waybill-manage-page__driver-upload-grid"
|
||||
@@ -2201,11 +2210,6 @@
|
||||
{{ photo.label || '凭证' }}
|
||||
</div>
|
||||
</div>
|
||||
<el-empty
|
||||
v-if="!waybillPunchRecordsLoading && !waybillDriverUploads.length"
|
||||
description="暂无司机上传数据"
|
||||
:image-size="50"
|
||||
/>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
@@ -5265,7 +5269,9 @@ export default {
|
||||
: defaultText;
|
||||
},
|
||||
statusTagType(status) {
|
||||
if ([1, 'pending', 'processing', 'approved', 'change_approved'].includes(status)) {
|
||||
if (
|
||||
[1, 'pending', 'processing', 'running', 'approved', 'change_approved'].includes(status)
|
||||
) {
|
||||
return 'success';
|
||||
}
|
||||
if ([2, 'cancelled', 'withdrawn', 'draft'].includes(status)) {
|
||||
@@ -9763,6 +9769,15 @@ export default {
|
||||
strong {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
:deep(.el-tag) {
|
||||
height: 28px;
|
||||
padding: 0 12px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
font-size: 13px;
|
||||
line-height: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
&__waybill-route-change-link {
|
||||
|
||||
Reference in New Issue
Block a user