From 6d4e9ccb34e0292bfadba7bfd678231cb37ae8c0 Mon Sep 17 00:00:00 2001
From: qx <1084500556@qq.com>
Date: 星期三, 02 七月 2025 15:45:16 +0800
Subject: [PATCH] :qx

---
 src/views/index.vue |  198 +++++++++++++++++++-----------------------------
 1 files changed, 79 insertions(+), 119 deletions(-)

diff --git a/src/views/index.vue b/src/views/index.vue
index 1ea2590..268ec38 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -1,28 +1,5 @@
 <template>
   <div class="centre">
-    <!-- 浠婃棩閫氱煡 -->
-    <div style="display: flex; justify-content: center; align-items: center;">
-      <h4>浠婃棩閫氱煡</h4>
-    </div>
-    <div class="notice-area">
-      <el-carousel :interval="2000" direction="vertical" :autoplay="true" :loop="true" height="120px"
-        v-if="groupedNoticeList.length > 0" class="carousel">
-        <el-carousel-item v-for="(group, index) in groupedNoticeList" :key="index">
-          <div class="notice-group">
-            <div class="notice-item" v-for="notice in group" :key="notice.noticeId"
-              @click="goToNotice(notice.noticeId)">
-              <el-tag size="small" :type="notice.noticeType === '1' ? 'info' : 'warning'">
-                {{ notice.noticeType === '1' ? '閫氱煡' : '鍏憡' }}
-              </el-tag>
-              <span class="notice-title">{{ notice.noticeTitle || '鏃犳爣棰�' }}</span>
-              <span class="notice-time">{{ parseTime(notice.createTime, '{y}-{m}-{d}') || '鏃犳椂闂�' }}</span>
-            </div>
-          </div>
-        </el-carousel-item>
-      </el-carousel>
-      <div v-else class="no-notice">鏆傛棤閫氱煡</div>
-    </div>
-
     <!-- 浠婃棩缁熻 -->
     <div style="display: flex; justify-content: center; align-items: center;">
       <h4>浠婃棩缁熻</h4>
@@ -79,6 +56,7 @@
 <script>
 import { getCustomer, getOrder, getReportToday, getTobeToday, getPieChart, getChart } from "@/api/home";
 import { noticeToday } from "@/api/system/notice";
+import { initWebSocket } from "@/utils/websocket";
 const echarts = require('echarts/lib/echarts');
 require('echarts/lib/component/title');
 require('echarts/lib/component/tooltip');
@@ -101,27 +79,18 @@
       teamYYNum: [],
       PieChart: [],
       PieChart2: [],
-      noticeList: [],
-      groupedNoticeList: [], // 鍒嗙粍鍚庣殑閫氱煡鍒楄〃
       loading: false
     };
   },
 
   created() {
     this.getList();
+    this.initWebSocket();
   },
 
   watch: {
     $route(to, from) {
       window.location.reload();
-    },
-    noticeList: {
-      handler(newList) {
-        // 灏嗛�氱煡鎸夋瘡缁勪笁鏉″垎缁�
-        this.groupedNoticeList = this.chunkArray(newList, 3);
-        console.log('groupedNoticeList:', this.groupedNoticeList); // 璋冭瘯
-      },
-      deep: true
     }
   },
 
@@ -132,49 +101,91 @@
         query: { noticeId }
       });
     },
