调整 业务
This commit is contained in:
@@ -583,219 +583,219 @@
|
||||
label-width="auto"
|
||||
class="loading-manage-dialog__form archive-form"
|
||||
>
|
||||
<section-card title="筛选待配载运单">
|
||||
<template #extra>
|
||||
<el-link v-if="!dialogReadonly" type="primary" @click="openCandidateSearch"
|
||||
>筛选</el-link
|
||||
>
|
||||
</template>
|
||||
<div class="loading-manage-dialog__candidate-search">
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="运单号">
|
||||
<el-input v-model="candidateQuery.waybillNo" clearable placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="项目名称">
|
||||
<el-select
|
||||
v-model="candidateQuery.projectName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadProjectOptions"
|
||||
:loading="projectLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadProjectOptions(candidateQuery.projectName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in projectOptions"
|
||||
:key="item.id || item.projectName"
|
||||
:label="item.projectName"
|
||||
:value="item.projectName"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="发货地址">
|
||||
<el-input
|
||||
v-model="candidateQuery.departureAddress"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<template v-if="candidateSearchVisible">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="货物名称">
|
||||
<el-input v-model="candidateQuery.cargoName" clearable placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="收货地址">
|
||||
<el-input
|
||||
v-model="candidateQuery.arrivalAddress"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="客户名称">
|
||||
<el-select
|
||||
v-model="candidateQuery.customerName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadCustomerOptions"
|
||||
:loading="customerLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadCustomerOptions(candidateQuery.customerName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in customerOptions"
|
||||
:key="item.id || item.customerName"
|
||||
:label="item.customerName"
|
||||
:value="item.customerName"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="货物类型">
|
||||
<el-select
|
||||
v-model="candidateQuery.cargoType"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadCargoTypeOptions"
|
||||
:loading="cargoTypeLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadCargoTypeOptions(candidateQuery.cargoType)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in cargoTypeOptions"
|
||||
:key="item.id || item.cargoName || item.cargoType"
|
||||
:label="item.cargoName || item.cargoType || item.label"
|
||||
:value="item.cargoName || item.cargoType || item.label"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="原始单号">
|
||||
<el-input
|
||||
v-model="candidateQuery.originalNo"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="车/船/航班/班列">
|
||||
<el-input v-model="candidateQuery.vehicleNo" clearable placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="承运商名称">
|
||||
<el-select
|
||||
v-model="candidateQuery.carrierName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadCarrierOptions"
|
||||
:loading="carrierLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadCarrierOptions(candidateQuery.carrierName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in carrierOptions"
|
||||
:key="item.id || item.fullName || item.customerName || item.carrierName"
|
||||
:label="
|
||||
item.fullName || item.customerName || item.carrierName || item.name
|
||||
"
|
||||
:value="
|
||||
item.fullName || item.customerName || item.carrierName || item.name
|
||||
"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="司机">
|
||||
<el-select
|
||||
v-model="candidateQuery.driverName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadDriverOptions"
|
||||
:loading="driverLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadDriverOptions(candidateQuery.driverName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in driverOptions"
|
||||
:key="item.id || item.driverName || item.name"
|
||||
:label="item.driverName || item.name"
|
||||
:value="item.driverName || item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="运输方式">
|
||||
<el-select
|
||||
v-model="candidateQuery.transportType"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
:disabled="dialogMode === 'add'"
|
||||
@visible-change="visible => visible && loadTransportTypeOptions()"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in transportTypeOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
<el-col
|
||||
:span="candidateSearchVisible ? 24 : 6"
|
||||
class="loading-manage-dialog__candidate-actions"
|
||||
>
|
||||
<el-button type="primary" @click="handleCandidateSearch">查询</el-button>
|
||||
<el-button @click="handleCandidateReset">重置</el-button>
|
||||
<el-link
|
||||
type="primary"
|
||||
@click="candidateSearchVisible = !candidateSearchVisible"
|
||||
>{{ candidateSearchVisible ? '收起' : '展开' }}</el-link
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</section-card>
|
||||
|
||||
<div title="配载信息" class="loading-manage-dialog__load-info-card">
|
||||
<section-card title="待配载运单">
|
||||
<section-card>
|
||||
<div class="loading-manage-dialog__candidate-search">
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="运单号">
|
||||
<el-input v-model="candidateQuery.waybillNo" clearable placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="项目名称">
|
||||
<el-select
|
||||
v-model="candidateQuery.projectName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadProjectOptions"
|
||||
:loading="projectLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadProjectOptions(candidateQuery.projectName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in projectOptions"
|
||||
:key="item.id || item.projectName"
|
||||
:label="item.projectName"
|
||||
:value="item.projectName"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="发货地址">
|
||||
<el-input
|
||||
v-model="candidateQuery.departureAddress"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<template v-if="candidateSearchVisible">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="货物名称">
|
||||
<el-input
|
||||
v-model="candidateQuery.cargoName"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="收货地址">
|
||||
<el-input
|
||||
v-model="candidateQuery.arrivalAddress"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="客户名称">
|
||||
<el-select
|
||||
v-model="candidateQuery.customerName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadCustomerOptions"
|
||||
:loading="customerLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadCustomerOptions(candidateQuery.customerName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in customerOptions"
|
||||
:key="item.id || item.customerName"
|
||||
:label="item.customerName"
|
||||
:value="item.customerName"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="货物类型">
|
||||
<el-select
|
||||
v-model="candidateQuery.cargoType"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadCargoTypeOptions"
|
||||
:loading="cargoTypeLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadCargoTypeOptions(candidateQuery.cargoType)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in cargoTypeOptions"
|
||||
:key="item.id || item.cargoName || item.cargoType"
|
||||
:label="item.cargoName || item.cargoType || item.label"
|
||||
:value="item.cargoName || item.cargoType || item.label"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="原始单号">
|
||||
<el-input
|
||||
v-model="candidateQuery.originalNo"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="车/船/航班/班列">
|
||||
<el-input
|
||||
v-model="candidateQuery.vehicleNo"
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="承运商名称">
|
||||
<el-select
|
||||
v-model="candidateQuery.carrierName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadCarrierOptions"
|
||||
:loading="carrierLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadCarrierOptions(candidateQuery.carrierName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in carrierOptions"
|
||||
:key="item.id || item.fullName || item.customerName || item.carrierName"
|
||||
:label="
|
||||
item.fullName || item.customerName || item.carrierName || item.name
|
||||
"
|
||||
:value="
|
||||
item.fullName || item.customerName || item.carrierName || item.name
|
||||
"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="司机">
|
||||
<el-select
|
||||
v-model="candidateQuery.driverName"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="loadDriverOptions"
|
||||
:loading="driverLoading"
|
||||
placeholder="请输入"
|
||||
@visible-change="
|
||||
visible => visible && loadDriverOptions(candidateQuery.driverName)
|
||||
"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in driverOptions"
|
||||
:key="item.id || item.driverName || item.name"
|
||||
:label="item.driverName || item.name"
|
||||
:value="item.driverName || item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="运输方式">
|
||||
<el-select
|
||||
v-model="candidateQuery.transportType"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
:disabled="dialogMode === 'add'"
|
||||
@visible-change="visible => visible && loadTransportTypeOptions()"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in transportTypeOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
<el-col
|
||||
:span="candidateSearchVisible ? 24 : 6"
|
||||
class="loading-manage-dialog__candidate-actions"
|
||||
>
|
||||
<el-button type="primary" @click="handleCandidateSearch">查询</el-button>
|
||||
<el-button @click="handleCandidateReset">重置</el-button>
|
||||
<el-link
|
||||
type="primary"
|
||||
@click="candidateSearchVisible = !candidateSearchVisible"
|
||||
>{{ candidateSearchVisible ? '收起' : '展开' }}</el-link
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<el-table
|
||||
ref="candidateTableRef"
|
||||
v-loading="candidateLoading"
|
||||
@@ -843,27 +843,43 @@
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
{{ formatCandidateWaybillValue(row, 'goodsInfo') }}
|
||||
{{ formatCandidateGoodsInfo(row) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="departureAddress"
|
||||
label="发货地址"
|
||||
min-width="220"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
{{ formatCandidateAddress(row, 'departure') }}
|
||||
<el-tooltip
|
||||
v-if="formatCandidateAddressTooltip(row, 'departure')"
|
||||
:content="formatCandidateAddressTooltip(row, 'departure')"
|
||||
placement="top"
|
||||
>
|
||||
<div class="loading-manage-page__address-cell">
|
||||
{{ formatCandidateAddress(row, 'departure') }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<span v-else>{{ formatCandidateAddress(row, 'departure') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="arrivalAddress"
|
||||
label="收货地址"
|
||||
min-width="220"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
{{ formatCandidateAddress(row, 'arrival') }}
|
||||
<el-tooltip
|
||||
v-if="formatCandidateAddressTooltip(row, 'arrival')"
|
||||
:content="formatCandidateAddressTooltip(row, 'arrival')"
|
||||
placement="top"
|
||||
>
|
||||
<div class="loading-manage-page__address-cell">
|
||||
{{ formatCandidateAddress(row, 'arrival') }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<span v-else>{{ formatCandidateAddress(row, 'arrival') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -995,20 +1011,36 @@
|
||||
prop="departureAddress"
|
||||
label="发货地"
|
||||
min-width="220"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
{{ formatWaybillAddress(row, 'departure') }}
|
||||
<el-tooltip
|
||||
v-if="formatCandidateAddressTooltip(row, 'departure')"
|
||||
:content="formatCandidateAddressTooltip(row, 'departure')"
|
||||
placement="top"
|
||||
>
|
||||
<div class="loading-manage-page__address-cell">
|
||||
{{ formatCandidateAddress(row, 'departure') }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<span v-else>{{ formatCandidateAddress(row, 'departure') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="arrivalAddress"
|
||||
label="到货地"
|
||||
min-width="220"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
{{ formatWaybillAddress(row, 'arrival') }}
|
||||
<el-tooltip
|
||||
v-if="formatCandidateAddressTooltip(row, 'arrival')"
|
||||
:content="formatCandidateAddressTooltip(row, 'arrival')"
|
||||
placement="top"
|
||||
>
|
||||
<div class="loading-manage-page__address-cell">
|
||||
{{ formatCandidateAddress(row, 'arrival') }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<span v-else>{{ formatCandidateAddress(row, 'arrival') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="110" fixed="right">
|
||||
@@ -1825,6 +1857,7 @@ export default {
|
||||
if (!row) return '-';
|
||||
if (prop === 'businessStatus') return this.statusText(row);
|
||||
if (prop === 'transportType') return this.transportTypeLabel(row.transportType);
|
||||
if (prop === 'goodsInfo') return this.formatCandidateGoodsInfo(row);
|
||||
const column = waybillOption.column.find(item => item.prop === prop);
|
||||
if (column?.formatter) {
|
||||
const value = column.formatter(row, {}, row[prop]);
|
||||
@@ -1833,14 +1866,130 @@ export default {
|
||||
const value = row[prop];
|
||||
return value === undefined || value === null || value === '' ? '-' : value;
|
||||
},
|
||||
formatCandidateGoodsInfo(row = {}) {
|
||||
const goodsRows =
|
||||
[row.goodsJson, row.goodsList, row.goodsRows, row.cargoList, row.cargoRows, row.goods]
|
||||
.map(source => {
|
||||
if (source === undefined || source === null || source === '') return [];
|
||||
if (Array.isArray(source)) return source;
|
||||
if (typeof source === 'object') return [source];
|
||||
return parseJsonArray(source);
|
||||
})
|
||||
.filter(source => source.length)
|
||||
.sort((left, right) => right.length - left.length)[0] || [];
|
||||
if (!goodsRows.length) return String(row.goodsInfo || row.cargoInfo || '') || '-';
|
||||
const groups = goodsRows.reduce((result, item = {}) => {
|
||||
const unit = String(
|
||||
item.quantityUnit ||
|
||||
item.goodsQuantityUnit ||
|
||||
item.cargoUnit ||
|
||||
item.unit ||
|
||||
row.quantityUnit ||
|
||||
row.goodsQuantityUnit ||
|
||||
row.cargoUnit ||
|
||||
row.unit ||
|
||||
''
|
||||
).trim();
|
||||
const key = unit || '__empty__';
|
||||
if (!result[key]) {
|
||||
result[key] = {
|
||||
typeName:
|
||||
item.secondCargoTypeName ||
|
||||
item.secondCargoType ||
|
||||
item.cargoType ||
|
||||
item.goodsType ||
|
||||
item.typeName ||
|
||||
'货物',
|
||||
count: 0,
|
||||
quantity: 0,
|
||||
unit,
|
||||
};
|
||||
}
|
||||
result[key].count += 1;
|
||||
result[key].quantity += this.parseGoodsQuantity(
|
||||
item.quantity ?? item.cargoQuantity ?? item.goodsQuantity
|
||||
);
|
||||
return result;
|
||||
}, {});
|
||||
return (
|
||||
Object.values(groups)
|
||||
.map(group => {
|
||||
const quantity = this.formatGoodsQuantity(group.quantity);
|
||||
return `${group.typeName}等${group.count}种货物 | ${quantity}${
|
||||
group.unit ? ` ${group.unit}` : ''
|
||||
}`;
|
||||
})
|
||||
.join('; ') || '-'
|
||||
);
|
||||
},
|
||||
parseGoodsQuantity(value) {
|
||||
if (value === undefined || value === null || value === '') return 0;
|
||||
const text = String(value).replace(/,/g, '');
|
||||
const match = text.match(/-?\d+(\.\d+)?/);
|
||||
if (!match) return 0;
|
||||
const number = Number(match[0]);
|
||||
return Number.isFinite(number) ? number : 0;
|
||||
},
|
||||
formatGoodsQuantity(value) {
|
||||
const number = Number(value || 0);
|
||||
if (!Number.isFinite(number)) return '0';
|
||||
const fixed = Math.round((number + Number.EPSILON) * 1000) / 1000;
|
||||
return Number.isInteger(fixed) ? String(fixed) : String(fixed).replace(/\.?0+$/, '');
|
||||
},
|
||||
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) || '-';
|
||||
const prefix = type === 'departure' ? 'departure' : 'arrival';
|
||||
const name = String(row?.[`${prefix}Name`] || '').trim();
|
||||
const address = String(row?.[`${prefix}Address`] || '').trim();
|
||||
if (!this.isRoadTransportType(row?.transportType)) {
|
||||
return name || address || '-';
|
||||
}
|
||||
const region = this.mergeRouteAddressParts(
|
||||
this.routeProvinceName(row, prefix),
|
||||
row[`${prefix}CityName`] || row[`${prefix}City`],
|
||||
row[`${prefix}DistrictName`] || row[`${prefix}District`]
|
||||
);
|
||||
const source = this.mergeRouteAddressParts(region, '', address || name);
|
||||
const parts = this.parseWaybillAddress(source);
|
||||
return (
|
||||
[parts.province, parts.city, parts.district]
|
||||
.map(value => String(value || '').trim())
|
||||
.filter(Boolean)
|
||||
.join('') ||
|
||||
this.formatProvinceCityDistrict(source) ||
|
||||
name ||
|
||||
address ||
|
||||
'-'
|
||||
);
|
||||
},
|
||||
formatCandidateAddressTooltip(row, type) {
|
||||
if (!this.isRoadTransportType(row?.transportType)) return '';
|
||||
const prefix = type === 'departure' ? 'departure' : 'arrival';
|
||||
const address = String(row?.[`${prefix}Address`] || '').trim();
|
||||
const name = String(row?.[`${prefix}Name`] || '').trim();
|
||||
const region = this.mergeRouteAddressParts(
|
||||
this.routeProvinceName(row, prefix),
|
||||
row[`${prefix}CityName`] || row[`${prefix}City`],
|
||||
row[`${prefix}DistrictName`] || row[`${prefix}District`]
|
||||
);
|
||||
const detailAddress =
|
||||
row[`${prefix}DetailAddress`] || row[`${prefix}AddressDetail`] || address;
|
||||
return this.mergeRouteAddressParts(region, '', detailAddress || name) || '';
|
||||
},
|
||||
isRoadTransportType(type) {
|
||||
const value = String(type || '')
|
||||
.trim()
|
||||
.toLowerCase();
|
||||
return (
|
||||
value === 'road' ||
|
||||
value.includes('公路') ||
|
||||
value.includes('道路') ||
|
||||
value.includes('highway')
|
||||
);
|
||||
},
|
||||
splitText(value) {
|
||||
if (!value) return [];
|
||||
@@ -2462,10 +2611,6 @@ export default {
|
||||
if (['road', '公路运输'].includes(normalized)) return 'road,公路运输';
|
||||
return value || '';
|
||||
},
|
||||
openCandidateSearch() {
|
||||
this.candidateSearchVisible = true;
|
||||
this.loadCandidateWaybills();
|
||||
},
|
||||
handleCandidateSearch() {
|
||||
this.candidatePage.currentPage = 1;
|
||||
this.loadCandidateWaybills();
|
||||
@@ -2567,11 +2712,11 @@ export default {
|
||||
};
|
||||
rows.forEach((row, rowIndex) => {
|
||||
const departure = row.departureAddress || row.departureName;
|
||||
appendNode(departure, this.formatWaybillAddress(row, 'departure'), `装${rowIndex + 1}`);
|
||||
appendNode(departure, this.formatCandidateAddress(row, 'departure'), `装${rowIndex + 1}`);
|
||||
});
|
||||
rows.forEach((row, rowIndex) => {
|
||||
const arrival = row.arrivalAddress || row.arrivalName;
|
||||
appendNode(arrival, this.formatWaybillAddress(row, 'arrival'), `卸${rowIndex + 1}`);
|
||||
appendNode(arrival, this.formatCandidateAddress(row, 'arrival'), `卸${rowIndex + 1}`);
|
||||
});
|
||||
return [...nodeMap.values()].map((node, index) => ({
|
||||
...node,
|
||||
@@ -3266,8 +3411,8 @@ export default {
|
||||
}
|
||||
|
||||
.loading-manage-dialog__candidate-search {
|
||||
padding: 4px 0;
|
||||
margin-bottom: 8px;
|
||||
padding: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.loading-manage-dialog__waybill-route-layout {
|
||||
|
||||
Reference in New Issue
Block a user