import React, { useState, useRef } from 'react'; import { Search, Plus, Upload, MoreHorizontal, Code, Edit2, Copy, Trash2, Calendar, CloudUpload, File as FileIcon, X, Layout, FilePlus } from 'lucide-react'; import { Button, Input, TableHeader, TableRow, TableHead, TableCell, Dialog, Card } from '../components/UI'; import { mockWorkflows } from '../services/mockData'; import { useNavigate } from 'react-router-dom'; export const WorkflowsPage: React.FC = () => { const navigate = useNavigate(); const [workflows, setWorkflows] = useState(mockWorkflows); const [searchTerm, setSearchTerm] = useState(''); const [isUploadOpen, setIsUploadOpen] = useState(false); const [isCreateOpen, setIsCreateOpen] = useState(false); const [activeMenu, setActiveMenu] = useState(null); // New Workflow State const [newWfName, setNewWfName] = useState(''); const [selectedTemplate, setSelectedTemplate] = useState<'blank' | 'lead'>('blank'); const filteredWorkflows = workflows.filter(wf => wf.name.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleCreateWorkflow = () => { if (!newWfName.trim()) { alert('请输入工作流名称'); return; } setIsCreateOpen(false); // Navigate to the editor with the template name and type as query params navigate(`/workflows/new?name=${encodeURIComponent(newWfName)}&template=${selectedTemplate}`); }; const handleDeleteWorkflow = (id: string) => { if (confirm('确定要删除这个工作流吗?')) { setWorkflows(prev => prev.filter(w => w.id !== id)); setActiveMenu(null); } }; return (

工作流

setSearchTerm(e.target.value)} />
名称 节点数量 创建时间 更新时间 操作 {filteredWorkflows.map(wf => ( {wf.nodeCount} 个节点 {wf.createdAt} {wf.updatedAt} {activeMenu === wf.id && (
)} ))} {filteredWorkflows.length === 0 && ( 暂无工作流数据 )}
setIsUploadOpen(false)} /> {/* Create Workflow Modal */} setIsCreateOpen(false)} title="创建新工作流" footer={ <> } >
setNewWfName(e.target.value)} placeholder="例如: Lead Qualification Agent" autoFocus />
setSelectedTemplate('blank')} className={`p-4 rounded-xl border-2 cursor-pointer transition-all flex flex-col items-center text-center space-y-2 ${selectedTemplate === 'blank' ? 'border-primary bg-primary/10' : 'border-white/5 bg-white/5 hover:bg-white/10'}`} >
空白模板
从零开始构建
setSelectedTemplate('lead')} className={`p-4 rounded-xl border-2 cursor-pointer transition-all flex flex-col items-center text-center space-y-2 ${selectedTemplate === 'lead' ? 'border-primary bg-primary/10' : 'border-white/5 bg-white/5 hover:bg-white/10'}`} >
销售获客
标准 Lead 转化逻辑
); }; const UploadJsonModal: React.FC<{ isOpen: boolean; onClose: () => void }> = ({ isOpen, onClose }) => { const [dragActive, setDragActive] = useState(false); const [file, setFile] = useState(null); const inputRef = useRef(null); const handleDrag = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(e.type === "dragenter" || e.type === "dragover"); }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(false); if (e.dataTransfer.files?.[0]) setFile(e.dataTransfer.files[0]); }; return ( } >
inputRef.current?.click()} > e.target.files?.[0] && setFile(e.target.files[0])} />

{file ? {file.name} : 点击上传 或将 JSON 文件拖拽到此处}

仅支持 .json 格式的工作流配置文件

); };