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 @@