feat: connect plan-level preload confirmation
This commit is contained in:
@@ -27,22 +27,36 @@ describe('LoadingListsView', () => {
|
||||
expect(source).not.toContain("key: 'warehouseId'")
|
||||
expect(source).not.toContain('loadingWarehouses')
|
||||
expect(source).not.toContain('warehouseId: warehouseId || undefined')
|
||||
expect(source).toContain("selectedWarehouseId.value = String(row.warehouseId || '')")
|
||||
expect(source).toContain('query: { warehouseId: String(row.warehouseId || \'\') }')
|
||||
expect(source).not.toContain("ElMessage.warning('请先选择仓库')")
|
||||
expect(source).not.toContain("'请先选择仓库后查询'")
|
||||
expect(source).toContain('MISSING_WAREHOUSE_CONTEXT')
|
||||
expect(preloadDetailSource).toContain('MISSING_WAREHOUSE_CONTEXT')
|
||||
expect(confirmedDetailSource).toContain('MISSING_WAREHOUSE_CONTEXT')
|
||||
})
|
||||
|
||||
it('uses the shared query, table, dialog and error components without a detail drawer', () => {
|
||||
it('uses the shared query and table components while keeping details on route pages', () => {
|
||||
expect(source).toContain('QueryToolbar')
|
||||
expect(source).toContain('DataTable')
|
||||
expect(source).toContain('AppDialog')
|
||||
expect(source).toContain('LoadErrorState')
|
||||
expect(source).toContain('ApiErrorMeta')
|
||||
expect(preloadDetailSource).toContain('AppDialog')
|
||||
expect(confirmedDetailSource).toContain('AppDialog')
|
||||
expect(detailSource).not.toContain('AppDrawer')
|
||||
expect(detailSource).toContain('ContainerFeesPanel')
|
||||
})
|
||||
|
||||
it('distinguishes the generated cabinet reference from the physical container number', () => {
|
||||
expect(source).toContain("label: '柜次号'")
|
||||
expect(source).toContain("label: '集装箱号'")
|
||||
expect(source).toContain('装柜清单号/柜次号/集装箱号')
|
||||
expect(detailSource).toContain('<span>柜次号</span>')
|
||||
expect(detailSource).toContain('<span>集装箱号</span>')
|
||||
expect(source).not.toContain("label: '柜号'")
|
||||
expect(detailSource).not.toContain('<span>柜号</span>')
|
||||
expect(source).toContain("key: 'cabinetNo', prop: 'cabinetNo'")
|
||||
expect(source).not.toContain('internalContainerNo')
|
||||
})
|
||||
|
||||
it('opens both preload and confirmed details as independent route pages', () => {
|
||||
expect(source).toContain("name: 'preload-plan-detail'")
|
||||
expect(source).toContain("name: 'loading-list-detail'")
|
||||
@@ -55,20 +69,19 @@ describe('LoadingListsView', () => {
|
||||
expect(routesSource).toContain("name: 'loading-list-detail'")
|
||||
})
|
||||
|
||||
it('keeps the real transport edit contract in a 620px centered modal', () => {
|
||||
expect(source).toContain('class="loading-transport-dialog"')
|
||||
expect(source).toContain('width="min(620px, calc(100vw - 28px))"')
|
||||
it('keeps the real transport edit contract in a 620px centered modal on the detail page', () => {
|
||||
expect(source).not.toContain('class="loading-transport-dialog"')
|
||||
expect(preloadDetailSource).toContain('width="min(620px, calc(100vw - 28px))"')
|
||||
expect(source).not.toContain('备注信息(仅自己可见)')
|
||||
expect(source).not.toContain('备注信息(客户可见)')
|
||||
expect(source).not.toContain('备注信息(仓库可见)')
|
||||
expect(preloadDetailSource).not.toContain('备注信息(仅自己可见)')
|
||||
expect(preloadDetailSource).not.toContain('备注信息(客户可见)')
|
||||
expect(preloadDetailSource).not.toContain('备注信息(仓库可见)')
|
||||
})
|
||||
|
||||
it('only exposes transport editing for LOADING preload details', () => {
|
||||
expect(detailSource).toContain("mode === 'preload' && canEdit && ['EDITING', 'LOADING'].includes(summary.status)")
|
||||
expect(detailSource).toContain('报关资料')
|
||||
expect(detailSource).toContain('完成报关')
|
||||
expect(source).toContain('expectedVersion: detail.value.summary.version')
|
||||
expect(preloadDetailSource).toContain('expectedVersion: detail.value.summary.version')
|
||||
})
|
||||
|
||||
it('renders business labels instead of raw loading-plan status codes', () => {
|
||||
@@ -78,16 +91,17 @@ describe('LoadingListsView', () => {
|
||||
expect(source).not.toContain('仅装柜中允许修改')
|
||||
})
|
||||
|
||||
it('exposes a row edit action only for loading preload plans', () => {
|
||||
expect(source).toContain("isPreload && canEdit && ['EDITING', 'LOADING'].includes(row.status)")
|
||||
expect(source).toContain('openEditFromRow(row)')
|
||||
expect(source).toContain('await loadDetail()')
|
||||
it('keeps transport editing as a detail-page action', () => {
|
||||
expect(source).not.toContain('openEditFromRow(row)')
|
||||
expect(source).not.toContain('编辑运输信息')
|
||||
expect(detailSource).toContain("{{ preloadSummary?.containerNo ? '修改集装箱号 / 航次' : '录入集装箱号' }}")
|
||||
expect(preloadDetailSource).toContain("const editDialogTitle = computed(() => detail.value?.summary.containerNo ? '修改集装箱号 / 航次' : '录入集装箱号')")
|
||||
})
|
||||
|
||||
it('refreshes the detail version on A0409 while preserving transport input', () => {
|
||||
expect(source).toContain("details.code === 'A0409'")
|
||||
expect(source).toContain('await loadDetail()')
|
||||
expect(source).toContain('当前输入已保留,请核对后重新保存')
|
||||
expect(preloadDetailSource).toContain("details.code === 'A0409'")
|
||||
expect(preloadDetailSource).toContain('await loadDetail()')
|
||||
expect(preloadDetailSource).toContain('当前输入已保留,请核对后重新保存')
|
||||
})
|
||||
|
||||
it('opens a validated plan and warehouse deep link without mixing list modes', () => {
|
||||
@@ -99,6 +113,16 @@ describe('LoadingListsView', () => {
|
||||
expect(confirmedDetailSource).toContain('MODE_STATUS_MISMATCH')
|
||||
})
|
||||
|
||||
it('uses backend readiness for whole-plan confirmation and translates blocking reasons', () => {
|
||||
expect(detailSource).toContain(':disabled="!preloadSummary?.readiness.canConfirm"')
|
||||
expect(detailSource).toContain("PRELOAD_NOT_PUSHED: '尚未推送预装清单'")
|
||||
expect(detailSource).toContain("OCEAN_BOOKING_NOT_RELEASED: '关联订舱尚未放舱'")
|
||||
expect(detailSource).toContain("PRELOAD_ALREADY_CONFIRMED: '整份预装计划已经确认'")
|
||||
expect(detailSource).toContain("confirmationStatus === 'CONFIRMED'")
|
||||
expect(detailSource).toContain("pdaTaskStatusLabels")
|
||||
expect(preloadDetailSource).toContain('@confirm-preload="openConfirmPreload"')
|
||||
})
|
||||
|
||||
it('passes translated status text directly to the badge', () => {
|
||||
expect(source).toContain('<StatusBadge :status="loadingListStatusLabel(row.status)" />')
|
||||
expect(source).not.toContain('<StatusBadge :status="row.status" />')
|
||||
@@ -107,10 +131,8 @@ describe('LoadingListsView', () => {
|
||||
|
||||
it('uses bordered list actions with a stable 320px layout', () => {
|
||||
expect(source).toContain('size="small" type="primary" plain')
|
||||
expect(source).toContain('size="small" @click="openEditFromRow(row)"')
|
||||
expect(source).toContain('编辑运输信息')
|
||||
expect(source).not.toContain('<el-button v-if="canView" link')
|
||||
expect(source).toContain("key: 'actions', label: '操作', fixed: 'left', width: 230")
|
||||
expect(source).toContain("key: 'actions', label: '操作', fixed: 'left', width: 110")
|
||||
expect(source).toContain('flex-wrap: wrap')
|
||||
expect(source).toContain('@media (max-width: 720px)')
|
||||
expect(source).toContain('.row-actions { gap: 4px; }')
|
||||
@@ -119,6 +141,7 @@ describe('LoadingListsView', () => {
|
||||
})
|
||||
|
||||
it('does not expose unknown history action codes', () => {
|
||||
expect(detailSource).toContain("CONFIRM_PRELOAD: '确认预装'")
|
||||
expect(detailSource).toContain("[action] || '状态更新'")
|
||||
expect(detailSource).not.toContain('[action] || action')
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user