From fe8450d48aee2c0c25c0f5db020b155bc0f8591b Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sat, 25 Feb 2023 15:01:05 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=95=B0=E6=8D=AE=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 12 +-- .../Controllers/Api/ProjectController.php | 12 +-- resources/assets/js/store/actions.js | 80 ++++++++++--------- resources/assets/js/store/state.js | 1 + 4 files changed, 53 insertions(+), 52 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index dbe84543a..781b03692 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -34,8 +34,8 @@ class DialogController extends AbstractController * @apiGroup dialog * @apiName lists * - * @apiParam {String} [at_after] 只读取在这个时间之后更新的对话 - * @apiParam {String} [deleted_at] 读取在这个时间之后删除的对话ID,返回数据: deleted_data + * @apiParam {String} [updated_at] 只读取在这个时间之后更新的对话 + * @apiParam {String} [deleted_at] 读取在这个时间之后删除的对话ID,返回数据: deleted_data(此参数仅第1页有效) * @apiParam {Number} [page] 当前页,默认:1 * @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100 * @@ -50,8 +50,8 @@ class DialogController extends AbstractController $builder = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.updated_at as user_at']) ->join('web_socket_dialog_users as u', 'web_socket_dialogs.id', '=', 'u.dialog_id') ->where('u.userid', $user->userid); - if (Request::exists('at_after')) { - $builder->where('u.updated_at', '>', Carbon::parse(Request::input('at_after'))); + if (Request::input('updated_at') || Request::input('at_after')) { + $builder->where('u.updated_at', '>', Carbon::parse(Request::input('updated_at') ?: Request::input('at_after'))); } $list = $builder ->orderByDesc('u.top_at') @@ -60,9 +60,9 @@ class DialogController extends AbstractController $list->transform(function (WebSocketDialog $item) use ($user) { return $item->formatData($user->userid); }); - // $data = $list->toArray(); - if (Request::exists('deleted_at')) { + // + if ($list->currentPage() === 1 && Request::input('deleted_at')) { $data['deleted_at'] = date("Y-m-d H:i:s"); $data['deleted_data'] = WebSocketDialog::select(['web_socket_dialogs.id']) ->withTrashed() diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 5f7475709..1a5c2acb9 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -58,7 +58,7 @@ class ProjectController extends AbstractController * - yes:取列表 * @apiParam {Object} [keys] 搜索条件 * - keys.name: 项目名称 - * @apiParam {String} [deleted_at] 读取在这个时间之后删除的项目ID,返回数据: deleted_data + * @apiParam {String} [deleted_at] 读取在这个时间之后删除的项目ID,返回数据: deleted_data(此参数仅第1页有效) * * @apiParam {Number} [page] 当前页,默认:1 * @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100 @@ -131,7 +131,7 @@ class ProjectController extends AbstractController // $keys = Request::input('keys'); if (is_array($keys)) { - $buildClone = $builder->clone(); + $totalAll = $builder->clone()->count(); if ($keys['name']) { $builder->where("projects.name", "like", "%{$keys['name']}%"); } @@ -143,13 +143,9 @@ class ProjectController extends AbstractController }); // $data = $list->toArray(); - if (isset($buildClone)) { - $data['total_all'] = $buildClone->count(); - } else { - $data['total_all'] = $data['total']; - } + $data['total_all'] = $totalAll ?? $data['total']; // - if (Request::exists('deleted_at')) { + if ($list->currentPage() === 1 && Request::input('deleted_at')) { $data['deleted_at'] = date("Y-m-d H:i:s"); $data['deleted_data'] = Project::authData() ->withTrashed() diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 53dc83d5d..26baafab4 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -852,41 +852,44 @@ export default { * @param state * @param dispatch * @param getters - * @param callData + * @param requestData * @returns {Promise} */ - getProjects({state, dispatch, getters}, callData) { + getProjects({state, dispatch, getters}, requestData) { return new Promise(function (resolve, reject) { if (state.userId === 0) { state.cacheProjects = []; reject({msg: 'Parameter error'}); return; } - if ($A.isJson(callData)) { - typeof callData.deleted_at !== "undefined" && delete callData.deleted_at - } else { - callData = {deleted_at: state.projectDeletedAt || getters.getProjectLastAt} + if (!$A.isJson(requestData)) { + requestData = {} + } + if (typeof requestData.deleted_at === "undefined") { + requestData.deleted_at = state.projectDeletedAt || getters.getProjectLastAt } // - !callData.hideLoad && state.loadProjects++; + !requestData.hideLoad && state.loadProjects++; dispatch("call", { url: 'project/lists', - data: callData + data: requestData }).then(({data}) => { state.projectTotal = data.total_all; dispatch("saveProject", data.data); // - data.deleted_at && $A.IDBSet("projectDeletedAt", data.deleted_at).then(_ => { - state.projectDeletedAt = data.deleted_at - data.deleted_data.some(id => dispatch("forgetProject", id)) - }); + if (data.current_page === 1) { + data.deleted_at && $A.IDBSet("projectDeletedAt", data.deleted_at).then(_ => { + state.projectDeletedAt = data.deleted_at + data.deleted_data.some(id => dispatch("forgetProject", id)) + }); + } // resolve(data) }).catch(e => { console.warn(e); reject(e) }).finally(_ => { - !callData.hideLoad && state.loadProjects--; + !requestData.hideLoad && state.loadProjects--; }); }); }, @@ -2128,49 +2131,50 @@ export default { * @param state * @param dispatch * @param getters - * @param callData + * @param requestData * @returns {Promise} */ - getDialogs({state, dispatch, getters}, callData) { + getDialogs({state, dispatch, getters}, requestData) { return new Promise(function (resolve, reject) { if (state.userId === 0) { state.cacheDialogs = []; reject({msg: 'Parameter error'}); return; } - if ($A.isJson(callData)) { - typeof callData.deleted_at !== "undefined" && delete callData.deleted_at - } else { - callData = {deleted_at: state.dialogDeletedAt || getters.getDialogLastAt} + if (!$A.isJson(requestData)) { + requestData = {} } - if (typeof callData.pagesize === "undefined") { - callData.pagesize = 20 + if (typeof requestData.page === "undefined") { + requestData.page = 1 } - if (typeof callData.page === "undefined") { - callData.page = 1 - if (state.cacheDialogs.length > 0) { - const tmpList = state.cacheDialogs.sort((a, b) => { - return $A.Date(b.user_at) - $A.Date(a.user_at); - }) - callData.at_after = tmpList[0].user_at; - } + if (typeof requestData.pagesize === "undefined") { + requestData.pagesize = 20 + } + if (typeof requestData.updated_at === "undefined") { + requestData.updated_at = state.dialogUpdatedAt + } + if (typeof requestData.deleted_at === "undefined") { + requestData.deleted_at = state.dialogDeletedAt || getters.getDialogLastAt } // - !callData.hideLoad && state.loadDialogs++; + !requestData.hideLoad && state.loadDialogs++; dispatch("call", { url: 'dialog/lists', - data: callData, + data: requestData, }).then(({data}) => { dispatch("saveDialog", data.data); // - data.deleted_at && $A.IDBSet("dialogDeletedAt", data.deleted_at).then(_ => { - state.dialogDeletedAt = data.deleted_at - data.deleted_data.some(id => dispatch("forgetDialog", id)) - }); + if (data.current_page === 1) { + data.deleted_at && $A.IDBSet("dialogDeletedAt", data.deleted_at).then(_ => { + state.dialogDeletedAt = data.deleted_at + data.deleted_data.some(id => dispatch("forgetDialog", id)) + }); + state.dialogUpdatedAt = $A.formatDate() + } // if (data.next_page_url && data.current_page < 5) { - callData.page++ - dispatch("getDialogs", callData).then(resolve).catch(reject) + requestData.page++ + dispatch("getDialogs", requestData).then(resolve).catch(reject) } else { resolve() } @@ -2178,7 +2182,7 @@ export default { console.warn(e); reject(e) }).finally(_ => { - !callData.hideLoad && state.loadDialogs--; + !requestData.hideLoad && state.loadDialogs--; }); }); }, diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js index f8b69690c..0a48a536a 100644 --- a/resources/assets/js/store/state.js +++ b/resources/assets/js/store/state.js @@ -82,6 +82,7 @@ export default { dialogHistory: [], dialogInputCache: [], dialogMsgTransfer: {time: 0}, + dialogUpdatedAt: null, dialogDeletedAt: null, // 文件