From 6356c99543777037960474b2dbecae0f8a9f97ba Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 24 Jun 2021 20:31:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=8C=E9=9D=A2=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + resources/assets/js/pages/manage.vue | 87 ++++++++++++++++++ .../assets/js/pages/manage/messenger.vue | 6 +- resources/assets/js/store/actions.js | 2 +- resources/assets/js/store/state.js | 1 + .../assets/statics/public/images/logo.png | Bin 0 -> 4394 bytes 6 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 resources/assets/statics/public/images/logo.png diff --git a/package.json b/package.json index 87e1b8d1..5736fe2d 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "dependencies": { "echarts": "^5.1.1", "element-ui": "^2.15.2", + "notification-koro1": "^1.1.1", "tinymce": "^5.8.1", "tui-calendar-hi": "^1.13.0-5", "view-design-hi": "^4.6.1-1", diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 6c83133d..2d18a38f 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -124,6 +124,7 @@ import { mapState, mapGetters } from 'vuex' import TaskDetail from "./manage/components/TaskDetail"; import ProjectArchived from "./manage/components/ProjectArchived"; +import notificationKoro from "notification-koro1"; export default { components: {ProjectArchived, TaskDetail}, @@ -153,12 +154,19 @@ export default { openMenu: {}, archivedProjectShow: false, + + natificationHidden: false, + natificationReady: false, + notificationClass: null, } }, mounted() { this.$store.dispatch("getUserInfo"); this.$store.dispatch("getTaskPriority"); + // + this.notificationInit(); + this.onVisibilityChange(); }, deactivated() { @@ -173,6 +181,7 @@ export default { 'dialogs', 'projects', 'taskId', + 'dialogMsgPush', ]), ...mapGetters(['taskData']), @@ -189,6 +198,34 @@ export default { watch: { '$route' (route) { this.curPath = route.path; + }, + dialogMsgPush(data) { + if (this.natificationHidden && this.natificationReady) { + const {userid, type, msg} = data; + let body = ''; + switch (type) { + case 'text': + body = msg.text; + break; + case 'file': + body = '[' + this.$L(msg.type == 'img' ? '图片信息' : '文件信息') + ']' + break; + default: + return; + } + this.$store.dispatch("getUserBasic", { + userid: userid, + success: (user) => { + this.notificationClass.replaceTitle(user.nickname); + this.notificationClass.replaceOptions({ + icon: user.userimg, + body: body, + requireInteraction: true + }); + this.notificationClass.userAgreed(); + } + }); + } } }, @@ -277,6 +314,56 @@ export default { if (!visible) { this.$store.dispatch('openTask', 0) } + }, + + notificationInit() { + this.notificationClass = new notificationKoro(this.$L("打开通知成功")); + if (this.notificationClass.support) { + this.notificationClass.notificationEvent({ + onclick: () => { + window.focus(); + this.notificationClass.close(); + this.goForward({path: '/manage/messenger'}); + this.$store.dispatch("openDialogUserid", this.dialogMsgPush.userid); + }, + }); + this.notificationPermission(); + } + }, + + notificationPermission() { + const userSelectFn = msg => { + switch (msg) { + // 随时可以调用通知 + case 'already granted': + case 'granted': + return this.natificationReady = true; + + // 请求权限通知被关闭,再次调用 + case 'close': + return this.notificationClass.initNotification(userSelectFn); + + // 请求权限当前被拒绝 || 曾经被拒绝 + case 'denied': + case 'already denied': + if (msg === "denied") { + console.log("您刚刚拒绝显示通知 请在设置中更改设置"); + } else { + console.log("您曾级拒绝显示通知 请在设置中更改设置"); + } + break; + } + }; + this.notificationClass.initNotification(userSelectFn); + }, + + onVisibilityChange() { + let hiddenProperty = 'hidden' in document ? 'hidden' : 'webkitHidden' in document ? 'webkitHidden' : 'mozHidden' in document ? 'mozHidden' : null; + let visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange'); + let visibilityChangeListener = () => { + this.natificationHidden = !!document[hiddenProperty] + } + document.addEventListener(visibilityChangeEvent, visibilityChangeListener); } } } diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index a90aa444..c3f5bdb2 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -100,7 +100,7 @@ export default { }, computed: { - ...mapState(['userId', 'dialogs']), + ...mapState(['userId', 'dialogs', 'dialogOpenId']), dialogList() { const {dialogActive, dialogKey} = this; @@ -145,6 +145,10 @@ export default { if (val && this.contactsLists === null) { this.getContactsList(); } + }, + dialogOpenId(id) { + this.$store.state.method.setStorage("messenger::dialogId", id) + this.dialogId = id; } }, diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 1cabc71a..c97b51a1 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1127,8 +1127,8 @@ export default { userid, }, }).then(result => { - state.method.setStorage("messengerDialogId", result.data.id) dispatch("saveDialog", result.data); + state.dialogOpenId = result.data.id; resolve(result); }).catch(e => { console.error(e); diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js index 93e477d0..0b6b835f 100644 --- a/resources/assets/js/store/state.js +++ b/resources/assets/js/store/state.js @@ -259,6 +259,7 @@ state.userOnline = {}; state.dialogs = []; state.dialogMsgs = []; state.dialogMsgPush = {}; +state.dialogOpenId = 0; // 项目任务 state.projectId = 0; diff --git a/resources/assets/statics/public/images/logo.png b/resources/assets/statics/public/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c83aa4312aaf4e377850e07b9db07851ea01e4a9 GIT binary patch literal 4394 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