From 7e1e311e68683f49a8af985322b7de9ea5ae46d7 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 24 Jun 2021 01:10:49 +0800 Subject: [PATCH] no message --- .../Controllers/Api/ProjectController.php | 4 +- app/Models/ProjectTask.php | 88 ++++++++++++------- .../pages/manage/components/ProjectList.vue | 11 ++- .../js/pages/manage/components/TaskAdd.vue | 9 +- .../js/pages/manage/components/TaskDetail.vue | 50 ++++++++--- .../js/pages/manage/components/TaskRow.vue | 11 ++- .../js/pages/manage/setting/personal.vue | 2 +- resources/assets/js/store/actions.js | 2 - .../assets/sass/components/user-input.scss | 1 + .../sass/pages/components/project-list.scss | 11 +++ .../sass/pages/components/task-detail.scss | 4 + 11 files changed, 135 insertions(+), 58 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 3af663c2..5685067a 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -724,7 +724,6 @@ class ProjectController extends AbstractController 'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($task->id)->toArray(), ]; $task->pushMsg('add', $data); - $data['task']['owner'] = 1; return Base::retSuccess('添加成功', $data); } @@ -754,7 +753,6 @@ class ProjectController extends AbstractController 'task' => ProjectTask::with(['taskUser', 'taskTag'])->find($task->id)->toArray(), ]; $task->pushMsg('add', $data); - $data['task']['owner'] = 1; return Base::retSuccess('添加成功', $data); } @@ -764,7 +762,7 @@ class ProjectController extends AbstractController * @apiParam {Number} task_id 任务ID * @apiParam {String} [name] 任务描述 * @apiParam {Array} [times] 计划时间(格式:开始时间,结束时间;如:2020-01-01 00:00,2020-01-01 23:59) - * @apiParam {Number} [owner] 修改负责人 + * @apiParam {Array} [owner] 修改负责人 * @apiParam {String} [content] 任务详情(子任务不支持) * @apiParam {String} [color] 背景色(子任务不支持) * @apiParam {Array} [assist] 修改协助人员(子任务不支持) diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index ac8bd8d6..cf5c0602 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -327,10 +327,16 @@ class ProjectTask extends AbstractModel } } // 负责人 - $owner = intval($owner) ?: User::userid(); - if (!ProjectUser::whereProjectId($project_id)->whereUserid($owner)->exists()) { - throw new ApiException($retPre . '负责人填写错误'); + $owner = is_array($owner) ? $owner : [$owner]; + $tmpArray = []; + foreach ($owner as $uid) { + if (intval($uid) == 0) continue; + if (!ProjectUser::whereProjectId($project_id)->whereUserid($uid)->exists()) { + throw new ApiException($retPre . '负责人填写错误'); + } + $tmpArray[] = $uid; } + $owner = $tmpArray; // 创建人 $task->userid = User::userid(); // 排序位置 @@ -342,12 +348,12 @@ class ProjectTask extends AbstractModel // return AbstractModel::transaction(function() use ($subtasks, $content, $owner, $task) { $task->save(); - if ($owner) { + foreach ($owner as $uid) { ProjectTaskUser::createInstance([ 'project_id' => $task->project_id, 'task_id' => $task->id, 'task_pid' => $task->parent_id ?: $task->id, - 'userid' => $owner, + 'userid' => $uid, 'owner' => 1, ])->save(); } @@ -392,27 +398,37 @@ class ProjectTask extends AbstractModel } // 负责人 if (Arr::exists($data, 'owner')) { - $owner = intval($data['owner']); - $row = ProjectTaskUser::whereTaskId($this->id)->whereUserid($owner)->first(); - if (empty($row)) { - $row = ProjectTaskUser::createInstance([ - 'project_id' => $this->project_id, + $count = $this->task_user_count; + $array = []; + $owner = is_array($data['owner']) ? $data['owner'] : [$data['owner']]; + foreach ($owner as $uid) { + if (intval($uid) == 0) continue; + if (!$this->project->useridInTheProject($uid)) continue; + // + ProjectTaskUser::updateInsert([ 'task_id' => $this->id, + 'userid' => $uid, + ], [ + 'project_id' => $this->project_id, 'task_pid' => $this->parent_id ?: $this->id, - 'userid' => $owner, 'owner' => 1, ]); - } else { - $row->owner = 1; - } - $row->save(); - if ($this->parent_id) { - ProjectTaskUser::whereTaskId($this->id)->where('id', '!=', $row->id)->delete(); - } else { - ProjectTaskUser::whereTaskId($this->id)->where('id', '!=', $row->id)->update([ 'owner' => 0 ]); + $array[] = $uid; + if ($this->parent_id) { + break; // 子任务只能是一个负责人 + } } + ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->whereNotIn('userid', $array)->delete(); $this->syncDialogUser(); - $this->addLog("修改{任务}负责人为会员ID:" . $row->userid); + if (count($array) == 0) { + $this->addLog("删除{任务}负责人"); + } else { + if ($count == 0) { + $this->addLog("认领{任务}"); + } else { + $this->addLog("修改{任务}负责人"); + } + } } // 计划时间 if (Arr::exists($data, 'times')) { @@ -436,25 +452,29 @@ class ProjectTask extends AbstractModel $assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']]; foreach ($assist as $uid) { if (intval($uid) == 0) continue; + if (!$this->project->useridInTheProject($uid)) continue; // - if (empty($this->useridInTheTask($uid))) { - ProjectTaskUser::createInstance([ - 'project_id' => $this->project_id, - 'task_id' => $this->id, - 'task_pid' => $this->parent_id ?: $this->id, - 'userid' => $uid, - 'owner' => 0, - ])->save(); - } + ProjectTaskUser::updateInsert([ + 'task_id' => $this->id, + 'userid' => $uid, + ], [ + 'project_id' => $this->project_id, + 'task_pid' => $this->parent_id ?: $this->id, + 'owner' => 0, + ]); $array[] = $uid; } - ProjectTaskUser::whereTaskId($this->id)->where('owner', '!=', 1)->whereNotIn('userid', $array)->delete(); + ProjectTaskUser::whereTaskId($this->id)->whereOwner(0)->whereNotIn('userid', $array)->delete(); $this->syncDialogUser(); - $this->addLog("修改协助人员"); + if (count($array) == 0) { + $this->addLog("删除{任务}协助人员"); + } else { + $this->addLog("修改{任务}协助人员"); + } } // 背景色 if (Arr::exists($data, 'color') && $this->color != $data['color']) { - $this->addLog("修改任务背景色:{$this->color} => {$data['color']}"); + $this->addLog("修改{任务}背景色:{$this->color} => {$data['color']}"); $this->color = $data['color']; } // 内容 @@ -466,7 +486,7 @@ class ProjectTask extends AbstractModel 'content' => $data['content'], ]); $this->desc = Base::getHtml($data['content']); - $this->addLog("修改任务详细描述"); + $this->addLog("修改{任务}详细描述"); $updateContent = true; } // 优先级 @@ -484,7 +504,7 @@ class ProjectTask extends AbstractModel $p = true; } if ($p) { - $this->addLog("修改任务优先级"); + $this->addLog("修改{任务}优先级"); } } $this->save(); diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index d761eaab..badd5994 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -175,9 +175,12 @@
{{item.file_num}}
{{item.msg_num}}
@@ -986,6 +989,12 @@ export default { return false; }, + ownerUser(list) { + return list.filter(({owner}) => owner == 1).sort((a, b) => { + return a.id - b.id; + }); + }, + formatTime(date) { let time = Math.round(new Date(date).getTime() / 1000), string = ''; diff --git a/resources/assets/js/pages/manage/components/TaskAdd.vue b/resources/assets/js/pages/manage/components/TaskAdd.vue index 400c50c7..1d81e87c 100644 --- a/resources/assets/js/pages/manage/components/TaskAdd.vue +++ b/resources/assets/js/pages/manage/components/TaskAdd.vue @@ -63,7 +63,11 @@ @on-change="taskTimeChange(addData.times)"/> - +
@@ -94,7 +98,8 @@ + :placeholder="$L('选择负责人')" + :project-id="projectId"/>
diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index 5c9f61e5..1800f777 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -83,7 +83,9 @@
- +
--
@@ -98,6 +100,17 @@

{{columnName}}

{{taskDetail.id}}

+ + + - +
{{$L('负责人')}}
@@ -193,17 +206,16 @@
-
- +
+
-
--
@@ -584,9 +596,11 @@ export default { getOwner() { const {taskDetail} = this; if (!$A.isArray(taskDetail.task_user)) { - return null; + return []; } - return taskDetail.task_user.find(({owner}) => owner === 1); + return taskDetail.task_user.filter(({owner}) => owner === 1).sort((a, b) => { + return a.id - b.id; + }); }, getAssist() { @@ -594,7 +608,9 @@ export default { if (!$A.isArray(taskDetail.task_user)) { return []; } - return taskDetail.task_user.filter(({owner}) => owner !== 1); + return taskDetail.task_user.filter(({owner}) => owner !== 1).sort((a, b) => { + return a.id - b.id; + }); }, menuList() { @@ -856,19 +872,25 @@ export default { }, openOwner() { - this.$set(this.taskDetail, 'owner_userid', [this.getOwner.userid]) - this.$set(this.ownerData, 'owner_userid', [this.getOwner.userid]); + const list = this.getOwner.map(({userid}) => userid) + this.$set(this.taskDetail, 'owner_userid', list) + this.$set(this.ownerData, 'owner_userid', list) this.ownerShow = true; }, - onOwner() { + onOwner(pick) { + if (pick === true && this.getOwner.length === 0) { + this.ownerData.owner_userid = [this.userId]; + } if ($A.jsonStringify(this.taskDetail.owner_userid) === $A.jsonStringify(this.ownerData.owner_userid)) { return; } + let owner = this.ownerData.owner_userid; + if ($A.count(owner) == 0) owner = ''; this.ownerLoad++; this.$store.dispatch("taskUpdate", { task_id: this.taskDetail.id, - owner: this.ownerData.owner_userid + owner: owner, }).then(({msg}) => { $A.messageSuccess(msg); this.ownerLoad--; @@ -885,7 +907,7 @@ export default { const list = this.getAssist.map(({userid}) => userid) this.$set(this.taskDetail, 'assist_userid', list) this.$set(this.assistData, 'assist_userid', list); - this.$set(this.assistData, 'disabled', [this.getOwner.userid]); + this.$set(this.assistData, 'disabled', this.getOwner.map(({userid}) => userid)) this.assistShow = true; }, diff --git a/resources/assets/js/pages/manage/components/TaskRow.vue b/resources/assets/js/pages/manage/components/TaskRow.vue index a34ab21a..fd336c41 100644 --- a/resources/assets/js/pages/manage/components/TaskRow.vue +++ b/resources/assets/js/pages/manage/components/TaskRow.vue @@ -67,9 +67,12 @@
    -
  • +
  • +
  • + +
@@ -206,6 +209,12 @@ export default { } }, + ownerUser(list) { + return list.filter(({owner}) => owner == 1).sort((a, b) => { + return a.id - b.id; + }); + }, + formatTime(date) { let time = Math.round(new Date(date).getTime() / 1000), string = ''; diff --git a/resources/assets/js/pages/manage/setting/personal.vue b/resources/assets/js/pages/manage/setting/personal.vue index 345af124..f80533b0 100644 --- a/resources/assets/js/pages/manage/setting/personal.vue +++ b/resources/assets/js/pages/manage/setting/personal.vue @@ -72,7 +72,7 @@ export default { this.$refs.formDatum.validate((valid) => { if (valid) { let data = $A.cloneJSON(this.formDatum); - if ($A.runNum(data.userimg) == 0) data.userimg = ""; + if ($A.count(data.userimg) == 0) data.userimg = ""; this.loadIng++; this.$store.dispatch("call", { url: 'users/editdata', diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 6f2b5bea..3a3e5e16 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -861,7 +861,6 @@ export default { return new Promise(function (resolve, reject) { const post = state.method.cloneJSON(state.method.date2string(data)); if (state.method.isArray(post.column_id)) post.column_id = post.column_id.find((val) => val) - if (state.method.isArray(post.owner)) post.owner = post.owner.find((val) => val) // dispatch("call", { url: 'project/task/add', @@ -926,7 +925,6 @@ export default { taskUpdate({state, dispatch}, data) { return new Promise(function (resolve, reject) { const post = state.method.cloneJSON(state.method.date2string(data)); - if (state.method.isArray(post.owner)) post.owner = post.owner.find((id) => id) // dispatch("call", { url: 'project/task/update', diff --git a/resources/assets/sass/components/user-input.scss b/resources/assets/sass/components/user-input.scss index 30db8be5..31d8b371 100755 --- a/resources/assets/sass/components/user-input.scss +++ b/resources/assets/sass/components/user-input.scss @@ -1,5 +1,6 @@ .common-user { position: relative; + white-space: normal; .common-user-loading { position: absolute; top: 2px; diff --git a/resources/assets/sass/pages/components/project-list.scss b/resources/assets/sass/pages/components/project-list.scss index f9daf215..e1c0c209 100644 --- a/resources/assets/sass/pages/components/project-list.scss +++ b/resources/assets/sass/pages/components/project-list.scss @@ -388,6 +388,12 @@ &:first-child { margin-left: 0; } + &.no-owner { + width: auto; + .ivu-btn-small { + font-size: 12px; + } + } } } .task-icon { @@ -671,6 +677,11 @@ &:first-child { margin-left: 0; } + &.no-owner { + height: 32px; + display: flex; + align-items: center; + } } } } diff --git a/resources/assets/sass/pages/components/task-detail.scss b/resources/assets/sass/pages/components/task-detail.scss index 8cfb5de6..4df97a2f 100644 --- a/resources/assets/sass/pages/components/task-detail.scss +++ b/resources/assets/sass/pages/components/task-detail.scss @@ -52,6 +52,10 @@ } } } + .pick { + margin-left: 16px; + margin-right: -16px; + } .menu { font-size: 22px; margin: 0 32px;