+
+    // 鍒濆鍖� WebSocket 杩炴帴
+    initWebSocket() {
+      const token = this.$store.state.user.token || '';
+      initWebSocket(token, (type, data) => {
+        if (type === 'error') {
+          this.$notify.error({
+            title: '閿欒',
+            message: data,
+            duration: 5000,
+            position: 'top-right'
+          });
+          return;
+        }
+
+        try {
+          const message = JSON.parse(data);
+          console.log('WebSocket 瑙f瀽鍚庢秷鎭�:', message);
+          if (message.noticeId && message.noticeTitle) {
+            const noticeTypeLabel = message.noticeType === '1' ? '閫氱煡' : '鍏憡';
+            this.$notify({
+              title: `鏂�${noticeTypeLabel}`,
+              message: message.noticeTitle || '鏃犳爣棰�',
+              type: 'success',
+              duration: 5000, // 鎮仠 5 绉�
+              position: 'top-right',
+              offset: 50,
+              onClick: () => {
+                this.goToNotice(message.noticeId);
+              }
+            });
+          } else {
+            console.log('鏈煡娑堟伅绫诲瀷:', message);
+          }
+        } catch (error) {
+          console.error('娑堟伅瑙f瀽澶辫触:', error, '鍘熷鏁版嵁:', data);
+          this.$notify.info({
+            title: '娑堟伅',
+            message: `鏈嶅姟鍣ㄥ洖搴斿瓧绗︿覆: ${data}`,
+            duration: 5000,
+            position: 'top-right',
+            offset: 50
+          });
+        }
+      });
+    },
+
     getList() {
       this.loading = true;
 
-      // 鏌ヨ鎵�鏈夊叕鍛�
+      // 鏌ヨ鎵�鏈夊叕鍛婏紙浠呯敤浜庡垵濮嬪寲鏁版嵁锛屽彲鏍规嵁闇�瑕佷繚鐣欐垨绉婚櫎锛�
       noticeToday().then(response => {
         console.log('Notice API response:', response);
-        this.noticeList = response.rows || response.data || [];
-        console.log('noticeList:', this.noticeList);
         this.loading = false;
-        this.$nextTick(() => {
-          console.log('Carousel updated');
-        });
       }).catch(error => {
         console.error('Notice API error:', error);
-        this.$message.error("鑾峰彇閫氱煡澶辫触锛�" + error.message);
+        this.$notify.error({
+          title: '閿欒',
+          message: `鑾峰彇閫氱煡澶辫触锛�${error.message}`,
+          duration: 5000,
+          position: 'top-right'
+        });
         this.loading = false;
       });
 
-      // 鏌ヨ浠婃棩鐧昏
       getCustomer().then(response => {
         this.Customer = response.data || response;
         this.loading = false;
       });
 
-      // 鏌ヨ浠婃棩宸叉
       getOrder().then(response => {
         this.Order = response.data || response;
         this.loading = false;
       });
 
-      // 鏌ヨ浠婃棩鎶ュ憡
       getReportToday().then(response => {
         this.ReportToday = response.data || response;
         this.loading = false;
       });
 
-      // 鏌ヨ浠婃棩寰呮
       getTobeToday().then(response => {
         this.TobeToday = response.data || response;
         this.loading = false;
       });
 
-      // 鎶樼嚎鍥�
       getChart().then(response => {
         response.data.forEach(item => {
           this.LineChart.push(item.date);
@@ -211,7 +222,6 @@
         this.loading = false;
       });
 
-      // 楗肩姸鍥�
       getPieChart().then(response => {
         if (response.data) {
           if (response.data.tjdj == 0 || !response.data.tjdj?.length) {
@@ -281,23 +291,6 @@
       });
     },
 
-    // 鏁扮粍鍒嗙粍鏂规硶
-    chunkArray(array, size) {
-      if (!array || array.length === 0) return [];
-      const result = [];
-      for (let i = 0; i < array.length; i += size) {
-        result.push(array.slice(i, i + size));
-      }
-      // 纭繚寰幆婊氬姩骞虫粦锛岃嫢涓嶈冻 size 鏉★紝琛ラ綈
-      if (array.length % size !== 0 && array.length > size) {
-        const lastGroup = result[result.length - 1];
-        while (lastGroup.length < size) {
-          lastGroup.push(array[lastGroup.length % array.length]);
-        }
-      }
-      return result;
-    },
-
     parseTime(time, cFormat) {
       if (!time) return '';
       try {
@@ -327,62 +320,6 @@
   margin: 15px;
   background-color: #f3f3f3;
   padding: 10px;
-}
-
-.notice-area {
-  width: 100%;
-  min-height: 120px;
-  /* 璋冩暣涓轰笁鏉¢�氱煡楂樺害 */
-  background-color: #fff;
-  margin: 10px 0;
-  padding: 0 20px;
-}
-
-.carousel {
-  width: 100% !important;
-}
-
-.notice-group {
-  display: flex;
-  flex-direction: column;
-  height: 120px;
-  /* 纭繚鍖呭惈涓夋潯閫氱煡 */
-}
-
-.notice-item {
-  display: flex;
-  align-items: center;
-  width: 100%;
-  height: 40px;
-  line-height: 40px;
-  font-size: 14px;
-  cursor: pointer;
-}
-
-.notice-title {
-  margin-left: 10px;
-  font-size: 14px;
-  color: #333;
-  flex-grow: 1;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.notice-time {
-  font-size: 12px;
-  color: #999;
-  margin-left: 20px;
-}
-
-.no-notice {
-  width: 100%;
-  height: 120px;
-  /* 涓庤疆鎾珮搴︿竴鑷� */
-  line-height: 120px;
-  text-align: center;
-  color: #999;
-  font-size: 14px;
 }
 
 .top {
@@ -448,4 +385,27 @@
   background-color: #fff;
   margin-right: 20px;
 }
+
+/* 鑷畾涔� Element UI 閫氱煡鏍峰紡 */
+.el-notification {
+  min-width: 300px;
+  background-color: #f0f9eb;
+  border-color: #e1f3d8;
+  color: #67c23a;
+  font-size: 16px;
+  padding: 15px 20px;
+}
+
+.el-notification__title {
+  font-weight: bold;
+}
+
+.el-notification__content {
+  font-size: 14px;
+  color: #333;
+}
+
+.el-notification__closeBtn {
+  color: #999;
+}
 </style>
\ No newline at end of file

--
Gitblit v1.8.0