|
|
@@ -333,14 +333,7 @@ function calculatedMeasurementRow(
|
|
|
|
mode: MeasurementCalculationMode,
|
|
|
|
mode: MeasurementCalculationMode,
|
|
|
|
customerSource = false,
|
|
|
|
customerSource = false,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
const calculationSource = !customerSource && mode !== 'ACTUAL'
|
|
|
|
const calculationSource = source
|
|
|
|
? {
|
|
|
|
|
|
|
|
...source,
|
|
|
|
|
|
|
|
lengthCm: source.outerLengthCm ?? source.lengthCm,
|
|
|
|
|
|
|
|
widthCm: source.outerWidthCm ?? source.widthCm,
|
|
|
|
|
|
|
|
heightCm: source.outerHeightCm ?? source.heightCm,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
: source
|
|
|
|
|
|
|
|
const rule = matchingDimensionRule(calculationSource)
|
|
|
|
const rule = matchingDimensionRule(calculationSource)
|
|
|
|
const rawDimensions = [Number(calculationSource.lengthCm), Number(calculationSource.widthCm), Number(calculationSource.heightCm)]
|
|
|
|
const rawDimensions = [Number(calculationSource.lengthCm), Number(calculationSource.widthCm), Number(calculationSource.heightCm)]
|
|
|
|
if (!rawDimensions.every((value) => Number.isFinite(value) && value > 0)) return { ...source }
|
|
|
|
if (!rawDimensions.every((value) => Number.isFinite(value) && value > 0)) return { ...source }
|
|
|
@@ -352,9 +345,16 @@ function calculatedMeasurementRow(
|
|
|
|
const specificationCoefficient = mode === 'MULTIPLY' && chargeRule
|
|
|
|
const specificationCoefficient = mode === 'MULTIPLY' && chargeRule
|
|
|
|
? matchedSpecificationCoefficient(chargeRule, calculationSource)
|
|
|
|
? matchedSpecificationCoefficient(chargeRule, calculationSource)
|
|
|
|
: 1
|
|
|
|
: 1
|
|
|
|
const [lengthCm, widthCm, heightCm] = matchedDimensions.map((value) => roundedUp(value * specificationCoefficient, 3))
|
|
|
|
const strategyDimensions = matchedDimensions.map((value) => roundedUp(value * specificationCoefficient, 3))
|
|
|
|
|
|
|
|
const outerOverrides = [source.outerLengthCm, source.outerWidthCm, source.outerHeightCm]
|
|
|
|
|
|
|
|
const hasOuterOverride = !customerSource && mode !== 'ACTUAL'
|
|
|
|
|
|
|
|
&& outerOverrides.some((value) => value != null && value !== '')
|
|
|
|
|
|
|
|
const [lengthCm, widthCm, heightCm] = strategyDimensions.map((value, index) => {
|
|
|
|
|
|
|
|
const override = outerOverrides[index]
|
|
|
|
|
|
|
|
return hasOuterOverride && override != null && override !== '' ? Number(override) : value
|
|
|
|
|
|
|
|
})
|
|
|
|
const packageCount = Number(source.packageCount)
|
|
|
|
const packageCount = Number(source.packageCount)
|
|
|
|
const unitVolumeCbm = mode === 'ADD' && rule
|
|
|
|
const unitVolumeCbm = mode === 'ADD' && rule && !hasOuterOverride
|
|
|
|
? Math.round((lengthCm * widthCm * heightCm / 1_000_000) * 1000) / 1000
|
|
|
|
? Math.round((lengthCm * widthCm * heightCm / 1_000_000) * 1000) / 1000
|
|
|
|
: roundedUp(lengthCm * widthCm * heightCm / 1_000_000, 4)
|
|
|
|
: roundedUp(lengthCm * widthCm * heightCm / 1_000_000, 4)
|
|
|
|
const totalVolumeCbm = Number.isFinite(packageCount) ? roundedUp(unitVolumeCbm * packageCount, 4) : null
|
|
|
|
const totalVolumeCbm = Number.isFinite(packageCount) ? roundedUp(unitVolumeCbm * packageCount, 4) : null
|
|
|
@@ -377,12 +377,7 @@ const customerMeasurementRows = computed(() => (detail.value?.order.cargoes || [
|
|
|
|
)))
|
|
|
|
)))
|
|
|
|
const outerMeasurementRows = computed(() => (measurementDetail.value?.items || []).map((row) => {
|
|
|
|
const outerMeasurementRows = computed(() => (measurementDetail.value?.items || []).map((row) => {
|
|
|
|
const source = row as unknown as Record<string, unknown>
|
|
|
|
const source = row as unknown as Record<string, unknown>
|
|
|
|
return calculatedMeasurementRow({
|
|
|
|
return calculatedMeasurementRow(source, measurementSectionModes.outer)
|
|
|
|
...source,
|
|
|
|
|
|
|
|
lengthCm: source.outerLengthCm ?? source.lengthCm,
|
|
|
|
|
|
|
|
widthCm: source.outerWidthCm ?? source.widthCm,
|
|
|
|
|
|
|
|
heightCm: source.outerHeightCm ?? source.heightCm,
|
|
|
|
|
|
|
|
}, measurementSectionModes.outer)
|
|
|
|
|
|
|
|
}))
|
|
|
|
}))
|
|
|
|
const actualMeasurementRows = computed(() => (measurementDetail.value?.items || []).map((row) => (
|
|
|
|
const actualMeasurementRows = computed(() => (measurementDetail.value?.items || []).map((row) => (
|
|
|
|
calculatedMeasurementRow(row as unknown as Record<string, unknown>, measurementSectionModes.actual)
|
|
|
|
calculatedMeasurementRow(row as unknown as Record<string, unknown>, measurementSectionModes.actual)
|
|
|
@@ -881,9 +876,14 @@ async function saveWarehouseOuterDimensions(row: Record<string, unknown>) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!summary?.inboundId || !measurement?.measurementId || measurement.version == null
|
|
|
|
if (!summary?.inboundId || !measurement?.measurementId || measurement.version == null
|
|
|
|
|| !can('platform:firstleg:inbound:measure:edit')) return
|
|
|
|
|| !can('platform:firstleg:inbound:measure:edit')) return
|
|
|
|
const dimensions = [row.outerLengthCm, row.outerWidthCm, row.outerHeightCm].map(Number)
|
|
|
|
const dimensions = [row.outerLengthCm, row.outerWidthCm, row.outerHeightCm]
|
|
|
|
if (dimensions.some((value) => !Number.isFinite(value) || value <= 0)) {
|
|
|
|
.map((value) => value == null || value === '' ? null : Number(value))
|
|
|
|
ElMessage.warning('仓库修改外箱长、宽、高必须同时填写且大于 0')
|
|
|
|
if (dimensions.every((value) => value == null)) {
|
|
|
|
|
|
|
|
ElMessage.warning('请至少输入一项需要修改的外箱尺寸')
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (dimensions.some((value) => value != null && (!Number.isFinite(value) || value <= 0))) {
|
|
|
|
|
|
|
|
ElMessage.warning('仓库修改外箱尺寸必须大于 0')
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
measurementOuterSavingId.value = String(row.id)
|
|
|
|
measurementOuterSavingId.value = String(row.id)
|
|
|
@@ -1993,13 +1993,13 @@ onBeforeUnmount(() => {
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="#" prop="itemNo" min-width="70" fixed="left" />
|
|
|
|
<el-table-column label="#" prop="itemNo" min-width="70" fixed="left" />
|
|
|
|
<el-table-column label="仓库修改外箱(长)" min-width="160">
|
|
|
|
<el-table-column label="仓库修改外箱(长)" min-width="160">
|
|
|
|
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerLengthCm" aria-label="仓库修改外箱长" :min="0.001" :precision="3" :controls="false" placeholder="请输入" /><template v-else>{{ formatNumber(row.outerLengthCm) }}</template></template>
|
|
|
|
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerLengthCm" aria-label="仓库修改外箱长" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerLengthCm) }}</template></template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="仓库修改外箱(宽)" min-width="160">
|
|
|
|
<el-table-column label="仓库修改外箱(宽)" min-width="160">
|
|
|
|
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerWidthCm" aria-label="仓库修改外箱宽" :min="0.001" :precision="3" :controls="false" placeholder="请输入" /><template v-else>{{ formatNumber(row.outerWidthCm) }}</template></template>
|
|
|
|
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerWidthCm" aria-label="仓库修改外箱宽" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerWidthCm) }}</template></template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="仓库修改外箱(高)" min-width="160">
|
|
|
|
<el-table-column label="仓库修改外箱(高)" min-width="160">
|
|
|
|
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerHeightCm" aria-label="仓库修改外箱高" :min="0.001" :precision="3" :controls="false" placeholder="请输入" /><template v-else>{{ formatNumber(row.outerHeightCm) }}</template></template>
|
|
|
|
<template #default="{ row }"><el-input-number v-if="can('platform:firstleg:inbound:measure:edit')" v-model="row.outerHeightCm" aria-label="仓库修改外箱高" :min="0.001" :precision="3" :controls="false" placeholder="不修改" /><template v-else>{{ formatNumber(row.outerHeightCm) }}</template></template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column v-if="can('platform:firstleg:inbound:measure:edit')" label="仓库外箱操作" min-width="120">
|
|
|
|
<el-table-column v-if="can('platform:firstleg:inbound:measure:edit')" label="仓库外箱操作" min-width="120">
|
|
|
|
<template #default="{ row }"><el-button type="primary" plain size="small" :loading="measurementOuterSavingId === String(row.id)" :disabled="Boolean(measurementOuterSavingId)" @click="saveWarehouseOuterDimensions(row as Record<string, unknown>)">保存外箱</el-button></template>
|
|
|
|
<template #default="{ row }"><el-button type="primary" plain size="small" :loading="measurementOuterSavingId === String(row.id)" :disabled="Boolean(measurementOuterSavingId)" @click="saveWarehouseOuterDimensions(row as Record<string, unknown>)">保存外箱</el-button></template>
|
|
|
|