mirror of
https://github.com/kuaifan/dootask.git
synced 2026-03-17 19:23:26 +00:00
perf: 优化对话列表加载速度
This commit is contained in:
parent
78f197e7f9
commit
dcf5d3e910
@ -38,7 +38,7 @@ class DialogController extends AbstractController
|
|||||||
*
|
*
|
||||||
* @apiParam {String} [at_after] 只读取在这个时间之后更新的对话
|
* @apiParam {String} [at_after] 只读取在这个时间之后更新的对话
|
||||||
* @apiParam {Number} [page] 当前页,默认:1
|
* @apiParam {Number} [page] 当前页,默认:1
|
||||||
* @apiParam {Number} [pagesize] 每页显示数量,默认:100,最大:200
|
* @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100
|
||||||
*
|
*
|
||||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||||
@ -57,7 +57,7 @@ class DialogController extends AbstractController
|
|||||||
$list = $builder
|
$list = $builder
|
||||||
->orderByDesc('u.top_at')
|
->orderByDesc('u.top_at')
|
||||||
->orderByDesc('web_socket_dialogs.last_at')
|
->orderByDesc('web_socket_dialogs.last_at')
|
||||||
->paginate(Base::getPaginate(200, 100));
|
->paginate(Base::getPaginate(100, 50));
|
||||||
$list->transform(function (WebSocketDialog $item) use ($user) {
|
$list->transform(function (WebSocketDialog $item) use ($user) {
|
||||||
return $item->formatData($user->userid);
|
return $item->formatData($user->userid);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -755,7 +755,7 @@ export default {
|
|||||||
if (timeout > -1) {
|
if (timeout > -1) {
|
||||||
this.__updateDialogs = setTimeout(_ => {
|
this.__updateDialogs = setTimeout(_ => {
|
||||||
if (this.tabActive === 'dialog') {
|
if (this.tabActive === 'dialog') {
|
||||||
this.$store.dispatch("getDialogs", true).catch(() => {});
|
this.$store.dispatch("getDialogs", {hideLoad: true}).catch(() => {});
|
||||||
}
|
}
|
||||||
}, timeout)
|
}, timeout)
|
||||||
}
|
}
|
||||||
|
|||||||
29
resources/assets/js/store/actions.js
vendored
29
resources/assets/js/store/actions.js
vendored
@ -1278,7 +1278,7 @@ export default {
|
|||||||
//
|
//
|
||||||
dispatch("call", {
|
dispatch("call", {
|
||||||
url: 'project/task/lists',
|
url: 'project/task/lists',
|
||||||
data: data
|
data
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
if (data.project_id) {
|
if (data.project_id) {
|
||||||
state.projectLoad--;
|
state.projectLoad--;
|
||||||
@ -2071,20 +2071,25 @@ export default {
|
|||||||
* 获取会话列表
|
* 获取会话列表
|
||||||
* @param state
|
* @param state
|
||||||
* @param dispatch
|
* @param dispatch
|
||||||
* @param hideLoad
|
* @param data
|
||||||
* @returns {Promise<unknown>}
|
* @returns {Promise<unknown>}
|
||||||
*/
|
*/
|
||||||
getDialogs({state, dispatch}, hideLoad) {
|
getDialogs({state, dispatch}, data) {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
if (state.userId === 0) {
|
if (state.userId === 0) {
|
||||||
state.cacheDialogs = [];
|
state.cacheDialogs = [];
|
||||||
reject({msg: 'Parameter error'});
|
reject({msg: 'Parameter error'});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let data = {};
|
data = $A.isJson(data) ? data : {}
|
||||||
if (hideLoad !== true) {
|
if (data.hideLoad !== true) {
|
||||||
state.loadDialogs++;
|
state.loadDialogs++;
|
||||||
}
|
}
|
||||||
|
if (typeof data.pagesize === "undefined") {
|
||||||
|
data.pagesize = 20
|
||||||
|
}
|
||||||
|
if (typeof data.page === "undefined") {
|
||||||
|
data.page = 1
|
||||||
if (state.cacheDialogs.length > 0) {
|
if (state.cacheDialogs.length > 0) {
|
||||||
const tmpList = state.cacheDialogs.sort((a, b) => {
|
const tmpList = state.cacheDialogs.sort((a, b) => {
|
||||||
if (a.top_at || b.top_at) {
|
if (a.top_at || b.top_at) {
|
||||||
@ -2094,17 +2099,25 @@ export default {
|
|||||||
})
|
})
|
||||||
data.at_after = tmpList[0].last_at;
|
data.at_after = tmpList[0].last_at;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
dispatch("call", {
|
dispatch("call", {
|
||||||
url: 'dialog/lists',
|
url: 'dialog/lists',
|
||||||
data,
|
data,
|
||||||
}).then(result => {
|
}).then(result => {
|
||||||
dispatch("saveDialog", result.data.data);
|
const resData = result.data;
|
||||||
resolve(result)
|
dispatch("saveDialog", resData.data);
|
||||||
|
//
|
||||||
|
if (resData.next_page_url && resData.current_page < 5) {
|
||||||
|
data.page++
|
||||||
|
dispatch("getDialogs", data).then(resolve).catch(reject)
|
||||||
|
} else {
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
console.warn(e);
|
console.warn(e);
|
||||||
reject(e)
|
reject(e)
|
||||||
}).finally(_ => {
|
}).finally(_ => {
|
||||||
if (hideLoad !== true) {
|
if (data.hideLoad !== true) {
|
||||||
state.loadDialogs--;
|
state.loadDialogs--;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user