diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index e167f354a..a91589393 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1995,6 +1995,7 @@ class ProjectController extends AbstractController * @apiParam {String} [content] 任务详情(子任务不支持) * @apiParam {String} [color] 背景色(子任务不支持) * @apiParam {Array} [assist] 修改协助人员(子任务不支持) + * @apiParam {Array} [task_tag] 任务标签(子任务不支持) * @apiParam {Number} [visibility] 修改可见性 * @apiParam {Array} [visibility_appointor] 修改可见性人员 * diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index df51eae7d..17b517e7c 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -944,6 +944,60 @@ class ProjectTask extends AbstractModel $this->addLog("修改{任务}详细描述", $logRecord); $updateMarking['is_update_content'] = true; } + // 标签 + if (Arr::exists($data, 'task_tag')) { + $oldTags = collect($this->taskTag); + $newTags = collect($data['task_tag']); + + // 找出需要删除的标签(在旧数据中存在,但在新数据中不存在) + $deletedTags = $oldTags->filter(function ($oldTag) use ($newTags) { + return !$newTags->contains('name', $oldTag['name']); + }); + if ($deletedTags->isNotEmpty()) { + $this->addLog("删除{任务}标签", [ + 'tags' => $deletedTags->values()->all() + ]); + ProjectTaskTag::whereProjectId($this->project_id) + ->whereTaskId($this->id) + ->whereIn('name', $deletedTags->pluck('name')) + ->delete(); + } + + // 找出需要新增的标签(在新数据中存在,但在旧数据中不存在) + $addedTags = $newTags->filter(function ($newTag) use ($oldTags) { + return !$oldTags->contains('name', $newTag['name']); + }); + if ($addedTags->isNotEmpty()) { + $this->addLog("新增{任务}标签", [ + 'tags' => $addedTags->values()->all() + ]); + $addedTags->each(function ($tag) { + ProjectTaskTag::createInstance([ + 'project_id' => $this->project_id, + 'task_id' => $this->id, + 'name' => $tag['name'], + 'color' => $tag['color'], + ])->save(); + }); + } + + // 找出需要更新的标签(标签名相同,但其他属性可能变化) + $updatedTags = $newTags->filter(function ($newTag) use ($oldTags) { + $oldTag = $oldTags->firstWhere('name', $newTag['name']); + return $oldTag && ($oldTag['color'] !== $newTag['color']); + }); + if ($updatedTags->isNotEmpty()) { + $this->addLog("更新{任务}标签", [ + 'tags' => $updatedTags->values()->all() + ]); + $updatedTags->each(function ($tag) { + ProjectTaskTag::whereProjectId($this->project_id) + ->whereTaskId($this->id) + ->whereName($tag['name']) + ->update(['color' => $tag['color']]); + }); + } + } // 优先级 $p = false; $oldPName = $this->p_name; diff --git a/resources/assets/js/pages/manage/components/ProjectPanel.vue b/resources/assets/js/pages/manage/components/ProjectPanel.vue index 974ccf0ba..6009b1264 100644 --- a/resources/assets/js/pages/manage/components/ProjectPanel.vue +++ b/resources/assets/js/pages/manage/components/ProjectPanel.vue @@ -180,9 +180,7 @@