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": 1, // 是否项目负责人
"owner_userid": 1, // 项目负责人ID "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_num": 9,
"task_complete": 0, "task_complete": 0,
@ -1022,7 +1031,7 @@ class ProjectController extends AbstractController
} }
// //
$task = ProjectTask::userTask($file->task_id, [], true, $project); $task = ProjectTask::userTask($file->task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) { if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人操作'); return Base::retError('仅限项目或任务负责人操作');
} }
// //
@ -1125,7 +1134,7 @@ class ProjectController extends AbstractController
$name = Request::input('name'); $name = Request::input('name');
// //
$task = ProjectTask::userTask($task_id, [], true, $project); $task = ProjectTask::userTask($task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) { if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人添加'); return Base::retError('仅限项目或任务负责人添加');
} }
// //
@ -1180,39 +1189,24 @@ class ProjectController extends AbstractController
// //
$task = ProjectTask::userTask($task_id, [], true, $project); $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('仅限项目或任务负责人修改'); return Base::retError('仅限项目或任务负责人修改');
} }
} }
// // 更新任务
$updateComplete = false; $updateProject = false;
$updateContent = false; $updateContent = false;
$updateSubTask = false; $updateSubTask = false;
if (Base::isDate($data['complete_at'])) { $task->updateTask($data, $updateProject, $updateContent, $updateSubTask);
// 标记已完成 //
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);
}
$data = ProjectTask::with(['taskUser', 'taskTag'])->find($task->id)->toArray(); $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_content'] = $updateContent;
$data['is_update_subtask'] = $updateSubTask; $data['is_update_subtask'] = $updateSubTask;
$task->pushMsg('update', $data); $task->pushMsg('update', $data);
//
return Base::retSuccess('修改成功', $data); return Base::retSuccess('修改成功', $data);
} }
@ -1240,7 +1234,7 @@ class ProjectController extends AbstractController
$task_id = Base::getPostInt('task_id'); $task_id = Base::getPostInt('task_id');
// //
$task = ProjectTask::userTask($task_id, [], true, $project); $task = ProjectTask::userTask($task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) { if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人上传'); return Base::retError('仅限项目或任务负责人上传');
} }
// //
@ -1357,7 +1351,7 @@ class ProjectController extends AbstractController
$type = Request::input('type', 'add'); $type = Request::input('type', 'add');
// //
$task = ProjectTask::userTask($task_id, [], false, $project); $task = ProjectTask::userTask($task_id, [], false, $project);
if (!$task->isOwnerParent() && !$project->owner) { if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人操作'); return Base::retError('仅限项目或任务负责人操作');
} }
// //
@ -1394,7 +1388,7 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
// //
$task = ProjectTask::userTask($task_id, [], true, $project); $task = ProjectTask::userTask($task_id, [], true, $project);
if (!$task->isOwnerParent() && !$project->owner) { if (!$task->isOwner() && !$project->owner) {
return Base::retError('仅限项目或任务负责人删除'); return Base::retError('仅限项目或任务负责人删除');
} }
// //

View File

@ -433,13 +433,32 @@ class ProjectTask extends AbstractModel
/** /**
* 修改任务 * 修改任务
* @param $data * @param $data
* @param $updateContent * @param bool $updateProject 是否更新项目数据(项目统计)
* @param $updateSubTask * @param bool $updateContent 是否更新任务详情
* @param bool $updateSubTask 是否更新子任务
* @return bool * @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 (Arr::exists($data, 'name') && $this->name != $data['name']) {
if (empty($data['name'])) { if (empty($data['name'])) {
@ -486,6 +505,7 @@ class ProjectTask extends AbstractModel
$row->delete(); $row->delete();
} }
} }
$updateProject = true;
$this->syncDialogUser(); $this->syncDialogUser();
} }
// 计划时间 // 计划时间
@ -677,12 +697,24 @@ class ProjectTask extends AbstractModel
return $user->owner ? 2 : 1; 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 是父级任务的负责人也算 * @param bool $isParent 是父级任务的负责人也算
* @return bool * @return bool
*/ */
public function isOwnerParent($isParent = true) { public function isOwner($isParent = true) {
if ($this->owner) { if ($this->owner) {
return true; return true;
} }
@ -714,7 +746,7 @@ class ProjectTask extends AbstractModel
throw new ApiException('子任务未完成'); throw new ApiException('子任务未完成');
} }
} }
if (count($this->taskUser->where('owner', 1)) == 0) { if (!$this->hasOwner()) {
throw new ApiException('请先领取任务'); throw new ApiException('请先领取任务');
} }
$this->complete_at = $complete_at; $this->complete_at = $complete_at;

View File

@ -571,9 +571,9 @@ export default {
columnList() { columnList() {
const {projectId, columns, tasks} = this; const {projectId, columns, tasks} = this;
let list = $A.cloneJSON(columns.filter(({project_id}) => { const list = columns.filter(({project_id}) => {
return project_id == projectId return project_id == projectId
})).sort((a, b) => { }).sort((a, b) => {
if (a.sort != b.sort) { if (a.sort != b.sort) {
return a.sort - b.sort; return a.sort - b.sort;
} }
@ -589,7 +589,7 @@ export default {
return a.id - b.id; return a.id - b.id;
}); });
}) })
return Object.freeze(list); return list;
}, },
myList() { myList() {
@ -751,17 +751,42 @@ export default {
} }
this.sortData = newSort; this.sortData = newSort;
// //
const data = {
project_id: this.projectId,
sort: this.sortData,
only_column: only_column === true ? 1 : 0
};
this.sortDisabled = true; this.sortDisabled = true;
this.$store.dispatch("call", { this.$store.dispatch("call", {
url: 'project/sort', url: 'project/sort',
data: { data,
project_id: this.projectId,
sort: this.sortData,
only_column: only_column === true ? 1 : 0
},
}).then(({msg}) => { }).then(({msg}) => {
$A.messageSuccess(msg); $A.messageSuccess(msg);
this.sortDisabled = false; 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}) => { }).catch(({msg}) => {
$A.modalError(msg); $A.modalError(msg);
this.sortDisabled = false; 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) { if (data.parent_id > 0 && state.tasks.findIndex(({id}) => id == data.parent_id) === -1) {
dispatch("getTaskOne", data.parent_id); dispatch("getTaskOne", data.parent_id);
} }
if (data.is_update_complete) { if (data.is_update_project) {
data.is_update_complete = false; data.is_update_project = false;
dispatch("getProjectOne", data.project_id); dispatch("getProjectOne", data.project_id);
} }
if (data.is_update_content) { if (data.is_update_content) {