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