Parcourir la source

🎉 init(notice): 新增浏览器通知

hans il y a 2 ans
Parent
commit
973297410c
2 fichiers modifiés avec 21 ajouts et 2 suppressions
  1. 1 0
      Web/package.json
  2. 20 2
      Web/src/layout/navBars/topBar/user.vue

+ 1 - 0
Web/package.json

@@ -36,6 +36,7 @@
 		"nprogress": "^0.2.0",
 		"pinia": "^2.1.7",
 		"print-js": "^1.6.0",
+		"push.js": "^1.0.12",
 		"qrcodejs2-fixes": "^0.0.2",
 		"qs": "^6.12.0",
 		"relation-graph": "^2.1.38",

+ 20 - 2
Web/src/layout/navBars/topBar/user.vue

@@ -99,7 +99,7 @@ import { Local } from '/@/utils/storage';
 
 import { clearAccessTokens, getAPI } from '/@/utils/axios-utils';
 import { SysAuthApi, SysNoticeApi } from '/@/api-services/api';
-
+import Push from 'push.js';
 import { signalR } from '/@/views/system/onlineUser/signalR';
 
 // 引入组件
@@ -221,7 +221,19 @@ onMounted(async () => {
 		initI18nOrSize('globalComponentSize', 'disabledSize');
 		initI18nOrSize('globalI18n', 'disabledI18n');
 	}
-
+	// 手动获取用户桌面通知权限
+	if (Push.Permission.GRANTED) {
+		// 判断当前是否有权限,没有则手动获取
+		Push.Permission.request();
+	}
+	// 监听浏览器 当前系统是否在当前页
+	document.addEventListener('visibilitychange', () => {
+		if (!document.hidden) {
+			// 处于当前页面
+			// 关闭之前的消息通知,清空
+			Push.clear();
+		}
+	});
 	// 加载未读的站内信
 	var res = await getAPI(SysNoticeApi).apiSysNoticeUnReadListGet();
 	state.noticeList = res.data.result ?? [];
@@ -252,6 +264,12 @@ const receiveNotice = (msg: any) => {
 		type: 'info',
 		position: 'bottom-right',
 	});
+	Push.create('提示', {
+		body: '你有一条新的消息',
+		icon: 'logo.png', //public目录下的
+		timeout: 4500, // 通知显示时间,单位为毫秒
+
+	});
 };
 </script>