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

---
 src/views/dashboard/analytics/index.vue |   60 ++++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 44 insertions(+), 16 deletions(-)

diff --git a/src/views/dashboard/analytics/index.vue b/src/views/dashboard/analytics/index.vue
index df4d405..f877641 100644
--- a/src/views/dashboard/analytics/index.vue
+++ b/src/views/dashboard/analytics/index.vue
@@ -18,6 +18,8 @@
 
 import SummaryCard from '#/views/erp/home/modules/summary-card.vue';
 
+import { useHomeAccess } from '#/utils/use-home-access';
+
 import { defaultSummary } from './data';
 import BizCards from './modules/biz-cards.vue';
 import KpiCards from './modules/kpi-cards.vue';
@@ -26,6 +28,26 @@
 defineOptions({ name: 'DashboardAnalytics' });
 
 const router = useRouter();
+
+const { canQuery, canSeeMenu } = useHomeAccess();
+
+/** MES 鐢熶骇 KPI锛氭暟鎹彇鑷椤垫眹鎬绘帴鍙o紝娌℃湁璇ユ潈闄愬氨鍙栦笉鍒版暟 */
+const canViewSummary = computed(() => canQuery('mes:home:query'));
+const showKpi = computed(
+  () =>
+    canViewSummary.value &&
+    (canSeeMenu('MesQcIqc') || canSeeMenu('MesDvMachinery')),
+);
+const canViewSale = computed(
+  () => canQuery('erp:sale-order:query') && canSeeMenu('ErpSaleOrder'),
+);
+const canViewPurchase = computed(
+  () => canQuery('erp:purchase-order:query') && canSeeMenu('ErpPurchaseOrder'),
+);
+/** 閲戦姒傝鏄攢鍞�/閲囪喘鐨勫鐓у彛寰勶紝鍙湁涓�杈规湁鏉冮檺鏃朵笉鎴愬崱鐗� */
+const showAmountSummary = computed(
+  () => canViewSale.value && canViewPurchase.value,
+);
 
 const greeting = computed(() => {
   const hour = new Date().getHours();
@@ -116,25 +138,31 @@
 }
 
 async function loadStatistics() {
-  try {
-    const saleOrders = await fetchAllPages<ErpSaleOrderApi.SaleOrder>(
-      getSaleOrderPage,
-    );
-    saleSummary.value = aggregatePrice(saleOrders);
-  } catch {
-    /* 鎺ュ彛寮傚父鎴栨棤鏉冮檺 */
+  if (canViewSale.value) {
+    try {
+      const saleOrders = await fetchAllPages<ErpSaleOrderApi.SaleOrder>(
+        getSaleOrderPage,
+      );
+      saleSummary.value = aggregatePrice(saleOrders);
+    } catch {
+      /* 鎺ュ彛寮傚父鎴栨棤鏉冮檺 */
+    }
   }
-  try {
-    const purchaseOrders = await fetchAllPages<ErpPurchaseOrderApi.PurchaseOrder>(
-      getPurchaseOrderPage,
-    );
-    purchaseSummary.value = aggregatePrice(purchaseOrders);
-  } catch {
-    /* 鎺ュ彛寮傚父鎴栨棤鏉冮檺 */
+  if (canViewPurchase.value) {
+    try {
+      const purchaseOrders =
+        await fetchAllPages<ErpPurchaseOrderApi.PurchaseOrder>(
+          getPurchaseOrderPage,
+        );
+      purchaseSummary.value = aggregatePrice(purchaseOrders);
+    } catch {
+      /* 鎺ュ彛寮傚父鎴栨棤鏉冮檺 */
+    }
   }
 }
 
 async function loadHomeSummary() {
+  if (!canViewSummary.value) return;
   try {
     homeSummary.value = await getHomeSummary();
   } catch {
@@ -170,13 +198,13 @@
     </div>
 
     <!-- 璐ㄩ噺 / 璁惧 KPI -->
-    <KpiCards :summary="homeSummary" @navigate="handleNavigate" />
+    <KpiCards v-if="showKpi" :summary="homeSummary" @navigate="handleNavigate" />
 
     <!-- ERP/WMS/BPM 缁忚惀 KPI -->
     <BizCards @navigate="handleNavigate" />
 
     <!-- 閿�鍞� / 閲囪喘 閲戦姒傝 -->
-    <div class="mb-4">
+    <div v-if="showAmountSummary" class="mb-4">
       <SummaryCard
         :purchase-summary="purchaseSummary"
         :sale-summary="saleSummary"

--
Gitblit v1.9.3