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()->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);
}

View File

@ -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;
}

View File

@ -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

View File

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

View File

@ -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();

View File

@ -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)
});