From b73e1c27eb0b3206ff765ff1a0a5290b87910234 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 3 Jul 2022 10:06:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B6=88=E6=81=AF=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E6=97=B6=E8=AE=A1=E7=AE=97=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/manage/components/DialogWrapper.vue | 40 +++++++++++++------ resources/assets/js/store/actions.js | 27 +++++++------ 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index e3f834d1a..f13774976 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -441,17 +441,22 @@ export default { }, allMsgList() { - const dialogMsgList = this.dialogMsgList.filter(item => this.msgFilter(item)).sort((a, b) => { - return a.id - b.id; - }) - const tempMsgList = this.tempMsgList.filter(item => this.msgFilter(item)) - if (tempMsgList.length > 0) { - const array = []; - array.push(...dialogMsgList); - array.push(...tempMsgList) - return array; + const dialogMsgList = this.dialogMsgList.filter(item => this.msgFilter(item)) + if (this.tempMsgList.length > 0) { + const ids = dialogMsgList.map(({id}) => id) + const tempMsgList = this.tempMsgList.filter(item => !ids.includes(item.id) && this.msgFilter(item)) + if (tempMsgList.length > 0) { + const array = []; + array.push(...dialogMsgList); + array.push(...tempMsgList) + return array.sort((a, b) => { + return a.id - b.id; + }); + } } - return dialogMsgList; + return dialogMsgList.sort((a, b) => { + return a.id - b.id; + }); }, loadMsg() { @@ -596,13 +601,22 @@ export default { immediate: true }, - msgType(type) { + msgType(msg_type) { + this.tempMsgs = this.tempMsgs.filter(({is_msg_type}) => is_msg_type !== true) requestAnimationFrame(this.onToBottom) - if (type) { + // + if (msg_type) { this.$store.dispatch("getDialogMsgs", { dialog_id: this.dialogId, msg_id: this.msgId, - msg_type: this.msgType, + msg_type, + save_cancel: true, + }).then(({data}) => { + if (data.list.length > 0) { + this.tempMsgs.push(...data.list.map(item => Object.assign(item, { + is_msg_type: true + }))) + } }).catch(_ => {}); } }, diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 4b393ce0f..0976f810c 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -2183,7 +2183,7 @@ export default { * @param state * @param dispatch * @param getters - * @param data {dialog_id, msg_id, ?msg_type, ?position_id, ?prev_id, ?next_id, ?save_before, ?save_after} + * @param data {dialog_id, msg_id, ?msg_type, ?position_id, ?prev_id, ?next_id, ?save_before, ?save_cancel} * @returns {Promise} */ getDialogMsgs({state, dispatch, getters}, data) { @@ -2195,9 +2195,9 @@ export default { } // const saveBefore = typeof data.save_before === "function" ? data.save_before : _ => {} - const saveAfter = typeof data.save_after === "function" ? data.save_after : _ => {} + const saveCancel = typeof data.save_cancel === "boolean" ? data.save_cancel : false if (typeof data.save_before !== "undefined") delete data.save_before - if (typeof data.save_after !== "undefined") delete data.save_after + if (typeof data.save_cancel !== "undefined") delete data.save_cancel // const loadKey = `msg::${data.dialog_id}-${data.msg_id}-${data.msg_type || ''}` if (getters.isLoad(loadKey)) { @@ -2211,17 +2211,18 @@ export default { data, complete: _ => dispatch("cancelLoad", loadKey) }).then(result => { - const resData = result.data; - if ($A.isJson(resData.dialog)) { - dispatch("saveDialog", resData.dialog); - // - const ids = resData.list.map(({id}) => id) - state.dialogMsgs = state.dialogMsgs.filter(item => item.dialog_id != data.dialog_id || ids.includes(item.id)); - } - // saveBefore() - dispatch("saveDialogMsg", resData.list) - saveAfter() + if (!saveCancel) { + const resData = result.data; + if ($A.isJson(resData.dialog)) { + dispatch("saveDialog", resData.dialog); + // + const ids = resData.list.map(({id}) => id) + state.dialogMsgs = state.dialogMsgs.filter(item => item.dialog_id != data.dialog_id || ids.includes(item.id)); + } + // + dispatch("saveDialogMsg", resData.list) + } resolve(result) }).catch(e => { console.warn(e);