no message

This commit is contained in:
kuaifan 2021-06-15 11:01:23 +08:00
parent 7b91a53a71
commit 3355aa0bbf
7 changed files with 90 additions and 11 deletions

View File

@ -331,9 +331,11 @@ class UsersController extends AbstractController
* @apiGroup users * @apiGroup users
* @apiName searchinfo * @apiName searchinfo
* *
* @apiParam {Object} where 搜索条件 * @apiParam {Object} keys 搜索条件
* - where.key 昵称、邮箱、用户名 * - keys.key // 昵称、邮箱、用户名
* @apiParam {Number} [take] 获取数量10-100 * - keys.project_id // 在指定项目ID
* - keys.no_project_id // 不在指定项目ID
* @apiParam {Number} [take] 获取数量10-100
* *
* @apiSuccess {Number} ret 返回状态码1正确、0错误 * @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {String} msg 返回信息(错误描述)
@ -343,7 +345,7 @@ class UsersController extends AbstractController
{ {
$builder = User::select(['userid', 'email', 'nickname', 'profession', 'userimg', 'az']); $builder = User::select(['userid', 'email', 'nickname', 'profession', 'userimg', 'az']);
// //
$keys = Request::input('where'); $keys = Request::input('keys');
if (is_array($keys)) { if (is_array($keys)) {
if ($keys['key']) { if ($keys['key']) {
$builder->where(function($query) use ($keys) { $builder->where(function($query) use ($keys) {
@ -351,6 +353,16 @@ class UsersController extends AbstractController
->orWhere('nickname', 'like', '%,' . $keys['key'] . ',%'); ->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(); $list = $builder->orderBy('userid')->take(Base::getPaginate(100, 10, 'take'))->get();

View File

@ -232,6 +232,20 @@ class Project extends AbstractModel
return $this->projectUser->pluck('userid')->toArray(); 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 * @return bool

View File

@ -354,8 +354,9 @@ class ProjectTask extends AbstractModel
// 负责人 // 负责人
if (Arr::exists($data, 'owner')) { if (Arr::exists($data, 'owner')) {
$row = ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->first(); $row = ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->first();
if ($row->userid != $data['owner']) { $owner = intval($data['owner']);
if (!User::find(intval($data['owner']))) { if ($row->userid != $owner) {
if (empty($this->useridInTheProject($owner))) {
return Base::retError('请选择正确的负责人'); return Base::retError('请选择正确的负责人');
} }
$row->owner = 0; $row->owner = 0;
@ -363,7 +364,7 @@ class ProjectTask extends AbstractModel
ProjectTaskUser::updateInsert([ ProjectTaskUser::updateInsert([
'project_id' => $this->parent_id, 'project_id' => $this->parent_id,
'task_id' => $this->id, 'task_id' => $this->id,
'userid' => $data['owner'], 'userid' => $owner,
], [ ], [
'owner' => 1, 'owner' => 1,
]); ]);
@ -391,9 +392,8 @@ class ProjectTask extends AbstractModel
$assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']]; $assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']];
foreach ($assist as $uid) { foreach ($assist as $uid) {
if (intval($uid) == 0) continue; 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([ ProjectTaskUser::createInstance([
'project_id' => $this->parent_id, 'project_id' => $this->parent_id,
'task_id' => $this->id, 'task_id' => $this->id,
@ -479,6 +479,34 @@ class ProjectTask extends AbstractModel
return array_values(array_filter(array_unique($userids))); 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 完成时间 * @param Carbon|null $complete_at 完成时间

View File

@ -71,6 +71,14 @@
type: Boolean, type: Boolean,
default: true default: true
}, },
projectId: {
type: Number,
default: 0
},
noProjectId: {
type: Number,
default: 0
},
}, },
data() { data() {
return { return {
@ -158,7 +166,9 @@
url: 'users/search', url: 'users/search',
data: { data: {
keys: { keys: {
key: query || '' key: query || '',
project_id: this.projectId,
no_project_id: this.noProjectId,
}, },
take: 30 take: 30
}, },

View File

@ -19,7 +19,7 @@
<Icon type="md-add" /> <Icon type="md-add" />
</li> </li>
<li :class="['project-icon', searchText!='' ? 'active' : '']"> <li :class="['project-icon', searchText!='' ? 'active' : '']">
<ETooltip :value="searchText!=''" :manual="searchText!=''" transfer> <ETooltip :value="searchText!=''" :manual="searchText!=''" effect="light" transfer>
<Icon type="ios-search" /> <Icon type="ios-search" />
<div slot="content"> <div slot="content">
<Input v-model="searchText" :placeholder="$L('名称、描述...')" clearable autofocus/> <Input v-model="searchText" :placeholder="$L('名称、描述...')" clearable autofocus/>

View File

@ -77,6 +77,7 @@
v-if="ownerShow" v-if="ownerShow"
v-model="ownerData.owner_userid" v-model="ownerData.owner_userid"
:multiple-max="1" :multiple-max="1"
:project-id="taskDetail.project_id"
:placeholder="$L('选择任务负责人')"/> :placeholder="$L('选择任务负责人')"/>
<div class="task-detail-avatar-buttons"> <div class="task-detail-avatar-buttons">
<Button size="small" type="primary" @click="$refs.owner.ok()">{{$L('确定')}}</Button> <Button size="small" type="primary" @click="$refs.owner.ok()">{{$L('确定')}}</Button>
@ -192,6 +193,7 @@
v-if="ownerShow" v-if="ownerShow"
v-model="ownerData.owner_userid" v-model="ownerData.owner_userid"
:multiple-max="1" :multiple-max="1"
:project-id="taskDetail.project_id"
:placeholder="$L('选择任务负责人')"/> :placeholder="$L('选择任务负责人')"/>
<div class="task-detail-avatar-buttons"> <div class="task-detail-avatar-buttons">
<Button size="small" type="primary" @click="$refs.owner.ok()">{{$L('确定')}}</Button> <Button size="small" type="primary" @click="$refs.owner.ok()">{{$L('确定')}}</Button>
@ -222,6 +224,7 @@
v-if="assistShow" v-if="assistShow"
v-model="assistData.assist_userid" v-model="assistData.assist_userid"
:multiple-max="10" :multiple-max="10"
:project-id="taskDetail.project_id"
:disabled-choice="assistData.disabled" :disabled-choice="assistData.disabled"
:placeholder="$L('选择任务协助人员')"/> :placeholder="$L('选择任务协助人员')"/>
<div class="task-detail-avatar-buttons"> <div class="task-detail-avatar-buttons">
@ -597,6 +600,8 @@ export default {
this.timeForce = false; this.timeForce = false;
this.assistForce = false; this.assistForce = false;
this.addsubForce = false; this.addsubForce = false;
this.$refs.owner.handleClose();
this.$refs.assist.handleClose();
} }
} }
}, },
@ -990,6 +995,7 @@ export default {
dialog_id: data.dialog_id dialog_id: data.dialog_id
}); });
this.$nextTick(() => { this.$nextTick(() => {
this.$store.dispatch("getDialogMsgList", data.dialog_id);
this.$refs.dialog.sendMsg(this.msgText); this.$refs.dialog.sendMsg(this.msgText);
this.msgText = ""; this.msgText = "";
}); });

View File

@ -13,6 +13,15 @@ $--tooltip-font-size: 14px;
min-width: 100px; min-width: 100px;
line-height: 34px; line-height: 34px;
} }
.el-dropdown-menu__item--divided:before { .el-dropdown-menu__item--divided:before {
height: 5px; 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);
}
}