// ─── AI Enhanced Functions ───────────────────────────────────────────────── let aiPresets = []; async function loadAIPresets() { try { aiPresets = await api('GET', '/api/ai/presets'); const select = document.getElementById('g-preset'); if (select) { aiPresets.forEach(p => { const opt = document.createElement('option'); opt.value = p.id; opt.textContent = `${p.name} (${p.category})`; select.appendChild(opt); }); } } catch (err) { console.error('Failed to load AI presets:', err); } } function applyPreset(id) { const preset = aiPresets.find(p => p.id === id); if (preset) { document.getElementById('g-prompt').value = preset.prompt; toast(`已应用预设: ${preset.name}`, 'info'); } } async function showAIOptimizeModal() { const code = document.getElementById('code-editor').value; openModal('✨ AI 优化内容', `
AI 将分析并重写您的 HTML 内容,保留结构并优化文案。
`, async () => { const type = document.getElementById('opt-type').value; const btn = document.getElementById('modal-confirm-btn'); btn.textContent = '优化中...'; btn.disabled = true; try { const data = await api('POST', '/api/ai/optimize', { html_content: code, optimization_type: type }); document.getElementById('code-editor').value = data.optimized_content; updatePreview(); toast('内容已优化', 'success'); closeModal(); } catch (err) { toast('优化失败: ' + err.message, 'error'); } }); } async function showAIWriteAssistModal() { openModal('✍️ AI 写作辅助', `
`, async () => { const btn = document.getElementById('modal-confirm-btn'); btn.textContent = '生成中...'; btn.disabled = true; try { const data = await api('POST', '/api/ai/write-assist', { section_title: document.getElementById('wa-title').value, section_type: document.getElementById('wa-type').value, context: document.getElementById('wa-context').value, tone: document.getElementById('wa-tone').value, lang: document.getElementById('wa-lang').value }); // 将生成的内容插入到编辑器光标位置或末尾 const editor = document.getElementById('code-editor'); const start = editor.selectionStart; const end = editor.selectionEnd; const text = editor.value; editor.value = text.substring(0, start) + data.content + text.substring(end); updatePreview(); toast('内容已生成并插入', 'success'); closeModal(); } catch (err) { toast('生成失败: ' + err.message, 'error'); } }); } async function showAISuggestKeywordsModal() { if (!editorPage) return; openModal('🔍 AI 关键词建议', `
`, async () => { const btn = document.getElementById('modal-confirm-btn'); btn.textContent = '分析中...'; btn.disabled = true; try { const data = await api('POST', '/api/ai/suggest-keywords', { business_name: document.getElementById('sk-name').value, service_description: document.getElementById('sk-desc').value, target_market: document.getElementById('sk-market').value }); let html = '
'; data.keywords.forEach(k => { html += ``; }); html += '
关键词意图竞争度评分
${escHtml(k.keyword)} ${escHtml(k.intent)} ${escHtml(k.competition)} ${k.score}/10
'; openModal('🔍 关键词建议结果', html); } catch (err) { toast('分析失败: ' + err.message, 'error'); } }); } // 在 renderGenerate 中调用 loadAIPresets const originalRenderGenerate = renderGenerate; renderGenerate = function() { originalRenderGenerate(); loadAIPresets(); }; // ─── AI Form Assistance ─────────────────────────────────────────────────── async function aiAssist(type) { const business = document.getElementById('g-business').value; const service = document.getElementById('g-service').value; const country = document.getElementById('g-country').value; const lang = document.getElementById('g-lang').value; const promptArea = document.getElementById('g-prompt'); const keywordsArea = document.getElementById('g-keywords'); const btn = event.currentTarget; const originalText = btn.innerHTML; btn.innerHTML = ''; btn.disabled = true; try { let result; if (type === 'business') { if (!business) return toast('请先输入部分名称', 'warning'); result = await api('POST', '/api/ai/write-assist', { section_title: '补全公司名称', context: `当前输入: ${business}, 行业: ${service}, 地区: ${country}`, lang: lang }); document.getElementById('g-business').value = result.content.replace(/["'“”‘’]/g, '').trim(); } else if (type === 'service') { if (!service) return toast('请先输入服务关键词', 'warning'); result = await api('POST', '/api/ai/write-assist', { section_title: '扩写服务描述', context: `当前服务: ${service}, 公司: ${business}, 地区: ${country}`, lang: lang }); document.getElementById('g-service').value = result.content.trim(); } else if (type === 'keywords') { result = await api('POST', '/api/ai/suggest-keywords', { business_name: business || '未命名公司', service_description: service || '通用服务', country: country }); const kwList = result.keywords.map(k => k.keyword).join(', '); keywordsArea.value = kwList; } else if (type === 'prompt') { const currentPrompt = promptArea.value; result = await api('POST', '/api/ai/write-assist', { section_title: '优化 AI 提示词', context: `当前提示词: ${currentPrompt}, 业务: ${business}, 服务: ${service}`, lang: 'en' // 提示词通常用英文效果更好 }); promptArea.value = result.content.trim(); } toast('AI 辅助完成', 'success'); } catch (err) { toast('AI 辅助失败: ' + err.message, 'error'); } finally { btn.innerHTML = originalText; btn.disabled = false; } }