diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index a6ca86422..e8aeaa76d 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -37,6 +37,7 @@ class DialogController extends AbstractController * @apiName lists * * @apiParam {String} [at_after] 只读取在这个时间之后更新的对话 + * @apiParam {String} [deleted_at] 读取在这个时间之后删除的对话ID,返回数据: deleted_data * @apiParam {Number} [page] 当前页,默认:1 * @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100 * @@ -62,7 +63,19 @@ class DialogController extends AbstractController return $item->formatData($user->userid); }); // - return Base::retSuccess('success', $list); + $data = $list->toArray(); + if (Request::exists('deleted_at')) { + $data['deleted_at'] = date("Y-m-d H:i:s"); + $data['deleted_data'] = WebSocketDialog::select(['web_socket_dialogs.id']) + ->withTrashed() + ->join('web_socket_dialog_users as u', 'web_socket_dialogs.id', '=', 'u.dialog_id') + ->where('u.userid', $user->userid) + ->where('web_socket_dialogs.deleted_at', '>=', Carbon::parse(Request::input('deleted_at'))) + ->take(100) + ->pluck('id'); + } + // + return Base::retSuccess('success', $data); } /** diff --git a/app/Models/Project.php b/app/Models/Project.php index 450be1ec6..1c753a130 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -281,6 +281,7 @@ class Project extends AbstractModel AbstractModel::transaction(function () { $dialog = WebSocketDialog::find($this->dialog_id); $dialog?->deleteDialog(); + $dialog?->pushMsg("groupDelete"); $columns = ProjectColumn::whereProjectId($this->id)->get(); foreach ($columns as $column) { $column->deleteColumn(false); diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 5b37b91d5..202eb6378 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -1281,6 +1281,7 @@ class ProjectTask extends AbstractModel if ($this->dialog_id) { $dialog = WebSocketDialog::find($this->dialog_id); $dialog?->deleteDialog(); + $dialog?->pushMsg("groupDelete"); } self::whereParentId($this->id)->delete(); $this->deleted_userid = User::userid(); diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 6a4c7c6c4..234934472 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -2117,6 +2117,9 @@ export default { data.at_after = tmpList[0].last_at; } } + if (state.dialogDeletedAt || data.at_after) { + data.deleted_at = state.dialogDeletedAt = state.dialogDeletedAt || data.at_after + } dispatch("call", { url: 'dialog/lists', data, @@ -2124,6 +2127,11 @@ export default { const resData = result.data; dispatch("saveDialog", resData.data); // + if (resData.deleted_at) { + state.dialogDeletedAt = resData.deleted_at + resData.deleted_data.some(id => dispatch("forgetDialog", id)) + } + // if (resData.next_page_url && resData.current_page < 5) { data.page++ dispatch("getDialogs", data).then(resolve).catch(reject) diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js index 8a6e660b9..13dc096a9 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}, + dialogDeletedAt: null, // 文件 fileLists: [],