From 3268de7494d5281186bb692635540e38db251e13 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 12 十月 2026 11:53:01 +0800
Subject: [PATCH] feat(dashboard): 添加权限控制和能耗分析功能

---
 src/views/dashboard/analytics/modules/kpi-cards.vue |   24 ++++++++++++++++--------
 1 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/views/dashboard/analytics/modules/kpi-cards.vue b/src/views/dashboard/analytics/modules/kpi-cards.vue
index 761db56..88853ef 100644
--- a/src/views/dashboard/analytics/modules/kpi-cards.vue
+++ b/src/views/dashboard/analytics/modules/kpi-cards.vue
@@ -8,7 +8,11 @@
 
 import { Col, Row } from 'ant-design-vue';
 
+import { useHomeAccess } from '../use-home-access';
+
 defineOptions({ name: 'DashboardKpiCards' });
+
+const { canNavigate } = useHomeAccess();
 
 const props = defineProps<{
   summary: MesHomeApi.Summary;
@@ -61,11 +65,12 @@
     <!-- 鐢熶骇璁㈠崟 -->
     <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
       <div
-        class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
+        class="glass-tilt group overflow-hidden rounded-2xl border-0"
+        :class="{ 'cursor-pointer': canNavigate('MesProWorkOrder') }"
         :style="tiltStyle('order')"
         @mousemove="(e: MouseEvent) => onMouseMove(e, 'order')"
         @mouseleave="onMouseLeave('order')"
-        @click="emit('navigate', 'MesProWorkOrder')"
+        @click="canNavigate('MesProWorkOrder') && emit('navigate', 'MesProWorkOrder')"
       >
         <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-blue-500 to-cyan-400 shadow-lg shadow-blue-500/25 transition-transform duration-300 group-hover:scale-110">
@@ -92,11 +97,12 @@
     <!-- 浠婃棩浜ч噺 -->
     <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
       <div
-        class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
+        class="glass-tilt group overflow-hidden rounded-2xl border-0"
+        :class="{ 'cursor-pointer': canNavigate('MesProFeedback') }"
         :style="tiltStyle('output')"
         @mousemove="(e: MouseEvent) => onMouseMove(e, 'output')"
         @mouseleave="onMouseLeave('output')"
-        @click="emit('navigate', 'MesProFeedback')"
+        @click="canNavigate('MesProFeedback') && emit('navigate', 'MesProFeedback')"
       >
         <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-emerald-500 to-green-400 shadow-lg shadow-emerald-500/25 transition-transform duration-300 group-hover:scale-110">
@@ -123,11 +129,12 @@
     <!-- 璐ㄩ噺鍚堟牸鐜� -->
     <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
       <div
-        class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
+        class="glass-tilt group overflow-hidden rounded-2xl border-0"
+        :class="{ 'cursor-pointer': canNavigate('MesQcRecord') }"
         :style="tiltStyle('quality')"
         @mousemove="(e: MouseEvent) => onMouseMove(e, 'quality')"
         @mouseleave="onMouseLeave('quality')"
-        @click="emit('navigate', 'MesQcRecord')"
+        @click="canNavigate('MesQcRecord') && emit('navigate', 'MesQcRecord')"
       >
         <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">
@@ -156,11 +163,12 @@
     <!-- 璁惧杩愯鐜� -->
     <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
       <div
-        class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
+        class="glass-tilt group overflow-hidden rounded-2xl border-0"
+        :class="{ 'cursor-pointer': canNavigate('MesDvMachinery') }"
         :style="tiltStyle('equip')"
         @mousemove="(e: MouseEvent) => onMouseMove(e, 'equip')"
         @mouseleave="onMouseLeave('equip')"
-        @click="emit('navigate', 'MesDvMachinery')"
+        @click="canNavigate('MesDvMachinery') && emit('navigate', 'MesDvMachinery')"
       >
         <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-violet-500 to-purple-400 shadow-lg shadow-violet-500/25 transition-transform duration-300 group-hover:scale-110">

--
Gitblit v1.9.3