no message

This commit is contained in:
kuaifan 2021-06-21 21:33:53 +08:00
parent be1dea7452
commit 77a905c109
6 changed files with 118 additions and 81 deletions

View File

@ -38,22 +38,20 @@ class ProjectController extends AbstractController
Carbon::today()->startOfDay(), Carbon::today()->startOfDay(),
Carbon::today()->endOfDay() Carbon::today()->endOfDay()
]; ];
$data['today'] = ProjectTask::authData() $data['today'] = ProjectTask::authData()->whereParentId(0)
->whereNull('project_tasks.archived_at') ->whereNull('archived_at')
->whereNull('project_tasks.complete_at') ->whereNull('complete_at')
->where('project_tasks.parent_id', 0)
->where(function ($query) use ($between) { ->where(function ($query) use ($between) {
$query->whereBetween('project_tasks.start_at', $between)->orWhereBetween('project_tasks.end_at', $between); $query->whereBetween('start_at', $between)->orWhereBetween('end_at', $between);
}) })
->count(); ->count();
// 超期未完成 // 超期未完成
$data['overdue'] = ProjectTask::authData() $data['overdue'] = ProjectTask::authData()->whereParentId(0)
->whereNull('project_tasks.archived_at') ->whereNull('archived_at')
->whereNull('project_tasks.complete_at') ->whereNull('complete_at')
->where('project_tasks.parent_id', 0) ->whereNotNull('end_at')
->whereNotNull('project_tasks.end_at') ->where('end_at', '<', Carbon::now())
->where('project_tasks.end_at', '<', Carbon::now())
->count(); ->count();
return Base::retSuccess('success', $data); return Base::retSuccess('success', $data);
@ -509,57 +507,63 @@ 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 参数无效)
* @apiParam {String} [complete] 完成状态
* - all所有默认
* - yes已完成
* - no未完成
*/ */
public function task__lists() public function task__lists()
{ {
User::auth(); User::auth();
// //
$builder = ProjectTask::with(['taskUser', 'taskTag'])->whereNull('project_tasks.archived_at'); $builder = ProjectTask::with(['taskUser', 'taskTag'])->whereNull('archived_at');
// //
$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'));
$name = Request::input('name'); $name = Request::input('name');
$time = Request::input('time'); $time = Request::input('time');
$time_before = Request::input('time_before'); $time_before = Request::input('time_before');
$complete = Request::input('complete');
// //
if ($parent_id > 0) { if ($parent_id > 0) {
ProjectTask::userTask($parent_id); ProjectTask::userTask($parent_id);
$builder->where('project_tasks.parent_id', $parent_id); $builder->whereParentId($parent_id);
} elseif ($project_id > 0) { } elseif ($project_id > 0) {
Project::userProject($project_id); Project::userProject($project_id);
$builder->where('project_tasks.project_id', $project_id); $builder->whereParentId(0)->whereProjectId($project_id);
} else { } else {
$builder->authData(); $builder->whereParentId(0)->authData();
} }
// //
if ($name) { if ($name) {
$builder->where(function($query) use ($name) { $builder->where(function($query) use ($name) {
$query->where('project_tasks.name', 'like', '%,' . $name . ',%'); $query->where('name', 'like', '%,' . $name . ',%');
}); });
} }
// //
if (Base::isDateOrTime($time_before)) { if (Base::isDateOrTime($time_before)) {
$builder $builder->whereNotNull('end_at')->where('end_at', '<', Carbon::parse($time_before));
->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 $builder->where(function ($query) use ($between) {
->whereNull('project_tasks.complete_at') $query->whereBetween('start_at', $between)->orWhereBetween('end_at', $between);
->where(function ($query) use ($between) { });
$query->whereBetween('project_tasks.start_at', $between)->orWhereBetween('project_tasks.end_at', $between);
});
} }
} }
// //
$list = $builder->orderByDesc('project_tasks.id')->paginate(Base::getPaginate(200, 100)); if ($complete === 'yes') {
$builder->whereNotNull('complete_at');
} elseif ($complete === 'no') {
$builder->whereNull('complete_at');
}
//
$list = $builder->orderByDesc('id')->paginate(Base::getPaginate(200, 100));
// //
return Base::retSuccess('success', $list); return Base::retSuccess('success', $list);
} }

View File

