diff --git a/src/core/navigation/adminNavigation.ts b/src/core/navigation/adminNavigation.ts index 34c738c8..63f677a5 100644 --- a/src/core/navigation/adminNavigation.ts +++ b/src/core/navigation/adminNavigation.ts @@ -170,6 +170,7 @@ export const adminNavigation: AdminNavigationNode[] = [ { key: 'fba-carrier-rates', title: '船期价格表', icon: CircleDollarSign, path: '/first-leg-pricing/carrier-rates', permission: 'firstleg:fba-pricing:rate:view' }, { key: 'vehicle-list', title: '车辆列表', icon: Truck, path: '/overseas-master-data/vehicles', permission: 'platform:overseas-master-data:vehicle:list' }, { key: 'download-center', title: '下载中心', icon: Download, path: '/downloads', permission: 'platform:download:list' }, + { key: 'mojia-sku-sync', title: '一件代发 SKU 同步', icon: Database, path: '/general/mojia-sku-sync', permission: 'platform:mojia-sku-sync:list' }, ], }, { diff --git a/src/modules/overseas-warehouse/api/mojiaSkuSync.ts b/src/modules/overseas-warehouse/api/mojiaSkuSync.ts new file mode 100644 index 00000000..81aa0ef2 --- /dev/null +++ b/src/modules/overseas-warehouse/api/mojiaSkuSync.ts @@ -0,0 +1,67 @@ +import { http, unwrapApiResponse, type ApiEnvelope } from '@/shared/api/http' + +export type MojiaSkuSyncStatus = 'PENDING' | 'SYNCING' | 'SUCCESS' | 'FAILED' + +export interface MojiaSkuSyncRecord { + id: string + skuCode: string + lengthCm: number + widthCm: number + heightCm: number + weightKg: number + imageFileId?: string | null + imageUrl?: string | null + measuredAt?: string | null + receivedAt?: string | null + syncStatus: MojiaSkuSyncStatus + syncFailureCode?: string | null + syncFailureReason?: string | null + lingxingSkuId?: string | null + revision: number + updatedAt?: string | null +} + +export interface MojiaSkuSyncPage { + records: MojiaSkuSyncRecord[] + page: number + size: number + total: number + pages: number +} + +export interface MojiaSkuSyncQuery { + page: number + size: number + skuCode?: string + syncStatus?: MojiaSkuSyncStatus +} + +const basePath = '/platform/v1/firstleg/mojia-sku-sync' + +export async function listMojiaSkuSync(query: MojiaSkuSyncQuery) { + const response = await http.get, ApiEnvelope>( + basePath, { params: query }, + ) + return unwrapApiResponse(response) +} + +export async function updateMojiaSkuSync(id: string, data: { + skuCode: string + lengthCm: number + widthCm: number + heightCm: number + weightKg: number + revision: number +}) { + const response = await http.put, ApiEnvelope>( + `${basePath}/${encodeURIComponent(id)}`, data, + ) + return unwrapApiResponse(response) +} + +export async function retryMojiaSkuSync(id: string, revision: number) { + const response = await http.post, ApiEnvelope>( + `${basePath}/${encodeURIComponent(id)}/retry`, { revision }, + ) + return unwrapApiResponse(response) +} diff --git a/src/modules/overseas-warehouse/pages/MojiaSkuSyncView.vue b/src/modules/overseas-warehouse/pages/MojiaSkuSyncView.vue new file mode 100644 index 00000000..44140a25 --- /dev/null +++ b/src/modules/overseas-warehouse/pages/MojiaSkuSyncView.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/src/modules/overseas-warehouse/permissions.ts b/src/modules/overseas-warehouse/permissions.ts index 4879b9e0..e73a8a7c 100644 --- a/src/modules/overseas-warehouse/permissions.ts +++ b/src/modules/overseas-warehouse/permissions.ts @@ -49,4 +49,7 @@ export const overseasWarehousePermissions = { productList: 'platform:overseas-warehouse:product:list', productCreate: 'platform:overseas-warehouse:product:create', productEdit: 'platform:overseas-warehouse:product:edit', + mojiaSkuSyncList: 'platform:mojia-sku-sync:list', + mojiaSkuSyncEdit: 'platform:mojia-sku-sync:edit', + mojiaSkuSyncRetry: 'platform:mojia-sku-sync:retry', } as const diff --git a/src/modules/overseas-warehouse/routes.ts b/src/modules/overseas-warehouse/routes.ts index 4394c76d..7155dc5a 100644 --- a/src/modules/overseas-warehouse/routes.ts +++ b/src/modules/overseas-warehouse/routes.ts @@ -130,4 +130,10 @@ export const overseasWarehouseRoutes = [ component: () => import('./pages/PalletDetailView.vue'), meta: { title: '托盘详情', description: '查看托盘基础信息与使用信息', permission: permission.palletList, showPageHeading: false }, }, + { + path: 'general/mojia-sku-sync', + name: 'mojia-sku-sync', + component: () => import('./pages/MojiaSkuSyncView.vue'), + meta: { title: '一件代发 SKU 同步', description: '查看墨家测量数据并同步领星 SKU 尺寸重量', permission: permission.mojiaSkuSyncList }, + }, ] satisfies RouteRecordRaw[]