去除taskSubs

This commit is contained in:
kuaifan 2021-12-31 07:48:55 +08:00
parent 0b4e96a90f
commit befd5c3b08
6 changed files with 62 additions and 72 deletions

View File

@ -660,7 +660,7 @@ class ProjectController extends AbstractController
{ {
User::auth(); User::auth();
// //
$builder = ProjectTask::with(['taskUser', 'taskTag']); $builder = ProjectTask::select(ProjectTask::taskSelect)->with(['taskUser', 'taskTag']);
// //
$parent_id = intval(Request::input('parent_id')); $parent_id = intval(Request::input('parent_id'));
$project_id = intval(Request::input('project_id')); $project_id = intval(Request::input('project_id'));
@ -672,22 +672,22 @@ class ProjectController extends AbstractController
// //
if ($parent_id > 0) { if ($parent_id > 0) {
ProjectTask::userTask($parent_id); ProjectTask::userTask($parent_id);
$builder->whereParentId($parent_id); $builder->leftData()->where('project_tasks.parent_id', $parent_id);
} elseif ($project_id > 0) { } elseif ($project_id > 0) {
Project::userProject($project_id); Project::userProject($project_id);
$builder->whereParentId(0)->whereProjectId($project_id); $builder->leftData()->where('project_tasks.project_id', $project_id);
} else { } else {
$builder->whereParentId(0)->authData(); $builder->authData();
} }
// //
if ($name) { if ($name) {
$builder->where(function($query) use ($name) { $builder->where(function($query) use ($name) {
$query->where("name", "like", "%{$name}%"); $query->where("project_tasks.name", "like", "%{$name}%");
}); });
} }
// //
if (Base::isDateOrTime($time_before)) { if (Base::isDateOrTime($time_before)) {
$builder->whereNotNull('end_at')->where('end_at', '<', Carbon::parse($time_before)); $builder->whereNotNull('project_tasks.end_at')->where('project_tasks.end_at', '<', Carbon::parse($time_before));
} elseif (is_array($time)) { } elseif (is_array($time)) {
if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) { if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) {
$builder->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay()); $builder->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay());
@ -695,18 +695,18 @@ class ProjectController extends AbstractController
} }
// //
if ($complete === 'yes') { if ($complete === 'yes') {
$builder->whereNotNull('complete_at'); $builder->whereNotNull('project_tasks.complete_at');
} elseif ($complete === 'no') { } elseif ($complete === 'no') {
$builder->whereNull('complete_at'); $builder->whereNull('project_tasks.complete_at');
} }
// //
if ($archived == 'yes') { if ($archived == 'yes') {
$builder->whereNotNull('archived_at'); $builder->whereNotNull('project_tasks.archived_at');
} elseif ($archived == 'no') { } elseif ($archived == 'no') {
$builder->whereNull('archived_at'); $builder->whereNull('project_tasks.archived_at');
} }
// //
$list = $builder->orderByDesc('id')->paginate(Base::getPaginate(200, 100)); $list = $builder->orderByDesc('project_tasks.id')->paginate(Base::getPaginate(200, 100));
// //
return Base::retSuccess('success', $list); return Base::retSuccess('success', $list);
} }

View File