@ -7,7 +7,6 @@ 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 Hhxsv5\LaravelS\Swoole\Task\Task; use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Request; use Request;
@ -40,6 +39,7 @@ use Request;
* @property-read int $file_num * @property-read int $file_num
* @property-read int $msg_num * @property-read int $msg_num
* @property-read bool $overdue * @property-read bool $overdue
* @property-read bool $owner
* @property-read int $percent * @property-read int $percent
* @property-read int $sub_complete * @property-read int $sub_complete
* @property-read int $sub_num * @property-read int $sub_num
@ -84,12 +84,8 @@ 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',
@ -99,6 +95,22 @@ 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
@ -256,18 +268,10 @@ class ProjectTask extends AbstractModel
*/ */
public function scopeAuthData($query, $user = null) public function scopeAuthData($query, $user = null)
{ {
$pre = DB::getTablePrefix();
$user = $user ?: User::auth(); $user = $user ?: User::auth();
$query->select(self::taskSelect) $query->whereIn('id', function ($qy) use ($user) {
->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_pid') $qy->select('task_pid')->from('project_task_users')->where('userid', $user->userid);
->whereExists(function ($der) use ($pre) { });
$der->select(DB::raw(1))
->from('project_task_users as B')
->where('B.owner', 1)
->whereColumn('project_task_users.task_pid', '=', 'B.task_pid')
->havingRaw("max({$pre}B.id) = {$pre}project_task_users.id");
})
->where('project_task_users.userid', $user->userid);
return $query; return $query;
} }

View File

