修复任务参数类型转换

This commit is contained in:
ryan
2026-06-11 08:26:30 +08:00
parent 5241055030
commit 8964054fd8
7 changed files with 138 additions and 29 deletions
@@ -11,6 +11,7 @@ import {Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, Di
import {Calendar as CalendarIcon, Clock, Info, Layers, Play} from "lucide-react"
import {AdminService, DispatchTaskRequest, TaskMeta} from "@/lib/services"
import {buildTaskPayload} from "@/lib/task-param-utils"
import {ErrorInline} from "@/components/layout/error"
import {LoadingStateWithBorder} from "@/components/layout/loading"
import {EmptyStateWithBorder} from "@/components/layout/empty"
@@ -195,19 +196,16 @@ export function TaskManager() {
if (userId) params.user_id = userId
}
// Handle dynamic parameters
// Handle dynamic parameters — type coercion (number vs string) is
// centralised in buildTaskPayload; do not inline it here.
if (targetTask?.params && targetTask.params.length > 0) {
const payloadData: Record<string, string> = {}
for (const param of targetTask.params) {
const val = (paramValues[param.name] || "").trim()
if (param.required && !val) {
toast.error(`${param.label}不能为空`)
setDispatching(false)
return
}
payloadData[param.name] = val
const { payload, error } = buildTaskPayload(targetTask.params, paramValues)
if (error) {
toast.error(error)
setDispatching(false)
return
}
params.payload = JSON.stringify(payloadData)
params.payload = payload ?? undefined
}
const taskID = await AdminService.dispatchTask(params)
@@ -13,6 +13,7 @@ import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/c
import {Clock, Edit2, Info, Plus, RefreshCw, Trash2} from "lucide-react"
import {AdminService, CreateScheduleRequest, Schedule, TaskMeta, UpdateScheduleRequest} from "@/lib/services"
import {buildTaskPayload} from "@/lib/task-param-utils"
import {ErrorInline} from "@/components/layout/error"
import {LoadingStateWithBorder} from "@/components/layout/loading"
import {EmptyStateWithBorder} from "@/components/layout/empty"
@@ -146,22 +147,18 @@ export function TaskSchedulesManager() {
setSubmitLoading(true)
const targetTask = taskTypes.find(t => t.type === selectedTaskType)
const payloadData: Record<string, string> = {}
let payloadStr = '{}'
if (targetTask?.params) {
for (const param of targetTask.params) {
const val = (paramValues[param.name] || "").trim()
if (param.required && !val) {
toast.error(`${param.label}不能为空`)
setSubmitLoading(false)
return
}
payloadData[param.name] = val
if (targetTask?.params && targetTask.params.length > 0) {
const { payload, error } = buildTaskPayload(targetTask.params, paramValues)
if (error) {
toast.error(error)
setSubmitLoading(false)
return
}
payloadStr = payload ?? '{}'
}
const payloadStr = JSON.stringify(payloadData)
if (editingSchedule) {
const req: UpdateScheduleRequest = {
name,