diff --git a/src/views/wms/home/components/WmsHomeOrderSummaryCards.vue b/src/views/wms/home/components/WmsHomeOrderSummaryCards.vue index 32b3ef580..ec8f99e3f 100644 --- a/src/views/wms/home/components/WmsHomeOrderSummaryCards.vue +++ b/src/views/wms/home/components/WmsHomeOrderSummaryCards.vue @@ -27,9 +27,9 @@
合计 - {{ - formatCount(item.total) - }} + + {{ item.total?.toLocaleString() }} +
{{ status.label }} - {{ - item.statusCounts[status.value] - }} + + {{ item.statusCounts?.[status.value] }} +
@@ -64,7 +64,7 @@ import { useRouter } from 'vue-router' import { WmsHomeStatisticsApi } from '@/api/wms/home' import { DICT_TYPE, getDictLabel } from '@/utils/dict' -import { OrderStatusEnum } from '@/views/wms/utils/constants' +import { OrderStatusEnum, OrderTypeEnum } from '@/views/wms/utils/constants' defineOptions({ name: 'WmsHomeOrderSummaryCards' }) @@ -74,34 +74,18 @@ interface StatusItem { color: string } -interface OrderDefinition { +interface OrderSummaryItem { orderType: number title: string color: string routeName: string -} - -interface OrderSummaryItem extends OrderDefinition { - total: number - statusCounts: Record + total?: number + statusCounts?: Partial> } const router = useRouter() const message = useMessage() -const OrderTypeEnum = { - RECEIPT: 1, - SHIPMENT: 2, - MOVEMENT: 3, - CHECK: 4 -} as const - -/** 获取单据类型名称 */ -const getOrderTypeTitle = (type: number, defaultTitle: string) => { - const label = getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, type) || defaultTitle - return label.endsWith('单') ? label.slice(0, -1) : label -} - /** 获取单据状态名称 */ const getOrderStatusLabel = (status: number, defaultLabel: string) => { return getDictLabel(DICT_TYPE.WMS_ORDER_STATUS, status) || defaultLabel @@ -125,51 +109,34 @@ const statusList: StatusItem[] = [ color: '#909399' } ] -const orderDefinitions: OrderDefinition[] = [ +const orderDefinitions: OrderSummaryItem[] = [ { orderType: OrderTypeEnum.RECEIPT, - title: getOrderTypeTitle(OrderTypeEnum.RECEIPT, '入库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.RECEIPT).replace(/单$/, ''), color: '#2f7df6', routeName: 'WmsReceiptOrder' }, { orderType: OrderTypeEnum.SHIPMENT, - title: getOrderTypeTitle(OrderTypeEnum.SHIPMENT, '出库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.SHIPMENT).replace(/单$/, ''), color: '#18a058', routeName: 'WmsShipmentOrder' }, { orderType: OrderTypeEnum.MOVEMENT, - title: getOrderTypeTitle(OrderTypeEnum.MOVEMENT, '移库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.MOVEMENT).replace(/单$/, ''), color: '#f59e0b', routeName: 'WmsMovementOrder' }, { orderType: OrderTypeEnum.CHECK, - title: getOrderTypeTitle(OrderTypeEnum.CHECK, '盘库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.CHECK).replace(/单$/, ''), color: '#7c3aed', routeName: 'WmsCheckOrder' } ] -/** 构建默认的状态数量集合 */ -const buildEmptyStatusCounts = () => { - return statusList.reduce( - (result, status) => { - result[status.value] = 0 - return result - }, - {} as Record - ) -} - -const summaryList = ref( - orderDefinitions.map((item) => ({ - ...item, - total: 0, - statusCounts: buildEmptyStatusCounts() - })) -) +const summaryList = ref(orderDefinitions) /** 加载单据汇总数据 */ const load = async (warehouseId?: number) => { @@ -178,14 +145,16 @@ const load = async (warehouseId?: number) => { const data = await WmsHomeStatisticsApi.getOrderSummary(warehouseId ? { warehouseId } : {}) summaryList.value = orderDefinitions.map((definition) => { const summary = data.find((item) => item.type === definition.orderType) - const statusCounts = statusList.reduce((result, status) => { - const statusItem = summary?.statuses?.find((item) => item.status === status.value) - result[status.value] = statusItem?.count || 0 - return result - }, buildEmptyStatusCounts()) + const statusCounts = summary?.statuses?.reduce( + (result, item) => { + result[item.status] = item.count + return result + }, + {} as Partial> + ) return { ...definition, - total: summary?.total || 0, + total: summary?.total, statusCounts } }) @@ -205,17 +174,15 @@ const handleNavigate = async (name: string) => { /** 计算状态进度条占比 */ function getStatusPercent(item: OrderSummaryItem, status: number) { - const count = item.statusCounts[status] || 0 - if (!item.total || !count) { + const count = item.statusCounts?.[status] + if (item.total === undefined || count === undefined) { + return undefined + } + if (item.total === 0) { return '0%' } return `${(count / item.total) * 100}%` } -/** 格式化单据数量 */ -function formatCount(value: number) { - return value.toLocaleString() -} - defineExpose({ load }) diff --git a/src/views/wms/home/components/WmsHomeOrderTrendChart.vue b/src/views/wms/home/components/WmsHomeOrderTrendChart.vue index 06c152850..3ef0f0a1b 100644 --- a/src/views/wms/home/components/WmsHomeOrderTrendChart.vue +++ b/src/views/wms/home/components/WmsHomeOrderTrendChart.vue @@ -28,6 +28,7 @@ import type { EChartsOption } from 'echarts' import { WmsHomeStatisticsApi, type WmsHomeOrderTrendVO } from '@/api/wms/home' import { DICT_TYPE, getDictLabel } from '@/utils/dict' import { formatDate } from '@/utils/formatTime' +import { OrderTypeEnum } from '@/views/wms/utils/constants' defineOptions({ name: 'WmsHomeOrderTrendChart' }) @@ -41,41 +42,28 @@ interface OrderDefinition { > } -const OrderTypeEnum = { - RECEIPT: 1, - SHIPMENT: 2, - MOVEMENT: 3, - CHECK: 4 -} as const - -/** 获取单据类型名称 */ -const getOrderTypeTitle = (type: number, defaultTitle: string) => { - const label = getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, type) || defaultTitle - return label.endsWith('单') ? label.slice(0, -1) : label -} - const orderDefinitions: OrderDefinition[] = [ { orderType: OrderTypeEnum.RECEIPT, - title: getOrderTypeTitle(OrderTypeEnum.RECEIPT, '入库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.RECEIPT).replace(/单$/, ''), color: '#2f7df6', trendField: 'receiptCount' }, { orderType: OrderTypeEnum.SHIPMENT, - title: getOrderTypeTitle(OrderTypeEnum.SHIPMENT, '出库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.SHIPMENT).replace(/单$/, ''), color: '#18a058', trendField: 'shipmentCount' }, { orderType: OrderTypeEnum.MOVEMENT, - title: getOrderTypeTitle(OrderTypeEnum.MOVEMENT, '移库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.MOVEMENT).replace(/单$/, ''), color: '#f59e0b', trendField: 'movementCount' }, { orderType: OrderTypeEnum.CHECK, - title: getOrderTypeTitle(OrderTypeEnum.CHECK, '盘库'), + title: getDictLabel(DICT_TYPE.WMS_ORDER_TYPE, OrderTypeEnum.CHECK).replace(/单$/, ''), color: '#7c3aed', trendField: 'checkCount' } diff --git a/src/views/wms/utils/constants.ts b/src/views/wms/utils/constants.ts index a1aa38110..075a10be4 100644 --- a/src/views/wms/utils/constants.ts +++ b/src/views/wms/utils/constants.ts @@ -5,6 +5,14 @@ export const OrderStatusEnum = { CANCELED: 5 // 已作废 } as const +/** 单据类型枚举 */ +export const OrderTypeEnum = { + RECEIPT: 1, // 入库 + SHIPMENT: 2, // 出库 + MOVEMENT: 3, // 移库 + CHECK: 4 // 盘库 +} as const + /** 可修改的单据状态 */ export const OrderUpdateStatusList: number[] = [OrderStatusEnum.PREPARE]