From 5c1e0a47eea514f59f697133fe8a01bcbf6f7a78 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 15 十月 2026 10:31:28 +0800
Subject: [PATCH] refactor(首页): 展示模块跟随菜单权限自动隐藏

---
 src/views/dashboard/analytics/modules/kpi-cards.vue |   78 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 72 insertions(+), 6 deletions(-)

diff --git a/src/views/dashboard/analytics/modules/kpi-cards.vue b/src/views/dashboard/analytics/modules/kpi-cards.vue
index 761db56..ffcde84 100644
--- a/src/views/dashboard/analytics/modules/kpi-cards.vue
+++ b/src/views/dashboard/analytics/modules/kpi-cards.vue
@@ -8,6 +8,8 @@
 
 import { Col, Row } from 'ant-design-vue';
 
+import { useHomeAccess } from '#/utils/use-home-access';
+
 defineOptions({ name: 'DashboardKpiCards' });
 
 const props = defineProps<{
@@ -17,6 +19,38 @@
 const emit = defineEmits<{
   navigate: [name: string];
 }>();
+
+const { canQuery, canSeeMenu } = useHomeAccess();
+
+/** 鍥涘紶鍗$殑鏁版嵁閮芥潵鑷椤垫眹鎬绘帴鍙o紝娌℃湁璇ユ潈闄愭椂鍙栦笅鐨勬槸绌哄�� */
+const canViewSummary = computed(() => canQuery('mes:home:query'));
+const showOrder = computed(
+  () => canViewSummary.value && canSeeMenu('MesProWorkOrder'),
+);
+const showOutput = computed(
+  () => canViewSummary.value && canSeeMenu('MesProFeedback'),
+);
+const showQuality = computed(
+  () => canViewSummary.value && canSeeMenu('MesQcIqc'),
+);
+const showEquipment = computed(
+  () => canViewSummary.value && canSeeMenu('MesDvMachinery'),
+);
+
+const visibleCards = computed(
+  () =>
+    [showOrder, showOutput, showQuality, showEquipment].filter(
+      (card) => card.value,
+    ).length,
+);
+
+/** 鍙鍗$墖鏁伴噺鍐冲畾鍒楀锛岄伩鍏嶅彧鍓╀竴涓ゅ紶鏃舵尋鍦ㄥ乏涓婅 */
+const colSpan = computed(() => {
+  if (visibleCards.value >= 4) return 6;
+  if (visibleCards.value === 3) return 8;
+  if (visibleCards.value === 2) return 12;
+  return 24;
+});
 
 const qualityRate = computed(() => {
   const total =
@@ -57,9 +91,17 @@
 </script>
 
 <template>
-  <Row :gutter="16">
+  <Row v-if="visibleCards > 0" :gutter="16">
     <!-- 鐢熶骇璁㈠崟 -->
-    <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
+    <Col
+      v-if="showOrder"
+      :lg="colSpan"
+      :md="colSpan"
+      :sm="colSpan"
+      :xl="colSpan"
+      :xs="24"
+      class="mb-4"
+    >
       <div
         class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
         :style="tiltStyle('order')"
@@ -90,7 +132,15 @@
     </Col>
 
     <!-- 浠婃棩浜ч噺 -->
-    <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
+    <Col
+      v-if="showOutput"
+      :lg="colSpan"
+      :md="colSpan"
+      :sm="colSpan"
+      :xl="colSpan"
+      :xs="24"
+      class="mb-4"
+    >
       <div
         class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
         :style="tiltStyle('output')"
@@ -121,13 +171,21 @@
     </Col>
 
     <!-- 璐ㄩ噺鍚堟牸鐜� -->
-    <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
+    <Col
+      v-if="showQuality"
+      :lg="colSpan"
+      :md="colSpan"
+      :sm="colSpan"
+      :xl="colSpan"
+      :xs="24"
+      class="mb-4"
+    >
       <div
         class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
         :style="tiltStyle('quality')"
         @mousemove="(e: MouseEvent) => onMouseMove(e, 'quality')"
         @mouseleave="onMouseLeave('quality')"
-        @click="emit('navigate', 'MesQcRecord')"
+        @click="emit('navigate', 'MesQcIqc')"
       >
         <div class="relative z-10 flex items-center gap-4 p-5">
           <div class="flex size-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-orange-500 to-amber-400 shadow-lg shadow-orange-500/25 transition-transform duration-300 group-hover:scale-110">
@@ -154,7 +212,15 @@
     </Col>
 
     <!-- 璁惧杩愯鐜� -->
-    <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
+    <Col
+      v-if="showEquipment"
+      :lg="colSpan"
+      :md="colSpan"
+      :sm="colSpan"
+      :xl="colSpan"
+      :xs="24"
+      class="mb-4"
+    >
       <div
         class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
         :style="tiltStyle('equip')"

--
Gitblit v1.9.3