diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 2b7e9168..27386789 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -50,7 +50,7 @@ class ProjectController extends AbstractController * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 - * @apiSuccessExample {json} dataDemo: + * @apiSuccessExample {json} sampleData: { "data": [ { @@ -64,7 +64,13 @@ class ProjectController extends AbstractController "created_at": "2022-01-02 06:23:15", "updated_at": "2022-01-02 07:12:33", "owner": 1, // 是否项目负责人 - "owner_userid": 1 // 项目负责人ID + "owner_userid": 1, // 项目负责人ID + "task_num": 9, + "task_complete": 0, + "task_percent": 0, + "task_my_num": 8, + "task_my_complete": 0, + "task_my_percent": 0 }, ], "current_page": 1, // 当前页数 @@ -107,8 +113,8 @@ class ProjectController extends AbstractController } // $list = $builder->orderByDesc('projects.id')->paginate(Base::getPaginate(100, 50)); - $list->transform(function (Project $project) { - return array_merge($project->toArray(), $project->getTaskStatistics()); + $list->transform(function (Project $project) use ($user) { + return array_merge($project->toArray(), $project->getTaskStatistics($user->userid)); }); // $data = $list->toArray(); @@ -134,7 +140,7 @@ class ProjectController extends AbstractController * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 - * @apiSuccessExample {json} dataDemo: + * @apiSuccessExample {json} sampleData: { "id": 7, "name": "🏢 产品官网项目", @@ -146,17 +152,23 @@ class ProjectController extends AbstractController "created_at": "2022-01-02 06:23:15", "updated_at": "2022-01-02 07:12:33", "owner": 1, // 是否项目负责人 - "owner_userid": 1 // 项目负责人ID + "owner_userid": 1, // 项目负责人ID + "task_num": 9, + "task_complete": 0, + "task_percent": 0, + "task_my_num": 8, + "task_my_complete": 0, + "task_my_percent": 0 } */ public function one() { - User::auth(); + $user = User::auth(); // $project_id = intval(Request::input('project_id')); // $project = Project::userProject($project_id); - $data = array_merge($project->toArray(), $project->getTaskStatistics()); + $data = array_merge($project->toArray(), $project->getTaskStatistics($user->userid)); // return Base::retSuccess('success', $data); } diff --git a/app/Models/Project.php b/app/Models/Project.php index 098556ac..36c178cd 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -38,8 +38,7 @@ use Request; * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectUser[] $projectUser * @property-read int|null $project_user_count * @method static \Illuminate\Database\Eloquent\Builder|Project allData($userid = null) - * @method static \Illuminate\Database\Eloquent\Builder|Project authData($userid = null) - * @method static \Illuminate\Database\Eloquent\Builder|Project ownerData($userid = null) + * @method static \Illuminate\Database\Eloquent\Builder|Project authData($userid = null, $owner = null) * @method static \Illuminate\Database\Eloquent\Builder|Project newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Project newQuery() * @method static \Illuminate\Database\Query\Builder|Project onlyTrashed() @@ -130,12 +129,13 @@ class Project extends AbstractModel } /** - * 查询自己参与的项目 + * 查询自己参与或负责的项目 * @param self $query * @param null $userid + * @param null $owner * @return self */ - public function scopeAuthData($query, $userid = null) + public function scopeAuthData($query, $userid = null, $owner = null) { $userid = $userid ?: User::userid(); $query @@ -145,41 +145,30 @@ class Project extends AbstractModel ]) ->join('project_users', 'projects.id', '=', 'project_users.project_id') ->where('project_users.userid', $userid); - return $query; - } - - /** - * 查询自己负责的项目 - * @param self $query - * @param null $userid - * @return self - */ - public function scopeOwnerData($query, $userid = null) - { - $userid = $userid ?: User::userid(); - $query - ->select([ - 'projects.*', - 'project_users.owner', - ]) - ->join('project_users', 'projects.id', '=', 'project_users.project_id') - ->where('project_users.userid', $userid) - ->where('project_users.owner', 1); + if ($owner !== null) { + $query->where('project_users.owner', $owner); + } return $query; } /** * 获取任务统计 + * @param $userid * @return array */ - public function getTaskStatistics() + public function getTaskStatistics($userid) { $array = []; - $builder = ProjectTask::whereProjectId($this->id)->whereParentId(0)->whereNull('archived_at'); + $builder = ProjectTask::whereProjectId($this->id)->whereNull('archived_at'); $array['task_num'] = $builder->count(); $array['task_complete'] = $builder->whereNotNull('complete_at')->count(); $array['task_percent'] = $array['task_num'] ? intval($array['task_complete'] / $array['task_num'] * 100) : 0; // + $builder = ProjectTask::authData($userid, 1)->where('project_tasks.project_id', $this->id)->whereNull('project_tasks.archived_at'); + $array['task_my_num'] = $builder->count(); + $array['task_my_complete'] = $builder->whereNotNull('project_tasks.complete_at')->count(); + $array['task_my_percent'] = $array['task_my_num'] ? intval($array['task_my_complete'] / $array['task_my_num'] * 100) : 0; + // return $array; } diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index fe3426df..49cf59d1 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -55,8 +55,7 @@ use Request; * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTaskUser[] $taskUser * @property-read int|null $task_user_count * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask allData($userid = null) - * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null) - * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask ownerData($userid = null) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null, $owner = null) * @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 newQuery() @@ -264,65 +263,40 @@ class ProjectTask extends AbstractModel */ public function scopeAllData($query, $userid = null) { - DB::statement("SET SQL_MODE=''"); - $pre = DB::connection()->getTablePrefix(); $userid = $userid ?: User::userid(); $query ->select([ 'project_tasks.*', - DB::raw("MAX({$pre}project_task_users.owner) as owner") + 'project_task_users.owner' ]) ->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'); - }) - ->groupBy('project_tasks.id'); + }); return $query; } /** - * 查询自己参与的任务 + * 查询自己参与或负责的任务 * @param self $query * @param null $userid + * @param null $owner * @return self */ - public function scopeAuthData($query, $userid = null) + public function scopeAuthData($query, $userid = null, $owner = null) { - DB::statement("SET SQL_MODE=''"); - $pre = DB::connection()->getTablePrefix(); $userid = $userid ?: User::userid(); $query ->select([ 'project_tasks.*', - DB::raw("MAX({$pre}project_task_users.owner) as owner") + 'project_task_users.owner' ]) ->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_id') - ->where('project_task_users.userid', $userid) - ->groupBy('project_tasks.id'); - return $query; - } - - /** - * 查询自己负责的任务 - * @param self $query - * @param null $userid - * @return self - */ - public function scopeOwnerData($query, $userid = null) - { - DB::statement("SET SQL_MODE=''"); - $pre = DB::connection()->getTablePrefix(); - $userid = $userid ?: User::userid(); - $query - ->select([ - 'project_tasks.*', - DB::raw("MAX({$pre}project_task_users.owner) as owner") - ]) - ->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_id') - ->where('project_task_users.userid', $userid) - ->where('project_task_users.owner', 1) - ->groupBy('project_tasks.id'); + ->where('project_task_users.userid', $userid); + if ($owner !== null) { + $query->where('project_task_users.owner', $owner); + } return $query; } diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 4135b755..b066f285 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -40,7 +40,7 @@