优化
This commit is contained in:
@@ -114,7 +114,14 @@ function measurement(overrides: Partial<InboundMeasurementDetail> = {}): Inbound
|
|||||||
outerHeightCm: null,
|
outerHeightCm: null,
|
||||||
remark: '设备自动回传',
|
remark: '设备自动回传',
|
||||||
}],
|
}],
|
||||||
weightResults: [],
|
weightResults: [{
|
||||||
|
id: '30001', fileId: '40001', palletId: '50001', palletCode: 'TP-001', palletType: '木托盘',
|
||||||
|
palletCapacityCbm: 1.2, palletTareWeightKg: 10, ocrProvider: 'FILE_WEIGHT_OCR', ocrRawText: '120',
|
||||||
|
ocrWeightValue: 120, ocrWeightUnit: 'KG', confidence: 0.98, adjustedWeightValue: null,
|
||||||
|
adjustedWeightUnit: null, grossWeightKg: 120, netWeightKg: 110, recognitionStatus: 'CONFIRMED',
|
||||||
|
adjustmentReason: null, adjustedBy: null, adjustedAt: null, confirmedBy: '9',
|
||||||
|
confirmedAt: '2026-08-04T10:35:00+08:00', version: 1,
|
||||||
|
}],
|
||||||
...overrides,
|
...overrides,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -478,6 +485,16 @@ describe('InboundMeasurementPanel', () => {
|
|||||||
expect(wrapper.emitted('changed')).toHaveLength(1)
|
expect(wrapper.emitted('changed')).toHaveLength(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('requires at least one confirmed weight image before submitting for review', async () => {
|
||||||
|
vi.mocked(getInboundMeasurement).mockResolvedValueOnce(measurement({ weightResults: [] }))
|
||||||
|
const wrapper = await mountPanel()
|
||||||
|
|
||||||
|
expect(wrapper.text()).toContain('至少上传并确认一张称重图片后才能提交审核')
|
||||||
|
const submit = wrapper.findAll('button').find((button) => button.text().includes('提交审核'))
|
||||||
|
expect(submit?.attributes('disabled')).toBeDefined()
|
||||||
|
expect(submitInboundMeasurement).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
it('emits updated without closing the parent task after manual carton entry', async () => {
|
it('emits updated without closing the parent task after manual carton entry', async () => {
|
||||||
const wrapper = await mountPanel()
|
const wrapper = await mountPanel()
|
||||||
const source = await import('./InboundMeasurementPanel.vue?raw').then((module) => module.default)
|
const source = await import('./InboundMeasurementPanel.vue?raw').then((module) => module.default)
|
||||||
|
|||||||
@@ -112,7 +112,8 @@ const confirmedPackageCount = computed(() => form.items.reduce((sum, item) => su
|
|||||||
const expectedPackageCount = computed(() => detail.value?.originalPackageCount ?? null)
|
const expectedPackageCount = computed(() => detail.value?.originalPackageCount ?? null)
|
||||||
const packageCountDifference = computed(() => expectedPackageCount.value == null ? null : confirmedPackageCount.value - expectedPackageCount.value)
|
const packageCountDifference = computed(() => expectedPackageCount.value == null ? null : confirmedPackageCount.value - expectedPackageCount.value)
|
||||||
const packageCountMatched = computed(() => packageCountDifference.value === null || packageCountDifference.value === 0)
|
const packageCountMatched = computed(() => packageCountDifference.value === null || packageCountDifference.value === 0)
|
||||||
const maySubmit = computed(() => canSubmit.value && submitEditableProcess.value && Boolean(form.measurementId) && packageCountMatched.value && !loading.value && !saving.value)
|
const hasConfirmedWeightResult = computed(() => detail.value?.weightResults.some((item) => item.recognitionStatus === 'CONFIRMED') === true)
|
||||||
|
const maySubmit = computed(() => canSubmit.value && submitEditableProcess.value && Boolean(form.measurementId) && packageCountMatched.value && hasConfirmedWeightResult.value && !loading.value && !saving.value)
|
||||||
const snapshot = computed(() => JSON.stringify(form))
|
const snapshot = computed(() => JSON.stringify(form))
|
||||||
const isDirty = computed(() => Boolean(detail.value) && snapshot.value !== baseline.value)
|
const isDirty = computed(() => Boolean(detail.value) && snapshot.value !== baseline.value)
|
||||||
const registrationOpen = computed(() => hasContext.value && canView.value && Boolean(detail.value))
|
const registrationOpen = computed(() => hasContext.value && canView.value && Boolean(detail.value))
|
||||||
@@ -776,7 +777,8 @@ defineExpose({ saveDraft, submitForReview, updateActualWeights, mayMaintain, may
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<footer v-if="canEdit || canSubmit" class="measurement-panel__footer">
|
<footer v-if="canEdit || canSubmit" class="measurement-panel__footer">
|
||||||
<span v-if="isDirty"><AlertTriangle :size="15" />有尚未保存的修改</span>
|
<span v-if="!hasConfirmedWeightResult"><AlertTriangle :size="15" />至少上传并确认一张称重图片后才能提交审核</span>
|
||||||
|
<span v-else-if="isDirty"><AlertTriangle :size="15" />有尚未保存的修改</span>
|
||||||
<span v-else>所有修改已保存</span>
|
<span v-else>所有修改已保存</span>
|
||||||
<div>
|
<div>
|
||||||
<el-button v-if="canEdit" type="primary" plain :loading="saving" :disabled="!mayMaintain" @click="saveDraft"><Save :size="15" />保存测量数据</el-button>
|
<el-button v-if="canEdit" type="primary" plain :loading="saving" :disabled="!mayMaintain" @click="saveDraft"><Save :size="15" />保存测量数据</el-button>
|
||||||
|
|||||||
Reference in New Issue
Block a user