模型管理v2:异步映射配置新增请求方法下拉与请求体映射,回调文案改异步

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-08-20 16:42:12 +08:00
co-authored by Claude
parent 03697b9747
commit 9f94f4a9ab
2 changed files with 35 additions and 5 deletions
@@ -152,22 +152,41 @@
<template v-if="formData.responseType === 2">
<el-divider content-position="left">异步映射配置</el-divider>
<el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="回调响应映射">
<el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" class="mb20">
<el-form-item label="异步响应映射">
<el-button @click="openMappingEditor('asyncResponseMapping')" style="width: 100%">
配置 ({{ Object.keys((formData.asyncTaskMapping.responseMapping || {})).length }})
</el-button>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" class="mb20">
<el-form-item label="请求方法">
<el-select v-model="formData.asyncTaskMapping.httpMethod" style="width: 100%">
<el-option label="POST" value="POST" />
<el-option label="GET" value="GET" />
<el-option label="PUT" value="PUT" />
<el-option label="DELETE" value="DELETE" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" class="mb20">
<el-form-item label="回调 URL">
<el-input v-model="formData.asyncTaskMapping.url" placeholder="请输入异步回调地址" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="请求体映射">
<el-button @click="openMappingEditor('asyncRequestBodyMapping')" style="width: 100%">
配置 ({{ Object.keys((formData.asyncTaskMapping.requestBodyMapping || {})).length }})
</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="回调请求头映射">
<el-form-item label="异步请求头映射">
<KeyValueEditor v-model="formData.asyncTaskMapping.requestHeadMapping" />
</el-form-item>
</el-col>
@@ -375,6 +394,7 @@ const defaultAsyncTaskMapping: AsyncTaskMapping = {
url: '',
httpMethod: 'POST',
requestHeadMapping: {},
requestBodyMapping: {},
responseMapping: {},
taskId: '',
taskStatus: '',
@@ -544,6 +564,7 @@ const mappingFieldLabels: Record<string, string> = {
requestBodyMapping: '请求体映射',
responseMapping: '响应映射',
asyncResponseMapping: '异步-响应映射',
asyncRequestBodyMapping: '异步-请求体映射',
};
const jsonEditorTitle = computed(() => {
@@ -554,6 +575,7 @@ const jsonEditorTitle = computed(() => {
/** 获取映射字段的引用 */
function getMappingValue(key: string): Record<string, unknown> {
if (key === 'asyncResponseMapping') return formData.asyncTaskMapping.responseMapping;
if (key === 'asyncRequestBodyMapping') return formData.asyncTaskMapping.requestBodyMapping || {};
return (formData as Record<string, unknown>)[key] as Record<string, unknown>;
}
@@ -561,6 +583,8 @@ function getMappingValue(key: string): Record<string, unknown> {
function setMappingValue(key: string, value: Record<string, unknown>) {
if (key === 'asyncResponseMapping') {
formData.asyncTaskMapping.responseMapping = value;
} else if (key === 'asyncRequestBodyMapping') {
formData.asyncTaskMapping.requestBodyMapping = value;
} else {
(formData as Record<string, unknown>)[key] = value;
}
@@ -678,6 +702,7 @@ const openDialog = async (type: 'add' | 'edit', id?: string) => {
...defaultAsyncTaskMapping,
...row.asyncTaskMapping,
requestHeadMapping: row.asyncTaskMapping.requestHeadMapping || {},
requestBodyMapping: row.asyncTaskMapping.requestBodyMapping || {},
responseMapping: row.asyncTaskMapping.responseMapping || {},
}
: { ...defaultAsyncTaskMapping };
@@ -734,7 +759,11 @@ const handleSubmit = async () => {
if (formData.responseType === 2) {
const atm = formData.asyncTaskMapping;
const hasAsyncConfig = atm.url || Object.keys(atm.requestHeadMapping).length > 0 || atm.taskId;
const hasAsyncConfig =
atm.url ||
Object.keys(atm.requestHeadMapping).length > 0 ||
Object.keys(atm.requestBodyMapping || {}).length > 0 ||
atm.taskId;
asyncTaskMapping = hasAsyncConfig ? ({ ...atm } as AsyncTaskMapping) : undefined;
}