feat(task): 兼容 start_at/end_at 参数,统一转换为 times

- 新增 ProjectTask::normalizeTimes() 方法统一处理时间参数
  - 支持只传 end_at 时自动补充 start_at
  - 支持只传 start_at 时保留已有 end_at
This commit is contained in:
kuaifan 2026-01-16 08:37:32 +00:00
parent ff87de9f44
commit 0cefb7eaff
2 changed files with 34 additions and 0 deletions

View File

@ -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()) {
// 已经存在负责人,则需要检查权限(即:没有任务负责人时,不检查权限)

View File

@ -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