// 从配置文件导入设置 // 配置在 env.js 文件中定义 // DOM 元素 const textInput = document.getElementById('text-input'); const styleSelect = document.getElementById('style-select'); const generateBtn = document.getElementById('generateBtn'); const loadingDiv = document.getElementById('loading'); const expressionsContainer = document.getElementById('expressions'); // 调用后端API async function callBackendAPI(text, style) { try { // 获取JWT token const token = localStorage.getItem('token'); if (!token) { throw new Error('未登录,请先登录后使用AI功能'); } const response = await fetch(`${API_CONFIG.baseUrl}${API_CONFIG.endpoints.expressionMaker}`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify({ text: text, style: style }) }); if (!response.ok) { if (response.status === 402) { throw new Error('您的萌芽币余额不足,无法使用此功能'); } const errorData = await response.json(); throw new Error(errorData.error || `API请求失败: ${response.status} ${response.statusText}`); } const data = await response.json(); if (data.success) { return data.expressions; } else { throw new Error(data.error || 'API响应格式异常'); } } catch (error) { console.error('API调用错误:', error); throw error; } } // 解析AI响应 function parseAIResponse(response) { try { // 尝试直接解析JSON const parsed = JSON.parse(response); return parsed.expressions || {}; } catch (error) { // 如果直接解析失败,尝试提取JSON部分 const jsonMatch = response.match(/\{[\s\S]*\}/); if (jsonMatch) { try { const parsed = JSON.parse(jsonMatch[0]); return parsed.expressions || {}; } catch (e) { console.error('JSON解析失败:', e); } } // 如果JSON解析失败,返回空对象 console.error('无法解析AI响应:', response); return {}; } } // 显示表情建议 function displayExpressions(expressions) { expressionsContainer.innerHTML = ''; if (!expressions || Object.keys(expressions).length === 0) { expressionsContainer.innerHTML = '