From 0cefb7eaff2fa7294ed14076d685e131c6be2bcb Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 16 Jan 2026 08:37:32 +0000 Subject: [PATCH] =?UTF-8?q?feat(task):=20=E5=85=BC=E5=AE=B9=20start=5Fat/e?= =?UTF-8?q?nd=5Fat=20=E5=8F=82=E6=95=B0=EF=BC=8C=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E4=B8=BA=20times?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ProjectTask::normalizeTimes() 方法统一处理时间参数 - 支持只传 end_at 时自动补充 start_at - 支持只传 start_at 时保留已有 end_at --- .../Controllers/Api/ProjectController.php | 2 ++ app/Models/ProjectTask.php | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index a40ea604b..46f4bce02 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -2258,6 +2258,7 @@ class ProjectController extends AbstractController return Base::retError('任务列表不存在或已被删除'); } // + $data = ProjectTask::normalizeTimes($data); $task = ProjectTask::addTask(array_merge($data, [ 'parent_id' => 0, 'project_id' => $project->id, @@ -2495,6 +2496,7 @@ class ProjectController extends AbstractController $task_id = intval($param['task_id']); // $task = ProjectTask::userTask($task_id); + $param = ProjectTask::normalizeTimes($param, $task); // if ($task->hasOwner()) { // 已经存在负责人,则需要检查权限(即:没有任务负责人时,不检查权限) diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 80cd4e642..dd8d6e0d7 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -399,6 +399,38 @@ class ProjectTask extends AbstractModel return Base::cutStr(strip_tags($content), 100); } + /** + * 标准化时间参数,兼容 start_at/end_at 转换为 times + * @param array $data 请求数据 + * @param self|null $task 任务实例(更新时传入) + * @return array 处理后的data + */ + public static function normalizeTimes(array $data, ?self $task = null): array + { + if (isset($data['times']) || (!isset($data['start_at']) && !isset($data['end_at']))) { + return $data; + } + + $startAt = $data['start_at'] ?? null; + $endAt = $data['end_at'] ?? null; + + if ($endAt && !$startAt) { + // 只传 end_at:保留已有 start_at,否则取当前时间 + $startAt = $task?->start_at + ? Carbon::parse($task->start_at)->toDateTimeString() + : date('Y-m-d H:i:s'); + } elseif ($startAt && !$endAt) { + // 只传 start_at:必须已有 end_at + if (!$task?->end_at) { + throw new ApiException('请设置结束时间'); + } + $endAt = Carbon::parse($task->end_at)->toDateTimeString(); + } + + $data['times'] = [$startAt, $endAt]; + return $data; + } + /** * 添加任务 * @param $data