From 9d9500ba1bec919d9e50b725a6a2e3cd596d2a3a Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 7 Jan 2022 17:13:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=B6=E4=BB=96=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=BB=E5=8A=A1=E4=BC=9A=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E5=9C=A8=E8=87=AA=E5=B7=B1=E7=9A=84=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ProjectController.php | 14 +++--- app/Models/Project.php | 45 +++++++++++------ app/Models/ProjectTask.php | 49 ++++++++++++------- resources/assets/js/store/actions.js | 16 +++--- 4 files changed, 74 insertions(+), 50 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index a253fe3e..26df1edc 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1134,10 +1134,11 @@ class ProjectController extends AbstractController 'project_id' => $project->id, 'column_id' => $column->id, ])); - $data = [ - 'new_column' => $newColumn, - 'task' => ProjectTask::oneTask($task->id), - ]; + $data = ProjectTask::oneTask($task->id); + if ($newColumn) { + $data = $data->toArray(); + $data['new_column'] = $newColumn; + } $task->pushMsg('add', $data); return Base::retSuccess('添加成功', $data); } @@ -1174,10 +1175,7 @@ class ProjectController extends AbstractController 'times' => [$task->start_at, $task->end_at], 'owner' => [User::userid()] ]); - $data = [ - 'new_column' => null, - 'task' => ProjectTask::oneTask($task->id), - ]; + $data = ProjectTask::oneTask($task->id); $task->pushMsg('add', $data); return Base::retSuccess('添加成功', $data); } diff --git a/app/Models/Project.php b/app/Models/Project.php index a293150c..33046da3 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -304,28 +304,45 @@ class Project extends AbstractModel /** * 推送消息 * @param string $action - * @param array $data 发送内容,默认为[id=>项目ID] - * @param array $userid 指定会员,默认为项目所有成员 + * @param array|self $data 发送内容,默认为[id=>项目ID] + * @param array $userid 指定会员,默认为项目所有成员 */ public function pushMsg($action, $data = null, $userid = null) { if ($data === null) { $data = ['id' => $this->id]; + } elseif ($data instanceof self) { + $data = $data->toArray(); } + // + $array = [$userid, []]; if ($userid === null) { - $userid = $this->relationUserids(); + $array[0] = $this->relationUserids(); + } elseif (!is_array($userid)) { + $array[0] = [$userid]; + } + // + if (isset($data['owner'])) { + $owners = ProjectUser::whereProjectId($data['id'])->whereOwner(1)->pluck('userid')->toArray(); + $array = [array_intersect($array[0], $owners), array_diff($array[0], $owners)]; + } + // + foreach ($array as $index => $item) { + if ($index > 0) { + $data['owner'] = 0; + } + $params = [ + 'ignoreFd' => Request::header('fd'), + 'userid' => array_values($item), + 'msg' => [ + 'type' => 'project', + 'action' => $action, + 'data' => $data, + ] + ]; + $task = new PushTask($params, false); + Task::deliver($task); } - $params = [ - 'ignoreFd' => Request::header('fd'), - 'userid' => $userid, - 'msg' => [ - 'type' => 'project', - 'action' => $action, - 'data' => $data, - ] - ]; - $task = new PushTask($params, false); - Task::deliver($task); } /** diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 5dfa85c1..b0d521fb 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -799,10 +799,7 @@ class ProjectTask extends AbstractModel $this->archived_userid = User::userid(); $this->archived_follow = 0; $this->addLog("任务取消归档:" . $this->name); - $this->pushMsg('add', [ - 'new_column' => null, - 'task' => ProjectTask::oneTask($this->id), - ]); + $this->pushMsg('add', ProjectTask::oneTask($this->id)); } else { // 归档任务 if ($isAuto === true) { @@ -873,8 +870,8 @@ class ProjectTask extends AbstractModel /** * 推送消息 * @param string $action - * @param array $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id] - * @param array $userid 指定会员,默认为项目所有成员 + * @param array|self $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id] + * @param array $userid 指定会员,默认为项目所有成员 */ public function pushMsg($action, $data = null, $userid = null) { @@ -889,21 +886,37 @@ class ProjectTask extends AbstractModel 'column_id' => $this->column_id, 'dialog_id' => $this->dialog_id, ]; + } elseif ($data instanceof self) { + $data = $data->toArray(); } + // + $array = [$userid, []]; if ($userid === null) { - $userid = $this->project->relationUserids(); + $array[0] = $this->project->relationUserids(); + } elseif (!is_array($userid)) { + $array[0] = [$userid]; + } + // + if (isset($data['owner'])) { + $owners = ProjectTaskUser::whereTaskId($data['id'])->whereOwner(1)->pluck('userid')->toArray(); + $array = [array_intersect($array[0], $owners), array_diff($array[0], $owners)]; + } + foreach ($array as $index => $item) { + if ($index > 0) { + $data['owner'] = 0; + } + $params = [ + 'ignoreFd' => Request::header('fd'), + 'userid' => array_values($item), + 'msg' => [ + 'type' => 'projectTask', + 'action' => $action, + 'data' => $data, + ] + ]; + $task = new PushTask($params, false); + Task::deliver($task); } - $params = [ - 'ignoreFd' => Request::header('fd'), - 'userid' => $userid, - 'msg' => [ - 'type' => 'projectTask', - 'action' => $action, - 'data' => $data, - ] - ]; - $task = new PushTask($params, false); - Task::deliver($task); } /** diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 10a7127c..69436c1b 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1353,19 +1353,15 @@ export default { /** * 添加任务成功 * @param dispatch - * @param data + * @param task */ - addTaskSuccess({dispatch}, data) { - const {new_column, task} = data; - if (new_column) { - dispatch("saveColumn", new_column) + addTaskSuccess({dispatch}, task) { + if (typeof task.new_column !== "undefined") { + dispatch("saveColumn", task.new_column) + delete task.new_column } dispatch("saveTask", task) - if (task.parent_id) { - dispatch("getTaskOne", task.parent_id); - } else { - dispatch("getProjectOne", task.project_id); - } + dispatch("getProjectOne", task.project_id); }, /**