no message
This commit is contained in:
parent
78f88db560
commit
0b4e1f3dee
@ -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('仅限项目或任务负责人删除');
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
//
|
//
|
||||||
this.sortDisabled = true;
|
const data = {
|
||||||
this.$store.dispatch("call", {
|
|
||||||
url: 'project/sort',
|
|
||||||
data: {
|
|
||||||
project_id: this.projectId,
|
project_id: this.projectId,
|
||||||
sort: this.sortData,
|
sort: this.sortData,
|
||||||
only_column: only_column === true ? 1 : 0
|
only_column: only_column === true ? 1 : 0
|
||||||
},
|
};
|
||||||
|
this.sortDisabled = true;
|
||||||
|
this.$store.dispatch("call", {
|
||||||
|
url: 'project/sort',
|
||||||
|
data,
|
||||||
}).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;
|
||||||
|
4
resources/assets/js/store/actions.js
vendored
4
resources/assets/js/store/actions.js
vendored
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user