From c8361f1a9080a9e52d0ac772bd59697ad318cfe9 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Mon, 05 Jan 2026 10:44:24 +0800
Subject: [PATCH] 1

---
 src/page/home/newHome.vue |  146 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 135 insertions(+), 11 deletions(-)

diff --git a/src/page/home/newHome.vue b/src/page/home/newHome.vue
index 14ea366..0ee1ee3 100644
--- a/src/page/home/newHome.vue
+++ b/src/page/home/newHome.vue
@@ -14,12 +14,22 @@
         />
       </div>
       <div class="home-search-ctl">
-        <img
-          class="lingdang"
-          src="../../assets/ico/lingdang.png"
-          alt=""
-          @click="$router.push('/notify')"
-        />
+        <!-- 站内信图标 -->
+        <div class="message-icon-wrapper" @click="$router.push('/notify')" v-if="isLoggedIn">
+          <svg class="message-icon" viewBox="0 0 24 24" fill="currentColor">
+            <path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/>
+          </svg>
+          <span v-if="unreadCount > 0" class="message-badge">{{ unreadCount > 99 ? '99+' : unreadCount }}</span>
+        </div>
+        <!-- 小铃铛图标,带红点提示 -->
+        <div class="lingdang-wrapper" @click="$router.push('/notify')" v-if="isLoggedIn">
+          <img
+            class="lingdang"
+            src="../../assets/ico/lingdang.png"
+            alt=""
+          />
+          <span v-if="unreadCount > 0" class="lingdang-badge"></span>
+        </div>
         <img
           class="pifu"
           src="../../assets/ico/pifu.png"
@@ -330,8 +340,15 @@
       newsContent4: [], // 7*24全球
       newsContent5: [], // 商品资讯,
       b_bg: require("../../../static/img/bg-zhisu.png"),
-      r_bg: require("../../../static/img/bg-zhisu-red.png")
+      r_bg: require("../../../static/img/bg-zhisu-red.png"),
+      unreadCount: 0,
+      messageTimer: null
     };
+  },
+  computed: {
+    isLoggedIn() {
+      return !!window.localStorage.getItem("USERTOKEN");
+    }
   },
   created() {
     this.getProductSetting();
@@ -341,8 +358,10 @@
   beforeDestroy() {
     clearInterval(this.timer);
     clearInterval(this.timer2);
+    if (this.messageTimer) {
+      clearInterval(this.messageTimer);
+    }
   },
-  computed: {},
   // 更新的时候运动
   updated() {
     if (!this.moveStats) {
@@ -503,6 +522,31 @@
           id: this.artList.id
         }
       });
+    },
+    // 获取未读消息数
+    async getUnreadCount() {
+      try {
+        const data = await api.getUnreadCount();
+        if (data && data.status === 0) {
+          this.unreadCount = data.data || 0;
+        } else {
+          this.unreadCount = 0;
+        }
+      } catch (error) {
+        console.error('获取未读消息数失败:', error);
+        this.unreadCount = 0;
+      }
+    },
+    // 开始轮询未读消息数(每30秒)
+    startMessagePolling() {
+      if (this.messageTimer) {
+        clearInterval(this.messageTimer);
+      }
+      this.messageTimer = setInterval(() => {
+        if (this.isLoggedIn) {
+          this.getUnreadCount();
+        }
+      }, 30000);
     }
   },
   mounted() {
@@ -514,6 +558,11 @@
     this.getMarket(); // 获取大盘指数
     this.getBanner(); //获取banner
     this.getArtList(); // 获取公告
+    // 如果已登录,获取未读消息数
+    if (this.isLoggedIn) {
+      this.getUnreadCount();
+      this.startMessagePolling();
+    }
     // let header = document.querySelector('.header-box')
     let body = document.querySelector(".wrapper");
     // header.style.display = 'none'
@@ -922,15 +971,73 @@
     align-items: center;
     justify-content: flex-end;
 
-    .lingdang {
-      width: 0.25rem;
-      height: 0.32rem;
+    // 小铃铛图标容器
+    .lingdang-wrapper {
+      position: relative;
+      margin-right: 0.18rem;
+      cursor: pointer;
+      display: inline-block;
+      
+      .lingdang {
+        width: 0.25rem;
+        height: 0.32rem;
+        display: block;
+      }
+      
+      // 小铃铛红点提示
+      .lingdang-badge {
+        position: absolute;
+        top: -0.05rem;
+        right: -0.05rem;
+        width: 0.16rem;
+        height: 0.16rem;
+        background-color: #ff4d4f;
+        border-radius: 50%;
+        border: 0.02rem solid #fff;
+        display: block;
+        animation: pulse 2s infinite;
+      }
     }
 
     .pifu {
       width: 0.34rem;
       height: 0.28rem;
       margin-left: 0.18rem;
+    }
+    
+    // 站内信图标样式
+    .message-icon-wrapper {
+      position: relative;
+      width: 0.5rem;
+      height: 0.5rem;
+      margin-right: 0.18rem;
+      cursor: pointer;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      
+      .message-icon {
+        width: 100%;
+        height: 100%;
+        color: #fff;
+      }
+      
+      .message-badge {
+        position: absolute;
+        top: -0.1rem;
+        right: -0.1rem;
+        min-width: 0.3rem;
+        height: 0.3rem;
+        line-height: 0.3rem;
+        padding: 0 0.08rem;
+        background-color: #ff4d4f;
+        color: #fff;
+        border-radius: 0.15rem;
+        font-size: 0.2rem;
+        text-align: center;
+        font-weight: bold;
+        border: 0.02rem solid #fff;
+      }
     }
   }
 }
@@ -1135,6 +1242,23 @@
     background-color: #565656;
     opacity: 0.3;
   }
+}
+
+// 红点脉冲动画
+@keyframes pulse {
+  0% {
+    transform: scale(1);
+    opacity: 1;
+  }
+  50% {
+    transform: scale(1.1);
+    opacity: 0.8;
+  }
+  100% {
+    transform: scale(1);
+    opacity: 1;
+  }
+}
 
   .account-box .content {
     position: relative;

--
Gitblit v1.9.3