From db32f31cc2e61fe73fcb8dcc7f836a307485ed51 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 20 Oct 2026 15:48:27 +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 --- src/core/navigation/adminNavigation.test.ts | 13 +- src/core/navigation/adminNavigation.ts | 1 + .../AppointmentCalendarView.vue | 2 +- .../appointment-calendar/WorkCommandForm.vue | 7 +- .../WorkReceiptPlans.test.ts | 5 +- .../WorkReceivingPanel.vue | 5 +- .../ContainerLastLegFeesPanel.test.ts | 8 +- .../pages/ContainerDetailView.vue | 2 +- .../components/CustomerBillingRulesPanel.vue | 2 +- .../pages/CustomerDetailView.test.ts | 4 +- .../customers/pages/CustomersView.test.ts | 7 +- src/modules/customers/pages/CustomersView.vue | 2 +- .../carrier-rates/pages/CarrierRatesView.vue | 2 +- .../core/DropshipPalletPrintPanel.vue | 4 +- src/modules/inbounds/fee/InboundFeePanel.vue | 2 +- .../pages/PreloadPlanDetailView.vue | 2 +- .../pages/ExpressCompaniesView.vue | 2 +- .../overseas-master-data/PROTOTYPE_MATRIX.md | 8 +- .../api/ownedBusiness.test.ts | 65 +++++++++ .../overseas-master-data/api/ownedBusiness.ts | 66 +++++++++ .../components/CapacityInquiryDialog.vue | 4 +- .../CapacityOfferSettingsDialog.vue | 2 +- .../components/FleetQuoteEditor.vue | 2 +- .../OwnedBusinessCommandRecovery.test.ts | 72 ++++++++++ .../OwnedBusinessCommandRecovery.ts | 89 ++++++++++++ .../components/OwnedBusinessDetailLayout.vue | 36 +++++ .../components/OwnedBusinessFixtures.ts | 20 +++ .../components/OwnedBusinessLayouts.test.ts | 48 +++++++ .../components/OwnedBusinessListLayout.vue | 16 +++ .../OwnedBusinessOperationsDialog.vue | 35 +++++ .../OwnedBusinessOperationsEditor.vue | 92 +++++++++++++ .../components/OwnedBusinessPhotosDialog.vue | 56 ++++++++ .../OwnedBusinessPhotosEditor.test.ts | 52 +++++++ .../components/OwnedBusinessPhotosEditor.vue | 127 ++++++++++++++++++ .../components/TransportRouteDialog.test.ts | 2 +- .../components/TransportRouteDialog.vue | 4 +- .../components/TripBookingPanel.vue | 11 +- .../components/TripCostPanel.vue | 5 +- .../components/TripOperationsRecordDialog.vue | 4 +- .../components/VehicleCareEditor.vue | 2 +- .../components/VehicleCareTable.vue | 2 +- .../ownedBusinessTypes.test.ts | 17 +++ .../ownedBusinessTypes.ts | 45 +++++++ .../pages/OwnedBusinessDetailView.vue | 82 +++++++++++ .../pages/OwnedBusinessView.vue | 115 ++++++++++++++++ .../pages/OwnedBusinessViews.test.ts | 85 ++++++++++++ .../overseas-master-data/routes.test.ts | 14 ++ src/modules/overseas-master-data/routes.ts | 12 ++ .../components/DispatchResourceFields.vue | 4 +- .../RelabelInventoryItemsEditor.vue | 2 +- .../SmartDispatchDialog.layout.test.ts | 2 +- .../components/SmartDispatchDialog.vue | 2 +- .../pages/LastMileOrdersView.behavior.test.ts | 2 +- .../pages/MojiaSkuSyncView.vue | 2 +- .../pages/OutboundsView.returnSku.test.ts | 4 +- .../pages/OutboundsView.selection.test.ts | 4 +- .../pages/OutboundsView.vue | 6 +- .../pages/ReturnInventoryManagementView.vue | 2 +- .../components/ContainerPortSchedulePanel.vue | 2 +- .../pages/SailingCalendarView.vue | 2 +- .../components/CollectionProgressGauge.vue | 2 +- .../components/InventoryTurnoverView.vue | 2 +- .../components/InboundFeeDetailManager.vue | 2 +- .../OrderFulfillmentTreePanel.test.ts | 4 +- .../pages/UnifiedOrdersView.test.ts | 3 +- .../locations/pages/LocationsView.test.ts | 22 +++ .../locations/pages/LocationsView.vue | 4 +- 67 files changed, 1262 insertions(+), 71 deletions(-) create mode 100644 src/modules/overseas-master-data/api/ownedBusiness.test.ts create mode 100644 src/modules/overseas-master-data/api/ownedBusiness.ts create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessCommandRecovery.test.ts create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessCommandRecovery.ts create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessDetailLayout.vue create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessFixtures.ts create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessLayouts.test.ts create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessListLayout.vue create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessOperationsDialog.vue create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessOperationsEditor.vue create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessPhotosDialog.vue create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessPhotosEditor.test.ts create mode 100644 src/modules/overseas-master-data/components/OwnedBusinessPhotosEditor.vue create mode 100644 src/modules/overseas-master-data/ownedBusinessTypes.test.ts create mode 100644 src/modules/overseas-master-data/ownedBusinessTypes.ts create mode 100644 src/modules/overseas-master-data/pages/OwnedBusinessDetailView.vue create mode 100644 src/modules/overseas-master-data/pages/OwnedBusinessView.vue create mode 100644 src/modules/overseas-master-data/pages/OwnedBusinessViews.test.ts diff --git a/src/core/navigation/adminNavigation.test.ts b/src/core/navigation/adminNavigation.test.ts index 2b20c3f7..41411781 100644 --- a/src/core/navigation/adminNavigation.test.ts +++ b/src/core/navigation/adminNavigation.test.ts @@ -8,6 +8,15 @@ import { } from './adminNavigation' describe('adminNavigation', () => { + it('places owned-business under vehicle management and keeps edit/upload from granting page access', () => { + const read = filterAdminNavigation(adminNavigation, new Set(['platform:fleet:owned-business:list'])) + const vehicle = read.find(node => node.key === 'vehicle-management') + expect(vehicle?.children?.map(node => node.path)).toEqual(['/overseas-master-data/owned-business']) + const writeOnly = filterAdminNavigation(adminNavigation, new Set([ + 'platform:fleet:owned-business:edit', 'platform:fleet:owned-business:upload', + ])) + expect(getNavigationLeaves(writeOnly).some(node => node.path === '/overseas-master-data/owned-business')).toBe(false) + }) it('opens all self-operated read pages with list permission and keeps sync alone insufficient', () => { const read = filterAdminNavigation(adminNavigation, new Set(['platform:self-operated-analytics:list'])) expect(getNavigationLeaves(read).map(item => item.path)).toEqual([ @@ -31,7 +40,7 @@ describe('adminNavigation', () => { { title: '货柜管理', children: ['订舱列表', '拖车列表', '货柜列表', '装柜清单', '预装清单'] }, { title: '海外尾程', children: ['尾程订单', '入库单', '废弃单', '出库单', '换标单', '派送单', '托盘管理', '库位管理', '库存管理', '退货库存管理', '退货箱号管理'] }, { title: '预约管理', children: ['预约列表'] }, - { title: '车辆管理', children: ['排车列表', '车辆列表', '司机管理', '出车记录'] }, + { title: '车辆管理', children: ['排车列表', '车辆列表', '司机管理', '自有业务', '出车记录'] }, { title: '海外业务', children: ['采购订单', '本土卡车', '本土散板', '散板需求'] }, { title: '客户服务', children: ['异常订单'] }, { title: '财务管理', children: ['客户账户', '客户应收应付', '应收款统计表', '客户对账单', '结算单应收', '结算单应付'] }, @@ -40,7 +49,7 @@ describe('adminNavigation', () => { { title: '系统管理', children: ['用户管理', '角色权限', '菜单权限'] }, ]) expect(visible).toHaveLength(13) - expect(visible.flatMap(node => node.children ?? [])).toHaveLength(56) + expect(visible.flatMap(node => node.children ?? [])).toHaveLength(57) expect(adminNavigation.find((item) => item.key === 'notifications')).toBeUndefined() }) diff --git a/src/core/navigation/adminNavigation.ts b/src/core/navigation/adminNavigation.ts index 0b67565c..203141f4 100644 --- a/src/core/navigation/adminNavigation.ts +++ b/src/core/navigation/adminNavigation.ts @@ -134,6 +134,7 @@ export const adminNavigation: AdminNavigationNode[] = [ { key: 'fba-dispatch', title: '排车列表', icon: Truck, path: '/overseas-warehouse/dispatches', permission: 'platform:overseas-warehouse:dispatch:list' }, { key: 'vehicle-list', title: '车辆列表', icon: Truck, path: '/overseas-master-data/vehicles', permission: 'platform:overseas-master-data:vehicle:list' }, { key: 'driver-management', title: '司机管理', icon: ContactRound, path: '/overseas-master-data/drivers', permission: 'platform:overseas-master-data:driver:list' }, + { key: 'fleet-owned-business', title: '自有业务', icon: Truck, path: '/overseas-master-data/owned-business', permission: 'platform:fleet:owned-business:list' }, { key: 'fleet-trips', title: '车次管理', icon: Truck, path: '/overseas-master-data/trips', permission: 'platform:fleet:trip:list', hidden: true }, { key: 'fleet-operations', title: '出车记录', icon: Truck, path: '/overseas-master-data/trip-operations', permission: 'platform:fleet:operations:list' }, ], diff --git a/src/modules/appointment-calendar/AppointmentCalendarView.vue b/src/modules/appointment-calendar/AppointmentCalendarView.vue index b222b03c..3158509c 100644 --- a/src/modules/appointment-calendar/AppointmentCalendarView.vue +++ b/src/modules/appointment-calendar/AppointmentCalendarView.vue @@ -181,7 +181,7 @@ onBeforeUnmount(() => { ++generation; controller?.abort() })
业务{{ editor.title }}
- +
diff --git a/src/modules/appointment-calendar/WorkCommandForm.vue b/src/modules/appointment-calendar/WorkCommandForm.vue index ab3e3bb9..b38f2eba 100644 --- a/src/modules/appointment-calendar/WorkCommandForm.vue +++ b/src/modules/appointment-calendar/WorkCommandForm.vue @@ -1,4 +1,5 @@