@ -252,6 +252,19 @@ class User extends AbstractModel
return ''; return '';
} }
/**
* 获取我的ID
* @return int
*/
public static function userid()
{
$user = self::authInfo();
if (!$user) {
return 0;
}
return $user->userid;
}
/** /**
* 用户身份认证(获取用户信息) * 用户身份认证(获取用户信息)
* @return self * @return self

View File

@ -191,7 +191,8 @@ export default {
} }
this.loadIng++; this.loadIng++;
this.$store.dispatch("getTasks", { this.$store.dispatch("getTasks", {
time time: time,
complete: "no"
}).then(() => { }).then(() => {
this.loadIng--; this.loadIng--;
}).catch(() => { }).catch(() => {

View File

@ -200,20 +200,16 @@ export default {
methods: { methods: {
getTask() { getTask() {
let data = {}; let data = {complete: "no"};
switch (this.dashboard) { switch (this.dashboard) {
case 'today': case 'today':
data = { data.time = [
time: [ $A.formatDate("Y-m-d 00:00:00"),
$A.formatDate("Y-m-d 00:00:00"), $A.formatDate("Y-m-d 23:59:59")
$A.formatDate("Y-m-d 23:59:59") ]
],
}
break; break;
case 'overdue': case 'overdue':
data = { data.time_before = $A.formatDate("Y-m-d 00:00:00")
time_before: $A.formatDate("Y-m-d 00:00:00")
}
break; break;
default: default:
return; return;
@ -267,6 +263,7 @@ export default {
task_id: task.id, task_id: task.id,
})).then(() => { })).then(() => {
this.$set(this.taskLoad, task.id, false); this.$set(this.taskLoad, task.id, false);
this.$store.dispatch("getProjectStatistics");
}).catch(({msg}) => { }).catch(({msg}) => {
$A.modalError(msg); $A.modalError(msg);
this.$set(this.taskLoad, task.id, false); this.$set(this.taskLoad, task.id, false);
@ -292,6 +289,7 @@ export default {
$A.messageSuccess(msg); $A.messageSuccess(msg);
this.$Modal.remove(); this.$Modal.remove();
this.$set(this.taskLoad, task.id, false); this.$set(this.taskLoad, task.id, false);
this.$store.dispatch("getProjectStatistics");
}).catch(({msg}) => { }).catch(({msg}) => {
$A.modalError(msg, 301); $A.modalError(msg, 301);
this.$Modal.remove(); this.$Modal.remove();

View File

@ -145,7 +145,7 @@ export default {
dispatch("saveUserInfo", result.data); dispatch("saveUserInfo", result.data);
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e) reject(e)
}); });
}); });
@ -243,7 +243,7 @@ export default {
typeof success === "function" && success(item, true) typeof success === "function" && success(item, true)
}); });
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
state.cacheUserBasic["::load"] = false; state.cacheUserBasic["::load"] = false;
typeof complete === "function" && complete() typeof complete === "function" && complete()
}); });
@ -327,7 +327,7 @@ export default {
state.projects = []; state.projects = [];
dispatch("saveProject", result.data.data); dispatch("saveProject", result.data.data);
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
}); });
}, },
@ -346,7 +346,7 @@ export default {
}).then(result => { }).then(result => {
dispatch("saveProject", result.data); dispatch("saveProject", result.data);
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
}); });
}, },
@ -366,7 +366,7 @@ export default {
dispatch("forgetProject", project_id) dispatch("forgetProject", project_id)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
dispatch("getProjectOne", project_id); dispatch("getProjectOne", project_id);
reject(e) reject(e)
}); });
@ -389,7 +389,7 @@ export default {
dispatch("forgetProject", project_id) dispatch("forgetProject", project_id)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
dispatch("getProjectOne", project_id); dispatch("getProjectOne", project_id);
reject(e) reject(e)
}); });
@ -475,7 +475,7 @@ export default {
state.columns = state.columns.filter((item) => item.project_id != project_id || ids.includes(item.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); console.error(e);
}); });
}, },
@ -495,7 +495,7 @@ export default {
dispatch("forgetColumn", column_id) dispatch("forgetColumn", column_id)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -562,7 +562,7 @@ export default {
* 获取任务 * 获取任务
* @param state * @param state
* @param dispatch * @param dispatch
* @param data {?project_id, ?parent_id} * @param data
*/ */
getTasks({state, dispatch}, data) { getTasks({state, dispatch}, data) {
if (state.userId === 0) { if (state.userId === 0) {
@ -576,16 +576,33 @@ 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) const resData = result.data;
const ids = resData.data.map(({id}) => id)
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) { if (data.parent_id) {
state.tasks = state.tasks.filter((item) => item.parent_id != data.parent_id || ids.includes(item.id)); state.tasks = state.tasks.filter((item) => item.parent_id != data.parent_id || ids.includes(item.id));
} }
dispatch("saveTask", result.data.data); dispatch("saveTask", resData.data);
//
if (resData.next_page_url) {
const nextData = Object.assign(data, {
page: resData.current_page + 1,
});
if (resData.current_page % 5 === 0) {
$A.modalWarning({
content: "数据已超过" + resData.to + "条,是否继续加载?",
onOk: () => {
dispatch("getTasks", nextData)
}
});
} else {
dispatch("getTasks", nextData)
}
}
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
}); });
}, },
@ -607,7 +624,7 @@ export default {
}).then(result => { }).then(result => {
dispatch("saveTask", result.data); dispatch("saveTask", result.data);
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
}); });
}, },
@ -628,7 +645,7 @@ export default {
dispatch("forgetTask", task_id) dispatch("forgetTask", task_id)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
dispatch("getTaskOne", task_id); dispatch("getTaskOne", task_id);
reject(e) reject(e)
}); });
@ -652,7 +669,7 @@ export default {
dispatch("forgetTask", task_id) dispatch("forgetTask", task_id)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
dispatch("getTaskOne", task_id); dispatch("getTaskOne", task_id);
reject(e) reject(e)
}); });
@ -682,7 +699,7 @@ export default {
} }
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -713,7 +730,7 @@ export default {
}) })
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -756,7 +773,7 @@ export default {
dispatch("addTaskSuccess", result.data) dispatch("addTaskSuccess", result.data)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -777,7 +794,7 @@ export default {
dispatch("addTaskSuccess", result.data) dispatch("addTaskSuccess", result.data)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -821,7 +838,7 @@ export default {
dispatch("saveTask", result.data) dispatch("saveTask", result.data)
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
dispatch("getTaskOne", post.task_id); dispatch("getTaskOne", post.task_id);
reject(e) reject(e)
}); });
@ -842,7 +859,7 @@ export default {
state.taskPriority = result.data; state.taskPriority = result.data;
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -895,7 +912,7 @@ export default {
} }
resolve(result); resolve(result);
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -941,7 +958,7 @@ export default {
dispatch("saveDialog", result.data); dispatch("saveDialog", result.data);
resolve(result); resolve(result);
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
reject(e); reject(e);
}); });
}); });
@ -1000,7 +1017,7 @@ export default {
// 更新当前会话消息 // 更新当前会话消息
commit("dialogMsgListSuccess", data); commit("dialogMsgListSuccess", data);
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
state.dialogMsgLoad--; state.dialogMsgLoad--;
state.cacheDialogMsg[dialog_id + "::load"] = false; state.cacheDialogMsg[dialog_id + "::load"] = false;
}); });
@ -1035,7 +1052,7 @@ export default {
commit("dialogMsgListSuccess", result.data); commit("dialogMsgListSuccess", result.data);
resolve(result) resolve(result)
}).catch(e => { }).catch(e => {
!e.ret && console.error(e); console.error(e);
state.dialogMsgLoad--; state.dialogMsgLoad--;
reject(e) reject(e)
}); });