diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php
index 6cca4fef..3a61680a 100755
--- a/app/Http/Controllers/Api/ProjectController.php
+++ b/app/Http/Controllers/Api/ProjectController.php
@@ -7,10 +7,13 @@ use App\Models\Project;
use App\Models\ProjectColumn;
use App\Models\ProjectLog;
use App\Models\ProjectTask;
+use App\Models\ProjectTaskContent;
+use App\Models\ProjectTaskUser;
use App\Models\ProjectUser;
use App\Models\User;
use App\Models\WebSocketDialogMsg;
use App\Module\Base;
+use Carbon\Carbon;
use Request;
/**
@@ -261,6 +264,9 @@ class ProjectController extends AbstractController
'column_id' => $item['id'],
'sort' => $index
]);
+ ProjectTask::whereParentId($task_id)->whereProjectId($project->id)->update([
+ 'column_id' => $item['id'],
+ ]);
$index++;
}
}
@@ -515,12 +521,10 @@ class ProjectController extends AbstractController
}
/**
- * 添加、修改 任务列表
+ * 添加任务列表
*
* @apiParam {Number} project_id 项目ID
- * @apiParam {Number} [column_id] 列表ID(留空为添加列表)
* @apiParam {String} name 列表名称
- * @apiParam {String} color 颜色
*/
public function column__add()
{
@@ -532,12 +536,7 @@ class ProjectController extends AbstractController
}
//
$project_id = intval(Request::input('project_id'));
- $column_id = intval(Request::input('column_id'));
$name = trim(Request::input('name'));
- $color = trim(Request::input('color'));
- if (empty($name)) {
- return Base::retError('列表名称不能为空');
- }
// 项目
$project = Project::select($this->projectSelect)
->join('project_users', 'projects.id', '=', 'project_users.project_id')
@@ -548,28 +547,59 @@ class ProjectController extends AbstractController
return Base::retError('项目不存在或不在成员列表内');
}
//
- if ($column_id > 0) {
- $column = ProjectColumn::whereId($column_id)->whereProjectId($project_id)->first();
- if (empty($column)) {
- return Base::retError('列表不存在');
- }
- $column->name = $name;
- $column->color = $color;
- $column->save();
- return Base::retSuccess('修改成功', $column);
- } else {
- $column = ProjectColumn::createInstance([
- 'project_id' => $project->id,
- 'name' => $name,
- 'color' => $color,
- ]);
- $column->sort = intval(ProjectColumn::whereProjectId($project->id)->orderByDesc('sort')->value('sort')) + 1;
- $column->save();
- //
- $data = $column->toArray();
- $data['project_task'] = [];
- return Base::retSuccess('添加成功', $data);
+ if (empty($name)) {
+ return Base::retError('列表名称不能为空');
}
+ $column = ProjectColumn::createInstance([
+ 'project_id' => $project->id,
+ 'name' => $name,
+ ]);
+ $column->sort = intval(ProjectColumn::whereProjectId($project->id)->orderByDesc('sort')->value('sort')) + 1;
+ $column->save();
+ //
+ $data = $column->toArray();
+ $data['project_task'] = [];
+ return Base::retSuccess('添加成功', $data);
+ }
+
+ /**
+ * 修改任务列表
+ *
+ * @apiParam {Number} column_id 列表ID
+ * @apiParam {String} [name] 列表名称
+ * @apiParam {String} [color] 颜色
+ */
+ public function column__update()
+ {
+ $user = User::authE();
+ if (Base::isError($user)) {
+ return $user;
+ } else {
+ $user = User::IDE($user['data']);
+ }
+ //
+ $column_id = intval(Request::input('column_id'));
+ $name = trim(Request::input('name'));
+ $color = trim(Request::input('color'));
+ // 列表
+ $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', $column->project_id)
+ ->where('project_users.userid', $user->userid)
+ ->first();
+ if (empty($project)) {
+ return Base::retError('项目不存在或不在成员列表内');
+ }
+ //
+ if ($name) $column->name = $name;
+ if ($color) $column->color = $color;
+ $column->save();
+ return Base::retSuccess('修改成功', $column);
}
/**
@@ -690,4 +720,57 @@ class ProjectController extends AbstractController
}
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] 修改负责人
+ */
+ public function task__update()
+ {
+ $user = User::authE();
+ if (Base::isError($user)) {
+ return $user;
+ } else {
+ $user = User::IDE($user['data']);
+ }
+ //
+ $task_id = Base::getPostInt('task_id');
+ $name = Base::getPostValue('name');
+ $color = Base::getPostValue('color');
+ $content = Base::getPostValue('content');
+ $times = Base::getPostValue('times');
+ $owner = Base::getPostValue('owner');
+ // 任务
+ $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 = $task->updateTask([
+ 'name' => $name,
+ 'color' => $color,
+ 'content' => $content,
+ 'times' => $times,
+ 'owner' => $owner,
+ ]);
+ if (Base::isSuccess($result)) {
+ $result['data'] = ProjectTask::with(['taskUser', 'taskTag'])->whereId($task->id)->first();
+ }
+ return $result;
+ }
}
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
index 5e0bb090..638a74c3 100644
--- a/app/Http/Middleware/VerifyCsrfToken.php
+++ b/app/Http/Middleware/VerifyCsrfToken.php
@@ -24,6 +24,9 @@ class VerifyCsrfToken extends Middleware
// 添加任务
'api/project/task/add/',
+ // 修改任务
+ 'api/project/task/update/',
+
// 聊天发文件
'api/dialog/msg/sendfile/',
];
diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php
index 965c0cd9..92c5361c 100644
--- a/app/Models/ProjectTask.php
+++ b/app/Models/ProjectTask.php
@@ -309,4 +309,66 @@ class ProjectTask extends AbstractModel
]);
});
}
+
+ /**
+ * 修改任务
+ * @param $params
+ * @return array|bool
+ */
+ public function updateTask($params)
+ {
+ return AbstractModel::transaction(function () use ($params) {
+ $name = $params['name'];
+ $color = $params['color'];
+ $content = $params['content'];
+ $times = $params['times'];
+ $owner = $params['owner'];
+ // 子任务禁止修改项
+ if ($this->parent_id > 0) {
+ $color = null;
+ $content = null;
+ }
+ // 名称、背景色
+ if ($name) $this->name = $name;
+ if ($color) $this->color = $color;
+ if ($content) {
+ ProjectTaskContent::updateInsert([
+ 'project_id' => $this->parent_id,
+ 'task_id' => $this->id,
+ ], [
+ 'content' => $content,
+ ]);
+ }
+ // 计划时间
+ if ($times) {
+ list($start, $end) = is_string($times) ? explode(",", $times) : (is_array($times) ? $times : []);
+ if (Base::isDate($start) && Base::isDate($end)) {
+ if ($start != $end) {
+ $this->start_at = Carbon::parse($start);
+ $this->end_at = Carbon::parse($end);
+ }
+ }
+ }
+ // 负责人
+ if ($owner) {
+ if (is_array($owner)) {
+ $owner = Base::arrayFirst($owner);
+ }
+ $ownerUser = ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->first();
+ if ($ownerUser->userid != $owner) {
+ $ownerUser->owner = 0;
+ $ownerUser->save();
+ ProjectTaskUser::updateInsert([
+ 'project_id' => $this->parent_id,
+ 'task_id' => $this->id,
+ 'userid' => $owner,
+ ], [
+ 'owner' => 1,
+ ]);
+ }
+ }
+ $this->save();
+ return Base::retSuccess('修改成功');
+ });
+ }
}
diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue
index 3efde5b5..a05526bf 100644
--- a/resources/assets/js/pages/manage/components/ProjectList.vue
+++ b/resources/assets/js/pages/manage/components/ProjectList.vue
@@ -31,18 +31,18 @@
{{item.name}}