mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 11:19:56 +00:00
fix: 更新可见性后仍存在对话会话列表
This commit is contained in:
parent
e24b6806da
commit
dcffeded9a
@ -1553,12 +1553,12 @@ class ProjectController extends AbstractController
|
|||||||
// 项目可见性
|
// 项目可见性
|
||||||
$project_userid = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->value('userid'); // 项目负责人
|
$project_userid = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->value('userid'); // 项目负责人
|
||||||
if ($task->visibility != 1 && $user->userid != $project_userid) {
|
if ($task->visibility != 1 && $user->userid != $project_userid) {
|
||||||
$taskUserids = ProjectTaskUser::whereTaskId($task_id)->pluck('userid')->toArray(); //任务负责人、协助人
|
$taskUserids = ProjectTaskUser::whereTaskId($task_id)->pluck('userid')->toArray(); //任务负责人、协助人
|
||||||
$subTaskUserids = ProjectTaskUser::whereTaskPid($task_id)->pluck('userid')->toArray(); //子任务负责人、协助人
|
$subTaskUserids = ProjectTaskUser::whereTaskPid($task_id)->pluck('userid')->toArray(); //子任务负责人、协助人
|
||||||
$visibleUserids = ProjectTaskVisibilityUser::whereTaskId($task_id)->pluck('userid')->toArray(); //可见人
|
$visibleUserids = ProjectTaskVisibilityUser::whereTaskId($task_id)->pluck('userid')->toArray(); //可见人
|
||||||
$visibleUserids = array_merge($taskUserids, $subTaskUserids, $visibleUserids);
|
$visibleUserids = array_merge($taskUserids, $subTaskUserids, $visibleUserids);
|
||||||
if (!in_array($user->userid, $visibleUserids)) {
|
if (!in_array($user->userid, $visibleUserids)) {
|
||||||
return Base::retError('无任务权限');
|
return Base::retError('无任务权限', ['task_id' => $task_id, 'force' => 1], -4002);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@ -1940,6 +1940,7 @@ class ProjectController extends AbstractController
|
|||||||
* @apiParam {String} [content] 任务详情(子任务不支持)
|
* @apiParam {String} [content] 任务详情(子任务不支持)
|
||||||
* @apiParam {String} [color] 背景色(子任务不支持)
|
* @apiParam {String} [color] 背景色(子任务不支持)
|
||||||
* @apiParam {Array} [assist] 修改协助人员(子任务不支持)
|
* @apiParam {Array} [assist] 修改协助人员(子任务不支持)
|
||||||
|
* @apiParam {Number} [visibility] 修改可见性
|
||||||
* @apiParam {Array} [visibility_appointor] 修改可见性人员
|
* @apiParam {Array} [visibility_appointor] 修改可见性人员
|
||||||
*
|
*
|
||||||
* @apiParam {Number} [p_level] 优先级相关(子任务不支持)
|
* @apiParam {Number} [p_level] 优先级相关(子任务不支持)
|
||||||
|
|||||||
@ -9,6 +9,7 @@ use Carbon\Carbon;
|
|||||||
use App\Module\Base;
|
use App\Module\Base;
|
||||||
use App\Tasks\PushTask;
|
use App\Tasks\PushTask;
|
||||||
use App\Exceptions\ApiException;
|
use App\Exceptions\ApiException;
|
||||||
|
use App\Observers\ProjectTaskObserver;
|
||||||
use Hhxsv5\LaravelS\Swoole\Task\Task;
|
use Hhxsv5\LaravelS\Swoole\Task\Task;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
@ -744,8 +745,8 @@ class ProjectTask extends AbstractModel
|
|||||||
// 可见性
|
// 可见性
|
||||||
if (Arr::exists($data, 'visibility') || Arr::exists($data, 'visibility_appointor')) {
|
if (Arr::exists($data, 'visibility') || Arr::exists($data, 'visibility_appointor')) {
|
||||||
if (Arr::exists($data, 'visibility')) {
|
if (Arr::exists($data, 'visibility')) {
|
||||||
ProjectTask::whereId($data['task_id'])->update(['visibility' => $data["visibility"]]);
|
$this->visibility = $data["visibility"];
|
||||||
ProjectTask::whereParentId($data['task_id'])->update(['visibility' => $data["visibility"]]);
|
ProjectTask::whereParentId($data['task_id'])->change(['visibility' => $data["visibility"]]);
|
||||||
}
|
}
|
||||||
ProjectTaskVisibilityUser::whereTaskId($data['task_id'])->delete();
|
ProjectTaskVisibilityUser::whereTaskId($data['task_id'])->delete();
|
||||||
if (Arr::exists($data, 'visibility_appointor')) {
|
if (Arr::exists($data, 'visibility_appointor')) {
|
||||||
@ -758,6 +759,9 @@ class ProjectTask extends AbstractModel
|
|||||||
])->save();
|
])->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!Arr::exists($data, 'visibility')) {
|
||||||
|
ProjectTaskObserver::visibilityUpdate($this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 计划时间(原则:子任务时间在主任务时间内)
|
// 计划时间(原则:子任务时间在主任务时间内)
|
||||||
|
|||||||
@ -4,6 +4,8 @@ namespace App\Observers;
|
|||||||
|
|
||||||
use App\Models\Deleted;
|
use App\Models\Deleted;
|
||||||
use App\Models\ProjectTask;
|
use App\Models\ProjectTask;
|
||||||
|
use App\Models\ProjectTaskUser;
|
||||||
|
use App\Models\ProjectTaskVisibilityUser;
|
||||||
use App\Models\ProjectUser;
|
use App\Models\ProjectUser;
|
||||||
|
|
||||||
class ProjectTaskObserver
|
class ProjectTaskObserver
|
||||||
@ -27,11 +29,14 @@ class ProjectTaskObserver
|
|||||||
*/
|
*/
|
||||||
public function updated(ProjectTask $projectTask)
|
public function updated(ProjectTask $projectTask)
|
||||||
{
|
{
|
||||||
|
if ($projectTask->isDirty('visibility')) {
|
||||||
|
self::visibilityUpdate($projectTask);
|
||||||
|
}
|
||||||
if ($projectTask->isDirty('archived_at')) {
|
if ($projectTask->isDirty('archived_at')) {
|
||||||
if ($projectTask->archived_at) {
|
if ($projectTask->archived_at) {
|
||||||
Deleted::record('projectTask', $projectTask->id, $this->userids($projectTask));
|
Deleted::record('projectTask', $projectTask->id, self::userids($projectTask));
|
||||||
} else {
|
} else {
|
||||||
Deleted::forget('projectTask', $projectTask->id, $this->userids($projectTask));
|
Deleted::forget('projectTask', $projectTask->id, self::userids($projectTask));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,7 +49,7 @@ class ProjectTaskObserver
|
|||||||
*/
|
*/
|
||||||
public function deleted(ProjectTask $projectTask)
|
public function deleted(ProjectTask $projectTask)
|
||||||
{
|
{
|
||||||
Deleted::record('projectTask', $projectTask->id, $this->userids($projectTask));
|
Deleted::record('projectTask', $projectTask->id, self::userids($projectTask));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,7 +60,7 @@ class ProjectTaskObserver
|
|||||||
*/
|
*/
|
||||||
public function restored(ProjectTask $projectTask)
|
public function restored(ProjectTask $projectTask)
|
||||||
{
|
{
|
||||||
Deleted::forget('projectTask', $projectTask->id, $this->userids($projectTask));
|
Deleted::forget('projectTask', $projectTask->id, self::userids($projectTask));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,10 +76,46 @@ class ProjectTaskObserver
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ProjectTask $projectTask
|
* @param ProjectTask $projectTask
|
||||||
|
* @param string[]|string $dataType
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function userids(ProjectTask $projectTask)
|
public static function userids(ProjectTask $projectTask, array|string $dataType = 'project')
|
||||||
{
|
{
|
||||||
return ProjectUser::whereProjectId($projectTask->project_id)->pluck('userid')->toArray();
|
if (!is_array($dataType)) {
|
||||||
|
$dataType = [$dataType];
|
||||||
|
}
|
||||||
|
if (in_array('project', $dataType)) {
|
||||||
|
return ProjectUser::whereProjectId($projectTask->project_id)->pluck('userid')->toArray();
|
||||||
|
}
|
||||||
|
$array = [];
|
||||||
|
if (in_array('task', $dataType)) {
|
||||||
|
$array = array_merge($array, ProjectTaskUser::whereTaskId($projectTask->id)->pluck('userid')->toArray());
|
||||||
|
}
|
||||||
|
if (in_array('visibility', $dataType)) {
|
||||||
|
$array = array_merge($array, ProjectTaskVisibilityUser::whereTaskId($projectTask->id)->pluck('userid')->toArray());
|
||||||
|
}
|
||||||
|
return array_values(array_filter(array_unique($array)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 可见性更新
|
||||||
|
* @param ProjectTask $projectTask
|
||||||
|
*/
|
||||||
|
public static function visibilityUpdate(ProjectTask $projectTask)
|
||||||
|
{
|
||||||
|
$projectUserids = self::userids($projectTask);
|
||||||
|
switch ($projectTask->visibility) {
|
||||||
|
case 1:
|
||||||
|
Deleted::forget('projectTask', $projectTask->id, $projectUserids);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
$dataType = $projectTask->visibility == 2 ? ['task'] : ['task', 'visibility'];
|
||||||
|
$forgetUserids = self::userids($projectTask, $dataType);
|
||||||
|
$recordUserids = array_diff($projectUserids, $forgetUserids);
|
||||||
|
Deleted::record('projectTask', $projectTask->id, $recordUserids);
|
||||||
|
Deleted::forget('projectTask', $projectTask->id, $forgetUserids);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
3
resources/assets/js/store/actions.js
vendored
3
resources/assets/js/store/actions.js
vendored
@ -208,6 +208,9 @@ export default {
|
|||||||
if (ret === -4001) {
|
if (ret === -4001) {
|
||||||
dispatch("forgetProject", data.project_id)
|
dispatch("forgetProject", data.project_id)
|
||||||
} else if (ret === -4002) {
|
} else if (ret === -4002) {
|
||||||
|
if (data.force === 1) {
|
||||||
|
state.taskArchiveView = 0
|
||||||
|
}
|
||||||
dispatch("forgetTask", data.task_id)
|
dispatch("forgetTask", data.task_id)
|
||||||
} else if (ret === -4003) {
|
} else if (ret === -4003) {
|
||||||
dispatch("forgetDialog", data.dialog_id)
|
dispatch("forgetDialog", data.dialog_id)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user