diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 87b69bb4..bfc5e092 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -331,9 +331,11 @@ class UsersController extends AbstractController * @apiGroup users * @apiName searchinfo * - * @apiParam {Object} where 搜索条件 - * - where.key 昵称、邮箱、用户名 - * @apiParam {Number} [take] 获取数量,10-100 + * @apiParam {Object} keys 搜索条件 + * - keys.key // 昵称、邮箱、用户名 + * - keys.project_id // 在指定项目ID + * - keys.no_project_id // 不在指定项目ID + * @apiParam {Number} [take] 获取数量,10-100 * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -343,7 +345,7 @@ class UsersController extends AbstractController { $builder = User::select(['userid', 'email', 'nickname', 'profession', 'userimg', 'az']); // - $keys = Request::input('where'); + $keys = Request::input('keys'); if (is_array($keys)) { if ($keys['key']) { $builder->where(function($query) use ($keys) { @@ -351,6 +353,16 @@ class UsersController extends AbstractController ->orWhere('nickname', 'like', '%,' . $keys['key'] . ',%'); }); } + if (intval($keys['project_id']) > 0) { + $builder->whereIn('userid', function ($query) use ($keys) { + $query->select('userid')->from('project_users')->where('project_id', $keys['project_id']); + }); + } + if (intval($keys['no_project_id']) > 0) { + $builder->whereNotIn('userid', function ($query) use ($keys) { + $query->select('userid')->from('project_users')->where('project_id', $keys['no_project_id']); + }); + } } // $list = $builder->orderBy('userid')->take(Base::getPaginate(100, 10, 'take'))->get(); diff --git a/app/Models/Project.php b/app/Models/Project.php index 3d724ddb..3eea3cfd 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -232,6 +232,20 @@ class Project extends AbstractModel return $this->projectUser->pluck('userid')->toArray(); } + /** + * 会员id是否在项目里 + * @param int $userid + * @return int 0:不存在、1存在、2存在且是管理员 + */ + public function useridInTheProject($userid) + { + $user = ProjectUser::whereProjectId($this->id)->whereUserid(intval($userid))->first(); + if (empty($user)) { + return 0; + } + return $user->owner ? 2 : 1; + } + /** * 删除项目 * @return bool diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 9052a323..dd319907 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -354,8 +354,9 @@ class ProjectTask extends AbstractModel // 负责人 if (Arr::exists($data, 'owner')) { $row = ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->first(); - if ($row->userid != $data['owner']) { - if (!User::find(intval($data['owner']))) { + $owner = intval($data['owner']); + if ($row->userid != $owner) { + if (empty($this->useridInTheProject($owner))) { return Base::retError('请选择正确的负责人'); } $row->owner = 0; @@ -363,7 +364,7 @@ class ProjectTask extends AbstractModel ProjectTaskUser::updateInsert([ 'project_id' => $this->parent_id, 'task_id' => $this->id, - 'userid' => $data['owner'], + 'userid' => $owner, ], [ 'owner' => 1, ]); @@ -391,9 +392,8 @@ class ProjectTask extends AbstractModel $assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']]; foreach ($assist as $uid) { if (intval($uid) == 0) continue; - if (ProjectTaskUser::whereTaskId($this->id)->whereUserid($uid)->whereOwner(1)->exists()) continue; // - if (!ProjectTaskUser::whereTaskId($this->id)->whereUserid($uid)->where('owner', '!=', 1)->exists()) { + if (empty($this->useridInTheTask($uid))) { ProjectTaskUser::createInstance([ 'project_id' => $this->parent_id, 'task_id' => $this->id, @@ -479,6 +479,34 @@ class ProjectTask extends AbstractModel return array_values(array_filter(array_unique($userids))); } + /** + * 会员id是否在项目里 + * @param int $userid + * @return int 0:不存在、1存在、2存在且是管理员 + */ + public function useridInTheProject($userid) + { + $user = ProjectUser::whereProjectId($this->project_id)->whereUserid(intval($userid))->first(); + if (empty($user)) { + return 0; + } + return $user->owner ? 2 : 1; + } + + /** + * 会员id是否在任务里 + * @param int $userid + * @return int 0:不存在、1存在、2存在且是管理员 + */ + public function useridInTheTask($userid) + { + $user = ProjectTaskUser::whereTaskId($this->id)->whereUserid(intval($userid))->first(); + if (empty($user)) { + return 0; + } + return $user->owner ? 2 : 1; + } + /** * 标记已完成、未完成 * @param Carbon|null $complete_at 完成时间 diff --git a/resources/assets/js/components/UserInput.vue b/resources/assets/js/components/UserInput.vue index 42a372cd..fd9c48a8 100755 --- a/resources/assets/js/components/UserInput.vue +++ b/resources/assets/js/components/UserInput.vue @@ -71,6 +71,14 @@ type: Boolean, default: true }, + projectId: { + type: Number, + default: 0 + }, + noProjectId: { + type: Number, + default: 0 + }, }, data() { return { @@ -158,7 +166,9 @@ url: 'users/search', data: { keys: { - key: query || '' + key: query || '', + project_id: this.projectId, + no_project_id: this.noProjectId, }, take: 30 }, diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index 84205665..1678e2ee 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -19,7 +19,7 @@
  • - +
    diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index 4643771c..04443e91 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -77,6 +77,7 @@ v-if="ownerShow" v-model="ownerData.owner_userid" :multiple-max="1" + :project-id="taskDetail.project_id" :placeholder="$L('选择任务负责人')"/>
    @@ -192,6 +193,7 @@ v-if="ownerShow" v-model="ownerData.owner_userid" :multiple-max="1" + :project-id="taskDetail.project_id" :placeholder="$L('选择任务负责人')"/>
    @@ -222,6 +224,7 @@ v-if="assistShow" v-model="assistData.assist_userid" :multiple-max="10" + :project-id="taskDetail.project_id" :disabled-choice="assistData.disabled" :placeholder="$L('选择任务协助人员')"/>
    @@ -597,6 +600,8 @@ export default { this.timeForce = false; this.assistForce = false; this.addsubForce = false; + this.$refs.owner.handleClose(); + this.$refs.assist.handleClose(); } } }, @@ -990,6 +995,7 @@ export default { dialog_id: data.dialog_id }); this.$nextTick(() => { + this.$store.dispatch("getDialogMsgList", data.dialog_id); this.$refs.dialog.sendMsg(this.msgText); this.msgText = ""; }); diff --git a/resources/assets/sass/element.scss b/resources/assets/sass/element.scss index b73ee90a..f877c6f2 100644 --- a/resources/assets/sass/element.scss +++ b/resources/assets/sass/element.scss @@ -13,6 +13,15 @@ $--tooltip-font-size: 14px; min-width: 100px; line-height: 34px; } + .el-dropdown-menu__item--divided:before { height: 5px; } + +.el-tooltip__popper.is-light[x-placement^="bottom"] { + border-width: 0; + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + .popper__arrow { + border-bottom-color: hsla(0, 0%, 85%, .5); + } +}