From f5f5525a1bb36f9a9b235f1b4644ab13e2c81104 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Thu, 17 Sep 2026 18:25:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cross-border/businessOrders.test.mjs | 10 ++- .../components/BusinessOrdersView.vue | 9 ++- src/modules/cross-border/routes.ts | 6 +- src/modules/dashboard/views/DashboardView.vue | 6 +- src/modules/overseas-warehouse/routes.ts | 8 +-- .../views/ReturnOrdersView.vue | 7 ++- .../views/WarehouseServiceView.vue | 28 ++++++--- .../api/merchantIam.test.mjs | 16 ++++- src/modules/tenant-management/contracts.ts | 61 ++++++++++++++++++- 9 files changed, 120 insertions(+), 31 deletions(-) diff --git a/src/modules/cross-border/businessOrders.test.mjs b/src/modules/cross-border/businessOrders.test.mjs index 7a9b649..e571c71 100644 --- a/src/modules/cross-border/businessOrders.test.mjs +++ b/src/modules/cross-border/businessOrders.test.mjs @@ -8,13 +8,17 @@ const view = readFileSync(new URL('./components/BusinessOrdersView.vue', import. test('activates all three customer cross-border pages with frozen permissions', () => { for (const [path, permission] of [ - ['cross-border/procurement', 'merchant:cross-border:procurement'], - ['cross-border/domestic-trucking', 'merchant:cross-border:domestic-trucking'], - ['cross-border/pallet-shipping', 'merchant:cross-border:pallet-shipping'], + ['cross-border/procurement', 'merchant:cross-border:procurement:list'], + ['cross-border/domestic-trucking', 'merchant:cross-border:domestic-trucking:list'], + ['cross-border/pallet-shipping', 'merchant:cross-border:pallet-shipping:list'], ]) { assert.match(routes, new RegExp(`path: '${path}'[\\s\\S]*?release: 'active'[\\s\\S]*?permission: '${permission}'`)) } assert.doesNotMatch(view, /PrototypeFeatureView|mock|customerId|tenantId/i) + assert.match(view, /merchant:cross-border:procurement:create/) + assert.match(view, /merchant:cross-border:domestic-trucking:create/) + assert.match(view, /merchant:cross-border:pallet-shipping:create/) + assert.match(view, /v-else-if="canCreate"/) }) test('uses only merchant overseas endpoints and keeps retry idempotency stable', () => { diff --git a/src/modules/cross-border/components/BusinessOrdersView.vue b/src/modules/cross-border/components/BusinessOrdersView.vue index 9bba647..c3a0118 100644 --- a/src/modules/cross-border/components/BusinessOrdersView.vue +++ b/src/modules/cross-border/components/BusinessOrdersView.vue @@ -17,6 +17,11 @@ import { CONTAINER_SPECIFICATIONS, DEFAULT_CONTAINER_TYPE } from '../containerSp const props = defineProps<{ kind: CrossBorderBusinessKind }>() const auth = useAuthStore() +const canCreate = computed(() => auth.hasPermission(({ + procurement: 'merchant:cross-border:procurement:create', + trucking: 'merchant:cross-border:domestic-trucking:create', + looseboard: 'merchant:cross-border:pallet-shipping:create', +} as Record)[props.kind])) type BusinessRow = ProcurementSummary | TransportSummary type BusinessDetail = ProcurementDetail | TransportDetail @@ -277,7 +282,7 @@ onMounted(() => void load())

{{ mode === 'list' ? configuration.description : mode === 'create' ? '请填写订单信息,带 * 项为必填项' : `订单号:${detail?.summary.orderNo || '—'}` }}

返回列表 - 新增下单 + 新增下单