Merge remote-tracking branch 'origin/release/test' into dev

# Conflicts:
#	AGENTS.md
#	src/modules/container-loading/pages/GlobalSmartLoadingView.vue
#	src/modules/container-loading/pages/SmartLoadingWorkbenchView.vue
This commit is contained in:
2026-09-04 16:21:32 +08:00
26 changed files with 278 additions and 233 deletions
@@ -323,6 +323,7 @@ describe('UnifiedOrdersView contract', () => {
expect(source).toContain('仓库修改外箱(宽)')
expect(source).toContain('仓库修改外箱(高)')
expect(source).toContain('saveWarehouseOuterDimensions')
expect(source).toContain("'MEASURE_REJECTED', 'WAIT_SPLIT'")
expect(source).not.toContain('请至少输入一项需要修改的外箱尺寸')
expect(source).toContain(".map((value) => value == null || value === '' ? null : Number(value))")
expect(source).toContain('相关数值已重新计算')
@@ -366,12 +367,11 @@ describe('UnifiedOrdersView contract', () => {
expect(source).toContain("updateMeasurementSectionMode('actual', $event)")
expect(source).not.toContain("updateMeasurementSectionMode('outer', $event)")
expect(source.match(/@change="selectAndSaveOuterMeasurementMode\(\$event\)"/g)).toHaveLength(2)
expect(source).toContain('@visible-change="handleOuterModeDropdownVisibleChange($event)"')
expect(source).not.toContain('@visible-change="handleOuterModeDropdownVisibleChange($event)"')
expect(source.match(/:disabled="Boolean\(measurementStrategySavingId\) \|\| !can\('platform:firstleg:inbound:measure:edit'\)"/g)).toHaveLength(2)
expect(source).toContain('const previousMode = measurementSectionModes.outer')
expect(source).toContain('if (!saved) measurementSectionModes.outer = previousMode')
expect(source).toContain('const selectedSameMode = outerModeAtDropdownOpen.value === measurementSectionModes.outer')
expect(source).toContain('await nextTick()')
expect(source).not.toContain('handleOuterModeDropdownVisibleChange')
expect(source).toContain('const saved = await updateMeasurementCalculationMode(null, mode, ruleId)')
expect(source).toContain('calculatedMeasurementRow(row, measurementSectionModes.customer, true)')
expect(source).toContain('calculatedMeasurementRow(source, measurementSectionModes.outer)')
@@ -381,6 +381,7 @@ describe('UnifiedOrdersView contract', () => {
expect(source).not.toContain("!customerSource && mode !== 'ACTUAL'")
expect(source).toContain('rawDimensions.map((value) => value + rule.edgeAdditionCm * 2)')
expect(source).toContain('matchedSpecificationCoefficient(chargeRule, calculationSource)')
expect(source).toContain(".find((item) => item.id === boundChargeRuleId && item.status === 'ACTIVE')")
expect(source).toContain('listCustomerChargeRules(customerId, tenantId)')
expect(source).toContain('matchedDimensions.map((value) => roundedUp(value * specificationCoefficient, 3))')
expect(source).toContain('const selectedMode: MeasurementCalculationMode = measurementSectionModes.outer')
@@ -405,15 +406,21 @@ describe('UnifiedOrdersView contract', () => {
expect(source).toContain('outerLengthCm: item.outerLengthCm')
expect(source).toContain('outerWidthCm: item.outerWidthCm')
expect(source).toContain('outerHeightCm: item.outerHeightCm')
expect(source).toContain("String(item.chargeRuleId) === String(activeRule!.id)")
expect(source).toContain('item.calculatedOuterLengthCm, item.calculatedOuterWidthCm, item.calculatedOuterHeightCm')
expect(source).toContain('if (dimensions.every((dimension) => dimension == null)) return true')
expect(source).toContain('const savedDraft = await saveInboundMeasurementDraft')
expect(source).toContain('version: savedDraft.version')
expect(source).toContain('waitForSavedMeasurementVersion(')
expect(source).toContain('Number(refreshed.version) >= savedVersion')
expect(source).toContain('setTimeout(resolve, 250)')
expect(source).toContain("chargeRuleId: mode === 'MULTIPLY' ? activeRule!.id : null")
expect(source).toContain('calculatedOuterLengthCm: null')
expect(source).not.toContain('计算策略保存后回读不一致,请刷新后重试')
expect(source).toContain('已保存并绑定计算规则,体积已重新计算')
expect(source).toContain('const measuredGrossWeight = Number(measurementDetail.value?.actualGrossWeightKg)')
expect(source).toContain('const measuredNetWeight = Number(measurementDetail.value?.actualNetWeightKg)')
expect(source).toContain('const actualVolume = Number(measurementDetail.value?.actualVolumeCbm)')
expect(source).toContain('feeConfirmWeight.value = measuredGrossWeight > 0')
expect(source).toContain('feeConfirmVolume.value = actualVolume > 0')
expect(source).not.toContain('const actualVolume = Number(measurementDetail.value?.actualVolumeCbm)')
expect(source).toContain('feeConfirmWeight.value = Number(actualTotals.gross) > 0')
expect(source).toContain('feeConfirmVolume.value = Number(actualTotals.volume) > 0')
expect(source).toContain("{ source: '实际测量数据', count: actualTotals.count, weight: actualWeight, volume: actualVolume }")
const sendFeeSource = source.slice(source.indexOf('async function executeConfirmAndSendFee()'), source.indexOf('function handleOrderSelectionChange'))
expect(sendFeeSource).not.toContain('saveInboundMeasurementDraft')
expect(sendFeeSource).not.toContain('updateMeasurementCalculationMode')