diff --git a/src/core/navigation/adminNavigation.ts b/src/core/navigation/adminNavigation.ts index f2789290..7f18d240 100644 --- a/src/core/navigation/adminNavigation.ts +++ b/src/core/navigation/adminNavigation.ts @@ -171,7 +171,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' }, + { key: 'mojia-sku-sync', title: '称重机器', 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 index f0ed8c96..a43de7d6 100644 --- a/src/modules/overseas-warehouse/api/mojiaSkuSync.ts +++ b/src/modules/overseas-warehouse/api/mojiaSkuSync.ts @@ -1,10 +1,14 @@ import { http, unwrapApiResponse, type ApiEnvelope } from '@/shared/api/http' export type MojiaSkuSyncStatus = 'PENDING' | 'SUCCESS' | 'FAILED' +export type MojiaMeasurementKind = 'BOX_LABEL' | 'SKU' export interface MojiaSkuSyncRecord { id: string - skuCode: string + measurementKind: MojiaMeasurementKind + boxCode: string + inboundCode?: string | null + skuCode?: string | null lengthCm: number widthCm: number heightCm: number @@ -13,7 +17,7 @@ export interface MojiaSkuSyncRecord { imageUrl?: string | null measuredAt?: string | null receivedAt?: string | null - syncStatus: MojiaSkuSyncStatus + syncStatus?: MojiaSkuSyncStatus | null syncFailureCode?: string | null syncFailureReason?: string | null lingxingSkuId?: string | null @@ -32,7 +36,8 @@ export interface MojiaSkuSyncPage { export interface MojiaSkuSyncQuery { page: number size: number - skuCode?: string + code?: string + measurementKind?: MojiaMeasurementKind syncStatus?: MojiaSkuSyncStatus } diff --git a/src/modules/overseas-warehouse/pages/MojiaSkuSyncView.vue b/src/modules/overseas-warehouse/pages/MojiaSkuSyncView.vue index 119c5c81..26415562 100644 --- a/src/modules/overseas-warehouse/pages/MojiaSkuSyncView.vue +++ b/src/modules/overseas-warehouse/pages/MojiaSkuSyncView.vue @@ -11,7 +11,7 @@ import { useAccessPreviewStore } from '@/core/access/accessPreview' import { getApiErrorMessage } from '@/shared/api/http' import { getMojiaSkuSyncConfig, listMojiaSkuSync, retryMojiaSkuSync, submitLingxingVerificationCode, testLingxingConnection, updateMojiaSkuSync, - type LingxingConnectionTestResult, type MojiaSkuSyncRecord, type MojiaSkuSyncStatus, + type LingxingConnectionTestResult, type MojiaSkuSyncRecord, type MojiaSkuSyncStatus, type MojiaMeasurementKind, } from '../api/mojiaSkuSync' const permission = { @@ -37,14 +37,16 @@ const submittingVerification = ref(false) const pendingVerificationAction = ref<{ type: 'test' } | { type: 'retry', id: string, revision: number } | null>(null) const page = ref(1) const size = ref(20) -const form = reactive({ skuCode: '', syncStatus: '' as '' | MojiaSkuSyncStatus }) +const form = reactive({ code: '', measurementKind: '' as '' | MojiaMeasurementKind, syncStatus: '' as '' | MojiaSkuSyncStatus }) const editOpen = ref(false) const editing = ref(null) const editForm = reactive({ skuCode: '', lengthCm: 0, widthCm: 0, heightCm: 0, weightKg: 0, revision: 0 }) const columns: DataTableColumn[] = [ { key: 'actions', label: '操作', width: 190, fixed: 'left', slotName: 'actions' }, - { key: 'skuCode', prop: 'skuCode', label: 'SKU', minWidth: 180, showOverflowTooltip: true }, + { key: 'sourceCode', label: '上传标识', minWidth: 180, showOverflowTooltip: true, slotName: 'sourceCode' }, + { key: 'kind', label: '类型', width: 110, slotName: 'kind' }, + { key: 'inboundCode', prop: 'inboundCode', label: '命中入仓码', minWidth: 150, showOverflowTooltip: true }, { key: 'image', label: '测量图片', width: 110, slotName: 'image' }, { key: 'dimensions', label: '长 × 宽 × 高(cm)', width: 170, slotName: 'dimensions' }, { key: 'weightKg', prop: 'weightKg', label: '重量(kg)', width: 110 }, @@ -65,11 +67,11 @@ async function load() { loading.value = true error.value = '' try { - const result = await listMojiaSkuSync({ page: page.value, size: size.value, skuCode: form.skuCode || undefined, syncStatus: form.syncStatus || undefined }) + const result = await listMojiaSkuSync({ page: page.value, size: size.value, code: form.code || undefined, measurementKind: form.measurementKind || undefined, syncStatus: form.syncStatus || undefined }) rows.value = result.records total.value = result.total } catch (cause) { - error.value = getApiErrorMessage(cause, 'SKU同步记录加载失败') + error.value = getApiErrorMessage(cause, '称重机器上传记录加载失败') } finally { loading.value = false } } @@ -82,14 +84,22 @@ async function loadConfig() { } function search() { page.value = 1; void load() } -function reset() { form.skuCode = ''; form.syncStatus = ''; search() } +function reset() { form.code = ''; form.measurementKind = ''; form.syncStatus = ''; search() } function formatTime(value?: string | null) { return value ? value.replace('T', ' ').slice(0, 19) : '—' } function asRecord(row: unknown) { return row as MojiaSkuSyncRecord } -function syncLabel(row: unknown) { return statusLabel[asRecord(row).syncStatus] } -function syncTagType(row: unknown) { return statusType[asRecord(row).syncStatus] } +function syncLabel(row: unknown) { + const value = asRecord(row) + if (value.measurementKind === 'BOX_LABEL') return value.inboundCode ? '已命中入仓码' : '未命中' + return value.syncStatus ? statusLabel[value.syncStatus] : '—' +} +function syncTagType(row: unknown) { + const value = asRecord(row) + if (value.measurementKind === 'BOX_LABEL') return value.inboundCode ? 'success' : 'warning' + return value.syncStatus ? statusType[value.syncStatus] : 'info' +} async function testConnection() { - const skuCode = form.skuCode.trim() + const skuCode = form.code.trim() if (!skuCode) { ElMessage.warning('请先输入要查询的 SKU'); return } testingConnection.value = true try { @@ -129,7 +139,7 @@ async function submitVerification() { function openEdit(row: MojiaSkuSyncRecord) { editing.value = row - Object.assign(editForm, { skuCode: row.skuCode, lengthCm: row.lengthCm, widthCm: row.widthCm, heightCm: row.heightCm, weightKg: row.weightKg, revision: row.revision }) + Object.assign(editForm, { skuCode: row.skuCode || '', lengthCm: row.lengthCm, widthCm: row.widthCm, heightCm: row.heightCm, weightKg: row.weightKg, revision: row.revision }) editOpen.value = true } @@ -177,7 +187,7 @@ onMounted(() => { void Promise.all([loadConfig(), load()]) })