no message

This commit is contained in:
kuaifan 2022-01-05 13:41:05 +08:00
parent 78f88db560
commit 0b4e1f3dee
4 changed files with 96 additions and 45 deletions

View File

@ -161,7 +161,16 @@ class ProjectController extends AbstractController
"owner": 1, // 是否项目负责人
"owner_userid": 1, // 项目负责人ID
"project_user": [], // 项目成员
"project_user": [ // 项目成员
{
"id": 2,
"project_id": 2,
"userid": 1,
"owner": 1,
"created_at": "2022-01-02 00:55:32",
"updated_at": "2022-01-02 00:55:32"
}
],
"task_num": 9,
"task_complete": 0,
@ -1022,7 +1031,7 @@ class ProjectController extends AbstractController
}
//
$task = ProjectTask::userTask($file->task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) {
if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人操作');
}
//
@ -1125,7 +1134,7 @@ class ProjectController extends AbstractController
$name = Request::input('name');
//
$task = ProjectTask::userTask($task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) {
if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人添加');
}
//
@ -1180,39 +1189,24 @@ class ProjectController extends AbstractController
//
$task = ProjectTask::userTask($task_id, [], true, $project);
//
if (count($task->taskUser->where('owner', 1)) > 0) {
if ($task->hasOwner()) {
// 任务有负责人后仅限项目或任务负责人修改
if (!$task->isOwnerParent() && !$project->owner) {
if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人修改');
}
}
//
$updateComplete = false;
// 更新任务
$updateProject = false;
$updateContent = false;
$updateSubTask = false;
if (Base::isDate($data['complete_at'])) {
// 标记已完成
if ($task->complete_at) {
return Base::retError('任务已完成');
}
$task->completeTask(Carbon::now());
$updateComplete = true;
} elseif (Arr::exists($data, 'complete_at')) {
// 标记未完成
if (!$task->complete_at) {
return Base::retError('未完成任务');
}
$task->completeTask(null);
$updateComplete = true;
} else {
// 更新任务
$task->updateTask($data, $updateContent, $updateSubTask);
}
$task->updateTask($data, $updateProject, $updateContent, $updateSubTask);
//
$data = ProjectTask::with(['taskUser', 'taskTag'])->find($task->id)->toArray();
$data['is_update_complete'] = $updateComplete;
$data['is_update_project'] = $updateProject;
$data['is_update_content'] = $updateContent;
$data['is_update_subtask'] = $updateSubTask;
$task->pushMsg('update', $data);
//
return Base::retSuccess('修改成功', $data);
}
@ -1240,7 +1234,7 @@ class ProjectController extends AbstractController
$task_id = Base::getPostInt('task_id');
//
$task = ProjectTask::userTask($task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) {
if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人上传');
}
//
@ -1357,7 +1351,7 @@ class ProjectController extends AbstractController
$type = Request::input('type', 'add');
//
$task = ProjectTask::userTask($task_id, [], false, $project);
if (!$task->isOwnerParent() && !$project->owner) {
if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人操作');
}
//
@ -1394,7 +1388,7 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id'));
//
$task = ProjectTask::userTask($task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) {
if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人删除');
}
//

View File

@ -433,13 +433,32 @@ class ProjectTask extends AbstractModel
/**
* 修改任务
* @param $data
* @param $updateContent
* @param $updateSubTask
* @param bool $updateProject 是否更新项目数据(项目统计)
* @param bool $updateContent 是否更新任务详情
* @param bool $updateSubTask 是否更新子任务
* @return bool
*/
public function updateTask($data, &$updateContent = false, &$updateSubTask = false)
public function updateTask($data, &$updateProject = false, &$updateContent = false, &$updateSubTask = false)
{
AbstractModel::transaction(function () use ($data, &$updateContent, &$updateSubTask) {
AbstractModel::transaction(function () use ($data, &$updateProject, &$updateContent, &$updateSubTask) {
// 状态
if (Arr::exists($data, 'complete_at')) {
if (Base::isDate($data['complete_at'])) {
// 标记已完成
if ($this->complete_at) {
throw new ApiException('任务已完成');
}
$this->completeTask(Carbon::now());
} else {
// 标记未完成
if (!$this->complete_at) {
throw new ApiException('未完成任务');
}
$this->completeTask(null);
}
$updateProject = true;
return;
}
// 标题
if (Arr::exists($data, 'name') && $this->name != $data['name']) {
if (empty($data['name'])) {
@ -486,6 +505,7 @@ class ProjectTask extends AbstractModel
$row->delete();
}
}
$updateProject = true;
$this->syncDialogUser();
}
// 计划时间
@ -677,12 +697,24 @@ class ProjectTask extends AbstractModel
return $user->owner ? 2 : 1;
}
/**
* 是否有负责人
* @return bool
*/
public function hasOwner()
{
if (!isset($this->appendattrs['has_owner'])) {
$this->appendattrs['has_owner'] = ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->exists();
}
return $this->appendattrs['has_owner'];
}
/**
* 是否负责人
* @param bool $isParent 是父级任务的负责人也算
* @return bool
*/
public function isOwnerParent($isParent = true) {
public function isOwner($isParent = true) {
if ($this->owner) {
return true;
}
@ -714,7 +746,7 @@ class ProjectTask extends AbstractModel
throw new ApiException('子任务未完成');
}
}
if (count($this->taskUser->where('owner', 1)) == 0) {
if (!$this->hasOwner()) {
throw new ApiException('请先领取任务');
}
$this->complete_at = $complete_at;

View File

@ -571,9 +571,9 @@ export default {
columnList() {
const {projectId, columns, tasks} = this;
let list = $A.cloneJSON(columns.filter(({project_id}) => {
const list = columns.filter(({project_id}) => {
return project_id == projectId
})).sort((a, b) => {
}).sort((a, b) => {
if (a.sort != b.sort) {
return a.sort - b.sort;
}
@ -589,7 +589,7 @@ export default {
return a.id - b.id;
});
})
return Object.freeze(list);
return list;
},
myList() {
@ -751,17 +751,42 @@ export default {
}
this.sortData = newSort;
//
const data = {
project_id: this.projectId,
sort: this.sortData,
only_column: only_column === true ? 1 : 0
};
this.sortDisabled = true;
this.$store.dispatch("call", {
url: 'project/sort',
data: {
project_id: this.projectId,
sort: this.sortData,
only_column: only_column === true ? 1 : 0
},
data,
}).then(({msg}) => {
$A.messageSuccess(msg);
this.sortDisabled = false;
//
if (!data.only_column) {
let sort,
upTask = [];
data.sort.forEach((item) => {
sort = -1;
upTask.push(...item.task.map(id => {
sort++;
upTask.push(...this.tasks.filter(({parent_id}) => parent_id == id).map(({id}) => {
return {
id,
sort,
column_id: item.id,
}
}))
return {
id,
sort,
column_id: item.id,
}
}))
})
this.$store.dispatch("saveTask", upTask)
}
}).catch(({msg}) => {
$A.modalError(msg);
this.sortDisabled = false;

View File

@ -862,8 +862,8 @@ export default {
if (data.parent_id > 0 && state.tasks.findIndex(({id}) => id == data.parent_id) === -1) {
dispatch("getTaskOne", data.parent_id);
}
if (data.is_update_complete) {
data.is_update_complete = false;
if (data.is_update_project) {
data.is_update_project = false;
dispatch("getProjectOne", data.project_id);
}
if (data.is_update_content) {