This commit is contained in:
2026-10-21 15:49:35 +08:00
parent e6c864a2a6
commit a4c7f8edd5
38 changed files with 466 additions and 95 deletions
@@ -77,7 +77,7 @@ describe('smart dispatch three-column cargo board', () => {
await select(wrapper); await wrapper.setProps({ disabled: true })
expect(wrapper.findAll('button').filter(button => ['添加车辆', '移除货物', '删除车辆', '查看托盘'].includes(button.text())).every(button => button.attributes('disabled') !== undefined)).toBe(true)
expect(wrapper.findAll('input[type="radio"]').every(input => input.attributes('disabled') !== undefined)).toBe(true)
await pallet(wrapper).trigger('dragstart', { dataTransfer: transfer() })
expect(wrapper.find('[aria-label="托盘明细"] tr[draggable]').exists()).toBe(false)
await wrapper.get('[aria-label="第 2 辆车"]').trigger('drop')
await wrapper.get('[aria-label="候选货物分页"] button.btn-next').trigger('click')
expect(wrapper.emitted('add')).toBeUndefined()
@@ -106,13 +106,30 @@ describe('smart dispatch three-column cargo board', () => {
expect(wrapper.get('[aria-label="第 1 辆车"]').findAll('.cargo-board-loaded-pallet')).toHaveLength(1)
for (const index of [0, 1]) {
await select(wrapper, index)
expect(pallet(wrapper).attributes('draggable')).toBe('false')
expect(pallet(wrapper).get('button').text()).toBe('已加入第 1 辆车')
expect(pallet(wrapper).get('button').attributes('disabled')).toBeDefined()
expect(wrapper.find('[aria-label="托盘明细"] tr[draggable]').exists()).toBe(false)
}
expect(wrapper.emitted('add')).toBeUndefined()
})
it('moves a confirmed pallet out of the middle list and restores it when removed; only empty cars can be deleted', async () => {
const source = candidate(), state = draft(), wrapper = render([source])
await select(wrapper)
expect(pallet(wrapper).findAll('td')).toHaveLength(2)
expect(pallet(wrapper).get('button').text()).toBe('PALLET-1')
expect(wrapper.text()).not.toContain('加入这辆车')
state.sources = [source]; state.containers[0]!.sourceKeys = [source.sourceKey]
await wrapper.setProps({ draft: clone(state) })
expect(wrapper.find('[aria-label="托盘明细"] tr[draggable]').exists()).toBe(false)
const loaded = wrapper.get('[aria-label="第 1 辆车"]')
expect(loaded.text()).not.toContain('删除车辆')
expect(wrapper.get('[aria-label="第 2 辆车"]').text()).toContain('删除车辆')
await loaded.get('[aria-label="移回托盘 PALLET-1"]').trigger('click')
expect(wrapper.emitted('removeCargo')).toEqual([[source, 'car-1']])
await wrapper.setProps({ draft: draft() })
expect(pallet(wrapper).text()).toContain('PALLET-1')
expect(wrapper.get('[aria-label="第 1 辆车"]').text()).toContain('删除车辆')
})
it('blocks incomplete server-owned groups and does not convert missing measurements to zero', async () => {
const source = candidate({ suggestedWeightKg: null, suggestedVolumeCbm: null })
source.selectionGroup.complete = false