diff --git a/src/modules/overseas-business/contract.test.ts b/src/modules/overseas-business/contract.test.ts index c6965493..c083baa8 100644 --- a/src/modules/overseas-business/contract.test.ts +++ b/src/modules/overseas-business/contract.test.ts @@ -48,7 +48,8 @@ describe('overseas business real contract pages', () => { const purchaseEdit = read('pages/PurchaseOrderEditView.vue'); const transportList = read('pages/TransportOrdersView.vue'); const transportForm = read('pages/TransportOrderFormView.vue') expect(purchaseEdit).toContain('useUnsavedWorkRegistration') expect(transportForm).toContain('useUnsavedWorkRegistration') - expect(transportList).toContain("row.status === 'PENDING_ACCEPTANCE'") + expect(transportList).not.toContain("isLooseboard.value ? row.status === 'PENDING_ACCEPTANCE'") + expect(transportList).toContain("!isLooseboard.value && !row.fleetArrangement && row.status === 'PENDING_REVIEW'") expect(transportList).toContain("row.status === 'PENDING_REVIEW'") expect(transportForm).toContain("form.status === 'PENDING_ACCEPTANCE'") expect(transportForm).toContain("form.status === 'PENDING_REVIEW'") diff --git a/src/modules/overseas-business/pages/TransportOrdersView.test.ts b/src/modules/overseas-business/pages/TransportOrdersView.test.ts index 908ab1e2..222ee4cc 100644 --- a/src/modules/overseas-business/pages/TransportOrdersView.test.ts +++ b/src/modules/overseas-business/pages/TransportOrdersView.test.ts @@ -52,12 +52,10 @@ describe('transport document entry', () => { expect(routing.push).toHaveBeenCalledWith({ name: 'overseas-business-looseboard-detail', params: { orderId: 'LB-TEST' }, query: { customerId: '9007199254741999' } }) }) - it('preserves the permitted looseboard edit entry alongside its detail', async () => { + it('does not expose looseboard editing from the list even when permission exists', async () => { const wrapper = mountList('looseboard', true); await flushPromises() const actions = wrapper.findComponent(RowActions) - expect(actions.text()).toContain('编辑') - actions.vm.$emit('action', 'edit'); await flushPromises() - expect(routing.push).toHaveBeenCalledWith({ name: 'overseas-business-looseboard-edit', params: { orderId: 'LB-TEST' }, query: { customerId: '9007199254741999' } }) + expect(actions.text()).not.toContain('编辑') }) it('keeps truck mode on its own list API', async () => { diff --git a/src/modules/overseas-business/pages/TransportOrdersView.vue b/src/modules/overseas-business/pages/TransportOrdersView.vue index 3efe1462..5fa9daf9 100644 --- a/src/modules/overseas-business/pages/TransportOrdersView.vue +++ b/src/modules/overseas-business/pages/TransportOrdersView.vue @@ -34,7 +34,7 @@ const route = useRoute(); const router = useRouter(); const access = useAccessPr const isLooseboard = computed(() => props.domain === 'looseboard'); const domainLabel = computed(() => isLooseboard.value ? '本土散板' : '本土卡车') const queryPreferenceKey = computed(() => isLooseboard.value ? 'overseas-business-looseboard-query' : 'overseas-business-truck-query') const createPermission = computed(() => isLooseboard.value ? overseasBusinessPermissions.looseboardCreate : overseasBusinessPermissions.truckCreate) -const editPermission = computed(() => isLooseboard.value ? overseasBusinessPermissions.looseboardEdit : overseasBusinessPermissions.truckEdit) +const editPermission = computed(() => overseasBusinessPermissions.truckEdit) const rows = ref>([]); const loading = ref(false); const loadError = ref(null) const page = ref(1); const pageSize = ref(20); const total = ref(0) const arrangementOpen = ref(false), arrangement = ref(null) @@ -104,8 +104,8 @@ async function load() { } function search(model: QueryModel) { applied.value = { ...model }; if (page.value === 1) void load(); else page.value = 1 } function openCreate() { void router.push({ name: isLooseboard.value ? 'overseas-business-looseboard-new' : 'overseas-business-truck-new' }) } -function canEdit(row: LocalTransportOrder | LocalLooseboardOrder) { return !row.fleetArrangement && (isLooseboard.value ? row.status === 'PENDING_ACCEPTANCE' : row.status === 'PENDING_REVIEW') } -function openEdit(row: LocalTransportOrder | LocalLooseboardOrder) { if (!canEdit(row)) return; void router.push({ name: isLooseboard.value ? 'overseas-business-looseboard-edit' : 'overseas-business-truck-edit', params: { orderId: row.orderNo }, query: { customerId: row.customerId } }) } +function canEdit(row: LocalTransportOrder | LocalLooseboardOrder) { return !isLooseboard.value && !row.fleetArrangement && row.status === 'PENDING_REVIEW' } +function openEdit(row: LocalTransportOrder | LocalLooseboardOrder) { if (!canEdit(row)) return; void router.push({ name: 'overseas-business-truck-edit', params: { orderId: row.orderNo }, query: { customerId: row.customerId } }) } /** 单据详情保留订单与客户范围,费用在原业务单中处理。 */ function openDetail(row: LocalTransportOrder | LocalLooseboardOrder) { void router.push({ name: isLooseboard.value ? 'overseas-business-looseboard-detail' : 'overseas-business-truck-detail', params: { orderId: row.orderNo }, query: { customerId: row.customerId } }) @@ -114,7 +114,6 @@ function openDetail(row: LocalTransportOrder | LocalLooseboardOrder) { function looseboardActions(row: LocalLooseboardOrder): RowActionItem[] { return [ { key: 'detail', label: '详情', priority: 10 }, - { key: 'edit', label: '编辑', visible: !row.fleetArrangement && access.can(editPermission.value), disabled: !canEdit(row) }, { key: 'arrangement', label: '承运安排', visible: !!row.fleetArrangement }, ] }