From 22963d0e6f4c012af5fac00e43b20202d5ce6531 Mon Sep 17 00:00:00 2001 From: dailz Date: Mon, 20 Apr 2026 13:41:37 +0800 Subject: [PATCH] fix(web): map selected files to file-type params and hide auto-injected params File/directory type app parameters now show the associated file name instead of a disabled input. WORK_DIR is hidden from the form as it is auto-injected by the backend. Selected files are mapped to file params via fileParamMapping on submit. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- web/src/views/Tasks/Submit.vue | 40 +++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/web/src/views/Tasks/Submit.vue b/web/src/views/Tasks/Submit.vue index 3f7db65..7f7b6e4 100644 --- a/web/src/views/Tasks/Submit.vue +++ b/web/src/views/Tasks/Submit.vue @@ -34,7 +34,7 @@ @@ -115,6 +121,33 @@ const showFilePicker = ref(false) const selectedApp = computed(() => appList.value.find(a => a.id === selectedAppId.value)) +const autoParams = new Set(['WORK_DIR']) + +const visibleParams = computed(() => + (selectedApp.value?.parameters || []).filter((p: any) => !autoParams.has(p.name)) +) + +const fileParams = computed(() => + (selectedApp.value?.parameters || []).filter( + (p: any) => p.type === 'file' || p.type === 'directory' + ) +) + +const fileParamMapping = computed(() => { + const mapping: Record = {} + fileParams.value.forEach((p: any, i: number) => { + if (selectedFiles.value[i]) { + mapping[p.name] = String(selectedFiles.value[i].id) + } + }) + return mapping +}) + +const getFileForParam = (param: any) => { + const index = fileParams.value.findIndex((p: any) => p.name === param.name) + return selectedFiles.value[index] +} + watch(selectedAppId, () => { values.value = {} }) onMounted(async () => { @@ -131,7 +164,8 @@ const handleSubmit = async () => { submitting.value = true try { const taskName = form.task_name.trim() || `task_${selectedAppId.value}_${Date.now()}` - const resp = await createTask({ ...form, task_name: taskName, job_name: taskName, app_id: selectedAppId.value, values: values.value, file_ids: selectedFiles.value.map(f => f.id) }) + const mergedValues = { ...values.value, ...fileParamMapping.value } + const resp = await createTask({ ...form, task_name: taskName, job_name: taskName, app_id: selectedAppId.value, values: mergedValues, file_ids: selectedFiles.value.map(f => f.id) }) if (resp.success) { ElMessage.success('任务提交成功') router.push('/tasks')