@ -7,6 +7,7 @@ use App\Module\Base;
use App\Tasks\PushTask; use App\Tasks\PushTask;
use Arr; use Arr;
use Carbon\Carbon; use Carbon\Carbon;
use DB;
use Exception; use Exception;
use Hhxsv5\LaravelS\Swoole\Task\Task; use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
@ -54,6 +55,7 @@ use Request;
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTaskUser[] $taskUser * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTaskUser[] $taskUser
* @property-read int|null $task_user_count * @property-read int|null $task_user_count
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null, $owner = false) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null, $owner = false)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask leftData($userid = null)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask betweenTime($start, $end) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask betweenTime($start, $end)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery()
@ -89,8 +91,12 @@ class ProjectTask extends AbstractModel
{ {
use SoftDeletes; use SoftDeletes;
const taskSelect = [
'project_tasks.*',
'project_task_users.owner',
];
protected $appends = [ protected $appends = [
'owner',
'file_num', 'file_num',
'msg_num', 'msg_num',
'sub_num', 'sub_num',
@ -100,22 +106,6 @@ class ProjectTask extends AbstractModel
'overdue', 'overdue',
]; ];
/**
* 是否我是负责人
* @return bool
*/
public function getOwnerAttribute()
{
if (!isset($this->appendattrs['owner'])) {
if ($this->parent_id > 0) {
$this->appendattrs['owner'] = ProjectTaskUser::whereTaskId($this->id)->whereUserid(User::userid())->whereOwner(1)->exists();
} else {
$this->appendattrs['owner'] = ProjectTaskUser::whereTaskPid($this->id)->whereUserid(User::userid())->whereOwner(1)->exists();
}
}
return $this->appendattrs['owner'];
}
/** /**
* 附件数量 * 附件数量
* @return int * @return int
@ -275,11 +265,27 @@ class ProjectTask extends AbstractModel
public function scopeAuthData($query, $userid = null, $owner = false) public function scopeAuthData($query, $userid = null, $owner = false)
{ {
$userid = $userid ?: User::userid(); $userid = $userid ?: User::userid();
$query->whereIn('id', function ($qy) use ($owner, $userid) { $query->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_id')
$qy->select('task_pid')->from('project_task_users')->where('userid', $userid); ->where('project_task_users.userid', $userid);
if ($owner) { if ($owner) {
$qy->where('owner', 1); $query->where('project_task_users.owner', 1);
} }
return $query;
}
/**
* 查询自己的任务
* @param self $query
* @param null $userid
* @return self
*/
public function scopeLeftData($query, $userid = null)
{
$userid = $userid ?: User::userid();
$query->leftJoin('project_task_users', function ($leftJoin) use ($userid) {
$leftJoin
->on('project_task_users.userid', '=', DB::raw($userid))
->on('project_tasks.id', '=', 'project_task_users.task_id');
}); });
return $query; return $query;
} }
@ -295,11 +301,11 @@ class ProjectTask extends AbstractModel
{ {
$query->where(function ($q1) use ($start, $end) { $query->where(function ($q1) use ($start, $end) {
$q1->where(function ($q2) use ($start) { $q1->where(function ($q2) use ($start) {
$q2->where('start_at', '<=', $start)->where('end_at', '>=', $start); $q2->where('project_tasks.start_at', '<=', $start)->where('project_tasks.end_at', '>=', $start);
})->orWhere(function ($q2) use ($end) { })->orWhere(function ($q2) use ($end) {
$q2->where('start_at', '<=', $end)->where('end_at', '>=', $end); $q2->where('project_tasks.start_at', '<=', $end)->where('project_tasks.end_at', '>=', $end);
})->orWhere(function ($q2) use ($start, $end) { })->orWhere(function ($q2) use ($start, $end) {
$q2->where('start_at', '>', $start)->where('end_at', '<', $end); $q2->where('project_tasks.start_at', '>', $start)->where('project_tasks.end_at', '<', $end);
}); });
}); });
return $query; return $query;

View File

@ -518,7 +518,7 @@ export default {
'userId', 'userId',
'projects', 'projects',
'columns', 'columns',
'taskSubs', 'tasks',
'taskContents', 'taskContents',
'taskFiles', 'taskFiles',
'taskPriority', 'taskPriority',
@ -569,8 +569,8 @@ export default {
if (!this.taskId) { if (!this.taskId) {
return []; return [];
} }
return this.taskSubs.filter(({parent_id}) => { return this.tasks.filter(({parent_id}) => {
return parent_id == this.taskId return parent_id > 0 && parent_id == this.taskId
}).sort((a, b) => { }).sort((a, b) => {
return a.id - b.id; return a.id - b.id;
}); });

View File

@ -184,12 +184,12 @@ export default {
}, },
computed: { computed: {
...mapState(['taskSubs', 'taskPriority', 'columns']), ...mapState(['tasks', 'taskPriority', 'columns']),
subTask() { subTask() {
return function(task_id) { return function(task_id) {
return this.taskSubs.filter(({parent_id}) => { return this.tasks.filter(({parent_id}) => {
return parent_id == task_id return parent_id > 0 && parent_id == task_id
}).sort((a, b) => { }).sort((a, b) => {
return a.id - b.id; return a.id - b.id;
}); });

View File

@ -393,7 +393,7 @@ export default {
state.cacheDialogs = state.dialogs = []; state.cacheDialogs = state.dialogs = [];
state.cacheProjects = state.projects = []; state.cacheProjects = state.projects = [];
state.cacheColumns = state.columns = []; state.cacheColumns = state.columns = [];
state.cacheTasks = state.tasks = state.taskSubs = []; state.cacheTasks = state.tasks = [];
// //
state.method.setStorage("cacheTablePanel", state.cacheTablePanel); state.method.setStorage("cacheTablePanel", state.cacheTablePanel);
state.method.setStorage("cacheServerUrl", state.cacheServerUrl); state.method.setStorage("cacheServerUrl", state.cacheServerUrl);
@ -852,12 +852,11 @@ export default {
dispatch("saveTask", task) dispatch("saveTask", task)
}); });
} else if (state.method.isJson(data)) { } else if (state.method.isJson(data)) {
let key = data.parent_id > 0 ? 'taskSubs' : 'tasks'; let index = state.tasks.findIndex(({id}) => id == data.id);
let index = state[key].findIndex(({id}) => id == data.id);
if (index > -1) { if (index > -1) {
state[key].splice(index, 1, Object.assign(state[key][index], data)); state.tasks.splice(index, 1, Object.assign(state.tasks[index], data));
} else { } else {
state[key].push(data); state.tasks.push(data);
} }
// //
if (index > -1 && data.parent_id) { if (index > -1 && data.parent_id) {
@ -870,12 +869,10 @@ export default {
dispatch("getTaskContent", data.id); dispatch("getTaskContent", data.id);
} }
// //
if (key == 'tasks') {
setTimeout(() => { setTimeout(() => {
state.method.setStorage("cacheTasks", state.cacheTasks = state[key]); state.method.setStorage("cacheTasks", state.cacheTasks = state.tasks);
}) })
} }
}
}, },
/** /**
@ -888,28 +885,19 @@ export default {
$A.execMainDispatch("forgetTask", task_id) $A.execMainDispatch("forgetTask", task_id)
// //
let index = state.tasks.findIndex(({id}) => id == task_id); let index = state.tasks.findIndex(({id}) => id == task_id);
let key = 'tasks';
if (index === -1) {
index = state.taskSubs.findIndex(({id}) => id == task_id);
key = 'taskSubs';
}
if (index > -1) { if (index > -1) {
if (state[key][index].parent_id) { if (state.tasks[index].parent_id) {
dispatch("getTaskOne", state[key][index].parent_id) dispatch("getTaskOne", state.tasks[index].parent_id)
} }
if (key == 'tasks') { dispatch('getProjectOne', state.tasks[index].project_id)
dispatch('getProjectOne', state[key][index].project_id) state.tasks.splice(index, 1);
}
state[key].splice(index, 1);
} }
if (state.taskId == task_id) { if (state.taskId == task_id) {
state.taskId = 0; state.taskId = 0;
} }
if (key == 'tasks') {
setTimeout(() => { setTimeout(() => {
state.method.setStorage("cacheTasks", state.cacheTasks = state[key]); state.method.setStorage("cacheTasks", state.cacheTasks = state.tasks);
}) })
}
}, },
/** /**
@ -954,9 +942,6 @@ export default {
if (data.project_id) { if (data.project_id) {
state.tasks = state.tasks.filter((item) => item.project_id != data.project_id || ids.includes(item.id)); state.tasks = state.tasks.filter((item) => item.project_id != data.project_id || ids.includes(item.id));
} }
if (data.parent_id) {
state.taskSubs = state.taskSubs.filter((item) => item.parent_id != data.parent_id || ids.includes(item.id));
}
} }
dispatch("saveTask", resData.data); dispatch("saveTask", resData.data);
// //

View File

@ -312,7 +312,6 @@ state.projectLoad = 0;
state.columns = []; state.columns = [];
state.taskId = 0; state.taskId = 0;
state.tasks = []; state.tasks = [];
state.taskSubs = [];
state.taskContents = []; state.taskContents = [];
state.taskFiles = []; state.taskFiles = [];
state.taskLogs = []; state.taskLogs = [];