no message

This commit is contained in:
kuaifan 2021-06-21 15:11:29 +08:00
parent 33fcb52a40
commit be1dea7452
5 changed files with 40 additions and 21 deletions

View File

@ -39,6 +39,7 @@ class ProjectController extends AbstractController
Carbon::today()->endOfDay() Carbon::today()->endOfDay()
]; ];
$data['today'] = ProjectTask::authData() $data['today'] = ProjectTask::authData()
->whereNull('project_tasks.archived_at')
->whereNull('project_tasks.complete_at') ->whereNull('project_tasks.complete_at')
->where('project_tasks.parent_id', 0) ->where('project_tasks.parent_id', 0)
->where(function ($query) use ($between) { ->where(function ($query) use ($between) {
@ -48,6 +49,7 @@ class ProjectController extends AbstractController
// 超期未完成 // 超期未完成
$data['overdue'] = ProjectTask::authData() $data['overdue'] = ProjectTask::authData()
->whereNull('project_tasks.archived_at')
->whereNull('project_tasks.complete_at') ->whereNull('project_tasks.complete_at')
->where('project_tasks.parent_id', 0) ->where('project_tasks.parent_id', 0)
->whereNotNull('project_tasks.end_at') ->whereNotNull('project_tasks.end_at')
@ -505,10 +507,10 @@ class ProjectController extends AbstractController
* 任务列表 * 任务列表
* *
* @apiParam {Number} [project_id] 项目ID * @apiParam {Number} [project_id] 项目ID
* @apiParam {Number} [parent_id] 主任务ID填写project_id 无效) * @apiParam {Number} [parent_id] 主任务ID填写此项时 project_id 参数无效)
* @apiParam {String} [name] 任务描述关键词 * @apiParam {String} [name] 任务描述关键词
* @apiParam {Array} [time] 时间范围,如:['2020-12-12', '2020-12-30'] * @apiParam {Array} [time] 指定时间范围未完成,如:['2020-12-12', '2020-12-30']
* @apiParam {String} [time_before] 指定时间之前2020-12-30 00:00:00(填写此项时time参数无效 * @apiParam {String} [time_before] 指定时间之前未完成2020-12-30 00:00:00(填写此项时 time 参数无效)
*/ */
public function task__lists() public function task__lists()
{ {
@ -524,10 +526,10 @@ class ProjectController extends AbstractController
// //
if ($parent_id > 0) { if ($parent_id > 0) {
ProjectTask::userTask($parent_id); ProjectTask::userTask($parent_id);
$builder->where('parent_id', $parent_id); $builder->where('project_tasks.parent_id', $parent_id);
} elseif ($project_id > 0) { } elseif ($project_id > 0) {
Project::userProject($project_id); Project::userProject($project_id);
$builder->where('project_id', $project_id); $builder->where('project_tasks.project_id', $project_id);
} else { } else {
$builder->authData(); $builder->authData();
} }
@ -539,14 +541,19 @@ class ProjectController extends AbstractController
} }
// //
if (Base::isDateOrTime($time_before)) { if (Base::isDateOrTime($time_before)) {
$builder->whereNotNull('project_tasks.end_at')->where('project_tasks.end_at', '<', Carbon::parse($time_before)); $builder
->whereNull('project_tasks.complete_at')
->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])) {
$between = [ $between = [
Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[0])->startOfDay(),
Carbon::parse($time[1])->endOfDay() Carbon::parse($time[1])->endOfDay()
]; ];
$builder->where(function ($query) use ($between) { $builder
->whereNull('project_tasks.complete_at')
->where(function ($query) use ($between) {
$query->whereBetween('project_tasks.start_at', $between)->orWhereBetween('project_tasks.end_at', $between); $query->whereBetween('project_tasks.start_at', $between)->orWhereBetween('project_tasks.end_at', $between);
}); });
} }

View File

