feat(mes): 增加生产趋势查询参数验证和首页组件优化

为生产趋势查询添加最小和最大天数验证,确保输入有效性。
优化首页组件,增加数据存在性判断,提升用户体验。
pull/871/MERGE
YunaiV 2026-04-06 01:28:30 +08:00
parent fb213bfd76
commit 4d183bf379
3 changed files with 29 additions and 18 deletions

View File

@ -74,7 +74,7 @@
<el-card
shadow="hover"
class="kpi-card kpi-card--quality"
@click="handleNavigate('MesQcIqc')"
@click="handleNavigate('MesProFeedback')"
>
<div class="flex items-center gap-16px">
<div
@ -95,9 +95,12 @@
<span class="text-13px color-[var(--el-text-color-secondary)]">%</span>
</div>
<div class="text-12px color-[var(--el-text-color-placeholder)] mt-4px">
<span>合格 {{ summary.todayQualifiedQuantity }}</span>
<el-divider direction="vertical" />
<span>不良 {{ summary.todayUnqualifiedQuantity }}</span>
<template v-if="hasQualityData">
<span>合格 {{ summary.todayQualifiedQuantity }}</span>
<el-divider direction="vertical" />
<span>不良 {{ summary.todayUnqualifiedQuantity }}</span>
</template>
<span v-else></span>
</div>
</div>
</div>
@ -153,10 +156,15 @@ const emit = defineEmits<{
navigate: [name: string]
}>()
/** 质量合格率 = 合格品 / (合格品 + 不良品) * 100默认 100% */
/** 是否有质量数据(合格品 + 不良品 > 0 */
const hasQualityData = computed(() => {
return props.summary.todayQualifiedQuantity + props.summary.todayUnqualifiedQuantity > 0
})
/** 质量合格率 = 合格品 / (合格品 + 不良品) * 100无数据时为 0 */
const qualityRate = computed(() => {
const total = props.summary.todayQualifiedQuantity + props.summary.todayUnqualifiedQuantity
if (total === 0) return 100
if (total === 0) return 0
return (props.summary.todayQualifiedQuantity / total) * 100
})

View File

@ -1,6 +1,6 @@
<!-- TODO @AI补充一些注释 -->
<!-- 首页快捷入口网格 -->
<template>
<el-card shadow="hover">
<el-card shadow="hover" class="h-full">
<template #header>
<div class="flex justify-between items-center">
<span class="text-16px font-600">快捷入口</span>
@ -10,7 +10,7 @@
<el-col v-for="item in shortcuts" :key="item.name" :span="8" class="mb-16px">
<div
class="flex flex-col items-center gap-8px cursor-pointer py-12px rounded-8px transition-all hover:bg-[var(--el-fill-color-light)] hover:translate-y--2px"
@click="emit('navigate', item.url)"
@click="emit('navigate', item.routeName)"
>
<div
class="w-48px h-48px rounded-12px flex items-center justify-center"
@ -29,16 +29,19 @@
defineOptions({ name: 'HomeShortcuts' })
const emit = defineEmits<{
navigate: [url: string]
navigate: [name: string]
}>()
// TODO @AI 9
/** 快捷入口列表3×3 网格布局与工单状态分布面板等高 */
const shortcuts = [
{ name: '生产工单', icon: 'ep:document', url: '/mes/pro/workorder', bgColor: '#409EFF' },
{ name: '生产报工', icon: 'ep:edit', url: '/mes/pro/feedback', bgColor: '#67C23A' },
{ name: '质量检验', icon: 'ep:search', url: '/mes/qc/iqc', bgColor: '#E6A23C' },
{ name: '库存查询', icon: 'ep:box', url: '/mes/wm/materialstock', bgColor: '#F56C6C' },
{ name: '设备管理', icon: 'ep:cpu', url: '/mes/dv/machinery', bgColor: '#7c3aed' },
{ name: '库存流水', icon: 'ep:tickets', url: '/mes/wm/transaction', bgColor: '#0ea5e9' }
{ name: '生产工单', icon: 'ep:document', routeName: 'MesProWorkOrder', bgColor: '#409EFF' },
{ name: '生产报工', icon: 'ep:edit', routeName: 'MesProFeedback', bgColor: '#67C23A' },
{ name: '质量检验', icon: 'ep:search', routeName: 'MesQcIqc', bgColor: '#E6A23C' },
{ name: '库存查询', icon: 'ep:box', routeName: 'MesWmMaterialStock', bgColor: '#F56C6C' },
{ name: '设备管理', icon: 'ep:cpu', routeName: 'MesDvMachinery', bgColor: '#7c3aed' },
{ name: '生产任务', icon: 'ep:list', routeName: 'MesProTask', bgColor: '#0ea5e9' },
{ name: '到货通知', icon: 'ep:van', routeName: 'MesWmArrivalNotice', bgColor: '#14b8a6' },
{ name: '设备维修', icon: 'ep:set-up', routeName: 'MesDvRepair', bgColor: '#f59e0b' },
{ name: '流转卡', icon: 'ep:tickets', routeName: 'MesProCard', bgColor: '#ec4899' }
]
</script>

View File

@ -1,6 +1,6 @@
<!-- 首页工单状态分布饼图 -->
<template>
<el-card shadow="hover">
<el-card shadow="hover" class="h-full">
<template #header>
<div class="flex justify-between items-center">
<span class="text-16px font-600">工单状态分布</span>