From 72ca5579fb9a22c658b7af0a92f49d634af846b2 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 23 Jun 2021 15:31:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=92=E6=A1=A3=E3=80=81=E8=BF=98=E5=8E=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ProjectController.php | 28 ++- app/Models/Project.php | 14 +- app/Models/ProjectTask.php | 22 ++- .../assets/js/components/TableAction.vue | 4 + resources/assets/js/pages/manage.vue | 48 ++--- .../manage/components/ProjectArchived.vue | 151 ++++++++++++++++ .../pages/manage/components/ProjectList.vue | 19 +- .../pages/manage/components/TaskArchived.vue | 169 ++++++++++++++++++ .../assets/js/pages/manage/setting/index.vue | 25 +-- resources/assets/sass/pages/common.scss | 18 ++ 10 files changed, 437 insertions(+), 61 deletions(-) create mode 100644 resources/assets/js/pages/manage/components/ProjectArchived.vue create mode 100644 resources/assets/js/pages/manage/components/TaskArchived.vue diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index d421363c..3af663c2 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -369,20 +369,28 @@ class ProjectController extends AbstractController /** * 归档项目 * - * @apiParam {Number} project_id 项目ID + * @apiParam {Number} project_id 项目ID + * @apiParam {String} [type] 类型 + * - add:归档(默认) + * - recovery:还原归档 */ public function archived() { User::auth(); // $project_id = intval(Request::input('project_id')); + $type = Request::input('type', 'add'); // - $project = Project::userProject($project_id); + $project = Project::userProject($project_id, false); if (!$project->owner) { return Base::retError('你不是项目负责人'); } // - $project->archivedProject(Carbon::now()); + if ($type == 'recovery') { + $project->archivedProject(null); + } elseif ($type == 'add') { + $project->archivedProject(Carbon::now()); + } return Base::retSuccess('设置成功', ['id' => $project->id]); } @@ -550,7 +558,7 @@ class ProjectController extends AbstractController { User::auth(); // - $builder = ProjectTask::with(['taskUser', 'taskTag'])->whereNull('archived_at'); + $builder = ProjectTask::with(['taskUser', 'taskTag']); // $parent_id = intval(Request::input('parent_id')); $project_id = intval(Request::input('project_id')); @@ -903,20 +911,28 @@ class ProjectController extends AbstractController * 归档任务 * * @apiParam {Number} task_id 任务ID + * @apiParam {String} [type] 类型 + * - add:归档(默认) + * - recovery:还原归档 */ public function task__archived() { User::auth(); // $task_id = intval(Request::input('task_id')); + $type = Request::input('type', 'add'); // - $task = ProjectTask::userTask($task_id); + $task = ProjectTask::userTask($task_id, [], false); // if ($task->parent_id > 0) { return Base::retError('子任务不支持此功能'); } // - $task->archivedTask(Carbon::now()); + if ($type == 'recovery') { + $task->archivedTask(null); + } elseif ($type == 'add') { + $task->archivedTask(Carbon::now()); + } return Base::retSuccess('设置成功', ['id' => $task->id]); } diff --git a/app/Models/Project.php b/app/Models/Project.php index 4c3fdcfe..876424e2 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -298,6 +298,7 @@ class Project extends AbstractModel // 取消归档 $this->archived_at = null; $this->addLog("项目取消归档"); + $this->pushMsg('add', $this->toArray()); } else { // 归档任务 $this->archived_at = $archived_at; @@ -377,15 +378,16 @@ class Project extends AbstractModel /** * 根据用户获取项目信息(用于判断会员是否存在项目内) * @param int $project_id + * @param bool $ignoreArchived 排除已归档 * @return self */ - public static function userProject($project_id) + public static function userProject($project_id, $ignoreArchived = true) { - $project = self::select(self::projectSelect) - ->authData() - ->whereNull('archived_at') - ->where('projects.id', intval($project_id)) - ->first(); + $builder = self::select(self::projectSelect)->authData()->where('projects.id', intval($project_id)); + if ($ignoreArchived) { + $builder->whereNull('projects.archived_at'); + } + $project = $builder->first(); if (empty($project)) { throw new ApiException('项目不存在或不在成员列表内'); } diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index d8aa9cd1..6f1f6fe1 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -602,6 +602,10 @@ class ProjectTask extends AbstractModel // 取消归档 $this->archived_at = null; $this->addLog("任务取消归档:" . $this->name); + $this->pushMsg('add', [ + 'new_column' => null, + 'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($this->id)->toArray(), + ]); } else { // 归档任务 $this->archived_at = $archived_at; @@ -691,22 +695,22 @@ class ProjectTask extends AbstractModel * 根据会员ID获取任务、项目信息(用于判断会员是否存在项目内) * @param int $task_id * @param array $with + * @param bool $ignoreArchived 排除已归档 * @return self */ - public static function userTask($task_id, $with = []) + public static function userTask($task_id, $with = [], $ignoreArchived = true) { - $task = self::with($with)->whereId(intval($task_id))->whereNull('archived_at')->first(); + $builder = self::with($with)->whereId(intval($task_id)); + if ($ignoreArchived) { + $builder->whereNull('archived_at'); + } + $task = $builder->first(); if (empty($task)) { throw new ApiException('任务不存在'); } // - $project = Project::select(Project::projectSelect) - ->authData() - ->where('projects.id', $task->project_id) - ->first(); - if (empty($project)) { - throw new ApiException('项目不存在或不在成员列表内'); - } + Project::userProject($task->project_id, $ignoreArchived); + // return $task; } } diff --git a/resources/assets/js/components/TableAction.vue b/resources/assets/js/components/TableAction.vue index 8b61e31c..acd389b8 100644 --- a/resources/assets/js/components/TableAction.vue +++ b/resources/assets/js/components/TableAction.vue @@ -5,6 +5,10 @@ diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index 34bf5e71..d761eaab 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -40,7 +40,7 @@ {{$L('已归档任务')}} - {{$L('退出项目')}} + {{$L('退出项目')}} @@ -344,6 +344,14 @@ + + + + + @@ -355,9 +363,10 @@ import {mapGetters, mapState} from "vuex"; import UserInput from "../../../components/UserInput"; import TaskAddSimple from "./TaskAddSimple"; import TaskRow from "./TaskRow"; +import TaskArchived from "./TaskArchived"; export default { name: "ProjectList", - components: {TaskRow, Draggable, TaskAddSimple, UserInput, TaskAdd, TaskPriority}, + components: {TaskArchived, TaskRow, Draggable, TaskAddSimple, UserInput, TaskAdd, TaskPriority}, data() { return { nowTime: Math.round(new Date().getTime() / 1000), @@ -388,6 +397,8 @@ export default { transferShow: false, transferData: {}, transferLoad: 0, + + archivedTaskShow: false, } }, @@ -928,6 +939,10 @@ export default { this.userShow = true; break; + case "archived_task": + this.archivedTaskShow = true; + break; + case "transfer": this.$set(this.transferData, 'owner_userid', [this.projectData.owner_userid]); this.transferShow = true; diff --git a/resources/assets/js/pages/manage/components/TaskArchived.vue b/resources/assets/js/pages/manage/components/TaskArchived.vue new file mode 100644 index 00000000..d87db48e --- /dev/null +++ b/resources/assets/js/pages/manage/components/TaskArchived.vue @@ -0,0 +1,169 @@ + + + diff --git a/resources/assets/js/pages/manage/setting/index.vue b/resources/assets/js/pages/manage/setting/index.vue index 38aaebe1..5ec800a2 100644 --- a/resources/assets/js/pages/manage/setting/index.vue +++ b/resources/assets/js/pages/manage/setting/index.vue @@ -13,6 +13,7 @@