feat(wms):将首页的枚举值去掉,统一合并到 constants 里,更聚焦点
parent
ceb1aa9bce
commit
46c436e0df
|
|
@ -27,9 +27,9 @@
|
|||
</div>
|
||||
<div class="mt-18px flex items-baseline gap-8px">
|
||||
<em class="not-italic text-[var(--el-text-color-secondary)]">合计</em>
|
||||
<span class="text-32px font-700 leading-38px text-[var(--el-text-color-primary)]">{{
|
||||
formatCount(item.total)
|
||||
}}</span>
|
||||
<span class="text-32px font-700 leading-38px text-[var(--el-text-color-primary)]">
|
||||
{{ item.total?.toLocaleString() }}
|
||||
</span>
|
||||
<em class="not-italic text-[var(--el-text-color-secondary)]">单</em>
|
||||
</div>
|
||||
<div
|
||||
|
|
@ -50,9 +50,9 @@
|
|||
<span class="block truncate text-12px text-[var(--el-text-color-secondary)]">
|
||||
{{ status.label }}
|
||||
</span>
|
||||
<strong class="mt-2px block text-16px" :style="{ color: status.color }">{{
|
||||
item.statusCounts[status.value]
|
||||
}}</strong>
|
||||
<strong class="mt-2px block text-16px" :style="{ color: status.color }">
|
||||
{{ item.statusCounts?.[status.value] }}
|
||||
</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -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<number, number>
|
||||
total?: number
|
||||
statusCounts?: Partial<Record<number, number>>
|
||||
}
|
||||
|
||||
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<number, number>
|
||||
)
|
||||
}
|
||||
|
||||
const summaryList = ref<OrderSummaryItem[]>(
|
||||
orderDefinitions.map((item) => ({
|
||||
...item,
|
||||
total: 0,
|
||||
statusCounts: buildEmptyStatusCounts()
|
||||
}))
|
||||
)
|
||||
const summaryList = ref<OrderSummaryItem[]>(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<Record<number, number>>
|
||||
)
|
||||
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 })
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue