import { Form, Input } from 'antd'; import { SchemaFields } from './SchemaFields'; import { resolveSchema, schemaType } from '../api/schema-utils'; import type { JsonSchema, OperationInput, PlatformOperation } from '../api/types'; function parseJsonFields(target: Record, schema: JsonSchema) { const resolved = resolveSchema(schema); for (const [name, propertySchema] of Object.entries(resolved.properties || {})) { const value = target[name]; const type = schemaType(propertySchema); if ((type === 'object' || type === 'array') && typeof value === 'string' && value.trim()) { try { target[name] = JSON.parse(value); } catch { throw new Error(`${propertySchema.description || name} 必须是有效 JSON`); } } } } export function normalizeOperationInput(operation: PlatformOperation, values: OperationInput): OperationInput { const input = structuredClone(values); if (input.body && typeof input.body === 'object' && operation.requestSchema) { parseJsonFields(input.body as Record, operation.requestSchema); } return input; } export function OperationForm({ operation }: { operation: PlatformOperation }) { const pathParameters = operation.parameters.filter((item) => item.in === 'path'); const queryParameters = operation.parameters.filter((item) => item.in === 'query'); const headerParameters = operation.parameters.filter((item) => item.in === 'header'); const bodySchema = resolveSchema(operation.requestSchema); return ( <> {pathParameters.map((parameter) => ( ))} {queryParameters.length > 0 && ( item.required).map((item) => item.name)} schema={{ type: 'object', properties: Object.fromEntries(queryParameters.map((item) => [item.name, { ...item.schema, description: item.description || item.name }])), }} /> )} {headerParameters.map((parameter) => ( ))} {operation.requestSchema && schemaType(bodySchema) === 'object' && ( )} ); }