diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index c985629f6..bd22dd6e3 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -1144,9 +1144,6 @@ class ProjectTask extends AbstractModel */ public function copyTask() { - if ($this->parent_id > 0) { - throw new ApiException('子任务禁止复制'); - } return AbstractModel::transaction(function() { // 复制任务 $task = $this->replicate(); diff --git a/app/Tasks/LoopTask.php b/app/Tasks/LoopTask.php index 301596e45..31071e023 100644 --- a/app/Tasks/LoopTask.php +++ b/app/Tasks/LoopTask.php @@ -60,6 +60,18 @@ class LoopTask extends AbstractTask $task->start_at = Carbon::parse($task->loop_at); $task->end_at = $task->start_at->clone()->addSeconds($diffSecond); } + // 处理子任务 + $subTasks = ProjectTask::whereParentId($item->id)->get(); + if (!$subTasks->isEmpty()) { + foreach ($subTasks as $subTask) { + $newSubTask = $subTask->copyTask(); + $newSubTask->parent_id = $task->id; + $newSubTask->start_at = $task->start_at; + $newSubTask->end_at = $task->end_at; + $newSubTask->save(); + } + } + // $task->refreshLoop(true); $task->addLog("创建任务来自周期任务ID:{$item->id}", [], $task->userid); // 清空旧周期 diff --git a/language/original-web.txt b/language/original-web.txt index 22d070a05..e0b608280 100644 --- a/language/original-web.txt +++ b/language/original-web.txt @@ -2072,3 +2072,5 @@ AI开启新会话失败 应用商店 打开OKR OKR群组 + +重复周期生成的子任务时间将会被清除,是否确认继续? \ No newline at end of file diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index d524f1c85..ec5df1f16 100755 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -1537,7 +1537,17 @@ export default { list, size: 'large', onUpdate: (value) => { - this.updateData('loop', value) + if (this.subList.length > 0) { + $A.modalConfirm({ + language: false, + content: this.$L('重复周期生成的子任务时间将会被清除,是否确认继续?'), + onOk: () => { + this.updateData('loop', value) + } + }); + } else { + this.updateData('loop', value) + } } }) },