From 409a6c46741422f0d6dc00acc38b5f7dc1f35e9f Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期四, 24 九月 2026 10:53:07 +0800
Subject: [PATCH] feat: 现场需求前端改动

---
 src/views/collaborativeApproval/meetingManagement/index.vue |  123 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 122 insertions(+), 1 deletions(-)

diff --git a/src/views/collaborativeApproval/meetingManagement/index.vue b/src/views/collaborativeApproval/meetingManagement/index.vue
index 69b0275..4106fe7 100644
--- a/src/views/collaborativeApproval/meetingManagement/index.vue
+++ b/src/views/collaborativeApproval/meetingManagement/index.vue
@@ -1,5 +1,23 @@
 <template>
   <div class="app-container">
+    <!-- 浼氳鐪嬫澘鎻愮ず鏉� -->
+    <div
+      class="meeting-board-tip"
+      :class="{ 'is-active': stats.underWay > 0 || stats.toStart > 0 }"
+      @click="goMeetingBoard"
+    >
+      <el-icon class="tip-icon"><BellFilled /></el-icon>
+      <div class="tip-body">
+        <span class="tip-title">浼氳鐪嬫澘鎻愮ず</span>
+        <span class="tip-text">
+          鍏� <b>{{ stats.total }}</b> 鍦轰細璁� 路
+          杩涜涓� <b class="num-ongoing">{{ stats.underWay }}</b> 鍦� 路
+          鍗冲皢寮�濮� <b class="num-soon">{{ stats.toStart }}</b> 鍦�
+        </span>
+      </div>
+      <span class="tip-link">鏌ョ湅浼氳鐪嬫澘 鈥�</span>
+    </div>
+
     <div class="tabs-wrapper">
       <el-tabs
         v-model="activeTab"
@@ -24,7 +42,10 @@
 </template>
 
 <script setup>
-import { ref, computed } from 'vue'
+import { ref, computed, onMounted, onActivated } from 'vue'
+import { useRouter } from 'vue-router'
+import { BellFilled } from '@element-plus/icons-vue'
+import { getMeetSummary } from '@/api/collaborativeApproval/meeting.js'
 import MeetSetting from '../notificationManagement/meetSetting/index.vue'
 import MeetIndex from '../notificationManagement/meetIndex/index.vue'
 import MeetApplication from '../notificationManagement/meetApplication/index.vue'
@@ -48,10 +69,110 @@
 function handleTabChange(name) {
   activeTab.value = name
 }
+
+// 浼氳鐪嬫澘鎻愮ず鏉℃暟鎹�
+const router = useRouter()
+const stats = ref({ total: 0, underWay: 0, completed: 0, toStart: 0 })
+
+const loadMeetingStats = async () => {
+  try {
+    const { data } = await getMeetSummary()
+    stats.value = {
+      total: Number(data?.total) || 0,
+      underWay: Number(data?.underWay) || 0,
+      completed: Number(data?.completed) || 0,
+      toStart: Number(data?.toStart) || 0
+    }
+  } catch (e) {
+    // 鎻愮ず鏉℃暟鎹姞杞藉け璐ヤ笉褰卞搷浼氳绠$悊涓绘祦绋�
+    console.warn('浼氳鐪嬫澘鎻愮ず鍔犺浇澶辫触:', e)
+  }
+}
+
+const goMeetingBoard = () => {
+  router.push('/collaborativeApproval/meetingBoard')
+}
+
+let tipInited = false
+onMounted(loadMeetingStats)
+onActivated(() => {
+  // keep-alive 缂撳瓨鏃讹紝鍒囧洖椤甸潰鍒锋柊鎻愮ず鏉�
+  if (tipInited) loadMeetingStats()
+  tipInited = true
+})
 </script>
 
 <style scoped lang="scss">
 
+.meeting-board-tip {
+  display: flex;
+  align-items: center;
+  gap: 12px;
+  padding: 10px 16px;
+  margin-bottom: 12px;
+  border-radius: 8px;
+  cursor: pointer;
+  background: #f4f8ff;
+  border: 1px solid #d6e4ff;
+  transition: background 0.2s, border-color 0.2s;
+}
+
+.meeting-board-tip:hover {
+  background: #e8f1ff;
+}
+
+.meeting-board-tip.is-active {
+  background: #fff7e6;
+  border-color: #ffd591;
+}
+
+.meeting-board-tip .tip-icon {
+  font-size: 18px;
+  color: #409eff;
+}
+
+.meeting-board-tip.is-active .tip-icon {
+  color: #fa8c16;
+}
+
+.meeting-board-tip .tip-body {
+  flex: 1;
+  min-width: 0;
+  display: flex;
+  align-items: center;
+  gap: 12px;
+}
+
+.meeting-board-tip .tip-title {
+  font-weight: 600;
+  color: #1f2d3d;
+  white-space: nowrap;
+}
+
+.meeting-board-tip .tip-text {
+  font-size: 13px;
+  color: #5b6b7f;
+}
+
+.meeting-board-tip .tip-text b {
+  font-size: 15px;
+  color: #409eff;
+}
+
+.meeting-board-tip .tip-text .num-ongoing {
+  color: #fa8c16;
+}
+
+.meeting-board-tip .tip-text .num-soon {
+  color: #13c2c2;
+}
+
+.meeting-board-tip .tip-link {
+  font-size: 13px;
+  color: #409eff;
+  white-space: nowrap;
+}
+
 .tabs-wrapper {
   margin-bottom: 10px;
 }

--
Gitblit v1.9.3