no message

This commit is contained in:
kuaifan 2022-01-04 23:42:29 +08:00
parent 186290e355
commit cc1c425ecf
8 changed files with 89 additions and 88 deletions

View File

@ -50,7 +50,7 @@ class ProjectController extends AbstractController
* @apiSuccess {Number} ret 返回状态码1正确、0错误 * @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据 * @apiSuccess {Object} data 返回数据
* @apiSuccessExample {json} dataDemo: * @apiSuccessExample {json} sampleData:
{ {
"data": [ "data": [
{ {
@ -64,7 +64,13 @@ class ProjectController extends AbstractController
"created_at": "2022-01-02 06:23:15", "created_at": "2022-01-02 06:23:15",
"updated_at": "2022-01-02 07:12:33", "updated_at": "2022-01-02 07:12:33",
"owner": 1, // 是否项目负责人 "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, // 当前页数 "current_page": 1, // 当前页数
@ -107,8 +113,8 @@ class ProjectController extends AbstractController
} }
// //
$list = $builder->orderByDesc('projects.id')->paginate(Base::getPaginate(100, 50)); $list = $builder->orderByDesc('projects.id')->paginate(Base::getPaginate(100, 50));
$list->transform(function (Project $project) { $list->transform(function (Project $project) use ($user) {
return array_merge($project->toArray(), $project->getTaskStatistics()); return array_merge($project->toArray(), $project->getTaskStatistics($user->userid));
}); });
// //
$data = $list->toArray(); $data = $list->toArray();
@ -134,7 +140,7 @@ class ProjectController extends AbstractController
* @apiSuccess {Number} ret 返回状态码1正确、0错误 * @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据 * @apiSuccess {Object} data 返回数据
* @apiSuccessExample {json} dataDemo: * @apiSuccessExample {json} sampleData:
{ {
"id": 7, "id": 7,
"name": "🏢 产品官网项目", "name": "🏢 产品官网项目",
@ -146,17 +152,23 @@ class ProjectController extends AbstractController
"created_at": "2022-01-02 06:23:15", "created_at": "2022-01-02 06:23:15",
"updated_at": "2022-01-02 07:12:33", "updated_at": "2022-01-02 07:12:33",
"owner": 1, // 是否项目负责人 "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() public function one()
{ {
User::auth(); $user = User::auth();
// //
$project_id = intval(Request::input('project_id')); $project_id = intval(Request::input('project_id'));
// //
$project = Project::userProject($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); return Base::retSuccess('success', $data);
} }

View File

@ -38,8 +38,7 @@ use Request;
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectUser[] $projectUser * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectUser[] $projectUser
* @property-read int|null $project_user_count * @property-read int|null $project_user_count
* @method static \Illuminate\Database\Eloquent\Builder|Project allData($userid = null) * @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 authData($userid = null, $owner = null)
* @method static \Illuminate\Database\Eloquent\Builder|Project ownerData($userid = null)
* @method static \Illuminate\Database\Eloquent\Builder|Project newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Project newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Project newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Project newQuery()
* @method static \Illuminate\Database\Query\Builder|Project onlyTrashed() * @method static \Illuminate\Database\Query\Builder|Project onlyTrashed()
@ -130,12 +129,13 @@ class Project extends AbstractModel
} }
/** /**
* 查询自己参与的项目 * 查询自己参与或负责的项目
* @param self $query * @param self $query
* @param null $userid * @param null $userid
* @param null $owner
* @return self * @return self
*/ */
public function scopeAuthData($query, $userid = null) public function scopeAuthData($query, $userid = null, $owner = null)
{ {
$userid = $userid ?: User::userid(); $userid = $userid ?: User::userid();
$query $query
@ -145,41 +145,30 @@ class Project extends AbstractModel
]) ])
->join('project_users', 'projects.id', '=', 'project_users.project_id') ->join('project_users', 'projects.id', '=', 'project_users.project_id')
->where('project_users.userid', $userid); ->where('project_users.userid', $userid);
return $query; if ($owner !== null) {
} $query->where('project_users.owner', $owner);
}
/**
* 查询自己负责的项目
* @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);
return $query; return $query;
} }
/** /**
* 获取任务统计 * 获取任务统计
* @param $userid
* @return array * @return array
*/ */
public function getTaskStatistics() public function getTaskStatistics($userid)
{ {
$array = []; $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_num'] = $builder->count();
$array['task_complete'] = $builder->whereNotNull('complete_at')->count(); $array['task_complete'] = $builder->whereNotNull('complete_at')->count();
$array['task_percent'] = $array['task_num'] ? intval($array['task_complete'] / $array['task_num'] * 100) : 0; $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; return $array;
} }

View File

@ -55,8 +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 allData($userid = null) * @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 authData($userid = null, $owner = null)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask ownerData($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()
@ -264,65 +263,40 @@ class ProjectTask extends AbstractModel
*/ */
public function scopeAllData($query, $userid = null) public function scopeAllData($query, $userid = null)
{ {
DB::statement("SET SQL_MODE=''");
$pre = DB::connection()->getTablePrefix();
$userid = $userid ?: User::userid(); $userid = $userid ?: User::userid();
$query $query
->select([ ->select([
'project_tasks.*', '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('project_task_users', function ($leftJoin) use ($userid) {
$leftJoin $leftJoin
->on('project_task_users.userid', '=', DB::raw($userid)) ->on('project_task_users.userid', '=', DB::raw($userid))
->on('project_tasks.id', '=', 'project_task_users.task_id'); ->on('project_tasks.id', '=', 'project_task_users.task_id');
}) });
->groupBy('project_tasks.id');
return $query; return $query;
} }
/** /**
* 查询自己参与的任务 * 查询自己参与或负责的任务
* @param self $query * @param self $query
* @param null $userid * @param null $userid
* @param null $owner
* @return self * @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(); $userid = $userid ?: User::userid();
$query $query
->select([ ->select([
'project_tasks.*', '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') ->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_id')
->where('project_task_users.userid', $userid) ->where('project_task_users.userid', $userid);
->groupBy('project_tasks.id'); if ($owner !== null) {
return $query; $query->where('project_task_users.owner', $owner);
} }
/**
* 查询自己负责的任务
* @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');
return $query; return $query;
} }

View File

@ -40,7 +40,7 @@
<li @click="toggleRoute('dashboard')" :class="classNameRoute('dashboard')"> <li @click="toggleRoute('dashboard')" :class="classNameRoute('dashboard')">
<i class="taskfont">&#xe6fb;</i> <i class="taskfont">&#xe6fb;</i>
<div class="menu-title">{{$L('仪表盘')}}</div> <div class="menu-title">{{$L('仪表盘')}}</div>
<Badge class="menu-badge" :type="dashboardData.overdue.length > 0 ? 'error' : 'primary'" :count="dashboardTotal"></Badge> <Badge class="menu-badge" :type="dashboardTask.overdue.length > 0 ? 'error' : 'primary'" :count="dashboardTotal"></Badge>
</li> </li>
<li @click="toggleRoute('calendar')" :class="classNameRoute('calendar')"> <li @click="toggleRoute('calendar')" :class="classNameRoute('calendar')">
<i class="taskfont">&#xe6f5;</i> <i class="taskfont">&#xe6f5;</i>
@ -294,7 +294,7 @@ export default {
'dialogMsgPush', 'dialogMsgPush',
]), ]),
...mapGetters(['taskData', 'dashboardData']), ...mapGetters(['taskData', 'dashboardTask']),
msgAllUnread() { msgAllUnread() {
let num = 0; let num = 0;
@ -307,7 +307,7 @@ export default {
}, },
dashboardTotal() { dashboardTotal() {
return this.dashboardData.today.length + this.dashboardData.overdue.length return this.dashboardTask.today.length + this.dashboardTask.overdue.length
}, },
currentLanguage() { currentLanguage() {

View File

@ -76,10 +76,10 @@ export default {
computed: { computed: {
...mapState(['userId', 'projects', 'tasks']), ...mapState(['userId', 'projects', 'tasks']),
...mapGetters(['ownerTask']), ...mapGetters(['myTask']),
list() { list() {
const datas = $A.cloneJSON(this.ownerTask.filter(({end_at}) => { const datas = $A.cloneJSON(this.myTask.filter(({end_at}) => {
return end_at; return end_at;
})); }));
return datas.map(data => { return datas.map(data => {

View File

@ -532,7 +532,7 @@ export default {
...mapGetters(['projectData', 'tablePanel']), ...mapGetters(['projectData', 'tablePanel']),
...mapGetters(['ownerTask']), ...mapGetters(['myTask']),
userWaitRemove() { userWaitRemove() {
const {userids, useridbak} = this.userData; const {userids, useridbak} = this.userData;
@ -572,8 +572,8 @@ export default {
}, },
myList() { myList() {
const {projectId, ownerTask, searchText, completeTask, sortField, sortType} = this; const {projectId, myTask, searchText, completeTask, sortField, sortType} = this;
const array = ownerTask.filter((task) => { const array = myTask.filter((task) => {
if (task.project_id != projectId) { if (task.project_id != projectId) {
return false; return false;
} }

View File

@ -8,14 +8,14 @@
<li @click="dashboard='today'"> <li @click="dashboard='today'">
<div class="block-title">{{$L('今日待完成')}}</div> <div class="block-title">{{$L('今日待完成')}}</div>
<div class="block-data"> <div class="block-data">
<div class="block-num">{{dashboardData.today.length}}</div> <div class="block-num">{{dashboardTask.today.length}}</div>
<i class="taskfont">&#xe6f4;</i> <i class="taskfont">&#xe6f4;</i>
</div> </div>
</li> </li>
<li @click="dashboard='overdue'"> <li @click="dashboard='overdue'">
<div class="block-title">{{$L('超期未完成')}}</div> <div class="block-title">{{$L('超期未完成')}}</div>
<div class="block-data"> <div class="block-data">
<div class="block-num">{{dashboardData.overdue.length}}</div> <div class="block-num">{{dashboardTask.overdue.length}}</div>
<i class="taskfont">&#xe603;</i> <i class="taskfont">&#xe603;</i>
</div> </div>
</li> </li>
@ -137,7 +137,7 @@ export default {
computed: { computed: {
...mapState(['userInfo', 'projects', 'tasks', 'taskId']), ...mapState(['userInfo', 'projects', 'tasks', 'taskId']),
...mapGetters(['dashboardData']), ...mapGetters(['dashboardTask']),
title() { title() {
const {dashboard} = this; const {dashboard} = this;
@ -156,10 +156,10 @@ export default {
let data = []; let data = [];
switch (dashboard) { switch (dashboard) {
case 'today': case 'today':
data = $A.cloneJSON(this.dashboardData.today); data = $A.cloneJSON(this.dashboardTask.today);
break break
case 'overdue': case 'overdue':
data = $A.cloneJSON(this.dashboardData.overdue); data = $A.cloneJSON(this.dashboardTask.overdue);
break break
} }
if (completeTask.length > 0) { if (completeTask.length > 0) {

View File

@ -1,4 +1,9 @@
export default { export default {
/**
* 当前打开的项目
* @param state
* @returns {unknown[]|{project_user: *[], columns: *[]}}
*/
projectData(state) { projectData(state) {
let projectId = state.projectId; let projectId = state.projectId;
if (projectId == 0) { if (projectId == 0) {
@ -35,6 +40,11 @@ export default {
}; };
}, },
/**
* 当前打开的任务
* @param state
* @returns {{}|{readonly id?: *}}
*/
taskData(state) { taskData(state) {
let taskId = state.taskId; let taskId = state.taskId;
if (taskId == 0) { if (taskId == 0) {
@ -50,6 +60,11 @@ export default {
return {}; return {};
}, },
/**
* 项目面板设置
* @param state
* @returns {(function(*): (boolean|*))|*}
*/
tablePanel(state) { tablePanel(state) {
return function (key) { return function (key) {
if (!state.projectId) { if (!state.projectId) {
@ -74,7 +89,12 @@ export default {
} }
}, },
ownerTask(state) { /**
* 我所有的任务未完成
* @param state
* @returns {unknown[]}
*/
myTask(state) {
return state.tasks.filter(({complete_at, parent_id, end_at, owner}) => { return state.tasks.filter(({complete_at, parent_id, end_at, owner}) => {
if (parent_id > 0) { if (parent_id > 0) {
const index = state.tasks.findIndex(data => { const index = state.tasks.findIndex(data => {
@ -113,11 +133,17 @@ export default {
}) })
}, },
dashboardData(state, getters) { /**
* 仪表盘任务数据
* @param state
* @param getters
* @returns {{overdue: *, today: *}}
*/
dashboardTask(state, getters) {
const todayStart = $A.Date($A.formatDate("Y-m-d 00:00:00")), const todayStart = $A.Date($A.formatDate("Y-m-d 00:00:00")),
todayEnd = $A.Date($A.formatDate("Y-m-d 23:59:59")), todayEnd = $A.Date($A.formatDate("Y-m-d 23:59:59")),
todayNow = $A.Date($A.formatDate("Y-m-d H:i:s")); todayNow = $A.Date($A.formatDate("Y-m-d H:i:s"));
const todayTasks = getters.ownerTask.filter(task => { const todayTasks = getters.myTask.filter(task => {
if (!task.end_at) { if (!task.end_at) {
return false; return false;
} }
@ -125,7 +151,7 @@ export default {
end = $A.Date(task.end_at); end = $A.Date(task.end_at);
return (start <= todayStart && todayStart <= end) || (start <= todayEnd && todayEnd <= end) || (start > todayStart && todayEnd > end); return (start <= todayStart && todayStart <= end) || (start <= todayEnd && todayEnd <= end) || (start > todayStart && todayEnd > end);
}) })
const overdueTasks = getters.ownerTask.filter(task => { const overdueTasks = getters.myTask.filter(task => {
if (!task.end_at) { if (!task.end_at) {
return false; return false;
} }