diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 5adb4d22..e0d1b181 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -605,7 +605,6 @@ class ProjectController extends AbstractController /** * 删除任务列表 * - * @apiParam {Number} project_id 项目ID * @apiParam {Number} column_id 列表ID(留空为添加列表) */ public function column__delete() @@ -617,22 +616,22 @@ class ProjectController extends AbstractController $user = User::IDE($user['data']); } // - $project_id = intval(Request::input('project_id')); $column_id = intval(Request::input('column_id')); + // 列表 + $column = ProjectColumn::whereId($column_id)->first(); + if (empty($column)) { + return Base::retError('列表不存在'); + } // 项目 $project = Project::select($this->projectSelect) ->join('project_users', 'projects.id', '=', 'project_users.project_id') - ->where('projects.id', $project_id) + ->where('projects.id', $column->project_id) ->where('project_users.userid', $user->userid) ->first(); if (empty($project)) { return Base::retError('项目不存在或不在成员列表内'); } // - $column = ProjectColumn::whereId($column_id)->whereProjectId($project_id)->first(); - if (empty($column)) { - return Base::retError('列表不存在'); - } if ($column->deleteColumn()) { return Base::retSuccess('删除成功'); } @@ -763,4 +762,70 @@ class ProjectController extends AbstractController } return $result; } + + /** + * 归档任务 + * + * @apiParam {Number} task_id 任务ID + */ + public function task__archived() + { + $user = User::authE(); + if (Base::isError($user)) { + return $user; + } else { + $user = User::IDE($user['data']); + } + // + $task_id = intval(Request::input('task_id')); + // 任务 + $task = ProjectTask::whereId($task_id)->first(); + if (empty($task)) { + return Base::retError('任务不存在'); + } + // 项目 + $project = Project::select($this->projectSelect) + ->join('project_users', 'projects.id', '=', 'project_users.project_id') + ->where('projects.id', $task->project_id) + ->where('project_users.userid', $user->userid) + ->first(); + if (empty($project)) { + return Base::retError('项目不存在或不在成员列表内'); + } + // + return $task->archivedTask(Carbon::now()); + } + + /** + * 删除任务 + * + * @apiParam {Number} task_id 任务ID + */ + public function task__delete() + { + $user = User::authE(); + if (Base::isError($user)) { + return $user; + } else { + $user = User::IDE($user['data']); + } + // + $task_id = intval(Request::input('task_id')); + // 任务 + $task = ProjectTask::whereId($task_id)->first(); + if (empty($task)) { + return Base::retError('任务不存在'); + } + // 项目 + $project = Project::select($this->projectSelect) + ->join('project_users', 'projects.id', '=', 'project_users.project_id') + ->where('projects.id', $task->project_id) + ->where('project_users.userid', $user->userid) + ->first(); + if (empty($project)) { + return Base::retError('项目不存在或不在成员列表内'); + } + // + return $task->deleteTask(); + } } diff --git a/app/Models/ProjectColumn.php b/app/Models/ProjectColumn.php index 8d2be94b..2d240993 100644 --- a/app/Models/ProjectColumn.php +++ b/app/Models/ProjectColumn.php @@ -44,7 +44,7 @@ class ProjectColumn extends AbstractModel */ public function projectTask(): \Illuminate\Database\Eloquent\Relations\HasMany { - return $this->hasMany(projectTask::class, 'column_id', 'id')->orderBy('sort')->orderBy('id'); + return $this->hasMany(projectTask::class, 'column_id', 'id')->whereNull('archived_at')->orderBy('sort')->orderBy('id'); } /** diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 4c688df6..8213d0f7 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -16,6 +16,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property int|null $project_id 项目ID * @property int|null $column_id 列表ID * @property string|null $name 标题 + * @property string|null $color 颜色 * @property string|null $desc 描述 * @property string|null $start_at 计划开始时间 * @property string|null $end_at 计划结束时间 @@ -46,6 +47,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask query() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereArchivedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereColor($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereColumnId($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereCompleteAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereCreatedAt($value) @@ -147,7 +149,7 @@ class ProjectTask extends AbstractModel } $subTaskTotal = $this->attributes['sub_num']; if ($subTaskTotal == 0) { - return $this->complete_at ? 1 : 0; + return $this->complete_at ? 100 : 0; } $subTaskComplete = $builder->whereNotNull('complete_at')->count(); if ($subTaskComplete == 0) { @@ -336,6 +338,7 @@ class ProjectTask extends AbstractModel if (Arr::exists($data, 'color')) { $this->color = $data['color']; } + // 内容 if ($content && $this->parent_id === 0) { ProjectTaskContent::updateInsert([ 'project_id' => $this->parent_id, @@ -343,6 +346,7 @@ class ProjectTask extends AbstractModel ], [ 'content' => $content, ]); + $this->desc = Base::getHtml($content); } // 计划时间 if ($times) { @@ -401,4 +405,36 @@ class ProjectTask extends AbstractModel return Base::retSuccess('修改成功'); }); } + + /** + * 归档任务、取消归档 + * @param Carbon|null $archived_at 归档时间 + * @return array|bool + */ + public function archivedTask($archived_at) + { + return AbstractModel::transaction(function () use ($archived_at) { + if ($archived_at === null) { + // 标记未完成 + $this->archived_at = null; + } else { + // 标记已完成 + $this->archived_at = $archived_at; + } + $this->save(); + return Base::retSuccess('修改成功'); + }); + } + + /** + * 删除任务 + * @return array|bool + */ + public function deleteTask() + { + return AbstractModel::transaction(function () { + $this->delete(); + return Base::retSuccess('删除成功'); + }); + } } diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index cff299f1..8f0d5fc3 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -54,7 +54,7 @@ -