调整业务模块

This commit is contained in:
2026-09-04 05:23:34 +08:00
parent c63c7c3e33
commit e789f1647a
10 changed files with 2082 additions and 591 deletions
+137 -34
View File
@@ -638,17 +638,18 @@
label="运单号"
min-width="150"
show-overflow-tooltip
/>
>
<template #default="{ row }">
<el-link v-if="row.waybillNo" type="primary" @click="openWaybillDetail(row)">
{{ row.waybillNo }}
</el-link>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
prop="projectName"
label="项目名称"
min-width="160"
show-overflow-tooltip
/>
<el-table-column
prop="customerName"
label="客户名称"
min-width="160"
min-width="150"
show-overflow-tooltip
/>
<el-table-column
@@ -662,48 +663,118 @@
</template>
</el-table-column>
<el-table-column
prop="cargoName"
label="货物名称"
min-width="140"
prop="goodsInfo"
label="货物信息"
min-width="260"
show-overflow-tooltip
/>
<el-table-column
prop="cargoType"
label="货物类型"
min-width="140"
show-overflow-tooltip
/>
>
<template #default="{ row }">
{{ formatCandidateWaybillValue(row, 'goodsInfo') }}
</template>
</el-table-column>
<el-table-column
prop="departureAddress"
label="发货地址"
min-width="220"
show-overflow-tooltip
/>
>
<template #default="{ row }">
{{ formatCandidateAddress(row, 'departure') }}
</template>
</el-table-column>
<el-table-column
prop="arrivalAddress"
label="收货地址"
min-width="220"
show-overflow-tooltip
/>
>
<template #default="{ row }">
{{ formatCandidateAddress(row, 'arrival') }}
</template>
</el-table-column>
<el-table-column
prop="vehicleNo"
label="//航班/班列"
prop="contractName"
label="客户合同"
min-width="160"
show-overflow-tooltip
/>
<el-table-column
prop="carrierName"
label="承运商名称"
min-width="160"
prop="planName"
label="计划名称"
min-width="150"
show-overflow-tooltip
/>
<el-table-column prop="driverName" label="司机" min-width="120" show-overflow-tooltip />
<el-table-column
prop="originalNo"
label="原始单号"
min-width="130"
min-width="140"
show-overflow-tooltip
/>
<el-table-column
prop="relationNo"
label="关联单号"
min-width="140"
show-overflow-tooltip
/>
<el-table-column prop="remark" label="备注" min-width="180" show-overflow-tooltip />
<el-table-column
prop="startDate"
label="实际发货时间"
min-width="170"
show-overflow-tooltip
>
<template #default="{ row }">
{{ formatCandidateDate(row.startDate) }}
</template>
</el-table-column>
<el-table-column
prop="endDate"
label="实际完成时间"
min-width="170"
show-overflow-tooltip
>
<template #default="{ row }">
{{ formatCandidateDate(row.endDate) }}
</template>
</el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
min-width="170"
show-overflow-tooltip
>
<template #default="{ row }">
{{ formatCandidateDate(row.createTime) }}
</template>
</el-table-column>
<el-table-column
prop="updateTime"
label="更新时间"
min-width="170"
show-overflow-tooltip
>
<template #default="{ row }">
{{ formatCandidateDate(row.updateTime) }}
</template>
</el-table-column>
<el-table-column
prop="businessStatus"
label="状态"
width="110"
fixed="right"
align="center"
>
<template #default="{ row }">
<span
:class="[
'loading-manage-page__status',
`is-${row.businessStatus || 'unknown'}`,
]"
>
{{ formatCandidateWaybillValue(row, 'businessStatus') }}
</span>
</template>
</el-table-column>
</el-table>
<div class="loading-manage-dialog__table-toolbar">
<el-button
@@ -734,7 +805,10 @@
<el-table-column type="index" label="序号" width="70" align="center" />
<el-table-column prop="waybillNo" label="运单号" min-width="150">
<template #default="{ row }">
<el-link type="primary">{{ row.waybillNo }}</el-link>
<el-link v-if="row.waybillNo" type="primary" @click.stop="openWaybillDetail(row)">
{{ row.waybillNo }}
</el-link>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="projectName" label="项目名称" min-width="160" />
@@ -1009,6 +1083,7 @@ import {
loadingStatusMap,
loadingStatusOptions,
} from '@/option/business/loading-manage';
import { option as waybillOption } from '@/option/business/waybill-manage';
import { ElMessage, ElMessageBox } from 'element-plus';
import { Location, Rank, Refresh, Setting } from '@element-plus/icons-vue';
import dayjs from 'dayjs';
@@ -1377,6 +1452,27 @@ export default {
statusText(row) {
return row.businessStatusName || loadingStatusMap[row.businessStatus] || '未知';
},
formatCandidateWaybillValue(row, prop) {
if (!row) return '-';
if (prop === 'businessStatus') return this.statusText(row);
if (prop === 'transportType') return this.transportTypeLabel(row.transportType);
const column = waybillOption.column.find(item => item.prop === prop);
if (column?.formatter) {
const value = column.formatter(row, {}, row[prop]);
return value === undefined || value === null || value === '' ? '-' : value;
}
const value = row[prop];
return value === undefined || value === null || value === '' ? '-' : value;
},
formatCandidateDate(value) {
if (!value) return '-';
const date = dayjs(value);
return date.isValid() ? date.format('YYYY-MM-DD HH:mm:ss') : value;
},
formatCandidateAddress(row, type) {
const value = row?.[`${type}Address`] || row?.[`${type}Name`] || '';
return this.formatProvinceCityDistrict(value) || '-';
},
splitText(value) {
if (!value) return [];
return String(value)
@@ -1924,15 +2020,17 @@ export default {
async loadCandidateWaybills() {
this.candidateLoading = true;
try {
const query = {
...this.buildQueryParams(this.candidateQuery),
businessStatus: 'pending',
onlyUnassignedLoading: 1,
...(this.dialogMode === 'add' ? { transportType: 'road' } : {}),
};
const transportType = this.getCandidateTransportTypeQuery(query.transportType);
const res = await getWaybillList(
this.candidatePage.currentPage,
this.candidatePage.pageSize,
{
...this.buildQueryParams(this.candidateQuery),
businessStatus: 'pending',
onlyUnassignedLoading: 1,
...(this.dialogMode === 'add' ? { transportType: 'road' } : {}),
}
{ ...query, transportType }
);
const page = unwrapPage(res);
this.candidateRows = page.records;
@@ -1941,6 +2039,11 @@ export default {
this.candidateLoading = false;
}
},
getCandidateTransportTypeQuery(value) {
const normalized = String(value || '').trim().toLowerCase();
if (['road', '公路运输'].includes(normalized)) return 'road,公路运输';
return value || '';
},
openCandidateSearch() {
this.candidateSearchVisible = true;
this.loadCandidateWaybills();