// 节点服务适配器 // 提供与原有API兼容的接口,但使用本地节点定义 import { NODE_DEFINITIONS, getNodeDefinition, getNodesByCategory, getEnabledNodes, getNodesByCategories } from './definitions'; import { WorkflowNodeDefinition, NodeType, NodeCategory } from './types'; // 兼容原有的响应格式 export interface NodeDefinitionResponse { id: number; nodeCode: string; nodeName: string; nodeType: NodeType; category: NodeCategory; description?: string; panelVariablesSchema: any; uiVariables: any; localVariablesSchema?: any; formVariablesSchema?: any; panelVariables?: Record; localVariables?: Record; orderNum?: number; enabled?: boolean; createTime?: string; updateTime?: string; version?: number; } /** * 将节点定义转换为兼容的响应格式 */ const convertToResponse = (node: WorkflowNodeDefinition, index: number): NodeDefinitionResponse => { return { id: index + 1, // 生成虚拟ID nodeCode: node.nodeCode, nodeName: node.nodeName, nodeType: node.nodeType, category: node.category, description: node.description, panelVariablesSchema: node.panelVariablesSchema, uiVariables: node.uiVariables, localVariablesSchema: node.localVariablesSchema, formVariablesSchema: node.formVariablesSchema, orderNum: node.orderNum || 0, enabled: node.enabled !== false, createTime: new Date().toISOString(), updateTime: new Date().toISOString(), version: 1 }; }; /** * 获取节点定义列表(替代原有的API调用) * @returns Promise */ export const getNodeDefinitionList = async (): Promise => { // 模拟异步操作 return new Promise((resolve) => { setTimeout(() => { const nodes = getEnabledNodes(); const response = nodes.map((node, index) => convertToResponse(node, index)); resolve(response); }, 10); // 很短的延迟,模拟网络请求 }); }; /** * 根据节点类型获取节点定义 * @param nodeType 节点类型 * @returns Promise */ export const getNodeDefinitionByType = async (nodeType: NodeType | string): Promise => { return new Promise((resolve) => { setTimeout(() => { const node = getNodeDefinition(nodeType); if (node) { const index = NODE_DEFINITIONS.findIndex(n => n.nodeType === nodeType); resolve(convertToResponse(node, index)); } else { resolve(null); } }, 10); }); }; /** * 获取按分类分组的节点定义 * @returns Promise> */ export const getNodeDefinitionsByCategories = async (): Promise> => { return new Promise((resolve) => { setTimeout(() => { const grouped = getNodesByCategories(); const result = {} as Record; Object.entries(grouped).forEach(([category, nodes]) => { result[category as NodeCategory] = nodes.map((node) => convertToResponse(node, NODE_DEFINITIONS.findIndex(n => n.nodeCode === node.nodeCode)) ); }); resolve(result); }, 10); }); }; /** * 根据分类获取节点定义列表 * @param category 节点分类 * @returns Promise */ export const getNodeDefinitionsByCategory = async (category: NodeCategory): Promise => { return new Promise((resolve) => { setTimeout(() => { const nodes = getNodesByCategory(category); const response = nodes.map((node) => convertToResponse(node, NODE_DEFINITIONS.findIndex(n => n.nodeCode === node.nodeCode)) ); resolve(response); }, 10); }); }; /** * 验证节点配置 * @param nodeType 节点类型 * @param config 节点配置 * @returns Promise<{ isValid: boolean; errors: string[] }> */ export const validateNodeConfig = async ( nodeType: NodeType | string, config: Record ): Promise<{ isValid: boolean; errors: string[] }> => { return new Promise((resolve) => { setTimeout(() => { const node = getNodeDefinition(nodeType); if (!node) { resolve({ isValid: false, errors: ['未知的节点类型'] }); return; } const errors: string[] = []; const required = node.panelVariablesSchema.required || []; // 验证必填字段 required.forEach(field => { if (!config[field] || config[field] === '') { const property = node.panelVariablesSchema.properties[field]; const title = property?.title || field; errors.push(`${title} 是必填字段`); } }); resolve({ isValid: errors.length === 0, errors }); }, 10); }); }; // 导出节点定义相关工具 export { NODE_DEFINITIONS, getNodeDefinition, getNodesByCategory, getEnabledNodes, getNodesByCategories } from './definitions'; export type { WorkflowNodeDefinition, NodeType, NodeCategory } from './types';