'use client'; import { useState } from 'react'; export default function NodeLibrary() { const [activeCategory, setActiveCategory] = useState('trigger'); const [searchTerm, setSearchTerm] = useState(''); const nodeCategories = [ { id: 'trigger', name: '触发器', icon: 'ri-play-line' }, { id: 'action', name: '动作', icon: 'ri-tools-line' }, { id: 'condition', name: '条件', icon: 'ri-question-line' }, { id: 'data', name: '数据', icon: 'ri-database-line' }, { id: 'ai', name: 'AI', icon: 'ri-brain-line' }, { id: 'integration', name: '集成', icon: 'ri-links-line' } ]; const nodes = { trigger: [ { id: 'schedule', name: '定时触发', icon: '⏰', desc: '按时间表执行' }, { id: 'webhook', name: 'Webhook', icon: '🔗', desc: 'HTTP请求触发' }, { id: 'file-upload', name: '文件上传', icon: '📁', desc: '文件上传时触发' }, { id: 'email', name: '邮件触发', icon: '📧', desc: '收到邮件时触发' }, { id: 'database', name: '数据库变更', icon: '🗄️', desc: '数据变更时触发' } ], action: [ { id: 'http-request', name: 'HTTP请求', icon: '🌐', desc: '发送HTTP请求' }, { id: 'send-email', name: '发送邮件', icon: '📮', desc: '发送电子邮件' }, { id: 'file-operation', name: '文件操作', icon: '📄', desc: '文件增删改查' }, { id: 'notification', name: '消息通知', icon: '🔔', desc: '发送通知消息' }, { id: 'data-transform', name: '数据转换', icon: '🔄', desc: '转换数据格式' } ], condition: [ { id: 'if-else', name: '条件判断', icon: '🤔', desc: '根据条件分支' }, { id: 'filter', name: '数据过滤', icon: '🔍', desc: '过滤数据项' }, { id: 'loop', name: '循环处理', icon: '🔁', desc: '循环执行操作' }, { id: 'delay', name: '延时等待', icon: '⏱️', desc: '延时一段时间' }, { id: 'merge', name: '数据合并', icon: '🔀', desc: '合并多个数据源' } ], data: [ { id: 'mysql', name: 'MySQL', icon: '🐬', desc: 'MySQL数据库' }, { id: 'mongodb', name: 'MongoDB', icon: '🍃', desc: 'MongoDB数据库' }, { id: 'redis', name: 'Redis', icon: '📦', desc: 'Redis缓存' }, { id: 'csv', name: 'CSV文件', icon: '📊', desc: 'CSV格式数据' }, { id: 'json', name: 'JSON数据', icon: '📋', desc: 'JSON格式数据' } ], ai: [ { id: 'text-generation', name: '文本生成', icon: '✍️', desc: 'AI文本生成' }, { id: 'text-analysis', name: '文本分析', icon: '🔎', desc: '文本内容分析' }, { id: 'translation', name: '文本翻译', icon: '🌍', desc: '多语言翻译' }, { id: 'sentiment', name: '情感分析', icon: '😊', desc: '情感倾向分析' }, { id: 'ocr', name: '图片识别', icon: '👁️', desc: 'OCR文字识别' } ], integration: [ { id: 'slack', name: 'Slack', icon: '💬', desc: 'Slack消息推送' }, { id: 'wechat', name: '微信', icon: '💚', desc: '微信消息推送' }, { id: 'dingtalk', name: '钉钉', icon: '📱', desc: '钉钉消息推送' }, { id: 'github', name: 'GitHub', icon: '🐙', desc: 'GitHub集成' }, { id: 'google-sheets', name: 'Google Sheets', icon: '📈', desc: 'Google表格' } ] }; const handleDragStart = (e: React.DragEvent, node: any) => { e.dataTransfer.setData('application/json', JSON.stringify({ type: 'node', nodeType: node.id, ...node })); }; const filteredNodes = searchTerm ? nodes[activeCategory as keyof typeof nodes]?.filter(node => node.name.toLowerCase().includes(searchTerm.toLowerCase()) || node.desc.toLowerCase().includes(searchTerm.toLowerCase()) ) : nodes[activeCategory as keyof typeof nodes]; return (
{node.desc}