no message
This commit is contained in:
parent
186290e355
commit
cc1c425ecf
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
<li @click="toggleRoute('dashboard')" :class="classNameRoute('dashboard')">
|
||||
<i class="taskfont"></i>
|
||||
<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 @click="toggleRoute('calendar')" :class="classNameRoute('calendar')">
|
||||
<i class="taskfont"></i>
|
||||
@ -294,7 +294,7 @@ export default {
|
||||
'dialogMsgPush',
|
||||
]),
|
||||
|
||||
...mapGetters(['taskData', 'dashboardData']),
|
||||
...mapGetters(['taskData', 'dashboardTask']),
|
||||
|
||||
msgAllUnread() {
|
||||
let num = 0;
|
||||
@ -307,7 +307,7 @@ export default {
|
||||
},
|
||||
|
||||
dashboardTotal() {
|
||||
return this.dashboardData.today.length + this.dashboardData.overdue.length
|
||||
return this.dashboardTask.today.length + this.dashboardTask.overdue.length
|
||||
},
|
||||
|
||||
currentLanguage() {
|
||||
|
@ -76,10 +76,10 @@ export default {
|
||||
computed: {
|
||||
...mapState(['userId', 'projects', 'tasks']),
|
||||
|
||||
...mapGetters(['ownerTask']),
|
||||
...mapGetters(['myTask']),
|
||||
|
||||
list() {
|
||||
const datas = $A.cloneJSON(this.ownerTask.filter(({end_at}) => {
|
||||
const datas = $A.cloneJSON(this.myTask.filter(({end_at}) => {
|
||||
return end_at;
|
||||
}));
|
||||
return datas.map(data => {
|
||||
|
@ -532,7 +532,7 @@ export default {
|
||||
|
||||
...mapGetters(['projectData', 'tablePanel']),
|
||||
|
||||
...mapGetters(['ownerTask']),
|
||||
...mapGetters(['myTask']),
|
||||
|
||||
userWaitRemove() {
|
||||
const {userids, useridbak} = this.userData;
|
||||
@ -572,8 +572,8 @@ export default {
|
||||
},
|
||||
|
||||
myList() {
|
||||
const {projectId, ownerTask, searchText, completeTask, sortField, sortType} = this;
|
||||
const array = ownerTask.filter((task) => {
|
||||
const {projectId, myTask, searchText, completeTask, sortField, sortType} = this;
|
||||
const array = myTask.filter((task) => {
|
||||
if (task.project_id != projectId) {
|
||||
return false;
|
||||
}
|
||||
|
@ -8,14 +8,14 @@
|
||||
<li @click="dashboard='today'">
|
||||
<div class="block-title">{{$L('今日待完成')}}</div>
|
||||
<div class="block-data">
|
||||
<div class="block-num">{{dashboardData.today.length}}</div>
|
||||
<div class="block-num">{{dashboardTask.today.length}}</div>
|
||||
<i class="taskfont"></i>
|
||||
</div>
|
||||
</li>
|
||||
<li @click="dashboard='overdue'">
|
||||
<div class="block-title">{{$L('超期未完成')}}</div>
|
||||
<div class="block-data">
|
||||
<div class="block-num">{{dashboardData.overdue.length}}</div>
|
||||
<div class="block-num">{{dashboardTask.overdue.length}}</div>
|
||||
<i class="taskfont"></i>
|
||||
</div>
|
||||
</li>
|
||||
@ -137,7 +137,7 @@ export default {
|
||||
computed: {
|
||||
...mapState(['userInfo', 'projects', 'tasks', 'taskId']),
|
||||
|
||||
...mapGetters(['dashboardData']),
|
||||
...mapGetters(['dashboardTask']),
|
||||
|
||||
title() {
|
||||
const {dashboard} = this;
|
||||
@ -156,10 +156,10 @@ export default {
|
||||
let data = [];
|
||||
switch (dashboard) {
|
||||
case 'today':
|
||||
data = $A.cloneJSON(this.dashboardData.today);
|
||||
data = $A.cloneJSON(this.dashboardTask.today);
|
||||
break
|
||||
case 'overdue':
|
||||
data = $A.cloneJSON(this.dashboardData.overdue);
|
||||
data = $A.cloneJSON(this.dashboardTask.overdue);
|
||||
break
|
||||
}
|
||||
if (completeTask.length > 0) {
|
||||
|
34
resources/assets/js/store/getters.js
vendored
34
resources/assets/js/store/getters.js
vendored
@ -1,4 +1,9 @@
|
||||
export default {
|
||||
/**
|
||||
* 当前打开的项目
|
||||
* @param state
|
||||
* @returns {unknown[]|{project_user: *[], columns: *[]}}
|
||||
*/
|
||||
projectData(state) {
|
||||
let projectId = state.projectId;
|
||||
if (projectId == 0) {
|
||||
@ -35,6 +40,11 @@ export default {
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* 当前打开的任务
|
||||
* @param state
|
||||
* @returns {{}|{readonly id?: *}}
|
||||
*/
|
||||
taskData(state) {
|
||||
let taskId = state.taskId;
|
||||
if (taskId == 0) {
|
||||
@ -50,6 +60,11 @@ export default {
|
||||
return {};
|
||||
},
|
||||
|
||||
/**
|
||||
* 项目面板设置
|
||||
* @param state
|
||||
* @returns {(function(*): (boolean|*))|*}
|
||||
*/
|
||||
tablePanel(state) {
|
||||
return function (key) {
|
||||
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}) => {
|
||||
if (parent_id > 0) {
|
||||
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")),
|
||||
todayEnd = $A.Date($A.formatDate("Y-m-d 23:59:59")),
|
||||
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) {
|
||||
return false;
|
||||
}
|
||||
@ -125,7 +151,7 @@ export default {
|
||||
end = $A.Date(task.end_at);
|
||||
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) {
|
||||
return false;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user