diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index b9923edbd..668b22d68 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1719,6 +1719,7 @@ class ProjectController extends AbstractController $task = ProjectTask::userTask($task_id, true, true, 2); $taskUser = ProjectTaskUser::select(['userid', 'owner'])->whereTaskId($task_id)->get(); $owners = $taskUser->where('owner', 1)->pluck('userid')->toArray(); // 负责人 + $assists = $taskUser->where('owner', 0)->pluck('userid')->toArray(); // 协助人 // 更新任务 $updateMarking = []; @@ -1729,32 +1730,49 @@ class ProjectController extends AbstractController $data['visibility_appointor'] = $data['is_all_visible'] == 1 ? [] : ProjectTaskUser::whereTaskId($task->id)->whereOwner(2)->pluck('userid'); $task->pushMsg('update', $data); // 可见性推送 - if (Arr::exists($param, 'is_all_visible') || Arr::exists($param, 'visibility_appointor')) { - if ($data['is_all_visible'] == 1) { - $task->pushMsgVisibleAdd($data); - } - if ($param['visibility_appointor']) { - $oldVisibleUserIds = $taskUser->where('owner', 2)->pluck('userid')->toArray()??[]; - $newVisibleUserIds = $param['visibility_appointor'] ?? []; - $deleteUserIds = array_diff($oldVisibleUserIds, $newVisibleUserIds); - $addUserIds = array_diff($newVisibleUserIds, $oldVisibleUserIds); - $task->pushMsgVisibleUpdate($data, $deleteUserIds, $addUserIds); - } - if ($data['is_all_visible'] != 1 && empty($param['visibility_appointor'])) { - $task->pushMsgVisibleRemove(); - } - } - if (Arr::exists($param, 'owner') && $data['is_all_visible'] != 1) { + if($task->parent_id == 0){ $subUserids = ProjectTaskUser::whereTaskPid($data['id'])->pluck('userid')->toArray(); - $diff = array_diff($owners, $param['owner'] ?: [], $subUserids); - if ($diff) { - $task->pushMsgVisibleRemove($diff); + if (Arr::exists($param, 'is_all_visible') || Arr::exists($param, 'visibility_appointor')) { + if ($data['is_all_visible'] == 1) { + $task->pushMsgVisibleAdd($data); + } + if ($param['visibility_appointor']) { + $oldVisibleUserIds = $taskUser->where('owner', 2)->pluck('userid')->toArray()??[]; + $newVisibleUserIds = $param['visibility_appointor'] ?? []; + $deleteUserIds = array_diff($oldVisibleUserIds, $newVisibleUserIds, $subUserids); + $addUserIds = array_diff($newVisibleUserIds, $oldVisibleUserIds); + $task->pushMsgVisibleUpdate($data, $deleteUserIds, $addUserIds); + } + if ($data['is_all_visible'] != 1 && empty($param['visibility_appointor'])) { + $task->pushMsgVisibleRemove(); + } } - } - if (Arr::exists($param, 'assist') && $data['is_all_visible'] != 1) { - $diff = array_diff($owners, $param['assist']); - if ($diff) { - $task->pushMsgVisibleRemove($diff); + if (Arr::exists($param, 'owner') && $data['is_all_visible'] != 1) { + $diff = array_diff($owners, $subUserids); + if ($diff) { + $task->pushMsgVisibleRemove($diff); + } + } + if (Arr::exists($param, 'assist') && $data['is_all_visible'] != 1) { + $diff = array_diff($assists, $subUserids); + if ($diff) { + $task->pushMsgVisibleRemove($diff); + } + } + }else{ + if(Arr::exists($param, 'owner') ){ + $diff = array_diff($owners, $param['owner'] ?: [] ); + if ($diff) { + $task->pushMsgVisibleRemove($diff); + } + $parentTask = ProjectTask::whereId($task->parent_id)->first(); + $subUserids = ProjectTaskUser::whereTaskPid($task->parent_id)->pluck('userid')->toArray(); + if ( $parentTask && $parentTask->is_all_visible != 1 && empty($subUserids) ) { + $diff = array_diff($owners, $param['owner'] ?: [], $subUserids); + if ($diff) { + $parentTask->pushMsgVisibleRemove($diff); + } + } } } // diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 3cd6d89f4..0ce8de294 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -676,15 +676,24 @@ class ProjectTask extends AbstractModel foreach ($owner as $uid) { if (intval($uid) == 0) continue; if (!$this->project->useridInTheProject($uid)) continue; - // DOTO - ProjectTaskUser::updateInsert([ - 'task_id' => $this->id, - 'userid' => $uid, - ], [ - 'project_id' => $this->project_id, - 'task_pid' => $this->parent_id ?: $this->id, - 'owner' => 1, - ]); + $row = ProjectTaskUser::where("task_id",$this->id) + ->where("userid",$uid) + ->where("owner",'!=', 2) + ->first(); + if(empty($row)){ + ProjectTaskUser::createInstance([ + 'task_id' => $this->id, + 'userid' => $uid, + 'project_id' => $this->project_id, + 'task_pid' => $this->parent_id ?: $this->id, + 'owner' => 1, + ])->save(); + }else{ + $row->project_id = $this->project_id; + $row->task_pid = $this->parent_id ?: $this->id; + $row->owner = 1; + $row->save(); + } $array[] = $uid; } if ($array) { @@ -711,15 +720,17 @@ class ProjectTask extends AbstractModel ProjectTask::whereId($data['task_id'])->update(['is_all_visible' => $data["is_all_visible"]]); } ProjectTaskUser::whereTaskId($data['task_id'])->whereOwner(2)->delete(); - foreach ($data['visibility_appointor'] as $uid) { - if($uid){ - ProjectTaskUser::createInstance([ - 'project_id' => $this->project_id, - 'task_id' => $this->id, - 'task_pid' => $this->parent_id ?: $this->id, - 'userid' => $uid, - 'owner' => 2, - ])->save(); + if(Arr::exists($data, 'visibility_appointor')){ + foreach ($data['visibility_appointor'] as $uid) { + if($uid){ + ProjectTaskUser::createInstance([ + 'project_id' => $this->project_id, + 'task_id' => $this->id, + 'task_pid' => $this->parent_id ?: $this->id, + 'userid' => $uid, + 'owner' => 2, + ])->save(); + } } } } @@ -1442,7 +1453,7 @@ class ProjectTask extends AbstractModel $userids = array_diff($userids, $owners, $assists); } else { // 指定可见 - $userids = $taskUser->where('owner', 2)->pluck('userid')->toArray(); + $userids = $taskUser->pluck('userid')->toArray(); } $data = array_merge($data, [ 'owner' => 0, @@ -1545,7 +1556,8 @@ class ProjectTask extends AbstractModel $projectUserids = ProjectUser::whereProjectId($this->project_id)->pluck('userid')->toArray(); // 项目成员 $projectOwner = Project::whereId($this->project_id)->pluck('userid')->toArray(); // 项目负责人 $taskOwnerAndAssists = ProjectTaskUser::select(['userid', 'owner'])->whereIn('owner', [0, 1])->whereTaskId($this->id)->pluck('userid')->toArray(); - $userids = array_diff($projectUserids, $projectOwner, $taskOwnerAndAssists); + $subUserids = ProjectTaskUser::whereTaskPid($this->id)->pluck('userid')->toArray(); + $userids = array_diff($projectUserids, $projectOwner, $taskOwnerAndAssists,$subUserids); } // $array[] = [ diff --git a/resources/assets/js/components/UserSelect.vue b/resources/assets/js/components/UserSelect.vue index 4ef8bb8e9..993bd7373 100755 --- a/resources/assets/js/components/UserSelect.vue +++ b/resources/assets/js/components/UserSelect.vue @@ -669,6 +669,7 @@ export default { const clone = $A.cloneJSON(this.values) this.values = $A.cloneJSON(this.selects) this.$emit('input', this.values) + this.$emit('submit', this.values) if (!this.beforeSubmit) { this.showModal = false diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index 862353e7f..88f7b6990 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -743,7 +743,7 @@ export default { name: '优先级', }); } - if (!($A.isArray(taskDetail.task_user) && taskDetail.task_user.find(({owner}) => owner !== 1))) { + if (!($A.isArray(taskDetail.task_user) && taskDetail.task_user.find(({owner}) => owner === 0 ))) { list.push({ command: 'assist', icon: '',