| 
					
				 | 
			
			
				@@ -6,6 +6,50 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <div class="right-menu"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       <template v-if="appStore.device !== 'mobile'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 使用 el-badge 包裹图标 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-badge :value="noticeCount" :max="99" :hidden="noticeCount === 0" class="badge-container"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-tooltip :content="noticeContent" effect="dark" placement="bottom"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class="right-menu-item" style="height: 70%"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-icon @click="showDetail"><BellFilled /></el-icon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-tooltip> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-badge> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 弹框组件 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-dialog v-model="dialogVisible" title="通知" width="30%"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row :gutter="20"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="24"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <div class="dialog-item"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <span class="label">标题:</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input v-model="noticeTitle"  readonly placeholder="请输入公告标题" style="width: 90%;"></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="24"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <div class="dialog-item"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <span class="label">类型:</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<!--                <el-select v-model="noticeType" readonly placeholder="请选择公告类型" style="width: 90%;"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-option 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      v-for="dict in dict.type.sys_notice_type" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      :key="dict.value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      :label="dict.label" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      :value="dict.value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  ></el-option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </el-select>--> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="24"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <div class="dialog-item"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <span class="label">内容:</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <editor v-model="noticeContentV" readonly disabled :min-height="192" style="width: 100%;"></editor> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <span slot="footer" class="dialog-footer"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-button type="primary" @click="dialogVisible = false">已 读</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-dialog> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <header-search id="header-search" class="right-menu-item" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <screenfull id="screenfull" class="right-menu-item hover-effect" /> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -56,6 +100,8 @@ import SizeSelect from '@/components/SizeSelect' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import HeaderSearch from '@/components/HeaderSearch' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import pmGit from '@/components/pm/Git' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import pmDoc from '@/components/pm/Doc' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { listNoticeRead } from "@/api/system/menu"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import {getNotice, show} from "@/api/system/notice"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import useAppStore from '@/store/modules/app' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import useUserStore from '@/store/modules/user' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import useSettingsStore from '@/store/modules/settings' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -64,6 +110,17 @@ const appStore = useAppStore() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const userStore = useUserStore() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const settingsStore = useSettingsStore() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 定义响应式变量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const noticeContentV = ref('暂无消息'); // 通知内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const noticeContent = ref(''); // 通知内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const noticeCount = reactive(0); // 通知数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const intervalId = ref(null); // 定时器 ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const notice_id = ref(null); // 通知 ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const dialogVisible = ref(false); // 控制弹框显示/隐藏 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const noticeTitle = ref(''); // 通知标题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const noticeType = ref(''); // 通知类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const uniqueKey = ref(0); // 新增的唯一键属性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function toggleSideBar() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   appStore.toggleSideBar() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -80,7 +137,6 @@ function handleCommand(command) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function logout() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ElMessageBox.confirm('确定注销并退出系统吗?', '提示', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     confirmButtonText: '确定', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -92,6 +148,29 @@ function logout() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }).catch(() => { }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function showDetail() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log("show"+noticeCount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (noticeCount === 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    listNoticeRead(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  dialogVisible.value = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  show({ noticeId: notice_id.value }).then(response => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    listNoticeRead(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+listNoticeRead().then((response) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 更新唯一键以强制重新渲染 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log(response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  noticeCount = response.data.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (response.data.length>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    noticeContentV.value = response.data[0].notice_content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    noticeTitle.value = response.data[0].notice_title; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    noticeType.value = response.data[0].notice_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    notice_id.value = response.data[0].notice_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  noticeContent.value = "您有" + noticeCount + "条未读的信息 (点击铃铛查看消息)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const emits = defineEmits(['setLayout']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function setLayout() { 
			 |