fix:1.优化字段is_all_visible,2.更新okr版本,3.修复删除任务列报错

This commit is contained in:
weifashi 2023-11-09 00:36:49 +08:00
parent e7fbe8bb49
commit a38ddf83f2
7 changed files with 77 additions and 42 deletions

View File

@ -983,7 +983,7 @@ class ProjectController extends AbstractController
$query->on('project_p_task_users.task_pid', '=', 'project_tasks.parent_id');
});
$builder->where(function ($query) use ($userid) {
$query->where("project_tasks.is_all_visible", 1);
$query->where("project_tasks.visibility", 1);
$query->orWhere("project_users.userid", $userid);
$query->orWhere("project_task_users.userid", $userid);
$query->orWhere("project_p_task_users.userid", $userid);
@ -1470,7 +1470,7 @@ class ProjectController extends AbstractController
$task = ProjectTask::userTask($task_id, $isArchived, true, false, ['taskUser', 'taskTag']);
// 项目可见性
$project_userid = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->value('userid'); // 项目负责人
if ($task->is_all_visible != 1 && $user->userid != $project_userid) {
if ($task->visibility != 1 && $user->userid != $project_userid) {
$visibleUserids = ProjectTaskUser::whereTaskId($task_id)->pluck('userid')->toArray(); // 是否任务负责人、协助人、可见人
$subVisibleUserids = ProjectTaskUser::whereTaskPid($task_id)->pluck('userid')->toArray(); // 是否子任务负责人、协助人
if (!in_array($user->userid, $visibleUserids) && !in_array($user->userid, $subVisibleUserids)) {
@ -1481,7 +1481,7 @@ class ProjectController extends AbstractController
$data = $task->toArray();
$data['project_name'] = $task->project?->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->visibility == 1 ? [0] : ProjectTaskUser::whereTaskId($task_id)->whereOwner(2)->pluck('userid');
return Base::retSuccess('success', $data);
}
@ -1732,7 +1732,7 @@ class ProjectController extends AbstractController
}
if ($data['is_all_visible'] == 1) {
if ($data['visibility'] == 1) {
$data['is_visible'] = 1;
} else {
$projectOwner = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->pluck('userid')->toArray(); // 项目负责人
@ -1780,7 +1780,7 @@ class ProjectController extends AbstractController
'column_id' => $task->column_id,
'times' => [$task->start_at, $task->end_at],
'owner' => [User::userid()],
'is_all_visible' => $task->is_all_visible,
'visibility' => $task->visibility,
]);
$data = ProjectTask::oneTask($task->id);
$pushUserIds = ProjectTaskUser::whereTaskId($task->id)->pluck('userid')->toArray();
@ -1838,13 +1838,13 @@ class ProjectController extends AbstractController
//
$data = ProjectTask::oneTask($task->id)->toArray();
$data['update_marking'] = $updateMarking ?: json_decode('{}');
$data['visibility_appointor'] = $data['is_all_visible'] == 1 ? [] : ProjectTaskUser::whereTaskId($task->id)->whereOwner(2)->pluck('userid');
$data['visibility_appointor'] = $data['visibility'] == 1 ? [] : ProjectTaskUser::whereTaskId($task->id)->whereOwner(2)->pluck('userid');
$task->pushMsg('update', $data);
// 可见性推送
if ($task->parent_id == 0) {
$subUserids = ProjectTaskUser::whereTaskPid($data['id'])->pluck('userid')->toArray();
if (Arr::exists($param, 'is_all_visible') || Arr::exists($param, 'visibility_appointor')) {
if ($data['is_all_visible'] == 1) {
if (Arr::exists($param, 'visibility') || Arr::exists($param, 'visibility_appointor')) {
if ($data['visibility'] == 1) {
$task->pushMsgVisibleAdd($data);
}
if ($param['visibility_appointor']) {
@ -1854,17 +1854,17 @@ class ProjectController extends AbstractController
$addUserIds = array_diff($newVisibleUserIds, $oldVisibleUserIds);
$task->pushMsgVisibleUpdate($data, $deleteUserIds, $addUserIds);
}
if ($data['is_all_visible'] != 1 && empty($param['visibility_appointor'])) {
if ($data['visibility'] != 1 && empty($param['visibility_appointor'])) {
$task->pushMsgVisibleRemove();
}
}
if (Arr::exists($param, 'owner') && $data['is_all_visible'] != 1) {
if (Arr::exists($param, 'owner') && $data['visibility'] != 1) {
$diff = array_diff($owners, $subUserids);
if ($diff) {
$task->pushMsgVisibleRemove($diff);
}
}
if (Arr::exists($param, 'assist') && $data['is_all_visible'] != 1) {
if (Arr::exists($param, 'assist') && $data['visibility'] != 1) {
$diff = array_diff($assists, $subUserids);
if ($diff) {
$task->pushMsgVisibleRemove($diff);
@ -1878,7 +1878,7 @@ class ProjectController extends AbstractController
}
$parentTask = ProjectTask::whereId($task->parent_id)->first();
$subUserids = ProjectTaskUser::whereTaskPid($task->parent_id)->pluck('userid')->toArray();
if ($parentTask && $parentTask->is_all_visible != 1 && empty($subUserids)) {
if ($parentTask && $parentTask->visibility != 1 && empty($subUserids)) {
$diff = array_diff($owners, $param['owner'] ?: [], $subUserids);
if ($diff) {
$parentTask->pushMsgVisibleRemove($diff);

View File

@ -81,11 +81,13 @@ class Deleted extends AbstractModel
{
$array = is_array($userid) ? $userid : [$userid];
foreach ($array as $value) {
self::updateInsert([
'type' => $type,
'did' => $id,
'userid' => $value,
]);
if (!self::where('type', $type)->where('did', $id)->where('userid', $value)->exists()) {
self::updateInsert([
'type' => $type,
'did' => $id,
'userid' => $value,
]);
}
}
}
}

View File

@ -371,7 +371,7 @@ class ProjectTask extends AbstractModel
$p_color = $data['p_color'];
$top = intval($data['top']);
$userid = User::userid();
$is_all_visible = isset($data['visibility_appoint']) ? $data['visibility_appoint'] : $data['is_all_visible'];
$visibility = isset($data['visibility_appoint']) ? $data['visibility_appoint'] : $data['visibility'];
$visibility_userids = $data['visibility_appointor'] ?: [];
//
if (ProjectTask::whereProjectId($project_id)
@ -401,7 +401,7 @@ class ProjectTask extends AbstractModel
'p_level' => $p_level,
'p_name' => $p_name,
'p_color' => $p_color,
'is_all_visible' => $is_all_visible ?: 1
'visibility' => $visibility ?: 1
]);
if ($content) {
$task->desc = Base::getHtml($content, 100);
@ -722,10 +722,10 @@ class ProjectTask extends AbstractModel
$this->syncDialogUser();
}
// 可见性
if (Arr::exists($data, 'is_all_visible') || Arr::exists($data, 'visibility_appointor')) {
if (Arr::exists($data, 'is_all_visible')) {
ProjectTask::whereId($data['task_id'])->update(['is_all_visible' => $data["is_all_visible"]]);
ProjectTask::whereParentId($data['task_id'])->update(['is_all_visible' => $data["is_all_visible"]]);
if (Arr::exists($data, 'visibility') || Arr::exists($data, 'visibility_appointor')) {
if (Arr::exists($data, 'visibility')) {
ProjectTask::whereId($data['task_id'])->update(['visibility' => $data["visibility"]]);
ProjectTask::whereParentId($data['task_id'])->update(['visibility' => $data["visibility"]]);
}
ProjectTaskUser::whereTaskId($data['task_id'])->whereOwner(2)->delete();
if (Arr::exists($data, 'visibility_appointor')) {
@ -1453,7 +1453,7 @@ class ProjectTask extends AbstractModel
];
}
// 项目成员(其他人)
if ($data['is_all_visible'] == 1) {
if ($data['visibility'] == 1) {
// 全部可见
$userids = array_diff($userids, $owners, $assists);
} else {
@ -1511,7 +1511,7 @@ class ProjectTask extends AbstractModel
$array = [];
if ($pushUserIds) {
$userids = $pushUserIds;
} elseif ($this->is_all_visible != 1) {
} elseif ($this->visibility != 1) {
$userids = ProjectTaskUser::select(['userid', 'owner'])->whereTaskId($this->id)->orWhere('task_pid', '=', $this->id)->pluck('userid')->toArray();
} else {
$userids = ProjectUser::whereProjectId($this->project_id)->pluck('userid')->toArray(); // 项目成员

View File

@ -30,7 +30,7 @@ class AddProjectTasksIsAllVisible extends Migration
{
//
Schema::table('project_tasks', function (Blueprint $table) {
$table->dropColumn("avatar");
$table->dropColumn("is_all_visible");
});
}
}

View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class RenameProjectTasksIsAllVisible extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('project_tasks', function (Blueprint $table) {
if (Schema::hasColumn('project_tasks', 'is_all_visible')) {
$pre = DB::connection()->getTablePrefix();
DB::statement("ALTER TABLE `{$pre}project_tasks` MODIFY COLUMN is_all_visible TINYINT(1) DEFAULT 1 COMMENT '任务可见性1-项目人员 2-任务人员 3-指定成员'");
$table->renameColumn('is_all_visible', 'visibility');
}
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@ -177,7 +177,7 @@ services:
okr:
container_name: "dootask-okr-${APP_ID}"
image: "kuaifan/doookr:0.0.19"
image: "kuaifan/doookr:0.0.21"
environment:
TZ: "${TIMEZONE:-PRC}"
DOO_TASK_URL: "http://${APP_IPPR}.3"

View File

@ -197,7 +197,7 @@
:add-icon="false"
:before-submit="onAssist"/>
</FormItem>
<FormItem v-if="taskDetail.is_all_visible > 1 || visibleForce || visibleKeep">
<FormItem v-if="taskDetail.visibility > 1 || visibleForce || visibleKeep">
<div class="item-label" slot="label">
<i class="taskfont">&#xe77b;</i>
<EDropdown ref="eDropdownRef" trigger="click" placement="bottom" @command="dropVisible">
@ -207,21 +207,21 @@
<EDropdownMenu slot="dropdown">
<EDropdownItem :command="1">
<div class="task-menu-icon" >
<Icon v-if="taskDetail.is_all_visible == 1" class="completed" :type="'md-checkmark-circle'"/>
<Icon v-if="taskDetail.visibility == 1" class="completed" :type="'md-checkmark-circle'"/>
<Icon v-else class="uncomplete" :type="'md-radio-button-off'"/>
{{$L('项目人员')}}
</div>
</EDropdownItem>
<EDropdownItem :command="2">
<div class="task-menu-icon" >
<Icon v-if="taskDetail.is_all_visible == 2" class="completed" :type="'md-checkmark-circle'"/>
<Icon v-if="taskDetail.visibility == 2" class="completed" :type="'md-checkmark-circle'"/>
<Icon v-else class="uncomplete" :type="'md-radio-button-off'"/>
{{$L('任务人员')}}
</div>
</EDropdownItem>
<EDropdownItem :command="3">
<div class="task-menu-icon" >
<Icon v-if="taskDetail.is_all_visible == 3" class="completed" :type="'md-checkmark-circle'"/>
<Icon v-if="taskDetail.visibility == 3" class="completed" :type="'md-checkmark-circle'"/>
<Icon v-else class="uncomplete" :type="'md-radio-button-off'"/>
{{$L('指定成员')}}
</div>
@ -230,8 +230,8 @@
</EDropdown>
</div>
<div class="item-content user">
<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-if="taskDetail.visibility == 1" class="visibility-text">{{$L('项目人员可见')}}</span>
<span @click="showCisibleDropdown" v-else-if="taskDetail.visibility == 2" class="visibility-text">{{$L('任务人员可见')}}</span>
<UserSelect
v-else
ref="visibleUserSelectRef"
@ -745,7 +745,7 @@ export default {
name: '协助人员',
});
}
if (taskDetail.is_all_visible <= 1 && !this.visibleKeep) {
if (taskDetail.visibility <= 1 && !this.visibleKeep) {
list.push({
command: 'visible',
icon: '&#xe77b;',
@ -857,7 +857,7 @@ export default {
"taskDetail.visibility_appointor": {
handler(arr) {
if(arr?.length > 0 && arr[0]) {
this.taskDetail.is_all_visible = 3
this.taskDetail.visibility = 3
this.updateVisible()
}
},
@ -1582,9 +1582,9 @@ export default {
visibleUserSelectShowChange(isShow){
if(!isShow && (this.taskDetail.visibility_appointor.length == 0 || !this.taskDetail.visibility_appointor[0])){
let old = this.taskDetail.old_is_all_visible;
this.taskDetail.is_all_visible = old > 2 ? 1 : (old || 1);
if(this.taskDetail.is_all_visible < 3 ){
let old = this.taskDetail.old_visibility;
this.taskDetail.visibility = old > 2 ? 1 : (old || 1);
if(this.taskDetail.visibility < 3 ){
this.updateVisible();
}
}
@ -1594,12 +1594,12 @@ export default {
switch (command) {
case 1:
case 2:
this.taskDetail.is_all_visible = command
this.taskDetail.visibility = command
this.updateVisible();
break;
case 3:
this.taskDetail.old_is_all_visible = this.taskDetail.is_all_visible
this.taskDetail.is_all_visible = command
this.taskDetail.old_visibility = this.taskDetail.visibility
this.taskDetail.visibility = command
this.$nextTick(() => {
this.$refs.visibleUserSelectRef.onSelection()
});
@ -1608,7 +1608,7 @@ export default {
},
updateVisible() {
this.updateData(['is_all_visible', 'visibility_appointor'])
this.updateData(['visibility', 'visibility_appointor'])
}
}
}