Merge branch 'pro' into pro

This commit is contained in:
kuaifan 2023-06-30 21:09:38 +08:00 committed by GitHub
commit cde9c819d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 63 additions and 50 deletions

View File

@ -911,7 +911,7 @@ class ProjectController extends AbstractController
$sorts = is_array($sorts) ? $sorts : []; $sorts = is_array($sorts) ? $sorts : [];
// 任务可见性 // 任务可见性
$visibility_task_ids = ProjectTask::getVisibleUserids($userid, $project_id); $visibility_task_ids = ProjectTask::getVisibleUserids($userid, $project_id);
$builder = ProjectTask::with(['taskUser', 'taskTag']); $builder = ProjectTask::with(['taskUser', 'taskTag']);
$builder->whereIn("project_tasks.id", $visibility_task_ids); $builder->whereIn("project_tasks.id", $visibility_task_ids);
@ -1367,7 +1367,7 @@ class ProjectController extends AbstractController
$data = $task->toArray(); $data = $task->toArray();
$data['project_name'] = $task->project?->name; $data['project_name'] = $task->project?->name;
$data['column_name'] = $task->projectColumn?->name; $data['column_name'] = $task->projectColumn?->name;
$data['visibility_appointor'] = $task->is_all_visible==1 ? [0] : ProjectTaskUser::whereTaskId($task_id)->whereOwner(2)->pluck('userid'); $data['visibility_appointor'] = $task->is_all_visible == 1 ? [0] : ProjectTaskUser::whereTaskId($task_id)->whereOwner(2)->pluck('userid');
return Base::retSuccess('success', $data); return Base::retSuccess('success', $data);
} }
@ -1673,7 +1673,7 @@ class ProjectController extends AbstractController
$data = ProjectTask::oneTask($task->id); $data = ProjectTask::oneTask($task->id);
$projectUserid = Project::whereId($data->project_id)->value('userid'); $projectUserid = Project::whereId($data->project_id)->value('userid');
$pushUserIds = ProjectTaskUser::whereTaskId($task->id)->pluck('userid')->toArray(); $pushUserIds = ProjectTaskUser::whereTaskId($task->id)->pluck('userid')->toArray();
$pushUserIds[] = $projectUserid; $pushUserIds[] = $projectUserid;
foreach ($pushUserIds as $userId) { foreach ($pushUserIds as $userId) {
$task->pushMsg('add', $data, $userId); $task->pushMsg('add', $data, $userId);
} }
@ -1730,14 +1730,14 @@ class ProjectController extends AbstractController
$data['visibility_appointor'] = $data['is_all_visible'] == 1 ? [] : ProjectTaskUser::whereTaskId($task->id)->whereOwner(2)->pluck('userid'); $data['visibility_appointor'] = $data['is_all_visible'] == 1 ? [] : ProjectTaskUser::whereTaskId($task->id)->whereOwner(2)->pluck('userid');
$task->pushMsg('update', $data); $task->pushMsg('update', $data);
// 可见性推送 // 可见性推送
if($task->parent_id == 0){ if ($task->parent_id == 0) {
$subUserids = ProjectTaskUser::whereTaskPid($data['id'])->pluck('userid')->toArray(); $subUserids = ProjectTaskUser::whereTaskPid($data['id'])->pluck('userid')->toArray();
if (Arr::exists($param, 'is_all_visible') || Arr::exists($param, 'visibility_appointor')) { if (Arr::exists($param, 'is_all_visible') || Arr::exists($param, 'visibility_appointor')) {
if ($data['is_all_visible'] == 1) { if ($data['is_all_visible'] == 1) {
$task->pushMsgVisibleAdd($data); $task->pushMsgVisibleAdd($data);
} }
if ($param['visibility_appointor']) { if ($param['visibility_appointor']) {
$oldVisibleUserIds = $taskUser->where('owner', 2)->pluck('userid')->toArray()??[]; $oldVisibleUserIds = $taskUser->where('owner', 2)->pluck('userid')->toArray() ?? [];
$newVisibleUserIds = $param['visibility_appointor'] ?? []; $newVisibleUserIds = $param['visibility_appointor'] ?? [];
$deleteUserIds = array_diff($oldVisibleUserIds, $newVisibleUserIds, $subUserids); $deleteUserIds = array_diff($oldVisibleUserIds, $newVisibleUserIds, $subUserids);
$addUserIds = array_diff($newVisibleUserIds, $oldVisibleUserIds); $addUserIds = array_diff($newVisibleUserIds, $oldVisibleUserIds);
@ -1759,15 +1759,15 @@ class ProjectController extends AbstractController
$task->pushMsgVisibleRemove($diff); $task->pushMsgVisibleRemove($diff);
} }
} }
}else{ } else {
if(Arr::exists($param, 'owner') ){ if (Arr::exists($param, 'owner')) {
$diff = array_diff($owners, $param['owner'] ?: [] ); $diff = array_diff($owners, $param['owner'] ?: []);
if ($diff) { if ($diff) {
$task->pushMsgVisibleRemove($diff); $task->pushMsgVisibleRemove($diff);
} }
$parentTask = ProjectTask::whereId($task->parent_id)->first(); $parentTask = ProjectTask::whereId($task->parent_id)->first();
$subUserids = ProjectTaskUser::whereTaskPid($task->parent_id)->pluck('userid')->toArray(); $subUserids = ProjectTaskUser::whereTaskPid($task->parent_id)->pluck('userid')->toArray();
if ( $parentTask && $parentTask->is_all_visible != 1 && empty($subUserids) ) { if ($parentTask && $parentTask->is_all_visible != 1 && empty($subUserids)) {
$diff = array_diff($owners, $param['owner'] ?: [], $subUserids); $diff = array_diff($owners, $param['owner'] ?: [], $subUserids);
if ($diff) { if ($diff) {
$parentTask->pushMsgVisibleRemove($diff); $parentTask->pushMsgVisibleRemove($diff);

View File

@ -465,7 +465,7 @@ class ProjectTask extends AbstractModel
} }
} }
// //
return AbstractModel::transaction(function() use ($assist, $times, $subtasks, $content, $owner, $task, $visibility_userids) { return AbstractModel::transaction(function () use ($assist, $times, $subtasks, $content, $owner, $task, $visibility_userids) {
$task->save(); $task->save();
$owner = array_values(array_unique($owner)); $owner = array_values(array_unique($owner));
foreach ($owner as $uid) { foreach ($owner as $uid) {
@ -676,11 +676,11 @@ class ProjectTask extends AbstractModel
foreach ($owner as $uid) { foreach ($owner as $uid) {
if (intval($uid) == 0) continue; if (intval($uid) == 0) continue;
if (!$this->project->useridInTheProject($uid)) continue; if (!$this->project->useridInTheProject($uid)) continue;
$row = ProjectTaskUser::where("task_id",$this->id) $row = ProjectTaskUser::where("task_id", $this->id)
->where("userid",$uid) ->where("userid", $uid)
->where("owner",'!=', 2) ->where("owner", '!=', 2)
->first(); ->first();
if(empty($row)){ if (empty($row)) {
ProjectTaskUser::createInstance([ ProjectTaskUser::createInstance([
'task_id' => $this->id, 'task_id' => $this->id,
'userid' => $uid, 'userid' => $uid,
@ -688,7 +688,7 @@ class ProjectTask extends AbstractModel
'task_pid' => $this->parent_id ?: $this->id, 'task_pid' => $this->parent_id ?: $this->id,
'owner' => 1, 'owner' => 1,
])->save(); ])->save();
}else{ } else {
$row->project_id = $this->project_id; $row->project_id = $this->project_id;
$row->task_pid = $this->parent_id ?: $this->id; $row->task_pid = $this->parent_id ?: $this->id;
$row->owner = 1; $row->owner = 1;
@ -716,13 +716,13 @@ class ProjectTask extends AbstractModel
} }
// 可见性 // 可见性
if (Arr::exists($data, 'is_all_visible') || Arr::exists($data, 'visibility_appointor')) { if (Arr::exists($data, 'is_all_visible') || Arr::exists($data, 'visibility_appointor')) {
if(Arr::exists($data, 'is_all_visible')){ if (Arr::exists($data, 'is_all_visible')) {
ProjectTask::whereId($data['task_id'])->update(['is_all_visible' => $data["is_all_visible"]]); ProjectTask::whereId($data['task_id'])->update(['is_all_visible' => $data["is_all_visible"]]);
} }
ProjectTaskUser::whereTaskId($data['task_id'])->whereOwner(2)->delete(); ProjectTaskUser::whereTaskId($data['task_id'])->whereOwner(2)->delete();
if(Arr::exists($data, 'visibility_appointor')){ if (Arr::exists($data, 'visibility_appointor')) {
foreach ($data['visibility_appointor'] as $uid) { foreach ($data['visibility_appointor'] as $uid) {
if($uid){ if ($uid) {
ProjectTaskUser::createInstance([ ProjectTaskUser::createInstance([
'project_id' => $this->project_id, 'project_id' => $this->project_id,
'task_id' => $this->id, 'task_id' => $this->id,
@ -1410,7 +1410,6 @@ class ProjectTask extends AbstractModel
$data = $data->toArray(); $data = $data->toArray();
} }
// //
$userids = [];
if ($userid === null) { if ($userid === null) {
$userids = $this->project->relationUserids(); $userids = $this->project->relationUserids();
} else { } else {
@ -1482,7 +1481,7 @@ class ProjectTask extends AbstractModel
/** /**
* 添加可见性任务 推送 * 添加可见性任务 推送
* @param array|self $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id] * @param array|self $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id]
*/ */
public function pushMsgVisibleAdd($data = null, array $pushUserIds = []) public function pushMsgVisibleAdd($data = null, array $pushUserIds = [])
{ {
@ -1504,8 +1503,8 @@ class ProjectTask extends AbstractModel
$array = []; $array = [];
if ($pushUserIds) { if ($pushUserIds) {
$userids = $pushUserIds; $userids = $pushUserIds;
}elseif ($this->is_all_visible != 1) { } elseif ($this->is_all_visible != 1) {
$userids = ProjectTaskUser::select(['userid', 'owner'])->whereTaskId($this->id)->orWhere('task_pid' , '=', $this->id)->pluck('userid')->toArray(); $userids = ProjectTaskUser::select(['userid', 'owner'])->whereTaskId($this->id)->orWhere('task_pid', '=', $this->id)->pluck('userid')->toArray();
} else { } else {
$userids = ProjectUser::whereProjectId($this->project_id)->pluck('userid')->toArray(); // 项目成员 $userids = ProjectUser::whereProjectId($this->project_id)->pluck('userid')->toArray(); // 项目成员
} }
@ -1555,7 +1554,7 @@ class ProjectTask extends AbstractModel
$projectOwner = Project::whereId($this->project_id)->pluck('userid')->toArray(); // 项目负责人 $projectOwner = Project::whereId($this->project_id)->pluck('userid')->toArray(); // 项目负责人
$taskOwnerAndAssists = ProjectTaskUser::select(['userid', 'owner'])->whereIn('owner', [0, 1])->whereTaskId($this->id)->pluck('userid')->toArray(); $taskOwnerAndAssists = ProjectTaskUser::select(['userid', 'owner'])->whereIn('owner', [0, 1])->whereTaskId($this->id)->pluck('userid')->toArray();
$subUserids = ProjectTaskUser::whereTaskPid($this->id)->pluck('userid')->toArray(); $subUserids = ProjectTaskUser::whereTaskPid($this->id)->pluck('userid')->toArray();
$userids = array_diff($projectUserids, $projectOwner, $taskOwnerAndAssists,$subUserids); $userids = array_diff($projectUserids, $projectOwner, $taskOwnerAndAssists, $subUserids);
} }
// //
$array[] = [ $array[] = [
@ -1580,7 +1579,7 @@ class ProjectTask extends AbstractModel
/** /**
* 更新可见性任务 推送 * 更新可见性任务 推送
* @param array|self $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id] * @param array|self $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id]
*/ */
public function pushMsgVisibleUpdate($data, array $deleteUserIds = [], array $addUserIds = []) public function pushMsgVisibleUpdate($data, array $deleteUserIds = [], array $addUserIds = [])
{ {
@ -1736,7 +1735,7 @@ class ProjectTask extends AbstractModel
->when($project_id, function ($q) use ($project_id) { ->when($project_id, function ($q) use ($project_id) {
$q->where('pt.project_id', '=', $project_id); // 负责人项目ids $q->where('pt.project_id', '=', $project_id); // 负责人项目ids
}) })
->where(function ($q) use ($userid){ ->where(function ($q) use ($userid) {
$q->where("pt.is_all_visible", '=', 1); $q->where("pt.is_all_visible", '=', 1);
$q->OrWhere("p.userid", '=', $userid); $q->OrWhere("p.userid", '=', $userid);
$q->OrWhere("b.userid", '=', $userid); $q->OrWhere("b.userid", '=', $userid);

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="common-user-select" :class="warpClass"> <div class="common-user-select" :class="warpClass">
<ul v-if="!module" @click="onSelection"> <ul v-if="!module" @click="onSelection">
<li v-for="userid in values" v-if="userid" > <li v-for="userid in values" v-if="userid">
<UserAvatar :userid="userid" :size="avatarSize" :show-icon="avatarIcon" :show-name="avatarName" tooltip-disabled/> <UserAvatar :userid="userid" :size="avatarSize" :show-icon="avatarIcon" :show-name="avatarName" tooltip-disabled/>
</li> </li>
<li v-if="addIcon || values.length === 0" class="add-icon" :style="addStyle" @click.stop="onSelection"></li> <li v-if="addIcon || values.length === 0" class="add-icon" :style="addStyle" @click.stop="onSelection"></li>
@ -312,7 +312,7 @@ export default {
} else { } else {
this.searchKey = "" this.searchKey = ""
} }
this.$emit("showUpdate",value) this.$emit("onShowChange",value)
}, },
searchKey() { searchKey() {
@ -669,7 +669,7 @@ export default {
const clone = $A.cloneJSON(this.values) const clone = $A.cloneJSON(this.values)
this.values = $A.cloneJSON(this.selects) this.values = $A.cloneJSON(this.selects)
this.$emit('input', this.values) this.$emit('input', this.values)
this.$emit('submit', this.values) this.$emit('onSubmit', this.values)
if (!this.beforeSubmit) { if (!this.beforeSubmit) {
this.showModal = false this.showModal = false

View File

@ -94,7 +94,7 @@
</div> </div>
</FormItem> </FormItem>
<FormItem> <FormItem>
<div class="item-label" slot="label"> <div slot="label">
<EDropdown ref="eDropdownRef" trigger="click" placement="bottom" @command="dropVisible"> <EDropdown ref="eDropdownRef" trigger="click" placement="bottom" @command="dropVisible">
<span class="visibility-text">{{$L('可见性')}} <span class="visibility-text">{{$L('可见性')}}
<i class="taskfont">&#xe740;</i> <i class="taskfont">&#xe740;</i>
@ -124,7 +124,7 @@
</EDropdownMenu> </EDropdownMenu>
</EDropdown> </EDropdown>
</div> </div>
<div class="item-content user ivu-input ivu-input-default ivu-input-with-suffix" v-if="addData.visibility_appoint < 3" @click="showCisibleDropdown"> <div class="ivu-input task-add-visibility" v-if="addData.visibility_appoint < 3" @click="showCisibleDropdown">
<span v-if="addData.visibility_appoint == 1">{{$L('项目人员可见')}}</span> <span v-if="addData.visibility_appoint == 1">{{$L('项目人员可见')}}</span>
<span v-else-if="addData.visibility_appoint == 2">{{$L('任务人员可见')}}</span> <span v-else-if="addData.visibility_appoint == 2">{{$L('任务人员可见')}}</span>
</div> </div>
@ -134,7 +134,7 @@
:avatar-size="24" :avatar-size="24"
:title="$L('选择指定人员')" :title="$L('选择指定人员')"
:project-id="addData.project_id" :project-id="addData.project_id"
@showUpdate="visibleUserSelectShowUpdate" @on-show-change="visibleUserSelectShowChange"
border border
/> />
</FormItem> </FormItem>
@ -561,7 +561,7 @@ export default {
this.$refs.eDropdownRef.show() this.$refs.eDropdownRef.show()
}, },
visibleUserSelectShowUpdate(isShow){ visibleUserSelectShowChange(isShow){
if(!isShow && (this.addData.visibility_appointor.length == 0 || !this.addData.visibility_appointor[0])){ if(!isShow && (this.addData.visibility_appointor.length == 0 || !this.addData.visibility_appointor[0])){
let old = this.addData.old_visibility_appoint; let old = this.addData.old_visibility_appoint;
this.addData.visibility_appoint = old > 2 ? 1 : (old || 1); this.addData.visibility_appoint = old > 2 ? 1 : (old || 1);

View File

@ -236,14 +236,15 @@
<div class="item-content user"> <div class="item-content user">
<span @click="showCisibleDropdown" v-if="taskDetail.is_all_visible == 1" class="visibility-text">{{$L('项目人员可见')}}</span> <span @click="showCisibleDropdown" v-if="taskDetail.is_all_visible == 1" class="visibility-text">{{$L('项目人员可见')}}</span>
<span @click="showCisibleDropdown" v-else-if="taskDetail.is_all_visible == 2" class="visibility-text">{{$L('任务人员可见')}}</span> <span @click="showCisibleDropdown" v-else-if="taskDetail.is_all_visible == 2" class="visibility-text">{{$L('任务人员可见')}}</span>
<UserSelect v-else <UserSelect
v-else
ref="visibleUserSelectRef" ref="visibleUserSelectRef"
v-model="taskDetail.visibility_appointor" v-model="taskDetail.visibility_appointor"
:avatar-size="28" :avatar-size="28"
:title="$L('选择指定人员')" :title="$L('选择指定人员')"
:project-id="taskDetail.project_id" :project-id="taskDetail.project_id"
@showUpdate="visibleUserSelectShowUpdate" :add-icon="false"
/> @on-show-change="visibleUserSelectShowChange"/>
</div> </div>
</FormItem> </FormItem>
<FormItem v-if="taskDetail.end_at || timeForce"> <FormItem v-if="taskDetail.end_at || timeForce">
@ -1550,7 +1551,7 @@ export default {
this.$refs.eDropdownRef.show() this.$refs.eDropdownRef.show()
}, },
visibleUserSelectShowUpdate(isShow){ visibleUserSelectShowChange(isShow){
if(!isShow && (this.taskDetail.visibility_appointor.length == 0 || !this.taskDetail.visibility_appointor[0])){ if(!isShow && (this.taskDetail.visibility_appointor.length == 0 || !this.taskDetail.visibility_appointor[0])){
let old = this.taskDetail.old_is_all_visible; let old = this.taskDetail.old_is_all_visible;
this.taskDetail.is_all_visible = old > 2 ? 1 : (old || 1); this.taskDetail.is_all_visible = old > 2 ? 1 : (old || 1);

View File

@ -152,16 +152,25 @@
} }
} }
} }
.visibility-text{
.visibility-text {
cursor: pointer; cursor: pointer;
&.color{
&.color {
color: #bbbbbb; color: #bbbbbb;
} }
.taskfont{ .taskfont {
display: inline-block;
transform: scale(0.9);
font-size: 12px; font-size: 12px;
margin-right: 0; margin-right: 0;
} }
} }
.task-add-visibility {
cursor: pointer;
color: rgba($primary-desc-color, 0.7);
}
} }
.task-add-advanced { .task-add-advanced {
margin: -16px 0 0; margin: -16px 0 0;

View File

@ -429,12 +429,16 @@
} }
} }
} }
.visibility-text{
.visibility-text {
cursor: pointer; cursor: pointer;
&.color{
&.color {
color: #bbbbbb; color: #bbbbbb;
} }
.taskfont{ .taskfont {
display: inline-block;
transform: scale(0.9);
font-size: 12px; font-size: 12px;
margin-right: 0; margin-right: 0;
} }
@ -514,7 +518,7 @@
&:before { &:before {
content: ""; content: "";
position: absolute; position: absolute;
left: 36px; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
height: 1px; height: 1px;
@ -594,11 +598,11 @@
.no-tip { .no-tip {
flex: 1; flex: 1;
display: none; display: none;
margin-left: 36px; margin-left: 0;
} }
.no-input { .no-input {
position: relative; position: relative;
margin: 22px 0 0 36px; margin: 22px 0 0 0;
background-color: #F4F5F7; background-color: #F4F5F7;
padding: 10px 4px 10px 6px; padding: 10px 4px 10px 6px;
border-radius: 10px; border-radius: 10px;
@ -634,7 +638,7 @@
content: ""; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
left: 36px; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
border: 2px dashed #7b7b7b; border: 2px dashed #7b7b7b;
@ -648,7 +652,7 @@
} }
} }
.project-log { .project-log {
margin-left: 36px; margin-left: 0;
.logs-activity { .logs-activity {
padding: 22px 0 0; padding: 22px 0 0;
> li { > li {