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'); // 项目负责人
|
||||
if ($task->visibility != 1 && $user->userid != $project_userid) {
|
||||
$taskUserids = ProjectTaskUser::whereTaskId($task_id)->pluck('userid')->toArray(); //任务负责人、协助人
|
||||
$subTaskUserids = ProjectTaskUser::whereTaskPid($task_id)->pluck('userid')->toArray(); //子任务负责人、协助人
|
||||
$visibleUserids = ProjectTaskVisibilityUser::whereTaskId($task_id)->pluck('userid')->toArray(); //可见人
|
||||
$taskUserids = ProjectTaskUser::whereTaskId($task_id)->pluck('userid')->toArray(); //任务负责人、协助人
|
||||
$subTaskUserids = ProjectTaskUser::whereTaskPid($task_id)->pluck('userid')->toArray(); //子任务负责人、协助人
|
||||
$visibleUserids = ProjectTaskVisibilityUser::whereTaskId($task_id)->pluck('userid')->toArray(); //可见人
|
||||
$visibleUserids = array_merge($taskUserids, $subTaskUserids, $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} [color] 背景色(子任务不支持)
|
||||
* @apiParam {Array} [assist] 修改协助人员(子任务不支持)
|
||||
* @apiParam {Number} [visibility] 修改可见性
|
||||
* @apiParam {Array} [visibility_appointor] 修改可见性人员
|
||||
*
|
||||
* @apiParam {Number} [p_level] 优先级相关(子任务不支持)
|
||||
|
||||
@ -9,6 +9,7 @@ use Carbon\Carbon;
|
||||
use App\Module\Base;
|
||||
use App\Tasks\PushTask;
|
||||
use App\Exceptions\ApiException;
|
||||
use App\Observers\ProjectTaskObserver;
|
||||
use Hhxsv5\LaravelS\Swoole\Task\Task;
|
||||
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')) {
|
||||
ProjectTask::whereId($data['task_id'])->update(['visibility' => $data["visibility"]]);
|
||||
ProjectTask::whereParentId($data['task_id'])->update(['visibility' => $data["visibility"]]);
|
||||
$this->visibility = $data["visibility"];
|
||||
ProjectTask::whereParentId($data['task_id'])->change(['visibility' => $data["visibility"]]);
|
||||
}
|
||||
ProjectTaskVisibilityUser::whereTaskId($data['task_id'])->delete();
|
||||
if (Arr::exists($data, 'visibility_appointor')) {
|
||||
@ -758,6 +759,9 @@ class ProjectTask extends AbstractModel
|
||||
])->save();
|
||||
}
|
||||
}
|
||||
if (!Arr::exists($data, 'visibility')) {
|
||||
ProjectTaskObserver::visibilityUpdate($this);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 计划时间(原则:子任务时间在主任务时间内)
|
||||
|
||||
@ -4,6 +4,8 @@ namespace App\Observers;
|
||||
|
||||
use App\Models\Deleted;
|
||||
use App\Models\ProjectTask;
|
||||
use App\Models\ProjectTaskUser;
|
||||
use App\Models\ProjectTaskVisibilityUser;
|
||||
use App\Models\ProjectUser;
|
||||
|
||||
class ProjectTaskObserver
|
||||
@ -27,11 +29,14 @@ class ProjectTaskObserver
|
||||
*/
|
||||
public function updated(ProjectTask $projectTask)
|
||||
{
|
||||
if ($projectTask->isDirty('visibility')) {
|
||||
self::visibilityUpdate($projectTask);
|
||||
}
|
||||
if ($projectTask->isDirty('archived_at')) {
|
||||
if ($projectTask->archived_at) {
|
||||
Deleted::record('projectTask', $projectTask->id, $this->userids($projectTask));
|
||||
Deleted::record('projectTask', $projectTask->id, self::userids($projectTask));
|
||||
} 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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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 string[]|string $dataType
|
||||
* @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) {
|
||||
dispatch("forgetProject", data.project_id)
|
||||
} else if (ret === -4002) {
|
||||
if (data.force === 1) {
|
||||
state.taskArchiveView = 0
|
||||
}
|
||||
dispatch("forgetTask", data.task_id)
|
||||
} else if (ret === -4003) {
|
||||
dispatch("forgetDialog", data.dialog_id)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user