diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 654af2b5..e78c54c6 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -790,16 +790,68 @@ class ProjectController extends AbstractController return $result; } + /** + * 添加子任务 + * + * @apiParam {Number} task_id 任务ID + * @apiParam {String} name 任务描述 + */ + public function task__addsub() + { + $user = User::authE(); + if (Base::isError($user)) { + return $user; + } else { + $user = User::IDE($user['data']); + } + // + $task_id = intval(Request::input('task_id')); + $name = Request::input('name'); + // 任务 + $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('项目不存在或不在成员列表内'); + } + // + $result = ProjectTask::addTask([ + 'name' => $name, + 'parent_id' => $task->id, + 'project_id' => $task->project_id, + 'column_id' => $task->column_id, + ]); + if (Base::isSuccess($result)) { + $result['data'] = [ + 'new_column' => null, + 'in_top' => 0, + 'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($result['data']['id']), + ]; + } + return $result; + } + /** * {post} 修改任务、子任务 * * @apiParam {Number} task_id 任务ID * @apiParam {String} [name] 任务描述 - * @apiParam {String} [color] 任务描述(子任务不支持) - * @apiParam {String} [content] 任务详情(子任务不支持) * @apiParam {Array} [times] 计划时间(格式:开始时间,结束时间;如:2020-01-01 00:00,2020-01-01 23:59) * @apiParam {Number} [owner] 修改负责人 - * @apiParam {Array} [assist] 修改协助人员 + * @apiParam {String} [content] 任务详情(子任务不支持) + * @apiParam {String} [color] 背景色(子任务不支持) + * @apiParam {Array} [assist] 修改协助人员(子任务不支持) + * + * @apiParam {Number} [p_level] 优先级相关(子任务不支持) + * @apiParam {String} [p_name] 优先级相关(子任务不支持) + * @apiParam {String} [p_color] 优先级相关(子任务不支持) * * @apiParam {String|false} [complete_at] 完成时间(如:2020-01-01 00:00,false表示未完成) */ diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 642a3907..64a308ef 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -334,9 +334,6 @@ class ProjectTask extends AbstractModel $subtask['parent_id'] = $task->id; $subtask['project_id'] = $task->project_id; $subtask['column_id'] = $task->column_id; - $subtask['p_level'] = $task->p_level; - $subtask['p_name'] = $task->p_name; - $subtask['p_color'] = $task->p_color; $result = self::addTask($subtask); if (Base::isError($result)) { return $result; @@ -384,26 +381,6 @@ class ProjectTask extends AbstractModel ]); } } - // 协助人员 - if (Arr::exists($data, 'assist')) { - $array = []; - $assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']]; - foreach ($assist as $uid) { - if (intval($uid) == 0) continue; - if (ProjectTaskUser::whereTaskId($this->id)->whereUserid($uid)->whereOwner(1)->exists()) continue; - // - if (!ProjectTaskUser::whereTaskId($this->id)->whereUserid($uid)->where('owner', '!=', 1)->exists()) { - ProjectTaskUser::createInstance([ - 'project_id' => $this->parent_id, - 'task_id' => $this->id, - 'userid' => $uid, - 'owner' => 0, - ])->save(); - } - $array[] = $uid; - } - ProjectTaskUser::whereTaskId($this->id)->where('owner', '!=', 1)->whereNotIn('userid', $array)->delete(); - } // 计划时间 if (Arr::exists($data, 'times')) { $this->start_at = null; @@ -419,6 +396,26 @@ class ProjectTask extends AbstractModel } // 以下紧顶级任务可修改 if ($this->parent_id === 0) { + // 协助人员 + if (Arr::exists($data, 'assist')) { + $array = []; + $assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']]; + foreach ($assist as $uid) { + if (intval($uid) == 0) continue; + if (ProjectTaskUser::whereTaskId($this->id)->whereUserid($uid)->whereOwner(1)->exists()) continue; + // + if (!ProjectTaskUser::whereTaskId($this->id)->whereUserid($uid)->where('owner', '!=', 1)->exists()) { + ProjectTaskUser::createInstance([ + 'project_id' => $this->parent_id, + 'task_id' => $this->id, + 'userid' => $uid, + 'owner' => 0, + ])->save(); + } + $array[] = $uid; + } + ProjectTaskUser::whereTaskId($this->id)->where('owner', '!=', 1)->whereNotIn('userid', $array)->delete(); + } // 背景色 if (Arr::exists($data, 'color')) { $this->color = $data['color']; diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index 13014971..a98eabb4 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -122,7 +122,7 @@ v-for="item in panelTask(column.project_task)" :class="['task-item task-draggable', item.complete_at ? 'complete' : '']" :style="item.color ? {backgroundColor: item.color} : {}" - @click="$store.dispatch('openTask', item.id)"> + @click="openTask(item)">
{{item.name}}
@@ -961,6 +961,14 @@ export default { } }, + openTask(task) { + if (task.parent_id > 0) { + this.$store.dispatch('openTask', task.parent_id) + } else { + this.$store.dispatch('openTask', task.id) + } + }, + toggleBoolean(type) { this.$store.dispatch('toggleBoolean', type); }, diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index b051c6a4..1f21312e 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -252,7 +252,16 @@