@ -84,6 +84,11 @@ class ProjectTask extends AbstractModel
{ {
use SoftDeletes; use SoftDeletes;
const taskSelect = [
'project_tasks.*',
'project_task_users.owner',
];
protected $appends = [ protected $appends = [
'file_num', 'file_num',
'msg_num', 'msg_num',
@ -253,7 +258,7 @@ class ProjectTask extends AbstractModel
{ {
$pre = DB::getTablePrefix(); $pre = DB::getTablePrefix();
$user = $user ?: User::auth(); $user = $user ?: User::auth();
$query->select("project_tasks.*") $query->select(self::taskSelect)
->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_pid') ->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_pid')
->whereExists(function ($der) use ($pre) { ->whereExists(function ($der) use ($pre) {
$der->select(DB::raw(1)) $der->select(DB::raw(1))
@ -387,6 +392,7 @@ class ProjectTask extends AbstractModel
$row = ProjectTaskUser::createInstance([ $row = ProjectTaskUser::createInstance([
'project_id' => $this->project_id, 'project_id' => $this->project_id,
'task_id' => $this->id, 'task_id' => $this->id,
'task_pid' => $this->parent_id ?: $this->id,
'userid' => $owner, 'userid' => $owner,
'owner' => 1, 'owner' => 1,
]); ]);

View File

@ -87,10 +87,10 @@ export default {
if (data.complete_at) { if (data.complete_at) {
return false; return false;
} }
if (!data.start_at || !data.end_at) { if (!data.end_at) {
return false; return false;
} }
return data.task_user.find(({userid}) => userid == this.userId); return data.owner;
}) })
return datas.map(data => { return datas.map(data => {
let task = { let task = {

View File

@ -72,8 +72,7 @@
</EDropdown> </EDropdown>
<div class="item-title" @click="$store.dispatch('openTask', item.id)">{{item.name}}</div> <div class="item-title" @click="$store.dispatch('openTask', item.id)">{{item.name}}</div>
<div :class="['item-time', item.today ? 'today' : '', item.overdue ? 'overdue' : '']"> <div :class="['item-time', item.today ? 'today' : '', item.overdue ? 'overdue' : '']">
<Icon type="ios-time-outline"/> <Icon type="ios-time-outline"/>{{expiresFormat(item.end_at)}}
{{expiresFormat(item.end_at)}}
</div> </div>
</li> </li>
</ul> </ul>
@ -135,10 +134,11 @@ export default {
}, },
list() { list() {
const {tasks, dashboard} = this; const {dashboard} = this;
const todayStart = new Date($A.formatDate("Y-m-d 00:00:00")), const todayStart = new Date($A.formatDate("Y-m-d 00:00:00")),
todayEnd = new Date($A.formatDate("Y-m-d 23:59:59")); todayEnd = new Date($A.formatDate("Y-m-d 23:59:59"));
return tasks.filter((data) => { let datas = $A.cloneJSON(this.tasks);
datas = datas.filter((data) => {
if (data.parent_id > 0) { if (data.parent_id > 0) {
return false; return false;
} }
@ -148,6 +148,9 @@ export default {
if (!data.end_at) { if (!data.end_at) {
return false; return false;
} }
if (!data.owner) {
return false;
}
const start = new Date(data.start_at), const start = new Date(data.start_at),
end = new Date(data.end_at); end = new Date(data.end_at);
data._start_time = start; data._start_time = start;
@ -156,11 +159,12 @@ export default {
case 'today': case 'today':
return (start >= todayStart && start <= todayEnd) || (end >= todayStart && end <= todayEnd); return (start >= todayStart && start <= todayEnd) || (end >= todayStart && end <= todayEnd);
case 'overdue': case 'overdue':
return end < todayStart; return end <= todayStart;
default: default:
return false; return false;
} }
}).sort((a, b) => { })
return datas.sort((a, b) => {
if (a._end_time != b._end_time) { if (a._end_time != b._end_time) {
return a._end_time - b._end_time; return a._end_time - b._end_time;
} }

View File

@ -471,7 +471,8 @@ export default {
project_id project_id
} }
}).then(result => { }).then(result => {
state.columns = state.columns.filter((item) => item.project_id != project_id); const ids = result.data.data.map(({id}) => id)
state.columns = state.columns.filter((item) => item.project_id != project_id || ids.includes(item.id));
dispatch("saveColumn", result.data.data); dispatch("saveColumn", result.data.data);
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); !e.ret && console.error(e);
@ -575,11 +576,12 @@ export default {
url: 'project/task/lists', url: 'project/task/lists',
data: data data: data
}).then(result => { }).then(result => {
const ids = result.data.data.map(({id}) => id)
if (data.project_id) { if (data.project_id) {
state.tasks = state.tasks.filter((item) => item.project_id != data.project_id); state.tasks = state.tasks.filter((item) => item.project_id != data.project_id || ids.includes(item.id));
} }
if (data.parent_id) { if (data.parent_id) {
state.tasks = state.tasks.filter((item) => item.parent_id != data.parent_id); state.tasks = state.tasks.filter((item) => item.parent_id != data.parent_id || ids.includes(item.id));
} }
dispatch("saveTask", result.data.data); dispatch("saveTask", result.data.data);
}).catch(e => { }).catch(e => {