diff --git a/resources/assets/js/components/Mobile/Tabbar.vue b/resources/assets/js/components/Mobile/Tabbar.vue index 28456a9af..8b9db66b6 100644 --- a/resources/assets/js/components/Mobile/Tabbar.vue +++ b/resources/assets/js/components/Mobile/Tabbar.vue @@ -8,7 +8,7 @@ - + diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 38eb64b35..2c6e520ad 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -100,7 +100,7 @@ {{$L('仪表盘')}} - + diff --git a/resources/assets/js/pages/manage/components/ChatInput/index.vue b/resources/assets/js/pages/manage/components/ChatInput/index.vue index 031f8ff6c..ed2aad701 100755 --- a/resources/assets/js/pages/manage/components/ChatInput/index.vue +++ b/resources/assets/js/pages/manage/components/ChatInput/index.vue @@ -1685,14 +1685,16 @@ export default { }) } // 待完成任务 - let dataA = this.$store.getters.transforTasks(this.$store.getters.dashboardTask['all']); - if (dataA.length > 0) { - dataA = dataA.sort((a, b) => { + const { overdue, today, todo } = this.$store.getters.dashboardTask; + const combinedTasks = [...overdue, ...today, ...todo]; + let allTask = this.$store.getters.transforTasks(combinedTasks); + if (allTask.length > 0) { + allTask = allTask.sort((a, b) => { return $A.dayjs(a.end_at || "2099-12-31 23:59:59") - $A.dayjs(b.end_at || "2099-12-31 23:59:59"); }).splice(0, 100) this.taskList.push({ label: [{id: 0, value: this.$L('我的待完成任务'), disabled: true}], - list: dataA.map(item => { + list: allTask.map(item => { return { id: item.id, value: item.name @@ -1701,14 +1703,14 @@ export default { }) } // 我协助的任务 - let dataB = this.$store.getters.assistTask; - if (dataB.length > 0) { - dataB = dataB.sort((a, b) => { + let assistTask = this.$store.getters.assistTask; + if (assistTask.length > 0) { + assistTask = assistTask.sort((a, b) => { return $A.dayjs(a.end_at || "2099-12-31 23:59:59") - $A.dayjs(b.end_at || "2099-12-31 23:59:59"); }).splice(0, 100) this.taskList.push({ label: [{id: 0, value: this.$L('我协助的任务'), disabled: true}], - list: dataB.map(item => { + list: assistTask.map(item => { return { id: item.id, value: item.name diff --git a/resources/assets/js/pages/manage/dashboard.vue b/resources/assets/js/pages/manage/dashboard.vue index 275759e92..7a2ada46c 100644 --- a/resources/assets/js/pages/manage/dashboard.vue +++ b/resources/assets/js/pages/manage/dashboard.vue @@ -31,10 +31,10 @@ - - {{getTitle('all')}} + + {{getTitle('todo')}} - {{dashboardTask.all_count}} + {{dashboardTask.todo_count}} @@ -48,7 +48,7 @@ {{column.title}} - ({{column.list.length}}) + ({{column.count}}) @@ -147,14 +147,15 @@ export default { return this.$route.name }, - columns({hiddenColumns}) { + columns({hiddenColumns, dashboardTask, assistTask}) { const list = []; - ['today', 'overdue', 'all'].some(type => { - let data = this.transforTasks(this.dashboardTask[type]); + ['today', 'overdue', 'todo'].some(type => { + let data = this.transforTasks(dashboardTask[type]); list.push({ type, title: this.getTitle(type), hidden: hiddenColumns.includes(type), + count: dashboardTask[`${type}_count`], list: data.sort((a, b) => { return $A.dayjs(a.end_at || "2099-12-31 23:59:59") - $A.dayjs(b.end_at || "2099-12-31 23:59:59"); }) @@ -164,7 +165,8 @@ export default { type: 'assist', title: this.getTitle('assist'), hidden: hiddenColumns.includes('assist'), - list: this.assistTask.sort((a, b) => { + count: assistTask.length, + list: assistTask.sort((a, b) => { return $A.dayjs(a.end_at || "2099-12-31 23:59:59") - $A.dayjs(b.end_at || "2099-12-31 23:59:59"); }) }) @@ -173,7 +175,7 @@ export default { total() { const {dashboardTask} = this; - return dashboardTask.today_count + dashboardTask.overdue_count + dashboardTask.all_count; + return dashboardTask.today_count + dashboardTask.overdue_count + dashboardTask.todo_count; }, wrapperStyle({warningMsg}) { @@ -203,7 +205,7 @@ export default { return this.$L('今日到期'); case 'overdue': return this.$L('超期任务'); - case 'all': + case 'todo': return this.$L('待完成任务'); case 'assist': return this.$L('协助的任务'); diff --git a/resources/assets/js/store/getters.js b/resources/assets/js/store/getters.js index 19277f9f0..3c5551de0 100644 --- a/resources/assets/js/store/getters.js +++ b/resources/assets/js/store/getters.js @@ -111,17 +111,25 @@ export default { /** * 仪表盘任务数据 * @param state - * @returns {{overdue: *, today: *,all:*}} + * @returns {{ + * overdue: Array, // 超期任务列表 + * overdue_count: number, // 超期任务数量 + * today: Array, // 今日任务列表 + * today_count: number, // 今日任务数量 + * todo: Array, // 待办任务列表 + * todo_count: number // 待办任务数量 + * }} */ dashboardTask(state) { const todayStart = $A.daytz().startOf('day'), todayEnd = $A.daytz().endOf('day'), todayNow = $A.daytz(); - const filterTask = (task, chackCompleted = true) => { + + const filterTask = (task, checkCompleted = true) => { if (task.archived_at) { return false; } - if (task.complete_at && chackCompleted === true) { + if (task.complete_at && checkCompleted === true) { return false; } if (task.start_at && $A.dayjs(task.start_at) > todayNow) { @@ -129,64 +137,105 @@ export default { } return task.owner == 1; } + + // 获取所有未完成的任务 let array = state.cacheTasks.filter(task => filterTask(task)); + + // 处理临时完成的任务 let tmpCount = 0; if (state.taskCompleteTemps.length > 0) { let tmps = state.cacheTasks.filter(task => state.taskCompleteTemps.includes(task.id) && filterTask(task, false)); if (tmps.length > 0) { - tmpCount = tmps.length - array = $A.cloneJSON(array) + tmpCount = tmps.length; + array = $A.cloneJSON(array); array.push(...tmps); } } - const todayTasks = array.filter(task => { - const end = $A.dayjs(task.end_at); - return todayStart <= end && end <= todayEnd; - }) - const overdueTasks = array.filter(task => { - return task.end_at && $A.dayjs(task.end_at) <= todayNow; - }) + + // 使用一次遍历完成任务分类 const result = { - today: todayTasks, - today_count: todayTasks.length, - - overdue: overdueTasks, - overdue_count: overdueTasks.length, - - all: array, - all_count: array.length, + overdue: [], + today: [], + todo: [], + overdue_count: 0, + today_count: 0, + todo_count: 0 }; - if (tmpCount > 0) { - result.today_count -= todayTasks.filter(task => state.taskCompleteTemps.includes(task.id)).length - result.overdue_count -= overdueTasks.filter(task => state.taskCompleteTemps.includes(task.id)).length - result.all_count -= tmpCount - } - return result + + // 遍历任务进行分类 + array.forEach(task => { + const isTemp = state.taskCompleteTemps.includes(task.id); + + if (task.end_at && $A.dayjs(task.end_at) <= todayNow) { + // 超期任务 + result.overdue.push(task); + if (!isTemp) { + result.overdue_count++; + } + } else if (task.end_at) { + const end = $A.dayjs(task.end_at); + if (todayStart <= end && end <= todayEnd) { + // 今日任务 + result.today.push(task); + if (!isTemp) { + result.today_count++; + } + } else { + // 待办任务 + result.todo.push(task); + if (!isTemp) { + result.todo_count++; + } + } + } else { + // 无截止日期的任务归类为待办 + result.todo.push(task); + if (!isTemp) { + result.todo_count++; + } + } + }); + + return result; }, /** * 协助任务 * @param state - * @returns {*} + * @returns {Array} // 协助任务列表 */ assistTask(state) { - const filterTask = (task, chackCompleted = true) => { + const filterTask = (task, checkCompleted = true) => { if (task.archived_at) { return false; } - if (task.complete_at && chackCompleted === true) { + if (task.complete_at && checkCompleted === true) { return false; } return task.assist && task.owner === 0; } + + // 获取所有未完成的协助任务 let array = state.cacheTasks.filter(task => filterTask(task)); + + // 处理临时完成的任务 if (state.taskCompleteTemps.length > 0) { - let tmps = state.cacheTasks.filter(task => state.taskCompleteTemps.includes(task.id) && filterTask(task, false)); + const tmps = state.cacheTasks.filter(task => + state.taskCompleteTemps.includes(task.id) && + filterTask(task, false) + ); + if (tmps.length > 0) { - array = $A.cloneJSON(array) + array = $A.cloneJSON(array); array.push(...tmps); } } - return array + + // 按截止时间排序:无截止时间的任务排在最后 + return array.sort((a, b) => { + const timeA = a.end_at ? $A.dayjs(a.end_at) : $A.dayjs('2099-12-31 23:59:59'); + const timeB = b.end_at ? $A.dayjs(b.end_at) : $A.dayjs('2099-12-31 23:59:59'); + return timeA - timeB; + }); }, }