import React, { useState } from 'react'; import { Plus, Search, Play, Copy, Trash2, Zap, MessageSquare, Mic, AlertTriangle, ListFilter, Braces, Rocket } from 'lucide-react'; import { Button, Input, Card, Badge, Dialog } from '../components/UI'; import { mockAutoTestAssistants, mockAssistants } from '../services/mockData'; import { AutoTestAssistant, TestType, TestMethod } from '../types'; export const AutoTestPage: React.FC = () => { const [testAssistants, setTestAssistants] = useState(mockAutoTestAssistants); const [searchTerm, setSearchTerm] = useState(''); const [selectedId, setSelectedId] = useState(null); const [deleteId, setDeleteId] = useState(null); const selectedTestAssistant = testAssistants.find(a => a.id === selectedId) || null; const filteredTests = testAssistants.filter(a => a.name.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleCreate = () => { const newId = `at_${Date.now()}`; const newAssistant: AutoTestAssistant = { id: newId, name: '新测试助手', type: TestType.INTELLIGENT, method: TestMethod.TEXT, targetAssistantId: mockAssistants[0]?.id || '', fixedWorkflowSteps: [], intelligentPrompt: '你是一个普通的测试用户,试图了解产品信息。', createdAt: new Date().toISOString().replace('T', ' ').substring(0, 16) }; setTestAssistants([...testAssistants, newAssistant]); setSelectedId(newId); }; const handleCopy = (e: React.MouseEvent, assistant: AutoTestAssistant) => { e.stopPropagation(); const newAssistant = { ...assistant, id: `at_${Date.now()}`, name: `${assistant.name} (Copy)` }; setTestAssistants([...testAssistants, newAssistant]); }; const handleDeleteClick = (e: React.MouseEvent, id: string) => { e.stopPropagation(); setDeleteId(id); }; const confirmDelete = () => { if (deleteId) { setTestAssistants(prev => prev.filter(a => a.id !== deleteId)); if (selectedId === deleteId) setSelectedId(null); setDeleteId(null); } }; const updateAssistant = (field: keyof AutoTestAssistant, value: any) => { if (!selectedId) return; setTestAssistants(prev => prev.map(a => a.id === selectedId ? { ...a, [field]: value } : a)); }; const handleAddStep = () => { if (selectedTestAssistant) { updateAssistant('fixedWorkflowSteps', [...selectedTestAssistant.fixedWorkflowSteps, '']); } }; const updateStep = (idx: number, val: string) => { if (selectedTestAssistant) { const newSteps = [...selectedTestAssistant.fixedWorkflowSteps]; newSteps[idx] = val; updateAssistant('fixedWorkflowSteps', newSteps); } }; const removeStep = (idx: number) => { if (selectedTestAssistant) { updateAssistant('fixedWorkflowSteps', selectedTestAssistant.fixedWorkflowSteps.filter((_, i) => i !== idx)); } }; return (
{/* LEFT COLUMN: Test Assistants List */}

测试助手列表

setSearchTerm(e.target.value)} />
{filteredTests.map(test => (
setSelectedId(test.id)} className={`group relative flex flex-col p-4 rounded-xl border transition-all cursor-pointer ${ selectedId === test.id ? 'bg-primary/10 border-primary/40 shadow-[0_0_15px_rgba(6,182,212,0.15)]' : 'bg-card/30 border-white/5 hover:bg-white/5 hover:border-white/10' }`} >
{test.name}
{test.type === TestType.FIXED ? '固定流程' : '智能测试'}
{test.method === TestMethod.TEXT ? : } {test.method === TestMethod.TEXT ? '文本' : '音频'}
{/* Hover Actions */}
))} {filteredTests.length === 0 && (
[ NO TESTERS FOUND ]
)}
{/* RIGHT COLUMN: Config Panel */}
{selectedTestAssistant ? ( <> {/* Header Area */}
updateAssistant('name', e.target.value)} className="font-bold bg-white/5 border-white/10 focus:border-primary/50 text-base" />
{/* Scroll Area */}
{/* Basic Config Grid */}
{/* Conditional Settings */}
{selectedTestAssistant.type === TestType.FIXED ? (
{selectedTestAssistant.fixedWorkflowSteps.map((step, idx) => (
{idx + 1}
updateStep(idx, e.target.value)} placeholder={`步骤 ${idx + 1} 的测试输入...`} className="bg-white/5" />
))} {selectedTestAssistant.fixedWorkflowSteps.length === 0 && (
点击右上角按钮添加测试步骤
)}
) : (