✨ feat(mes): 增加生产趋势查询参数验证和首页组件优化
为生产趋势查询添加最小和最大天数验证,确保输入有效性。 优化首页组件,增加数据存在性判断,提升用户体验。pull/871/MERGE
parent
fb213bfd76
commit
4d183bf379
|
|
@ -74,7 +74,7 @@
|
||||||
<el-card
|
<el-card
|
||||||
shadow="hover"
|
shadow="hover"
|
||||||
class="kpi-card kpi-card--quality"
|
class="kpi-card kpi-card--quality"
|
||||||
@click="handleNavigate('MesQcIqc')"
|
@click="handleNavigate('MesProFeedback')"
|
||||||
>
|
>
|
||||||
<div class="flex items-center gap-16px">
|
<div class="flex items-center gap-16px">
|
||||||
<div
|
<div
|
||||||
|
|
@ -95,9 +95,12 @@
|
||||||
<span class="text-13px color-[var(--el-text-color-secondary)]">%</span>
|
<span class="text-13px color-[var(--el-text-color-secondary)]">%</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-12px color-[var(--el-text-color-placeholder)] mt-4px">
|
<div class="text-12px color-[var(--el-text-color-placeholder)] mt-4px">
|
||||||
|
<template v-if="hasQualityData">
|
||||||
<span>合格 {{ summary.todayQualifiedQuantity }}</span>
|
<span>合格 {{ summary.todayQualifiedQuantity }}</span>
|
||||||
<el-divider direction="vertical" />
|
<el-divider direction="vertical" />
|
||||||
<span>不良 {{ summary.todayUnqualifiedQuantity }}</span>
|
<span>不良 {{ summary.todayUnqualifiedQuantity }}</span>
|
||||||
|
</template>
|
||||||
|
<span v-else>暂无数据</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -153,10 +156,15 @@ const emit = defineEmits<{
|
||||||
navigate: [name: string]
|
navigate: [name: string]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
/** 质量合格率 = 合格品 / (合格品 + 不良品) * 100,默认 100% */
|
/** 是否有质量数据(合格品 + 不良品 > 0) */
|
||||||
|
const hasQualityData = computed(() => {
|
||||||
|
return props.summary.todayQualifiedQuantity + props.summary.todayUnqualifiedQuantity > 0
|
||||||
|
})
|
||||||
|
|
||||||
|
/** 质量合格率 = 合格品 / (合格品 + 不良品) * 100,无数据时为 0 */
|
||||||
const qualityRate = computed(() => {
|
const qualityRate = computed(() => {
|
||||||
const total = props.summary.todayQualifiedQuantity + props.summary.todayUnqualifiedQuantity
|
const total = props.summary.todayQualifiedQuantity + props.summary.todayUnqualifiedQuantity
|
||||||
if (total === 0) return 100
|
if (total === 0) return 0
|
||||||
return (props.summary.todayQualifiedQuantity / total) * 100
|
return (props.summary.todayQualifiedQuantity / total) * 100
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<!-- TODO @AI:补充一些注释 -->
|
<!-- 首页快捷入口网格 -->
|
||||||
<template>
|
<template>
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover" class="h-full">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="flex justify-between items-center">
|
<div class="flex justify-between items-center">
|
||||||
<span class="text-16px font-600">快捷入口</span>
|
<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">
|
<el-col v-for="item in shortcuts" :key="item.name" :span="8" class="mb-16px">
|
||||||
<div
|
<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"
|
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
|
<div
|
||||||
class="w-48px h-48px rounded-12px flex items-center justify-center"
|
class="w-48px h-48px rounded-12px flex items-center justify-center"
|
||||||
|
|
@ -29,16 +29,19 @@
|
||||||
defineOptions({ name: 'HomeShortcuts' })
|
defineOptions({ name: 'HomeShortcuts' })
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
navigate: [url: string]
|
navigate: [name: string]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
// TODO @AI:可以搞 9 个么?然后高度和【工单状态分布】的高度一致,会好看点。
|
/** 快捷入口列表,3×3 网格布局与工单状态分布面板等高 */
|
||||||
const shortcuts = [
|
const shortcuts = [
|
||||||
{ name: '生产工单', icon: 'ep:document', url: '/mes/pro/workorder', bgColor: '#409EFF' },
|
{ name: '生产工单', icon: 'ep:document', routeName: 'MesProWorkOrder', bgColor: '#409EFF' },
|
||||||
{ name: '生产报工', icon: 'ep:edit', url: '/mes/pro/feedback', bgColor: '#67C23A' },
|
{ name: '生产报工', icon: 'ep:edit', routeName: 'MesProFeedback', bgColor: '#67C23A' },
|
||||||
{ name: '质量检验', icon: 'ep:search', url: '/mes/qc/iqc', bgColor: '#E6A23C' },
|
{ name: '质量检验', icon: 'ep:search', routeName: 'MesQcIqc', bgColor: '#E6A23C' },
|
||||||
{ name: '库存查询', icon: 'ep:box', url: '/mes/wm/materialstock', bgColor: '#F56C6C' },
|
{ name: '库存查询', icon: 'ep:box', routeName: 'MesWmMaterialStock', bgColor: '#F56C6C' },
|
||||||
{ name: '设备管理', icon: 'ep:cpu', url: '/mes/dv/machinery', bgColor: '#7c3aed' },
|
{ name: '设备管理', icon: 'ep:cpu', routeName: 'MesDvMachinery', bgColor: '#7c3aed' },
|
||||||
{ name: '库存流水', icon: 'ep:tickets', url: '/mes/wm/transaction', bgColor: '#0ea5e9' }
|
{ 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>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<!-- 首页工单状态分布饼图 -->
|
<!-- 首页工单状态分布饼图 -->
|
||||||
<template>
|
<template>
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover" class="h-full">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="flex justify-between items-center">
|
<div class="flex justify-between items-center">
|
||||||
<span class="text-16px font-600">工单状态分布</span>
|
<span class="text-16px font-600">工单状态分布</span>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue