diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 2c55dd42e..69f2f1431 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Api; use App\Models\AbstractModel; +use App\Models\Deleted; use App\Models\File; use App\Models\FileContent; use App\Models\ProjectTask; @@ -14,6 +15,7 @@ use App\Models\WebSocketDialogMsgRead; use App\Models\WebSocketDialogMsgTodo; use App\Models\WebSocketDialogUser; use App\Module\Base; +use App\Module\TimeRange; use Carbon\Carbon; use DB; use Redirect; @@ -34,8 +36,10 @@ class DialogController extends AbstractController * @apiGroup dialog * @apiName lists * - * @apiParam {String} [updated_at] 只读取在这个时间之后更新的对话 - * @apiParam {String} [deleted_at] 读取在这个时间之后删除的对话ID,返回数据: deleted_data(此参数仅第1页有效) + * @apiParam {String} [timerange] 时间范围(如:1678248944,1678248944) + * - 第一个时间: 读取在这个时间之后更新的数据 + * - 第二个时间: 读取在这个时间之后删除的数据ID(第1页附加返回数据: deleted_id) + * * @apiParam {Number} [page] 当前页,默认:1 * @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100 * @@ -47,11 +51,13 @@ class DialogController extends AbstractController { $user = User::auth(); // + $timerange = TimeRange::parse(Request::input()); + // $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::input('updated_at') || Request::input('at_after')) { - $builder->where('u.updated_at', '>', Carbon::parse(Request::input('updated_at') ?: Request::input('at_after'))); + if ($timerange->updated) { + $builder->where('u.updated_at', '>', $timerange->updated); } $list = $builder ->orderByDesc('u.top_at') @@ -60,18 +66,10 @@ class DialogController extends AbstractController $list->transform(function (WebSocketDialog $item) use ($user) { return $item->formatData($user->userid); }); - $data = $list->toArray(); // - 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() - ->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'))) - ->orderByDesc('web_socket_dialogs.deleted_at') - ->take(100) - ->pluck('id'); + $data = $list->toArray(); + if ($list->currentPage() === 1) { + $data['deleted_id'] = Deleted::ids('dialog', $user->userid, $timerange->deleted); } // return Base::retSuccess('success', $data); diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 07be2d93d..87ef968d8 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api; use App\Exceptions\ApiException; use App\Models\AbstractModel; +use App\Models\Deleted; use App\Models\File; use App\Models\FileContent; use App\Models\Project; @@ -21,6 +22,7 @@ use App\Models\WebSocketDialog; use App\Module\Base; use App\Module\BillExport; use App\Module\BillMultipleExport; +use App\Module\TimeRange; use Carbon\Carbon; use Illuminate\Support\Arr; use Madzipper; @@ -58,7 +60,9 @@ class ProjectController extends AbstractController * - yes:取列表 * @apiParam {Object} [keys] 搜索条件 * - keys.name: 项目名称 - * @apiParam {String} [deleted_at] 读取在这个时间之后删除的项目ID,返回数据: deleted_data(此参数仅第1页有效) + * @apiParam {String} [timerange] 时间范围(如:1678248944,1678248944) + * - 第一个时间: 读取在这个时间之后更新的数据 + * - 第二个时间: 读取在这个时间之后删除的数据ID(第1页附加返回数据: deleted_id) * * @apiParam {Number} [page] 当前页,默认:1 * @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100 @@ -137,6 +141,11 @@ class ProjectController extends AbstractController } } // + $timerange = TimeRange::parse(Request::input('timerange')); + if ($timerange->updated) { + $builder->where('projects.updated_at', '>', $timerange->updated); + } + // $list = $builder->orderByDesc('projects.id')->paginate(Base::getPaginate(100, 50)); $list->transform(function (Project $project) use ($user) { return array_merge($project->toArray(), $project->getTaskStatistics($user->userid)); @@ -144,15 +153,8 @@ class ProjectController extends AbstractController // $data = $list->toArray(); $data['total_all'] = $totalAll ?? $data['total']; - // - if ($list->currentPage() === 1 && Request::input('deleted_at')) { - $data['deleted_at'] = date("Y-m-d H:i:s"); - $data['deleted_data'] = Project::authData() - ->withTrashed() - ->where('projects.deleted_at', '>=', Carbon::parse(Request::input('deleted_at'))) - ->orderByDesc('projects.deleted_at') - ->take(100) - ->pluck('id'); + if ($list->currentPage() === 1) { + $data['deleted_id'] = Deleted::ids('project', $user->userid, $timerange->deleted); } // return Base::retSuccess('success', $data); @@ -842,13 +844,17 @@ class ProjectController extends AbstractController * * @apiParam {Object} [keys] 搜索条件 * - keys.name: 任务名称 + * * @apiParam {Number} [project_id] 项目ID * @apiParam {Number} [parent_id] 主任务ID(project_id && parent_id ≤ 0 时 仅查询自己参与的任务) * - 大于0:指定主任务下的子任务 * - 等于-1:表示仅主任务 - * @apiParam {String} [name] 任务描述关键词 + * * @apiParam {Array} [time] 指定时间范围,如:['2020-12-12', '2020-12-30'] - * @apiParam {String} [time_before] 指定时间之前,如:2020-12-30 00:00:00(填写此项时 time 参数无效) + * @apiParam {String} [timerange] 时间范围(如:1678248944,1678248944) + * - 第一个时间: 读取在这个时间之后更新的数据 + * - 第二个时间: 读取在这个时间之后删除的数据ID(第1页附加返回数据: deleted_id) + * * @apiParam {String} [complete] 完成状态 * - all:所有(默认) * - yes:已完成 @@ -861,7 +867,8 @@ class ProjectController extends AbstractController * - all:所有 * - yes:已删除 * - no:未删除(默认) - * @apiParam {Object} sorts 排序方式 + * + * @apiParam {Object} [sorts] 排序方式 * - sorts.complete_at 完成时间:asc|desc * - sorts.archived_at 归档时间:asc|desc * - sorts.end_at 到期时间:asc|desc @@ -872,7 +879,7 @@ class ProjectController extends AbstractController */ public function task__lists() { - User::auth(); + $user = User::auth(); // $builder = ProjectTask::with(['taskUser', 'taskTag']); // @@ -880,7 +887,7 @@ class ProjectController extends AbstractController $project_id = intval(Request::input('project_id')); $name = Request::input('name'); $time = Request::input('time'); - $time_before = Request::input('time_before'); + $timerange = TimeRange::parse(Request::input('timerange')); $complete = Request::input('complete', 'all'); $archived = Request::input('archived', 'no'); $deleted = Request::input('deleted', 'no'); @@ -920,13 +927,14 @@ class ProjectController extends AbstractController }); } // - if (Base::isDateOrTime($time_before)) { - $builder->whereNotNull('project_tasks.end_at')->where('project_tasks.end_at', '<', Carbon::parse($time_before)); - } elseif (is_array($time)) { + if (is_array($time)) { if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) { $builder->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay()); } } + if ($timerange->updated) { + $builder->where('project_tasks.updated_at', '>', $timerange->updated); + } // if ($complete === 'yes') { $builder->whereNotNull('project_tasks.complete_at'); @@ -954,7 +962,12 @@ class ProjectController extends AbstractController // $list = $builder->orderByDesc('project_tasks.id')->paginate(Base::getPaginate(200, 100)); // - return Base::retSuccess('success', $list); + $data = $list->toArray(); + if ($list->currentPage() === 1) { + $data['deleted_id'] = Deleted::ids('projectTask', $user->userid, $timerange->deleted); + } + // + return Base::retSuccess('success', $data); } /** diff --git a/app/Models/Deleted.php b/app/Models/Deleted.php index 592b06f08..26e8d494b 100644 --- a/app/Models/Deleted.php +++ b/app/Models/Deleted.php @@ -1,6 +1,9 @@ $type, + 'userid' => $userid + ])->where('created_at', '>=', Carbon::parse($time))->pluck('did')->toArray(); + } + /** * 忘记(恢复或添加数据时删除记录) * @param $type diff --git a/app/Module/TimeRange.php b/app/Module/TimeRange.php new file mode 100644 index 000000000..92828aff4 --- /dev/null +++ b/app/Module/TimeRange.php @@ -0,0 +1,41 @@ +updated = $range[0] ? Carbon::parse($range[0]) : null; + $this->deleted = $range[1] ? Carbon::parse($range[1]) : null; + } + + /** + * @param $data + * @return TimeRange + */ + public static function parse($data): TimeRange + { + return new self($data); + } +} diff --git a/resources/assets/js/functions/common.js b/resources/assets/js/functions/common.js index 4f100f063..28ec2f24d 100755 --- a/resources/assets/js/functions/common.js +++ b/resources/assets/js/functions/common.js @@ -1232,6 +1232,21 @@ const localforage = require("localforage"); } } }, 1); + }, + + /** + * 排序JSON对象 + * @param obj + * @param ignore + * @returns {{}} + */ + sortObject(obj, ignore = []) { + return Object.keys(obj).sort().reduce(function (result, key) { + if (!ignore.includes(key)) { + result[key] = obj[key]; + } + return result; + }, {}); } }); diff --git a/resources/assets/js/pages/manage/calendar.vue b/resources/assets/js/pages/manage/calendar.vue index 98b6513c1..590f7005d 100644 --- a/resources/assets/js/pages/manage/calendar.vue +++ b/resources/assets/js/pages/manage/calendar.vue @@ -248,33 +248,12 @@ export default { return; } // - const timeStart = $A.Date($A.formatDate(time[0] + " 00:00:00")), - timeEnd = $A.Date($A.formatDate(time[1] + " 23:59:59")), - now = $A.Time(); - const find = (item, n) => { - if (n === true && item._time < now) { - return false - } - const start = $A.Date(item.start_at), - end = $A.Date(item.end_at); - return (start <= timeStart && timeStart <= end) || (start <= timeEnd && timeEnd <= end) || (start > timeStart && timeEnd > end); - } - const currentIds = this.list.filter(item => find(item)).map(({id}) => id); - const call = () => { - const newIds = this.list.filter(item => find(item, true)).map(({id}) => id); - this.$store.dispatch("forgetTask", currentIds.filter(v => newIds.indexOf(v) == -1)) - } - // this.loadIng++; this.$store.dispatch("getTasks", { time, complete: "no" - }).then(() => { + }).finally(_ => { this.loadIng--; - call() - }).catch(() => { - this.loadIng--; - call() }) }, diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index 69d88efdf..7997cea7f 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -141,7 +141,7 @@ export default { keys: { name: this.projectKeyValue }, - hideLoad: true, + hideload: true, }).finally(_ => { this.projectKeyLoading--; }); diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index b8ef9af6d..44aaa8e08 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -865,7 +865,7 @@ export default { if (timeout > -1) { this.__updateDialogs = setTimeout(_ => { if (this.tabActive === 'dialog') { - this.$store.dispatch("getDialogs", {hideLoad: true}).catch(() => {}); + this.$store.dispatch("getDialogs", {hideload: true}).catch(() => {}); } }, timeout) } diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 80e7c6aab..ab64f04bb 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1,5 +1,6 @@ import {Store} from 'le5le-store'; import {languageType} from "../language"; +import {$callData} from './utils' export default { /** @@ -35,9 +36,7 @@ export default { state.dialogInputCache = await $A.IDBArray("dialogInputCache") state.fileLists = await $A.IDBArray("fileLists") state.userInfo = await $A.IDBJson("userInfo") - state.dialogUpdatedAt = await $A.IDBString("dialogUpdatedAt") - state.dialogDeletedAt = await $A.IDBString("dialogDeletedAt") - state.projectDeletedAt = await $A.IDBString("projectDeletedAt") + state.callAt = await $A.IDBArray("callAt") // 会员信息 if (state.userInfo.userid) { @@ -637,9 +636,7 @@ export default { state.cacheProjects = []; state.cacheColumns = []; state.cacheTasks = []; - state.dialogUpdatedAt = null; - state.dialogDeletedAt = null; - state.projectDeletedAt = null; + state.callAt = []; // localStorage const languageType = window.localStorage.getItem("__language:type__"); @@ -706,7 +703,7 @@ export default { forgetFile({state, dispatch}, file_id) { $A.execMainDispatch("forgetFile", file_id) // - let ids = $A.isArray(file_id) ? file_id : [file_id]; + const ids = $A.isArray(file_id) ? file_id : [file_id]; ids.some(id => { state.fileLists = state.fileLists.filter(file => file.id != id); state.fileLists.some(file => { @@ -827,7 +824,7 @@ export default { forgetProject({state}, project_id) { $A.execMainDispatch("forgetProject", project_id) // - let ids = $A.isArray(project_id) ? project_id : [project_id]; + const ids = $A.isArray(project_id) ? project_id : [project_id]; ids.some(id => { const index = state.cacheProjects.findIndex(project => project.id == id); if (index > -1) { @@ -867,34 +864,23 @@ export default { reject({msg: 'Parameter error'}); return; } - if (!$A.isJson(requestData)) { - requestData = {} - } - if (typeof requestData.deleted_at === "undefined") { - requestData.deleted_at = state.projectDeletedAt || getters.getProjectLastAt - } + const callData = $callData('projects', requestData, state) // - !requestData.hideLoad && state.loadProjects++; + callData.showLoad() && state.loadProjects++; dispatch("call", { url: 'project/lists', - data: requestData + data: callData.get() }).then(({data}) => { state.projectTotal = data.total_all; dispatch("saveProject", data.data); - // - 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)) - }); - } + callData.save(data).then(ids => dispatch("forgetProject", ids)) // resolve(data) }).catch(e => { console.warn(e); reject(e) }).finally(_ => { - !requestData.hideLoad && state.loadProjects--; + callData.showLoad() && state.loadProjects--; }); }); }, @@ -1054,8 +1040,8 @@ export default { forgetColumn({state, dispatch}, column_id) { $A.execMainDispatch("forgetColumn", column_id) // - let ids = $A.isArray(column_id) ? column_id : [column_id]; - let project_ids = []; + const ids = $A.isArray(column_id) ? column_id : [column_id]; + const project_ids = []; ids.some(id => { const index = state.cacheColumns.findIndex(column => column.id == id); if (index > -1) { @@ -1228,9 +1214,9 @@ export default { forgetTask({state, dispatch}, task_id) { $A.execMainDispatch("forgetTask", task_id) // - let ids = $A.isArray(task_id) ? task_id : [task_id]; - let parent_ids = []; - let project_ids = []; + const ids = $A.isArray(task_id) ? task_id : [task_id]; + const parent_ids = []; + const project_ids = []; ids.some(id => { const index = state.cacheTasks.findIndex(task => task.id == id); if (index > -1) { @@ -1318,15 +1304,16 @@ export default { * 获取任务 * @param state * @param dispatch - * @param data + * @param requestData * @returns {Promise} */ - getTasks({state, dispatch}, data) { - let taskData = []; - if ($A.isArray(data.taskData)) { - taskData = data.taskData; - delete data.taskData; + getTasks({state, dispatch}, requestData) { + const taskData = []; + if ($A.isArray(requestData.taskData)) { + taskData.push(...requestData.taskData) + delete requestData.taskData; } + const callData = $callData('tasks', requestData, state) // return new Promise(function (resolve, reject) { if (state.userId === 0) { @@ -1334,31 +1321,28 @@ export default { reject({msg: 'Parameter error'}); return; } - if (data.project_id) { + if (requestData.project_id) { state.projectLoad++; } // dispatch("call", { url: 'project/task/lists', - data - }).then(result => { - if (data.project_id) { + data: callData.get() + }).then(({data}) => { + if (requestData.project_id) { state.projectLoad--; } + taskData.push(...data.data); + callData.save(data).then(ids => dispatch("forgetTask", ids)) // - const resData = result.data; - taskData.push(...resData.data); - // - if (resData.next_page_url) { - const nextData = Object.assign(data, { - page: resData.current_page + 1, - taskData, - }); - if (resData.current_page % 5 === 0) { + if (data.next_page_url) { + requestData.page = data.current_page + 1 + requestData.taskData = taskData + if (data.current_page % 10 === 0) { $A.modalWarning({ - content: "数据已超过" + resData.to + "条,是否继续加载?", + content: "数据已超过" + data.to + "条,是否继续加载?", onOk: () => { - dispatch("getTasks", nextData).then(resolve).catch(reject) + dispatch("getTasks", requestData).then(resolve).catch(reject) }, onCancel: () => { dispatch("saveTask", taskData); @@ -1366,7 +1350,7 @@ export default { } }); } else { - dispatch("getTasks", nextData).then(resolve).catch(reject) + dispatch("getTasks", requestData).then(resolve).catch(reject) } } else { dispatch("saveTask", taskData); @@ -1375,7 +1359,7 @@ export default { }).catch(e => { console.warn(e); reject(e) - if (data.project_id) { + if (requestData.project_id) { state.projectLoad--; } }); @@ -1447,22 +1431,8 @@ export default { } state.loadDashboardTasks = true; // - const time = $A.Time() - const {today, overdue, all} = getters.dashboardTask; - const currentIds = today.map(({id}) => id) - currentIds.push(...overdue.map(({id}) => id)) - currentIds.push(...all.map(({id}) => id)) - currentIds.push(...getters.assistTask.map(({id}) => id)) - // dispatch("getTasks", { complete: "no", - }).then(_ => { - const {today, overdue, all} = getters.dashboardTask; - const newIds = today.filter(task => task._time >= time).map(({id}) => id) - newIds.push(...overdue.filter(task => task._time >= time).map(({id}) => id)) - newIds.push(...all.filter(task => task._time >= time).map(({id}) => id)) - newIds.push(...getters.assistTask.filter(task => task._time >= time).map(({id}) => id)) - dispatch("forgetTask", currentIds.filter(v => newIds.indexOf(v) == -1)) }).finally(_ => { state.loadDashboardTasks = false; }) @@ -1477,20 +1447,7 @@ export default { */ getTaskForProject({state, dispatch}, project_id) { return new Promise(function (resolve, reject) { - const time = $A.Time() - const currentIds = state.cacheTasks.filter(task => task.project_id == project_id).map(({id}) => id) - // - const call = () => { - const newIds = state.cacheTasks.filter(task => task.project_id == project_id && task._time >= time).map(({id}) => id) - dispatch("forgetTask", currentIds.filter(v => newIds.indexOf(v) == -1)) - } - dispatch("getTasks", {project_id}).then(() => { - call() - resolve() - }).catch(() => { - call() - reject() - }) + dispatch("getTasks", {project_id}).then(resolve).catch(reject) }) }, @@ -1503,23 +1460,10 @@ export default { */ getTaskForParent({state, dispatch}, parent_id) { return new Promise(function (resolve, reject) { - const time = $A.Time() - const currentIds = state.cacheTasks.filter(task => task.parent_id == parent_id).map(({id}) => id) - // - let call = () => { - const newIds = state.cacheTasks.filter(task => task.parent_id == parent_id && task._time >= time).map(({id}) => id) - dispatch("forgetTask", currentIds.filter(v => newIds.indexOf(v) == -1)) - } dispatch("getTasks", { parent_id, archived: 'all' - }).then(() => { - call() - resolve() - }).catch(() => { - call() - reject() - }) + }).then(resolve).catch(reject) }) }, @@ -1677,7 +1621,7 @@ export default { * @param file_id */ forgetTaskFile({state, dispatch}, file_id) { - let ids = $A.isArray(file_id) ? file_id : [file_id]; + const ids = $A.isArray(file_id) ? file_id : [file_id]; ids.some(id => { const index = state.taskFiles.findIndex(file => file.id == id) if (index > -1) { @@ -2155,27 +2099,15 @@ export default { 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 - } + const callData = $callData('dialogs', requestData, state) // - !requestData.hideLoad && state.loadDialogs++; + callData.showLoad() && state.loadDialogs++; dispatch("call", { url: 'dialog/lists', - data: requestData, + data: callData.get() }).then(({data}) => { dispatch("saveDialog", data.data); - // - 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)) - }); - $A.IDBSet("dialogUpdatedAt", state.dialogUpdatedAt = $A.formatDate()).then(_ => {}) - } + callData.save(data).then(ids => dispatch("forgetDialog", ids)) // if (data.next_page_url && data.current_page < 5) { requestData.page++ @@ -2187,7 +2119,7 @@ export default { console.warn(e); reject(e) }).finally(_ => { - !requestData.hideLoad && state.loadDialogs--; + callData.showLoad() && state.loadDialogs--; }); }); }, @@ -2317,7 +2249,7 @@ export default { forgetDialog({state}, dialog_id) { $A.execMainDispatch("forgetDialog", dialog_id) // - let ids = $A.isArray(dialog_id) ? dialog_id : [dialog_id]; + const ids = $A.isArray(dialog_id) ? dialog_id : [dialog_id]; ids.some(id => { const index = state.cacheDialogs.findIndex(dialog => dialog.id == id); if (index > -1) { diff --git a/resources/assets/js/store/getters.js b/resources/assets/js/store/getters.js index 8906e91ff..f09468559 100644 --- a/resources/assets/js/store/getters.js +++ b/resources/assets/js/store/getters.js @@ -186,34 +186,4 @@ export default { } return array }, - - /** - * 获取项目最后更新时间 - * @param state - * @returns {*} - */ - getProjectLastAt(state) { - if (state.cacheProjects.length > 0) { - const tmpList = state.cacheProjects.sort((a, b) => { - return $A.Date(b.updated_at) - $A.Date(a.updated_at); - }) - return tmpList[0].updated_at; - } - return $A.formatDate("Y-m-d H:i:s", $A.Time() - 86400 * 30) - }, - - /** - * 获取会话最后更新时间 - * @param state - * @returns {*} - */ - getDialogLastAt(state) { - if (state.cacheDialogs.length > 0) { - const tmpList = state.cacheDialogs.sort((a, b) => { - return $A.Date(b.last_at) - $A.Date(a.last_at); - }) - return tmpList[0].last_at; - } - return $A.formatDate("Y-m-d H:i:s", $A.Time() - 86400 * 30) - }, } diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js index 8dcbc7553..b539ce976 100644 --- a/resources/assets/js/store/state.js +++ b/resources/assets/js/store/state.js @@ -21,6 +21,9 @@ export default { routeHistorys: [], routeHistoryLast: {}, + // 请求时间 + callAt: [], + // 加载状态 loads: [], loadDashboardTasks: false, @@ -82,8 +85,6 @@ export default { dialogHistory: [], dialogInputCache: [], dialogMsgTransfer: {time: 0}, - dialogUpdatedAt: null, - dialogDeletedAt: null, // 文件 fileLists: [], @@ -92,7 +93,6 @@ export default { projectId: 0, projectTotal: 0, projectLoad: 0, - projectDeletedAt: null, taskId: 0, taskCompleteTemps: [], taskContents: [], diff --git a/resources/assets/js/store/utils.js b/resources/assets/js/store/utils.js new file mode 100644 index 000000000..f9c92bdf6 --- /dev/null +++ b/resources/assets/js/store/utils.js @@ -0,0 +1,65 @@ +/** + * @param key + * @param requestData + * @param state + * @returns {$callData} + */ +function __callData(key, requestData, state) { + if (!$A.isJson(requestData)) { + requestData = {} + } + const callKey = key + "::" + encodeURIComponent(new URLSearchParams($.sortObject(requestData, [ + 'page', + 'pagesize', + 'hideload', + 'timerange', + ])).toString()) + const callData = state.callAt.find(item => item.key === callKey) || {} + if (typeof callData.key === "undefined") { + callData.key = callKey + callData.updated = 0 + callData.deleted = 0 + state.callAt.push(callData) + $A.IDBSet("callAt", state.callAt).then(_ => {}) + } + + /** + * @returns {*} + */ + this.get = () => { + requestData.timerange = requestData.timerange || `${callData.updated},${callData.deleted}` + return requestData + } + + /** + * @param current_page + * @param deleted_id + * @returns {Promise} + */ + this.save = ({current_page, deleted_id}) => { + return new Promise(resolve => { + if (current_page === 1) { + callData.updated = $A.Time() + if ($A.isArray(deleted_id)) { + callData.deleted = callData.updated + } else { + deleted_id = [] + } + $A.IDBSet("callAt", state.callAt).then(_ => resolve(deleted_id)) + } + }) + } + + /** + * @returns {boolean} + */ + this.showLoad = () => { + return !requestData.hideload + } + + return this +} + +export function $callData(key, requestData, state) { + return new __callData(key, requestData, state) +}