Эх сурвалжийг харах

修改 公告 删除和修改都需要页面订阅新的数据信息

bzd_lxf 2 сар өмнө
parent
commit
f537665b40

+ 11 - 0
pm-admin/src/main/java/com/pm/web/controller/system/SysNoticeController.java

@@ -1,6 +1,9 @@
 package com.pm.web.controller.system;
 
 import java.util.List;
+
+import com.pm.common.config.PageData;
+import com.pm.system.service.ISysMenuService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.messaging.simp.SimpMessagingTemplate;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -71,6 +74,8 @@ public class SysNoticeController extends BaseController
         return toAjax(noticeService.insertNotice(notice));
     }
 
+    @Autowired
+    private ISysMenuService menuService;
     /**
      * 修改通知公告
      */
@@ -80,6 +85,11 @@ public class SysNoticeController extends BaseController
     public AjaxResult edit(@Validated @RequestBody SysNotice notice)
     {
         notice.setUpdateBy(getUsername());
+        messagingTemplate.convertAndSend("/topic/update", notice);
+        PageData pd = new PageData();
+        pd.put("noticeId", notice.getNoticeId());
+        pd.put("userId", getUserId());
+        menuService.listNoticeReadDel(pd);
         return toAjax(noticeService.updateNotice(notice));
     }
 
@@ -91,6 +101,7 @@ public class SysNoticeController extends BaseController
     @DeleteMapping("/{noticeIds}")
     public AjaxResult remove(@PathVariable Long[] noticeIds)
     {
+        messagingTemplate.convertAndSend("/topic/del", noticeIds);
         return toAjax(noticeService.deleteNoticeByIds(noticeIds));
     }
 }

+ 1 - 0
pm-system/src/main/java/com/pm/system/mapper/SysMenuMapper.java

@@ -140,4 +140,5 @@ public interface SysMenuMapper
     public Integer showAllYnCountData(PageData pd);
 
     public int listNoticeReadShow(PageData pd);
+    public int listNoticeReadDel(PageData pd);
 }

+ 1 - 0
pm-system/src/main/java/com/pm/system/service/ISysMenuService.java

@@ -158,4 +158,5 @@ public interface ISysMenuService
     public List<PageData> showAllCountData(PageData pd);
 
     public int listNoticeReadShow(PageData pd);
+    public int listNoticeReadDel(PageData pd);
 }

+ 5 - 0
pm-system/src/main/java/com/pm/system/service/impl/SysMenuServiceImpl.java

@@ -582,4 +582,9 @@ public class SysMenuServiceImpl implements ISysMenuService
         return menuMapper.listNoticeReadShow(pd);
     }
 
+    @Override
+    public int listNoticeReadDel(PageData pd) {
+        return menuMapper.listNoticeReadDel(pd);
+    }
+
 }

+ 3 - 0
pm-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -323,6 +323,9 @@
 			ON DUPLICATE KEY UPDATE
 								 create_time = VALUES(create_time);
 	</update>
+	<update id="listNoticeReadDel" parameterType="pd">
+		delete FROM sys_notice_read where notice_id=#{noticeId} and user_id=#{userId}
+	</update>
 
 	<select id="showAllCountData" resultType="pd" parameterType="pd">
 		select count(1) t_num from sensor where company_code = #{company_code}

+ 3 - 0
pm_ui/.env.production

@@ -9,3 +9,6 @@ VITE_APP_BASE_API = '/prod-api'
 
 # 是否在打包时开启压缩,支持 gzip 和 brotli
 VITE_BUILD_COMPRESS = gzip
+
+# websocket 路径
+VITE_WS_URL=182.43.195.17

+ 3 - 1
pm_ui/src/layout/components/Navbar.vue

@@ -163,7 +163,9 @@ connectToWebSocket((newAnnounce) => {
     //   duration: 5000,
     //   position: 'top-right'
     // });
-    txt2("新公告", "您有新的公告,请注意查收",'warning',3000);
+    if (!newAnnounce==="del" || !newAnnounce==="update"){ // 如果删除公告则不提示信息
+      txt2("新公告", "您有新的公告,请注意查收",'warning',3000);
+    }
     getlistNotice()
   }
 })

+ 9 - 1
pm_ui/src/layout/components/websocket.js

@@ -3,7 +3,7 @@ import { Client } from '@stomp/stompjs';
 let stompClient = null;
 
 export function connectToWebSocket(onMessageReceived) {
-    const socket = new WebSocket('ws://'+__LOCAL_IP__+':8010/ws'); // 后端 WebSocket 地址
+    const socket = new WebSocket(__LOCAL_IP__); // 后端 WebSocket 地址
     stompClient = new Client({
         webSocketFactory: () => socket,
         reconnectDelay: 5000,
@@ -17,6 +17,14 @@ export function connectToWebSocket(onMessageReceived) {
             const announcement = JSON.parse(message.body);
             onMessageReceived(announcement);
         });
+        // 删除公告的订阅
+        stompClient.subscribe('/topic/del', (message) => {
+            onMessageReceived("del");
+        });
+        // 修改公告的订阅
+        stompClient.subscribe('/topic/update', (message) => {
+            onMessageReceived("update");
+        });
     };
 
     stompClient.onStompError = (error) => {

+ 2 - 2
pm_ui/vite.config.js

@@ -7,7 +7,7 @@ import { ip } from 'address'
 // https://vitejs.dev/config/
 export default defineConfig(({ mode, command }) => {
   const env = loadEnv(mode, process.cwd())
-  const { VITE_APP_ENV } = env
+  const { VITE_APP_ENV,VITE_WS_URL } = env
 
   // 获取本机局域网 IP 地址
   const localIP = ip()
@@ -18,7 +18,7 @@ export default defineConfig(({ mode, command }) => {
     base: VITE_APP_ENV === 'production' ? '/' : '/',
     plugins: createVitePlugins(env, command === 'build'),
     define: {
-      __LOCAL_IP__: JSON.stringify(localIP)
+      __LOCAL_IP__: JSON.stringify(VITE_APP_ENV === 'production' ? `ws://${VITE_WS_URL}:8010/ws` : 'ws://localhost:8010/ws')
     },
     resolve: {
       // https://cn.vitejs.dev/config/#resolve-alias