Release/test 合并上生产 #2

Merged
admin merged 736 commits from release/test into main 2026-09-17 11:50:56 +08:00
4 changed files with 25 additions and 28 deletions
Showing only changes of commit 52b1fce8c1 - Show all commits
@@ -321,19 +321,17 @@ describe('InboundMeasurementPanel', () => {
expect(payload).not.toHaveProperty('originalVolumeCbm')
})
it('saves all three warehouse outer dimensions against the measured sequence', async () => {
it('allows saving one warehouse outer dimension against the measured sequence', async () => {
const wrapper = await mountPanel()
expect(wrapper.text()).toContain('001')
await wrapper.find('input[aria-label="仓库修改外箱长"]').setValue('55')
await wrapper.find('input[aria-label="仓库修改外箱宽"]').setValue('45')
await wrapper.find('input[aria-label="仓库修改外箱高"]').setValue('35')
const save = wrapper.findAll('button').find((button) => button.text().includes('保存测量数据'))
await save?.trigger('click')
await flushPromises()
const payload = vi.mocked(saveInboundMeasurementDraft).mock.calls[0]?.[2]
expect(payload?.items[0]).toMatchObject({
itemNo: '001', outerLengthCm: 55, outerWidthCm: 45, outerHeightCm: 35,
itemNo: '001', outerLengthCm: 55, outerWidthCm: null, outerHeightCm: null,
})
})
@@ -416,7 +416,6 @@ function validateDraft() {
}
const outerDimensions = [item.outerLengthCm, item.outerWidthCm, item.outerHeightCm]
if (outerDimensions.some((value) => value != null)) {
if (outerDimensions.some((value) => value == null)) itemErrors.push('仓库修改外箱长、宽、高必须同时填写')
outerDimensions.forEach((value) => {
if (value != null && (!Number.isFinite(value) || value <= 0)) itemErrors.push('仓库修改外箱尺寸必须大于 0')
else if (value != null && Math.abs(value * 1000 - Math.round(value * 1000)) > 1e-6) itemErrors.push('仓库修改外箱尺寸最多保留 3 位小数')
@@ -351,7 +351,7 @@ describe('UnifiedOrdersView contract', () => {
expect(source).toContain("updateMeasurementSectionMode('outer', $event)")
expect(source).toContain("updateMeasurementSectionMode('actual', $event)")
expect(source).toContain('calculatedMeasurementRow(row, measurementSectionModes.customer, true)')
expect(source).toContain('}, measurementSectionModes.outer)')
expect(source).toContain('calculatedMeasurementRow(source, measurementSectionModes.outer)')
expect(source).toContain('calculatedMeasurementRow(row as unknown as Record<string, unknown>, measurementSectionModes.actual)')
expect(source).toContain('rawDimensions.map((value) => value + rule.edgeAdditionCm)')
expect(source).toContain('matchedSpecificationCoefficient(chargeRule, calculationSource)')
@@ -333,14 +333,7 @@ function calculatedMeasurementRow(
mode: MeasurementCalculationMode,
customerSource = false,
) {
const calculationSource = !customerSource && mode !== 'ACTUAL'
? {
...source,
lengthCm: source.outerLengthCm ?? source.lengthCm,
widthCm: source.outerWidthCm ?? source.widthCm,
heightCm: source.outerHeightCm ?? source.heightCm,
}
: source
const calculationSource = source
const rule = matchingDimensionRule(calculationSource)
const rawDimensions = [Number(calculationSource.lengthCm), Number(calculationSource.widthCm), Number(calculationSource.heightCm)]
if (!rawDimensions.every((value) => Number.isFinite(value) && value > 0)) return { ...source }
@@ -352,9 +345,16 @@ function calculatedMeasurementRow(
const specificationCoefficient = mode === 'MULTIPLY' && chargeRule
? matchedSpecificationCoefficient(chargeRule, calculationSource)
: 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 unitVolumeCbm = mode === 'ADD' && rule
const unitVolumeCbm = mode === 'ADD' && rule && !hasOuterOverride
? Math.round((lengthCm * widthCm * heightCm / 1_000_000) * 1000) / 1000
: roundedUp(lengthCm * widthCm * heightCm / 1_000_000, 4)
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 source = row as unknown as Record<string, unknown>
return calculatedMeasurementRow({
...source,
lengthCm: source.outerLengthCm ?? source.lengthCm,
widthCm: source.outerWidthCm ?? source.widthCm,
heightCm: source.outerHeightCm ?? source.heightCm,
}, measurementSectionModes.outer)
return calculatedMeasurementRow(source, measurementSectionModes.outer)
}))
const actualMeasurementRows = computed(() => (measurementDetail.value?.items || []).map((row) => (
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
|| !can('platform:firstleg:inbound:measure:edit')) return
const dimensions = [row.outerLengthCm, row.outerWidthCm, row.outerHeightCm].map(Number)
if (dimensions.some((value) => !Number.isFinite(value) || value <= 0)) {
ElMessage.warning('仓库修改外箱长、宽、高必须同时填写且大于 0')
const dimensions = [row.outerLengthCm, row.outerWidthCm, row.outerHeightCm]
.map((value) => value == null || value === '' ? null : Number(value))
if (dimensions.every((value) => value == null)) {
ElMessage.warning('请至少输入一项需要修改的外箱尺寸')
return
}
if (dimensions.some((value) => value != null && (!Number.isFinite(value) || value <= 0))) {
ElMessage.warning('仓库修改外箱尺寸必须大于 0')
return
}
measurementOuterSavingId.value = String(row.id)
@@ -1993,13 +1993,13 @@ onBeforeUnmount(() => {
</el-table-column>
<el-table-column label="#" prop="itemNo" min-width="70" fixed="left" />
<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 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 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 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>