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]