mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-17 06:32:51 +00:00
perf: 优化聊天窗口滚动
This commit is contained in:
parent
3796a3dbde
commit
3c8642f30f
@ -28,6 +28,7 @@
|
|||||||
<ScrollerY
|
<ScrollerY
|
||||||
ref="scroller"
|
ref="scroller"
|
||||||
class="dialog-scroller overlay-y"
|
class="dialog-scroller overlay-y"
|
||||||
|
:style="{opacity: visible ? 1 : 0}"
|
||||||
:auto-bottom="isAutoBottom"
|
:auto-bottom="isAutoBottom"
|
||||||
@on-scroll="chatScroll"
|
@on-scroll="chatScroll"
|
||||||
static>
|
static>
|
||||||
@ -129,6 +130,7 @@ export default {
|
|||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
visible: true,
|
||||||
autoBottom: true,
|
autoBottom: true,
|
||||||
autoInterval: null,
|
autoInterval: null,
|
||||||
|
|
||||||
@ -243,10 +245,13 @@ export default {
|
|||||||
dialogId: {
|
dialogId: {
|
||||||
handler(id) {
|
handler(id) {
|
||||||
if (id) {
|
if (id) {
|
||||||
this.autoBottom = true;
|
|
||||||
this.msgNew = 0;
|
this.msgNew = 0;
|
||||||
this.topId = -1;
|
this.topId = -1;
|
||||||
this.$store.dispatch("getDialogMsgs", id);
|
this.visible = false;
|
||||||
|
this.$store.dispatch("getDialogMsgs", id).then(_ => {
|
||||||
|
this.onToBottom();
|
||||||
|
this.visible = true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
immediate: true
|
immediate: true
|
||||||
|
|||||||
79
resources/assets/js/store/actions.js
vendored
79
resources/assets/js/store/actions.js
vendored
@ -2025,45 +2025,52 @@ export default {
|
|||||||
* @param state
|
* @param state
|
||||||
* @param dispatch
|
* @param dispatch
|
||||||
* @param dialog_id
|
* @param dialog_id
|
||||||
|
* @returns {Promise<unknown>}
|
||||||
*/
|
*/
|
||||||
getDialogMsgs({state, dispatch}, dialog_id) {
|
getDialogMsgs({state, dispatch}, dialog_id) {
|
||||||
if (!dialog_id) {
|
return new Promise(resolve => {
|
||||||
return;
|
if (!dialog_id) {
|
||||||
}
|
resolve()
|
||||||
let dialog = state.cacheDialogs.find(({id}) => id == dialog_id);
|
return;
|
||||||
if (!dialog) {
|
}
|
||||||
dialog = {
|
let dialog = state.cacheDialogs.find(({id}) => id == dialog_id);
|
||||||
id: dialog_id,
|
if (!dialog) {
|
||||||
};
|
dialog = {
|
||||||
state.cacheDialogs.push(dialog);
|
id: dialog_id,
|
||||||
}
|
};
|
||||||
if (dialog.loading) {
|
state.cacheDialogs.push(dialog);
|
||||||
return;
|
}
|
||||||
}
|
if (dialog.loading) {
|
||||||
dialog.loading = true;
|
resolve()
|
||||||
dialog.currentPage = 1;
|
return;
|
||||||
dialog.hasMorePages = false;
|
}
|
||||||
//
|
dialog.loading = true;
|
||||||
dispatch("call", {
|
dialog.currentPage = 1;
|
||||||
url: 'dialog/msg/lists',
|
dialog.hasMorePages = false;
|
||||||
data: {
|
|
||||||
dialog_id: dialog_id,
|
|
||||||
page: dialog.currentPage
|
|
||||||
},
|
|
||||||
}).then(result => {
|
|
||||||
dialog.loading = false;
|
|
||||||
dialog.currentPage = result.data.current_page;
|
|
||||||
dialog.hasMorePages = !!result.data.next_page_url;
|
|
||||||
dispatch("saveDialog", dialog);
|
|
||||||
//
|
//
|
||||||
const ids = result.data.data.map(({id}) => id)
|
dispatch("call", {
|
||||||
state.dialogMsgs = state.dialogMsgs.filter((item) => item.dialog_id != dialog_id || ids.includes(item.id));
|
url: 'dialog/msg/lists',
|
||||||
//
|
data: {
|
||||||
dispatch("saveDialog", result.data.dialog);
|
dialog_id: dialog_id,
|
||||||
dispatch("saveDialogMsg", result.data.data);
|
page: dialog.currentPage
|
||||||
}).catch(e => {
|
},
|
||||||
console.warn(e);
|
}).then(result => {
|
||||||
dialog.loading = false;
|
dialog.loading = false;
|
||||||
|
dialog.currentPage = result.data.current_page;
|
||||||
|
dialog.hasMorePages = !!result.data.next_page_url;
|
||||||
|
dispatch("saveDialog", dialog);
|
||||||
|
//
|
||||||
|
const ids = result.data.data.map(({id}) => id)
|
||||||
|
state.dialogMsgs = state.dialogMsgs.filter((item) => item.dialog_id != dialog_id || ids.includes(item.id));
|
||||||
|
//
|
||||||
|
dispatch("saveDialog", result.data.dialog);
|
||||||
|
dispatch("saveDialogMsg", result.data.data);
|
||||||
|
resolve()
|
||||||
|
}).catch(e => {
|
||||||
|
console.warn(e);
|
||||||
|
dialog.loading = false;
|
||||||
|
resolve()
|
||||||
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user