feat(fleet): integrate trip management and fee coverage workflows
This commit is contained in:
@@ -118,7 +118,7 @@ async function mountView() {
|
||||
|
||||
async function openPending() {
|
||||
const wrapper = await mountView()
|
||||
const pendingTab = wrapper.findAll('.el-radio-button').find((item) => item.text() === '待分配')
|
||||
const pendingTab = wrapper.findAll('[role="tab"]').find((item) => item.text() === '待分配')
|
||||
await pendingTab!.trigger('click')
|
||||
await flushPromises()
|
||||
return wrapper
|
||||
@@ -159,6 +159,74 @@ async function chooseContainer(wrapper: Awaited<ReturnType<typeof mountView>>) {
|
||||
}
|
||||
|
||||
describe('LastMileOrdersView pending order and container conversion', () => {
|
||||
it('supports keyboard status switching and keeps selection and queries in sync', async () => {
|
||||
const wrapper = await mountView()
|
||||
const tabs = wrapper.findAll('[role="tab"]')
|
||||
expect(tabs.map((tab) => tab.text())).toEqual(['全部', '待分配'])
|
||||
expect(tabs[0]!.attributes('aria-selected')).toBe('true')
|
||||
expect(tabs[1]!.attributes('tabindex')).toBe('-1')
|
||||
await selectRows(wrapper, [selectedRow()])
|
||||
await tabs[0]!.trigger('keydown', { key: 'ArrowRight' })
|
||||
await flushPromises()
|
||||
expect(tabs[1]!.attributes('aria-selected')).toBe('true')
|
||||
expect(tabs[1]!.classes()).toContain('is-active')
|
||||
expect(document.activeElement).toBe(tabs[1]!.element)
|
||||
expect(listLastMileOrders).toHaveBeenLastCalledWith(expect.objectContaining({ page: 1, currentStatus: 'PENDING_ASSIGNMENT' }))
|
||||
expect((wrapper.vm as unknown as { selectedRows: unknown[] }).selectedRows).toEqual([])
|
||||
const callCount = vi.mocked(listLastMileOrders).mock.calls.length
|
||||
await tabs[1]!.trigger('click')
|
||||
await flushPromises()
|
||||
expect(vi.mocked(listLastMileOrders)).toHaveBeenCalledTimes(callCount)
|
||||
await tabs[1]!.trigger('keydown', { key: 'Home' })
|
||||
await flushPromises()
|
||||
expect(tabs[0]!.attributes('aria-selected')).toBe('true')
|
||||
expect(listLastMileOrders).toHaveBeenLastCalledWith(expect.objectContaining({ currentStatus: undefined }))
|
||||
await tabs[0]!.trigger('keydown', { key: 'End' })
|
||||
await flushPromises()
|
||||
expect(tabs[1]!.attributes('aria-selected')).toBe('true')
|
||||
})
|
||||
|
||||
it('preserves advanced conditions when collapsed and clears them on reset', async () => {
|
||||
const wrapper = await mountView()
|
||||
const toolbar = wrapper.findComponent(QueryToolbar)
|
||||
expect(toolbar.props('fields').map((field) => field.key)).toEqual(['orderNo', 'inboundCode', 'warehouse'])
|
||||
const initialCalls = vi.mocked(listLastMileOrders).mock.calls.length
|
||||
await button(wrapper, '高级筛选')!.trigger('click')
|
||||
expect(toolbar.props('fields')).toHaveLength(13)
|
||||
toolbar.vm.$emit('update:modelValue', {
|
||||
...toolbar.props('modelValue'), containerNo: ' CONT-15 ', abnormal: 'false',
|
||||
createdAt: ['2026-09-01', '2026-09-30'],
|
||||
})
|
||||
await wrapper.vm.$nextTick()
|
||||
await button(wrapper, '收起筛选')!.trigger('click')
|
||||
expect(vi.mocked(listLastMileOrders)).toHaveBeenCalledTimes(initialCalls)
|
||||
expect(toolbar.props('modelValue').containerNo).toBe(' CONT-15 ')
|
||||
await button(wrapper, '查询')!.trigger('click')
|
||||
await flushPromises()
|
||||
expect(listLastMileOrders).toHaveBeenLastCalledWith(expect.objectContaining({
|
||||
containerNo: 'CONT-15', abnormal: false,
|
||||
createdFrom: '2026-09-01T00:00:00', createdTo: '2026-09-30T23:59:59',
|
||||
}))
|
||||
await button(wrapper, '重置')!.trigger('click')
|
||||
await flushPromises()
|
||||
expect(vi.mocked(listLastMileOrders)).toHaveBeenCalledTimes(initialCalls + 2)
|
||||
expect(listLastMileOrders).toHaveBeenLastCalledWith(expect.objectContaining({
|
||||
page: 1, containerNo: undefined, abnormal: undefined, createdFrom: undefined, createdTo: undefined,
|
||||
}))
|
||||
await button(wrapper, '高级筛选')!.trigger('click')
|
||||
expect(toolbar.props('modelValue').containerNo).toBe('')
|
||||
expect(toolbar.props('modelValue').createdAt).toEqual([])
|
||||
})
|
||||
|
||||
it('keeps container filters separate from the advanced order fields', async () => {
|
||||
const wrapper = await mountView()
|
||||
await button(wrapper, '高级筛选')!.trigger('click')
|
||||
await openHiddenContainerWorkbench(wrapper)
|
||||
expect(wrapper.findComponent(QueryToolbar).props('fields').map((field) => field.key)).toEqual(['containerNo', 'createdAt'])
|
||||
expect(button(wrapper, '收起筛选')).toBeUndefined()
|
||||
expect(button(wrapper, '高级筛选')).toBeUndefined()
|
||||
})
|
||||
|
||||
it('keeps the original carton count and adds only the signed difference in the list', async () => {
|
||||
canAccess.mockReturnValue(false)
|
||||
vi.mocked(listLastMileOrders).mockResolvedValue({ records: [{
|
||||
@@ -300,7 +368,7 @@ describe('LastMileOrdersView pending order and container conversion', () => {
|
||||
]))
|
||||
expect(availableFields.map((field) => field.key)).not.toEqual(expect.arrayContaining(['planNo', 'inboundOrderNo']))
|
||||
|
||||
await wrapper.findAll('.el-radio-button').find((item) => item.text() === '待分配')!.trigger('click')
|
||||
await wrapper.findAll('[role="tab"]').find((item) => item.text() === '待分配')!.trigger('click')
|
||||
await flushPromises()
|
||||
expect(listLastMileOrders).toHaveBeenLastCalledWith(expect.objectContaining({ currentStatus: 'PENDING_ASSIGNMENT', lxCode: 'LX-SEARCH' }))
|
||||
|
||||
@@ -310,7 +378,7 @@ describe('LastMileOrdersView pending order and container conversion', () => {
|
||||
createdFrom: '2026-09-01T00:00:00', createdTo: '2026-09-07T23:59:59',
|
||||
})
|
||||
|
||||
await wrapper.findAll('.el-radio-button').find((item) => item.text() === '全部')!.trigger('click')
|
||||
await wrapper.findAll('[role="tab"]').find((item) => item.text() === '全部')!.trigger('click')
|
||||
await flushPromises()
|
||||
expect(listLastMileOrders).toHaveBeenLastCalledWith(expect.objectContaining({ currentStatus: 'DELIVERED', lxCode: 'LX-SEARCH' }))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user