diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index ce32001cb..6d41dcd95 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -735,7 +735,9 @@ class ProjectTask extends AbstractModel if (count($older) == 0 && count($array) == 1 && $array[0] == User::userid()) { $this->addLog("认领{任务}"); } else { - $this->addLog("修改{任务}负责人", ['userid' => $array]); + if (array_merge(array_diff($array, $older), array_diff($older, $array))) { + $this->addLog("修改{任务}负责人", ['userid' => $array]); + } } $this->taskPush(array_values(array_diff($array, $older)), 0); } @@ -890,6 +892,7 @@ class ProjectTask extends AbstractModel } // 协助人员 if (Arr::exists($data, 'assist')) { + $older = $this->taskUser->where('owner', 0)->pluck('userid')->toArray(); $array = []; $assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']]; if (count($assist) > 10) { @@ -910,7 +913,9 @@ class ProjectTask extends AbstractModel $array[] = $uid; } if ($array) { - $this->addLog("修改{任务}协助人员", ['userid' => $array]); + if (array_merge(array_diff($array, $older), array_diff($older, $array))) { + $this->addLog("修改{任务}协助人员", ['userid' => $array]); + } } $rows = ProjectTaskUser::whereTaskId($this->id)->whereOwner(0)->whereNotIn('userid', $array)->get(); if ($rows->isNotEmpty()) { @@ -1349,6 +1354,9 @@ class ProjectTask extends AbstractModel $addMsg = $this->parent_id == 0 && $this->dialog_id > 0; if ($complete_at === null) { // 标记未完成 + if (!$this->complete_at) { + return; // 本来就未完成 + } $this->complete_at = null; $this->addLog("标记{任务}未完成"); if ($addMsg) { @@ -1358,6 +1366,9 @@ class ProjectTask extends AbstractModel } } else { // 标记已完成 + if ($this->complete_at) { + return; // 本来就已完成 + } if ($this->parent_id == 0) { if (self::whereParentId($this->id)->whereCompleteAt(null)->exists()) { throw new ApiException('子任务未完成', [ @@ -1848,6 +1859,12 @@ class ProjectTask extends AbstractModel AbstractModel::transaction(function () use ($projectId, $columnId, $flowItemId, $owner, $assist, $completeAt) { $newTaskUser = array_merge($owner, $assist); // + $oldProject = Project::find($this->project_id); + $newProject = $this->project_id != $projectId ? Project::find($projectId) : $oldProject; + if (!$oldProject || !$newProject) { + throw new ApiException('项目不存在'); + } + // $this->project_id = $projectId; $this->column_id = $columnId; // 任务内容 @@ -1883,6 +1900,7 @@ class ProjectTask extends AbstractModel ]); // if ($flowItemId) { + // 更新任务流程 $flowItem = projectFlowItem::whereProjectId($projectId)->whereId($flowItemId)->first(); $this->flow_item_id = $flowItemId; $this->flow_item_name = $flowItem->status . "|" . $flowItem->name; @@ -1892,17 +1910,25 @@ class ProjectTask extends AbstractModel $this->completeTask(null); } } else { + // 没有流程只更新状态 $this->flow_item_id = 0; $this->flow_item_name = ''; - } - // - if ($completeAt) { - $this->complete_at = $completeAt; + if ($completeAt) { + $this->completeTask(Carbon::parse($completeAt)); + } else { + $this->completeTask(null); + } } // $this->save(); // - $this->addLog("移动{任务}"); + $log = $this->addLog("移动{任务}", [ + 'change' => [$oldProject->name, $newProject->name] + ]); + if ($this->dialog_id) { + $notice = $oldProject->id != $newProject->id ? "「{$oldProject->name}」移动至「{$newProject->name}」" : $log->detail; + WebSocketDialogMsg::sendMsg(null, $this->dialog_id, 'notice', ['notice' => $notice], User::userid(), true, true); + } }); $this->pushMsg('update'); return true; diff --git a/language/original-api.txt b/language/original-api.txt index d833723e8..63155d228 100644 --- a/language/original-api.txt +++ b/language/original-api.txt @@ -352,6 +352,7 @@ LDAP 用户禁止修改邮箱 移交子任务身份 任务取消归档 自动任务归档 +任务自动归档 任务归档 创建任务来自周期任务ID:(*) 已创建新的周期任务ID:(*),此任务关闭周期 @@ -844,3 +845,4 @@ AI机器人不存在 请输入删除备注 删除备注长度限制(*)个字 系统机器人不能删除 +「(*)」移动至「(*)」 diff --git a/language/original-web.txt b/language/original-web.txt index affb1be32..ea8ed7693 100644 --- a/language/original-web.txt +++ b/language/original-web.txt @@ -2044,3 +2044,6 @@ AI开启新会话 AI开启新会话失败 打开会话窗口 +转为已完成 +转为未完成 +「(*)」移动至「(*)」 diff --git a/language/translate.json b/language/translate.json index 6a385f7ea..8f42c7868 100644 --- a/language/translate.json +++ b/language/translate.json @@ -22440,7 +22440,7 @@ "ru": "Задача не архивирована" }, { - "key": "自动任务归档", + "key": "任务自动归档", "zh": "", "zh-CHT": "自動任務歸檔", "en": "Automatic task archiving", @@ -29459,4 +29459,4 @@ "id": "Buka Jendela Sesi", "ru": "Открыть окно сессии" } -] \ No newline at end of file +] diff --git a/resources/assets/js/pages/manage/components/TaskMenu.vue b/resources/assets/js/pages/manage/components/TaskMenu.vue index 1a5ab819a..1971bbbb3 100644 --- a/resources/assets/js/pages/manage/components/TaskMenu.vue +++ b/resources/assets/js/pages/manage/components/TaskMenu.vue @@ -44,6 +44,10 @@ export default { type: String, default: 'small' }, + placement: { + type: String, + default: 'bottom' + }, icon: { type: String, default: 'md-radio-button-off' @@ -83,6 +87,7 @@ export default { updateBefore: this.updateBefore, disabled: this.disabled, size: this.size, + placement: this.placement, projectId: this.projectId, onUpdate: data => { this.$emit("on-update", data) diff --git a/resources/assets/js/pages/manage/components/TaskMove.vue b/resources/assets/js/pages/manage/components/TaskMove.vue index c206aa7f0..25b5a6b71 100644 --- a/resources/assets/js/pages/manage/components/TaskMove.vue +++ b/resources/assets/js/pages/manage/components/TaskMove.vue @@ -2,21 +2,23 @@