// 代码解释与修复助手 - 前端JavaScript交互逻辑 // DOM元素 const codeInput = document.getElementById('codeInput'); const languageSelect = document.getElementById('languageSelect'); const taskTypeSelect = document.getElementById('taskTypeSelect'); const depthSelect = document.getElementById('depthSelect'); const depthGroup = document.getElementById('depthGroup'); const startBtn = document.getElementById('startBtn'); const clearBtn = document.getElementById('clearBtn'); const statusIndicator = document.getElementById('statusIndicator'); const loadingIndicator = document.getElementById('loadingIndicator'); const resultContent = document.getElementById('resultContent'); // 任务类型切换 function toggleDepthOption() { if (taskTypeSelect.value === 'explain') { depthGroup.style.display = 'block'; } else { depthGroup.style.display = 'none'; } } // 初始化事件监听 function initEventListeners() { // 任务类型选择变化 taskTypeSelect.addEventListener('change', toggleDepthOption); // 开始分析按钮 startBtn.addEventListener('click', analyzeCode); // 清空按钮 clearBtn.addEventListener('click', clearAll); // 键盘快捷键 codeInput.addEventListener('keydown', (e) => { // Ctrl+Enter 或 Cmd+Enter 触发分析 if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') { e.preventDefault(); analyzeCode(); } }); } // 更新状态显示 function updateStatus(status, message) { statusIndicator.className = `status status-${status}`; statusIndicator.innerHTML = ` ${message}`; } // 显示加载状态 function showLoading() { loadingIndicator.style.display = 'flex'; resultContent.style.display = 'none'; } // 隐藏加载状态 function hideLoading() { loadingIndicator.style.display = 'none'; resultContent.style.display = 'block'; } // 显示结果 function showResult(data) { if (data.success) { resultContent.innerHTML = `

分析完成

${getLanguageName(languageSelect.value)} ${taskTypeSelect.value === 'explain' ? '代码解释' : '代码修复'}
${formatResult(data.result)}
`; } else { resultContent.innerHTML = `

分析失败

${data.error || '发生未知错误'}

`; } } // 格式化结果为HTML function formatResult(result) { if (!result) return '

无结果

'; // 简单的Markdown到HTML转换 let html = result .replace(/^# (.*$)/gm, '

$1

') .replace(/^## (.*$)/gm, '

$1

') .replace(/`(.*?)`/g, '$1') .replace(/```([\s\S]*?)```/g, '
$1
') .replace(/\n/g, '
'); return html; } // 获取语言名称 function getLanguageName(langCode) { const languages = { 'python': 'Python', 'javascript': 'JavaScript', 'typescript': 'TypeScript', 'java': 'Java', 'cpp': 'C++', 'c': 'C', 'go': 'Go', 'rust': 'Rust', 'ruby': 'Ruby', 'php': 'PHP' }; return languages[langCode] || langCode; } // 分析代码 async function analyzeCode() { const code = codeInput.value.trim(); const language = languageSelect.value; const taskType = taskTypeSelect.value; const depth = taskType === 'explain' ? depthSelect.value : undefined; // 验证输入 if (!code) { alert('请输入代码后再进行分析'); codeInput.focus(); return; } // 更新状态 updateStatus('loading', '正在分析...'); showLoading(); try { // 发送请求 const response = await fetch('/auto', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ code: code, language: language, task_type: taskType, depth: depth }) }); const data = await response.json(); // 显示结果 hideLoading(); showResult(data); updateStatus(data.success ? 'success' : 'error', data.success ? '分析完成' : '分析失败'); } catch (error) { hideLoading(); updateStatus('error', '请求失败'); resultContent.innerHTML = `

网络错误

无法连接到服务器,请检查网络连接

`; console.error('请求错误:', error); } } // 清空所有内容 function clearAll() { codeInput.value = ''; languageSelect.value = 'python'; taskTypeSelect.value = 'explain'; depthSelect.value = 'detailed'; toggleDepthOption(); resultContent.innerHTML = `

输入代码并点击"开始分析"按钮,获取AI分析结果

`; updateStatus('idle', '就绪'); codeInput.focus(); } // 初始化应用 function initApp() { toggleDepthOption(); initEventListeners(); codeInput.focus(); } // 页面加载完成后初始化 document.addEventListener('DOMContentLoaded', initApp);