From f3e9ac2b56a72573698ebcbed15688b759626044 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 17 Jun 2022 11:19:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=AD=89=E5=BE=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/pages/manage/components/DialogView.vue | 12 +- .../pages/manage/components/DialogWrapper.vue | 9 +- .../js/pages/manage/components/TaskMenu.vue | 4 +- .../pages/manage/components/TaskOperation.vue | 4 +- resources/assets/js/store/actions.js | 106 ++++++++++-------- resources/assets/js/store/state.js | 2 +- 6 files changed, 84 insertions(+), 53 deletions(-) diff --git a/resources/assets/js/pages/manage/components/DialogView.vue b/resources/assets/js/pages/manage/components/DialogView.vue index e777b0a1e..977769aef 100644 --- a/resources/assets/js/pages/manage/components/DialogView.vue +++ b/resources/assets/js/pages/manage/components/DialogView.vue @@ -82,7 +82,7 @@ -
+
{{msgData.created_at}}
@@ -172,7 +172,15 @@ export default { }, computed: { - ...mapState(['dialogMsgs', 'dialogReplys', 'audioPlaying', 'windowActive']), + ...mapState(['loads', 'dialogMsgs', 'dialogReplys', 'audioPlaying', 'windowActive']), + + isLoading() { + if (!this.msgData.created_at) { + return true; + } + const load = this.loads.find(({key}) => key === `msg-${this.msgData.id}`); + return load && load.num > 0 + }, viewClass() { const {msgData, replyData, operateAction, operateEnter} = this; diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index c185f53ea..c21b07280 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -1127,16 +1127,23 @@ export default { }, onEmoji(emoji) { + const msg_id = this.operateItem.id; + this.$store.dispatch("setLoad", { + key: `msg-${msg_id}`, + delay: 600 + }) this.$store.dispatch("call", { url: 'dialog/msg/emoji', data: { - msg_id: this.operateItem.id, + msg_id, emoji, }, }).then(({data}) => { this.$store.dispatch("saveDialogMsg", data); }).catch(({msg}) => { $A.messageError(msg); + }).finally(_ => { + this.$store.dispatch("cancelLoad", `msg-${msg_id}`) }); } } diff --git a/resources/assets/js/pages/manage/components/TaskMenu.vue b/resources/assets/js/pages/manage/components/TaskMenu.vue index acddfdcf2..1766d21f9 100644 --- a/resources/assets/js/pages/manage/components/TaskMenu.vue +++ b/resources/assets/js/pages/manage/components/TaskMenu.vue @@ -50,13 +50,13 @@ export default { }, }, computed: { - ...mapState(['taskLoading', 'taskFlows']), + ...mapState(['loads', 'taskFlows']), loadIng() { if (this.loadStatus) { return true; } - const load = this.taskLoading.find(({id}) => id == this.task.id); + const load = this.loads.find(({key}) => key === `task-${this.task.id}`); return load && load.num > 0 }, }, diff --git a/resources/assets/js/pages/manage/components/TaskOperation.vue b/resources/assets/js/pages/manage/components/TaskOperation.vue index 3bdf1f130..4f80ce97b 100644 --- a/resources/assets/js/pages/manage/components/TaskOperation.vue +++ b/resources/assets/js/pages/manage/components/TaskOperation.vue @@ -96,13 +96,13 @@ export default { } }, computed: { - ...mapState(['taskOperation', 'taskColorList', 'taskLoading', 'taskFlows', 'taskFlowItems']), + ...mapState(['loads', 'taskOperation', 'taskColorList', 'taskFlows', 'taskFlowItems']), loadIng() { if (this.loadStatus) { return true; } - const load = this.taskLoading.find(({id}) => id == this.task.id); + const load = this.loads.find(({key}) => key === `task-${this.task.id}`); return load && load.num > 0 }, diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 99f211467..fe6a6c185 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1362,19 +1362,22 @@ export default { reject({msg: 'Parameter error'}); return; } - dispatch("taskLoadStart", data.task_id) + dispatch("setLoad", { + key: `task-${data.task_id}`, + delay: 300 + }) dispatch("call", { url: 'project/task/remove', data, }).then(result => { dispatch("forgetTask", data.task_id) - dispatch("taskLoadEnd", data.task_id) resolve(result) }).catch(e => { console.warn(e); dispatch("getTaskOne", data.task_id).catch(() => {}) - dispatch("taskLoadEnd", data.task_id) reject(e) + }).finally(_ => { + dispatch("cancelLoad", `task-${data.task_id}`) }); }); }, @@ -1395,19 +1398,22 @@ export default { reject({msg: 'Parameter error'}); return; } - dispatch("taskLoadStart", data.task_id) + dispatch("setLoad", { + key: `task-${data.task_id}`, + delay: 300 + }) dispatch("call", { url: 'project/task/archived', data, }).then(result => { dispatch("saveTask", result.data) - dispatch("taskLoadEnd", data.task_id) resolve(result) }).catch(e => { console.warn(e); dispatch("getTaskOne", data.task_id).catch(() => {}) - dispatch("taskLoadEnd", data.task_id) reject(e) + }).finally(_ => { + dispatch("cancelLoad", `task-${data.task_id}`) }); }); }, @@ -1613,20 +1619,23 @@ export default { taskUpdate({state, dispatch}, data) { return new Promise(function (resolve, reject) { dispatch("taskBeforeUpdate", data).then(({confirm, post}) => { - dispatch("taskLoadStart", post.task_id) + dispatch("setLoad", { + key: `task-${post.task_id}`, + delay: 300 + }) dispatch("call", { url: 'project/task/update', data: post, method: 'post', }).then(result => { - dispatch("taskLoadEnd", post.task_id) dispatch("saveTask", result.data) resolve(result) }).catch(e => { console.warn(e); - dispatch("taskLoadEnd", post.task_id) dispatch("getTaskOne", post.task_id).catch(() => {}) setTimeout(() => { reject(e) }, confirm === true ? 301 : 0) + }).finally(_ => { + dispatch("cancelLoad", `task-${post.task_id}`) }); }).catch(reject) }); @@ -1735,42 +1744,6 @@ export default { }); }, - /** - * 任务增加等待 - * @param state - * @param task_id - */ - taskLoadStart({state}, task_id) { - setTimeout(() => { - const load = state.taskLoading.find(({id}) => id == task_id) - if (!load) { - state.taskLoading.push({ - id: task_id, - num: 1 - }) - } else { - load.num++; - } - }, 300) - }, - - /** - * 任务减少等待 - * @param state - * @param task_id - */ - taskLoadEnd({state}, task_id) { - const load = state.taskLoading.find(({id}) => id == task_id) - if (!load) { - state.taskLoading.push({ - id: task_id, - num: -1 - }) - } else { - load.num--; - } - }, - /** * 获取任务流程信息 * @param state @@ -2335,6 +2308,49 @@ export default { }, 50); }, + /** *****************************************************************************************/ + /** ************************************* loads *********************************************/ + /** *****************************************************************************************/ + + /** + * 设置等待 + * @param state + * @param dispatch + * @param key + */ + setLoad({state, dispatch}, key) { + if ($A.isJson(key)) { + setTimeout(_ => { + dispatch("setLoad", key.key) + }, key.delay || 0) + return; + } + const load = state.loads.find(item => item.key == key) + if (!load) { + state.loads.push({key, num: 1}) + } else { + load.num++; + } + }, + + /** + * 取消等待 + * @param state + * @param key + */ + cancelLoad({state}, key) { + const load = state.loads.find(item => item.key == key) + if (!load) { + state.loads.push({key, num: -1}) + } else { + load.num--; + } + }, + + /** *****************************************************************************************/ + /** *********************************** websocket *******************************************/ + /** *****************************************************************************************/ + /** * 初始化 websocket * @param state diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js index 65e4a44a7..015114b78 100644 --- a/resources/assets/js/store/state.js +++ b/resources/assets/js/store/state.js @@ -19,6 +19,7 @@ const stateData = { routeHistoryLast: {}, // 加载状态 + loads: [], loadDashboardTasks: false, loadUserBasic: false, loadProjects: 0, @@ -90,7 +91,6 @@ const stateData = { taskOperation: {}, // 任务等待状态 - taskLoading: [], taskOneLoad: {}, // 任务流程信息