diff --git a/resources/assets/js/pages/manage/components/ProjectPanel.vue b/resources/assets/js/pages/manage/components/ProjectPanel.vue index 39c3563a0..c4de6ae81 100644 --- a/resources/assets/js/pages/manage/components/ProjectPanel.vue +++ b/resources/assets/js/pages/manage/components/ProjectPanel.vue @@ -130,6 +130,7 @@ @@ -140,6 +141,11 @@ {{$L('修改')}} + +
+ {{$L('归档')}} +
+
{{$L('删除')}} @@ -1249,6 +1255,9 @@ export default { if (command === 'title') { this.titleColumn(column); } + else if (command === 'archive_completed') { + this.archiveColumnCompletedTasks(column); + } else if (command === 'remove') { this.removeColumn(column); } @@ -1304,6 +1313,51 @@ export default { }) }, + archiveColumnCompletedTasks(column) { + const tasks = this.getColumnCompletedTasks(column); + if (tasks.length === 0) { + $A.messageWarning('当前列表没有可归档的已完成任务'); + return; + } + $A.modalConfirm({ + title: '归档已完成任务', + content: `你确定将列表【${column.name}】中所有已完成的任务归档吗?`, + loading: true, + onOk: () => { + return new Promise((resolve, reject) => { + this.batchArchiveTasks(tasks).then(() => { + $A.messageSuccess('已归档列表中所有已完成任务'); + resolve(); + }).catch(({msg}) => { + $A.modalError(msg || '归档失败,请稍后再试'); + reject(); + }); + }) + } + }); + }, + + getColumnCompletedTasks(column) { + if (!column || !Array.isArray(column.tasks)) { + return []; + } + return column.tasks.filter(task => task && task.complete_at && !task.archived_at); + }, + + batchArchiveTasks(tasks) { + const archive = (index = 0) => { + if (index >= tasks.length) { + return Promise.resolve(); + } + const task = tasks[index]; + return this.$store.dispatch("archivedTask", {task_id: task.id}).then(() => { + this.$store.dispatch("saveTaskBrowse", task.id); + return archive(index + 1); + }); + } + return archive(); + }, + removeColumn(column) { $A.modalConfirm({ title: '删除列表', diff --git a/resources/assets/sass/pages/components/project-panel.scss b/resources/assets/sass/pages/components/project-panel.scss index f1d9bf8c9..972ae7981 100644 --- a/resources/assets/sass/pages/components/project-panel.scss +++ b/resources/assets/sass/pages/components/project-panel.scss @@ -966,6 +966,9 @@ max-height: calc(100vh - 250px); overflow-y: auto; list-style: none; + &::-webkit-scrollbar { + display: none + } .item { display: flex; align-items: center;