✨ 优化港口地图回填、合同展示与运单导入空值
地图选点回填国家省市区;合同选择显示编号/名称;常用数据组织筛选修正;运单详情将-1费用字段显示为空。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -212,7 +212,7 @@
|
||||
<el-option
|
||||
v-for="item in contractOptions"
|
||||
:key="item.id"
|
||||
:label="item.contractName"
|
||||
:label="formatContractOptionLabel(item)"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
@@ -3642,6 +3642,7 @@ import { addressTypeOptions } from '@/option/base/common-address';
|
||||
import { packageOptions } from '@/option/business/common';
|
||||
import { formatUpdateUserName } from '@/utils/audit';
|
||||
import { getToken, isAdministrator } from '@/utils/auth';
|
||||
import { formatContractOptionLabel } from '@/utils/contract';
|
||||
import { wgs84ToGcj02 } from '@/utils/coordinate';
|
||||
import { openImportDialog } from '@/utils/import-excel';
|
||||
import { normalizeMapSearchResults, searchAmapPlaceText } from '@/utils/map-search';
|
||||
@@ -4724,6 +4725,7 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
formatContractOptionLabel,
|
||||
// 页面被 keep-alive 缓存/卸载时调用,关闭本页所有 append-to-body 的弹窗,
|
||||
// 避免 Teleport 出去的 DOM 残留在 body 上盖住后续页面(详见 data 里的说明)。
|
||||
closeInnerDialogs() {
|
||||
@@ -6958,9 +6960,11 @@ export default {
|
||||
applyFormDetail(row) {
|
||||
this.suppressTransportTypeClear = true;
|
||||
this.form = { ...(row || {}) };
|
||||
['quantity', 'mileage', 'unitPrice'].forEach(prop => {
|
||||
if (Number(this.form[prop]) === -1) this.form[prop] = '';
|
||||
});
|
||||
['quantity', 'mileage', 'unitPrice', 'otherFeeTotal', 'freight', 'freightTotal'].forEach(
|
||||
prop => {
|
||||
if (this.isSentinelMinusOne(this.form[prop])) this.form[prop] = '';
|
||||
}
|
||||
);
|
||||
if ([this.form.planId, this.form.planName].some(value => Number(value) === -1)) {
|
||||
this.form.planId = '';
|
||||
this.form.planName = '';
|
||||
@@ -7371,17 +7375,17 @@ export default {
|
||||
this.form.quantityUnit || taskInfo.quantityUnit || goodsInfo.quantityUnit || '吨';
|
||||
const mileage = this.form.mileage || taskInfo.mileage || goodsInfo.mileage || '';
|
||||
this.form.mileage = this.normalizeMileageValue(mileage);
|
||||
this.form.unitPrice = this.form.unitPrice || taskInfo.unitPrice || goodsInfo.unitPrice || '';
|
||||
this.form.unitPrice = this.normalizeOptionalAmount(
|
||||
this.form.unitPrice || taskInfo.unitPrice || goodsInfo.unitPrice || ''
|
||||
);
|
||||
['quantity', 'mileage', 'unitPrice'].forEach(prop => {
|
||||
if (Number(this.form[prop]) === -1) this.form[prop] = '';
|
||||
if (this.isSentinelMinusOne(this.form[prop])) this.form[prop] = '';
|
||||
});
|
||||
this.form.priceUnit =
|
||||
this.form.priceUnit || taskInfo.priceUnit || goodsInfo.priceUnit || '元/吨';
|
||||
this.form.otherFeeTotal =
|
||||
this.form.otherFeeTotal || taskInfo.otherFeeTotal || goodsInfo.otherFeeTotal || '';
|
||||
if (Number(this.form.otherFeeTotal) === -1) {
|
||||
this.form.otherFeeTotal = '';
|
||||
}
|
||||
this.form.otherFeeTotal = this.normalizeOptionalAmount(
|
||||
this.form.otherFeeTotal || taskInfo.otherFeeTotal || goodsInfo.otherFeeTotal || ''
|
||||
);
|
||||
this.form.estimatedStartTime =
|
||||
this.form.estimatedStartTime ||
|
||||
taskInfo.estimatedStartTime ||
|
||||
@@ -7463,7 +7467,7 @@ export default {
|
||||
},
|
||||
taskFullFreightGroupUnitPrice(group = {}) {
|
||||
const prices = (group.rows || [])
|
||||
.map(cargo => String(cargo.unitPrice ?? '').trim())
|
||||
.map(cargo => this.normalizeOptionalAmount(cargo.unitPrice))
|
||||
.filter(Boolean);
|
||||
if (!prices.length || prices.some(price => price !== prices[0])) return '';
|
||||
return prices[0];
|
||||
@@ -7526,10 +7530,21 @@ export default {
|
||||
},
|
||||
formatTaskFullFreightNumber(value) {
|
||||
if (value === undefined || value === null || String(value).trim() === '') return '';
|
||||
const number = Number(value || 0);
|
||||
if (this.isSentinelMinusOne(value)) return '';
|
||||
const number = Number(value);
|
||||
if (!Number.isFinite(number)) return '';
|
||||
return Number(number.toFixed(2)).toString();
|
||||
},
|
||||
isSentinelMinusOne(value) {
|
||||
if (value === undefined || value === null || value === '') return false;
|
||||
return Number(value) === -1 || String(value).trim() === '-1';
|
||||
},
|
||||
normalizeOptionalAmount(value) {
|
||||
if (value === undefined || value === null || value === '' || this.isSentinelMinusOne(value)) {
|
||||
return '';
|
||||
}
|
||||
return value;
|
||||
},
|
||||
handleTaskCarrierTypeChange(value) {
|
||||
const nextValue = value || '承运商';
|
||||
this.form.carrierName = '';
|
||||
@@ -8082,7 +8097,9 @@ export default {
|
||||
}
|
||||
cargo.priceUnit = cargo.priceUnit || this.form.priceUnit || '元/吨';
|
||||
if (this.isBillingFieldEmpty(cargo.freightAmount)) {
|
||||
cargo.freightAmount = freightItems[index]?.freightAmount ?? '';
|
||||
cargo.freightAmount = this.normalizeOptionalAmount(
|
||||
freightItems[index]?.freightAmount ?? ''
|
||||
);
|
||||
}
|
||||
return cargo;
|
||||
});
|
||||
@@ -8274,8 +8291,10 @@ export default {
|
||||
},
|
||||
syncTaskInfoToRow(row) {
|
||||
row.taskEntryMode = row.taskEntryMode || 'simple';
|
||||
['quantity', 'mileage', 'unitPrice'].forEach(prop => {
|
||||
if (this.isBillingFieldEmpty(row[prop]) || Number(row[prop]) === -1) row[prop] = '';
|
||||
['quantity', 'mileage', 'unitPrice', 'otherFeeTotal'].forEach(prop => {
|
||||
if (this.isBillingFieldEmpty(row[prop]) || this.isSentinelMinusOne(row[prop])) {
|
||||
row[prop] = '';
|
||||
}
|
||||
});
|
||||
const taskInfo = {
|
||||
taskEntryMode: row.taskEntryMode,
|
||||
@@ -8300,7 +8319,7 @@ export default {
|
||||
priceUnit: row.priceUnit,
|
||||
taskRemark: row.taskRemark,
|
||||
};
|
||||
if (!this.isBillingFieldEmpty(row.otherFeeTotal) && Number(row.otherFeeTotal) !== -1) {
|
||||
if (!this.isBillingFieldEmpty(row.otherFeeTotal) && !this.isSentinelMinusOne(row.otherFeeTotal)) {
|
||||
taskInfo.otherFeeTotal = row.otherFeeTotal;
|
||||
} else {
|
||||
delete row.otherFeeTotal;
|
||||
@@ -8434,10 +8453,12 @@ export default {
|
||||
cargoName: row.cargoName || row.goodsName || '',
|
||||
packageType: row.packageType || row.package || '',
|
||||
specification: row.specification || row.spec || '',
|
||||
freightAmount: row.freightAmount ?? row.amount ?? row.totalAmount ?? '',
|
||||
freightAmount: this.normalizeOptionalAmount(
|
||||
row.freightAmount ?? row.amount ?? row.totalAmount ?? ''
|
||||
),
|
||||
};
|
||||
['quantity', 'mileage', 'unitPrice'].forEach(prop => {
|
||||
if (Number(cargo[prop]) === -1) cargo[prop] = '';
|
||||
['quantity', 'mileage', 'unitPrice', 'freightAmount'].forEach(prop => {
|
||||
if (this.isSentinelMinusOne(cargo[prop])) cargo[prop] = '';
|
||||
});
|
||||
return cargo;
|
||||
},
|
||||
@@ -8680,7 +8701,12 @@ export default {
|
||||
}
|
||||
},
|
||||
isBillingFieldEmpty(value) {
|
||||
return value === undefined || value === null || String(value).trim() === '';
|
||||
return (
|
||||
value === undefined ||
|
||||
value === null ||
|
||||
String(value).trim() === '' ||
|
||||
this.isSentinelMinusOne(value)
|
||||
);
|
||||
},
|
||||
ensureTransportTypeBeforeAddress() {
|
||||
if (!this.shippingInfoFormEnabled || !this.isBillingFieldEmpty(this.form.transportType)) {
|
||||
|
||||
Reference in New Issue
Block a user