From 77a905c1099f31eafb57c279f6a17ba463484818 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Mon, 21 Jun 2021 21:33:53 +0800 Subject: [PATCH] no message --- .../Controllers/Api/ProjectController.php | 60 +++++++++-------- app/Models/ProjectTask.php | 38 ++++++----- app/Models/User.php | 13 ++++ resources/assets/js/pages/manage/calendar.vue | 3 +- .../assets/js/pages/manage/dashboard.vue | 18 +++-- resources/assets/js/store/actions.js | 67 ++++++++++++------- 6 files changed, 118 insertions(+), 81 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 041934ba..03d0da18 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -38,22 +38,20 @@ class ProjectController extends AbstractController Carbon::today()->startOfDay(), Carbon::today()->endOfDay() ]; - $data['today'] = ProjectTask::authData() - ->whereNull('project_tasks.archived_at') - ->whereNull('project_tasks.complete_at') - ->where('project_tasks.parent_id', 0) + $data['today'] = ProjectTask::authData()->whereParentId(0) + ->whereNull('archived_at') + ->whereNull('complete_at') ->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(); // 超期未完成 - $data['overdue'] = ProjectTask::authData() - ->whereNull('project_tasks.archived_at') - ->whereNull('project_tasks.complete_at') - ->where('project_tasks.parent_id', 0) - ->whereNotNull('project_tasks.end_at') - ->where('project_tasks.end_at', '<', Carbon::now()) + $data['overdue'] = ProjectTask::authData()->whereParentId(0) + ->whereNull('archived_at') + ->whereNull('complete_at') + ->whereNotNull('end_at') + ->where('end_at', '<', Carbon::now()) ->count(); return Base::retSuccess('success', $data); @@ -509,57 +507,63 @@ class ProjectController extends AbstractController * @apiParam {Number} [project_id] 项目ID * @apiParam {Number} [parent_id] 主任务ID(填写此项时 project_id 参数无效) * @apiParam {String} [name] 任务描述关键词 - * @apiParam {Array} [time] 指定时间范围未完成,如:['2020-12-12', '2020-12-30'] - * @apiParam {String} [time_before] 指定时间之前未完成,如:2020-12-30 00:00:00(填写此项时 time 参数无效) + * @apiParam {Array} [time] 指定时间范围,如:['2020-12-12', '2020-12-30'] + * @apiParam {String} [time_before] 指定时间之前,如:2020-12-30 00:00:00(填写此项时 time 参数无效) + * @apiParam {String} [complete] 完成状态 + * - all:所有(默认) + * - yes:已完成 + * - no:未完成 */ public function task__lists() { 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')); $project_id = intval(Request::input('project_id')); $name = Request::input('name'); $time = Request::input('time'); $time_before = Request::input('time_before'); + $complete = Request::input('complete'); // if ($parent_id > 0) { ProjectTask::userTask($parent_id); - $builder->where('project_tasks.parent_id', $parent_id); + $builder->whereParentId($parent_id); } elseif ($project_id > 0) { Project::userProject($project_id); - $builder->where('project_tasks.project_id', $project_id); + $builder->whereParentId(0)->whereProjectId($project_id); } else { - $builder->authData(); + $builder->whereParentId(0)->authData(); } // if ($name) { $builder->where(function($query) use ($name) { - $query->where('project_tasks.name', 'like', '%,' . $name . ',%'); + $query->where('name', 'like', '%,' . $name . ',%'); }); } // if (Base::isDateOrTime($time_before)) { - $builder - ->whereNull('project_tasks.complete_at') - ->whereNotNull('project_tasks.end_at') - ->where('project_tasks.end_at', '<', Carbon::parse($time_before)); + $builder->whereNotNull('end_at')->where('end_at', '<', Carbon::parse($time_before)); } elseif (is_array($time)) { if (Base::isDateOrTime($time[0]) && Base::isDateOrTime($time[1])) { $between = [ Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay() ]; - $builder - ->whereNull('project_tasks.complete_at') - ->where(function ($query) use ($between) { - $query->whereBetween('project_tasks.start_at', $between)->orWhereBetween('project_tasks.end_at', $between); - }); + $builder->where(function ($query) use ($between) { + $query->whereBetween('start_at', $between)->orWhereBetween('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); } diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 613dcc30..de208b9f 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -7,7 +7,6 @@ use App\Module\Base; use App\Tasks\PushTask; use Arr; use Carbon\Carbon; -use DB; use Hhxsv5\LaravelS\Swoole\Task\Task; use Illuminate\Database\Eloquent\SoftDeletes; use Request; @@ -40,6 +39,7 @@ use Request; * @property-read int $file_num * @property-read int $msg_num * @property-read bool $overdue + * @property-read bool $owner * @property-read int $percent * @property-read int $sub_complete * @property-read int $sub_num @@ -84,12 +84,8 @@ class ProjectTask extends AbstractModel { use SoftDeletes; - const taskSelect = [ - 'project_tasks.*', - 'project_task_users.owner', - ]; - protected $appends = [ + 'owner', 'file_num', 'msg_num', 'sub_num', @@ -99,6 +95,22 @@ class ProjectTask extends AbstractModel '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 @@ -256,18 +268,10 @@ class ProjectTask extends AbstractModel */ public function scopeAuthData($query, $user = null) { - $pre = DB::getTablePrefix(); $user = $user ?: User::auth(); - $query->select(self::taskSelect) - ->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_pid') - ->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); + $query->whereIn('id', function ($qy) use ($user) { + $qy->select('task_pid')->from('project_task_users')->where('userid', $user->userid); + }); return $query; } diff --git a/app/Models/User.php b/app/Models/User.php index 42b3335d..5721bf07 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -252,6 +252,19 @@ class User extends AbstractModel return ''; } + /** + * 获取我的ID + * @return int + */ + public static function userid() + { + $user = self::authInfo(); + if (!$user) { + return 0; + } + return $user->userid; + } + /** * 用户身份认证(获取用户信息) * @return self diff --git a/resources/assets/js/pages/manage/calendar.vue b/resources/assets/js/pages/manage/calendar.vue index 9cb2dcd8..760f168c 100644 --- a/resources/assets/js/pages/manage/calendar.vue +++ b/resources/assets/js/pages/manage/calendar.vue @@ -191,7 +191,8 @@ export default { } this.loadIng++; this.$store.dispatch("getTasks", { - time + time: time, + complete: "no" }).then(() => { this.loadIng--; }).catch(() => { diff --git a/resources/assets/js/pages/manage/dashboard.vue b/resources/assets/js/pages/manage/dashboard.vue index e6463ce2..9ec07157 100644 --- a/resources/assets/js/pages/manage/dashboard.vue +++ b/resources/assets/js/pages/manage/dashboard.vue @@ -200,20 +200,16 @@ export default { methods: { getTask() { - let data = {}; + let data = {complete: "no"}; switch (this.dashboard) { case 'today': - data = { - time: [ - $A.formatDate("Y-m-d 00:00:00"), - $A.formatDate("Y-m-d 23:59:59") - ], - } + data.time = [ + $A.formatDate("Y-m-d 00:00:00"), + $A.formatDate("Y-m-d 23:59:59") + ] break; case 'overdue': - data = { - time_before: $A.formatDate("Y-m-d 00:00:00") - } + data.time_before = $A.formatDate("Y-m-d 00:00:00") break; default: return; @@ -267,6 +263,7 @@ export default { task_id: task.id, })).then(() => { this.$set(this.taskLoad, task.id, false); + this.$store.dispatch("getProjectStatistics"); }).catch(({msg}) => { $A.modalError(msg); this.$set(this.taskLoad, task.id, false); @@ -292,6 +289,7 @@ export default { $A.messageSuccess(msg); this.$Modal.remove(); this.$set(this.taskLoad, task.id, false); + this.$store.dispatch("getProjectStatistics"); }).catch(({msg}) => { $A.modalError(msg, 301); this.$Modal.remove(); diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index c2875c1d..5a80198a 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -145,7 +145,7 @@ export default { dispatch("saveUserInfo", result.data); resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e) }); }); @@ -243,7 +243,7 @@ export default { typeof success === "function" && success(item, true) }); }).catch(e => { - !e.ret && console.error(e); + console.error(e); state.cacheUserBasic["::load"] = false; typeof complete === "function" && complete() }); @@ -327,7 +327,7 @@ export default { state.projects = []; dispatch("saveProject", result.data.data); }).catch(e => { - !e.ret && console.error(e); + console.error(e); }); }, @@ -346,7 +346,7 @@ export default { }).then(result => { dispatch("saveProject", result.data); }).catch(e => { - !e.ret && console.error(e); + console.error(e); }); }, @@ -366,7 +366,7 @@ export default { dispatch("forgetProject", project_id) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); dispatch("getProjectOne", project_id); reject(e) }); @@ -389,7 +389,7 @@ export default { dispatch("forgetProject", project_id) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); dispatch("getProjectOne", project_id); reject(e) }); @@ -475,7 +475,7 @@ export default { state.columns = state.columns.filter((item) => item.project_id != project_id || ids.includes(item.id)); dispatch("saveColumn", result.data.data); }).catch(e => { - !e.ret && console.error(e); + console.error(e); }); }, @@ -495,7 +495,7 @@ export default { dispatch("forgetColumn", column_id) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -562,7 +562,7 @@ export default { * 获取任务 * @param state * @param dispatch - * @param data {?project_id, ?parent_id} + * @param data */ getTasks({state, dispatch}, data) { if (state.userId === 0) { @@ -576,16 +576,33 @@ export default { url: 'project/task/lists', data: data }).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) { state.tasks = state.tasks.filter((item) => item.project_id != data.project_id || ids.includes(item.id)); } if (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", 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 => { - !e.ret && console.error(e); + console.error(e); }); }, @@ -607,7 +624,7 @@ export default { }).then(result => { dispatch("saveTask", result.data); }).catch(e => { - !e.ret && console.error(e); + console.error(e); }); }, @@ -628,7 +645,7 @@ export default { dispatch("forgetTask", task_id) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); dispatch("getTaskOne", task_id); reject(e) }); @@ -652,7 +669,7 @@ export default { dispatch("forgetTask", task_id) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); dispatch("getTaskOne", task_id); reject(e) }); @@ -682,7 +699,7 @@ export default { } resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -713,7 +730,7 @@ export default { }) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -756,7 +773,7 @@ export default { dispatch("addTaskSuccess", result.data) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -777,7 +794,7 @@ export default { dispatch("addTaskSuccess", result.data) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -821,7 +838,7 @@ export default { dispatch("saveTask", result.data) resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); dispatch("getTaskOne", post.task_id); reject(e) }); @@ -842,7 +859,7 @@ export default { state.taskPriority = result.data; resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -895,7 +912,7 @@ export default { } resolve(result); }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -941,7 +958,7 @@ export default { dispatch("saveDialog", result.data); resolve(result); }).catch(e => { - !e.ret && console.error(e); + console.error(e); reject(e); }); }); @@ -1000,7 +1017,7 @@ export default { // 更新当前会话消息 commit("dialogMsgListSuccess", data); }).catch(e => { - !e.ret && console.error(e); + console.error(e); state.dialogMsgLoad--; state.cacheDialogMsg[dialog_id + "::load"] = false; }); @@ -1035,7 +1052,7 @@ export default { commit("dialogMsgListSuccess", result.data); resolve(result) }).catch(e => { - !e.ret && console.error(e); + console.error(e); state.dialogMsgLoad--; reject(e) });