From 174d8a3bc5282222380a483bab5cc2edfc755c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A0=91=E8=90=8C=E8=8A=BD?= <3205788256@qq.com> Date: Tue, 16 Sep 2025 18:39:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E7=BE=8E=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/aimodelapp.cpython-313.pyc | Bin 27780 -> 33824 bytes .../modules/__pycache__/auth.cpython-313.pyc | Bin 14806 -> 14621 bytes .../__pycache__/email_service.cpython-313.pyc | Bin 9810 -> 9820 bytes .../user_management.cpython-313.pyc | Bin 13194 -> 13571 bytes .../public/aimodelapp/AI写诗小助手/env.js | 26 ++ .../public/aimodelapp/AI写诗小助手/script.js | 18 +- .../public/aimodelapp/AI变量命名助手/env.js | 26 ++ .../aimodelapp/AI变量命名助手/index.html | 1 - .../aimodelapp/AI变量命名助手/script.js | 13 +- .../public/aimodelapp/AI姓名评测/env.js | 26 ++ .../public/aimodelapp/AI姓名评测/script.js | 18 +- .../public/aimodelapp/AI文章转文言文/env.js | 26 ++ .../aimodelapp/AI文章转文言文/script.js | 18 +- .../public/aimodelapp/AI生成Linux命令/env.js | 26 ++ .../aimodelapp/AI生成Linux命令/script.js | 18 +- .../public/aimodelapp/AI生成表情包/env.js | 26 ++ .../public/aimodelapp/AI生成表情包/script.js | 22 +- .../public/aimodelapp/AI语言翻译助手/env.js | 26 ++ .../aimodelapp/AI语言翻译助手/script.js | 18 +- .../public/aimodelapp/coin-manager.js | 288 ------------------ InfoGenie-frontend/src/components/Header.js | 10 +- .../src/config/StaticPageConfig.js | 80 ++--- InfoGenie-frontend/src/pages/AiModelPage.js | 14 +- InfoGenie-frontend/src/pages/Api60sPage.js | 2 +- InfoGenie-frontend/src/pages/SmallGamePage.js | 9 +- .../前端萌芽币消费系统集成文档.md | 100 ------ 26 files changed, 337 insertions(+), 474 deletions(-) create mode 100644 InfoGenie-frontend/public/aimodelapp/AI写诗小助手/env.js create mode 100644 InfoGenie-frontend/public/aimodelapp/AI变量命名助手/env.js create mode 100644 InfoGenie-frontend/public/aimodelapp/AI姓名评测/env.js create mode 100644 InfoGenie-frontend/public/aimodelapp/AI文章转文言文/env.js create mode 100644 InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/env.js create mode 100644 InfoGenie-frontend/public/aimodelapp/AI生成表情包/env.js create mode 100644 InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/env.js delete mode 100644 InfoGenie-frontend/public/aimodelapp/coin-manager.js delete mode 100644 InfoGenie-frontend/前端萌芽币消费系统集成文档.md diff --git a/InfoGenie-backend/modules/__pycache__/aimodelapp.cpython-313.pyc b/InfoGenie-backend/modules/__pycache__/aimodelapp.cpython-313.pyc index a094e037633db4afe73e51d9f43cebaaccfd0f04..0a5abfa257fd83ed4d7848a0ff333559a64a2e3f 100755 GIT binary patch delta 9268 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 C_gHQK diff --git a/InfoGenie-backend/modules/__pycache__/email_service.cpython-313.pyc b/InfoGenie-backend/modules/__pycache__/email_service.cpython-313.pyc index 5a86642c31fd4696ba131a41764cdacc01822a55..6ce361749a6954e9ed0e4d91a6988d8987a8153f 100755 GIT binary patch delta 151 zcmccQbH|78GcPX}0}zP4KamlxzLBqoQQpqgDkh+^BqKjB#xpN1-#s-iGZn$ooxGmW zfKhDo14aQxMw!hYnZAoMDsFx$af+33{pKxl;Y^HAH}fc-W@P-a`G(SMMn-|nTU1II vwb+;$Ilu5QG1`3L@@8V>`V_-r%*ggB2WW`GCpA$<+s_8vjPgaiK$idjDf};P delta 141 zcmccPbIFJAGcPX}0}ybswv_sNAbF+SKVrg)l>@zdrX;A>v1#67x4n^2LJ^;E201Z diff --git a/InfoGenie-backend/modules/__pycache__/user_management.cpython-313.pyc b/InfoGenie-backend/modules/__pycache__/user_management.cpython-313.pyc index cb15a4fca13ef57989f4c858b9f97dbb714d9983..e0d43101a9bcdf3ccedfbe7dc3afbcf24b9fceb6 100755 GIT binary patch delta 6009 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 GTlXIhXe{*r delta 5623 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 diff --git a/InfoGenie-frontend/public/aimodelapp/AI写诗小助手/env.js b/InfoGenie-frontend/public/aimodelapp/AI写诗小助手/env.js new file mode 100644 index 00000000..c0bdbc79 --- /dev/null +++ b/InfoGenie-frontend/public/aimodelapp/AI写诗小助手/env.js @@ -0,0 +1,26 @@ +// 环境配置文件 +// 此文件定义了AI应用的基本配置 + +// API配置 +window.API_CONFIG = { + baseUrl: 'http://127.0.0.1:5002', + endpoints: { + poetry: '/api/aimodelapp/poetry' + } +}; + +// 认证配置 +window.AUTH_CONFIG = { + tokenKey: 'token', + getToken: () => localStorage.getItem('token'), + isAuthenticated: () => !!localStorage.getItem('token') +}; + +// 应用配置 +window.APP_CONFIG = { + name: 'InfoGenie AI工具', + version: '1.0.0', + debug: false +}; + +console.log('环境配置已加载'); \ No newline at end of file diff --git a/InfoGenie-frontend/public/aimodelapp/AI写诗小助手/script.js b/InfoGenie-frontend/public/aimodelapp/AI写诗小助手/script.js index 090bc8bf..d342d613 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI写诗小助手/script.js +++ b/InfoGenie-frontend/public/aimodelapp/AI写诗小助手/script.js @@ -10,17 +10,27 @@ const themeInput = document.getElementById('theme'); // 调用后端API async function callBackendAPI(theme) { try { - const response = await fetch('http://127.0.0.1:5002/api/aimodelapp/poetry', { + const token = AUTH_CONFIG.getToken(); + const headers = { + 'Content-Type': 'application/json' + }; + + if (token) { + headers['Authorization'] = `Bearer ${token}`; + } + + const response = await fetch(`${API_CONFIG.baseUrl}${API_CONFIG.endpoints.poetry}`, { method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, + headers: headers, body: JSON.stringify({ theme: theme }) }); 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}`); } diff --git a/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/env.js b/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/env.js new file mode 100644 index 00000000..a777e992 --- /dev/null +++ b/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/env.js @@ -0,0 +1,26 @@ +// 环境配置文件 +// 此文件定义了AI应用的基本配置 + +// API配置 +window.API_CONFIG = { + baseUrl: 'http://127.0.0.1:5002', + endpoints: { + variableNaming: '/api/aimodelapp/variable-naming' + } +}; + +// 认证配置 +window.AUTH_CONFIG = { + tokenKey: 'token', + getToken: () => localStorage.getItem('token'), + isAuthenticated: () => !!localStorage.getItem('token') +}; + +// 应用配置 +window.APP_CONFIG = { + name: 'InfoGenie AI工具', + version: '1.0.0', + debug: false +}; + +console.log('环境配置已加载'); \ No newline at end of file diff --git a/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/index.html b/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/index.html index d344633a..6e76ba22 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/index.html +++ b/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/index.html @@ -37,7 +37,6 @@ - diff --git a/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/script.js b/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/script.js index f012924f..bc733cca 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/script.js +++ b/InfoGenie-frontend/public/aimodelapp/AI变量命名助手/script.js @@ -59,6 +59,9 @@ async function callBackendAPI(description) { }); 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}`); } @@ -216,22 +219,12 @@ async function generateSuggestions() { return; } - // 检查萌芽币余额是否足够 - if (window.coinManager && !window.coinManager.checkBeforeApiCall()) { - return; - } - showLoading(true); suggestionsContainer.innerHTML = ''; try { const suggestions = await callBackendAPI(description); displaySuggestions(suggestions); - - // 刷新萌芽币信息 - if (window.coinManager) { - window.coinManager.loadCoinsInfo(); - } } catch (error) { console.error('生成建议失败:', error); // 检查是否是萌芽币不足导致的错误 diff --git a/InfoGenie-frontend/public/aimodelapp/AI姓名评测/env.js b/InfoGenie-frontend/public/aimodelapp/AI姓名评测/env.js new file mode 100644 index 00000000..acf8ec64 --- /dev/null +++ b/InfoGenie-frontend/public/aimodelapp/AI姓名评测/env.js @@ -0,0 +1,26 @@ +// 环境配置文件 +// 此文件定义了AI应用的基本配置 + +// API配置 +window.API_CONFIG = { + baseUrl: 'http://127.0.0.1:5002', + endpoints: { + nameAnalysis: '/api/aimodelapp/name-analysis' + } +}; + +// 认证配置 +window.AUTH_CONFIG = { + tokenKey: 'token', + getToken: () => localStorage.getItem('token'), + isAuthenticated: () => !!localStorage.getItem('token') +}; + +// 应用配置 +window.APP_CONFIG = { + name: 'InfoGenie AI工具', + version: '1.0.0', + debug: false +}; + +console.log('环境配置已加载'); \ No newline at end of file diff --git a/InfoGenie-frontend/public/aimodelapp/AI姓名评测/script.js b/InfoGenie-frontend/public/aimodelapp/AI姓名评测/script.js index d38ecbb5..4a230889 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI姓名评测/script.js +++ b/InfoGenie-frontend/public/aimodelapp/AI姓名评测/script.js @@ -193,11 +193,18 @@ async function analyzeName() { try { // 调用后端API - const response = await fetch('http://127.0.0.1:5002/api/aimodelapp/name-analysis', { + const token = AUTH_CONFIG.getToken(); + const headers = { + 'Content-Type': 'application/json' + }; + + if (token) { + headers['Authorization'] = `Bearer ${token}`; + } + + const response = await fetch(`${API_CONFIG.baseUrl}${API_CONFIG.endpoints.nameAnalysis}`, { method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, + headers: headers, body: JSON.stringify(requestBody) }); @@ -207,6 +214,9 @@ async function analyzeName() { } if (!response.ok) { + if (response.status === 402) { + throw new Error('您的萌芽币余额不足,无法使用此功能'); + } const errorData = await response.json(); throw new Error(errorData.error || `请求失败: ${response.status} ${response.statusText}`); } diff --git a/InfoGenie-frontend/public/aimodelapp/AI文章转文言文/env.js b/InfoGenie-frontend/public/aimodelapp/AI文章转文言文/env.js new file mode 100644 index 00000000..f69465ef --- /dev/null +++ b/InfoGenie-frontend/public/aimodelapp/AI文章转文言文/env.js @@ -0,0 +1,26 @@ +// 环境配置文件 +// 此文件定义了AI应用的基本配置 + +// API配置 +window.API_CONFIG = { + baseUrl: 'http://127.0.0.1:5002', + endpoints: { + classicalConversion: '/api/aimodelapp/classical_conversion' + } +}; + +// 认证配置 +window.AUTH_CONFIG = { + tokenKey: 'token', + getToken: () => localStorage.getItem('token'), + isAuthenticated: () => !!localStorage.getItem('token') +}; + +// 应用配置 +window.APP_CONFIG = { + name: 'InfoGenie AI工具', + version: '1.0.0', + debug: false +}; + +console.log('环境配置已加载'); \ No newline at end of file diff --git a/InfoGenie-frontend/public/aimodelapp/AI文章转文言文/script.js b/InfoGenie-frontend/public/aimodelapp/AI文章转文言文/script.js index 79d427ac..6e27f030 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI文章转文言文/script.js +++ b/InfoGenie-frontend/public/aimodelapp/AI文章转文言文/script.js @@ -12,11 +12,18 @@ const conversionResultContainer = document.getElementById('conversionResult'); // 调用后端API async function callBackendAPI(modernText, style, articleType) { try { - const response = await fetch('http://127.0.0.1:5002/api/aimodelapp/classical_conversion', { + const token = AUTH_CONFIG.getToken(); + const headers = { + 'Content-Type': 'application/json' + }; + + if (token) { + headers['Authorization'] = `Bearer ${token}`; + } + + const response = await fetch(`${API_CONFIG.baseUrl}${API_CONFIG.endpoints.classicalConversion}`, { method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, + headers: headers, body: JSON.stringify({ modern_text: modernText, style: style, @@ -25,6 +32,9 @@ async function callBackendAPI(modernText, style, articleType) { }); 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}`); } diff --git a/InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/env.js b/InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/env.js new file mode 100644 index 00000000..ac15a195 --- /dev/null +++ b/InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/env.js @@ -0,0 +1,26 @@ +// 环境配置文件 +// 此文件定义了AI应用的基本配置 + +// API配置 +window.API_CONFIG = { + baseUrl: 'http://127.0.0.1:5002', + endpoints: { + linuxCommand: '/api/aimodelapp/linux-command' + } +}; + +// 认证配置 +window.AUTH_CONFIG = { + tokenKey: 'token', + getToken: () => localStorage.getItem('token'), + isAuthenticated: () => !!localStorage.getItem('token') +}; + +// 应用配置 +window.APP_CONFIG = { + name: 'InfoGenie AI工具', + version: '1.0.0', + debug: false +}; + +console.log('环境配置已加载'); \ No newline at end of file diff --git a/InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/script.js b/InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/script.js index 1a267e4f..41a25bdf 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/script.js +++ b/InfoGenie-frontend/public/aimodelapp/AI生成Linux命令/script.js @@ -11,11 +11,18 @@ const commandsContainer = document.getElementById('commands'); // 调用后端API async function callBackendAPI(taskDescription, difficultyLevel) { try { - const response = await fetch('http://127.0.0.1:5002/api/aimodelapp/linux-command', { + const token = AUTH_CONFIG.getToken(); + const headers = { + 'Content-Type': 'application/json' + }; + + if (token) { + headers['Authorization'] = `Bearer ${token}`; + } + + const response = await fetch(`${API_CONFIG.baseUrl}${API_CONFIG.endpoints.linuxCommand}`, { method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, + headers: headers, body: JSON.stringify({ task_description: taskDescription, difficulty_level: difficultyLevel @@ -23,6 +30,9 @@ async function callBackendAPI(taskDescription, difficultyLevel) { }); 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}`); } diff --git a/InfoGenie-frontend/public/aimodelapp/AI生成表情包/env.js b/InfoGenie-frontend/public/aimodelapp/AI生成表情包/env.js new file mode 100644 index 00000000..650807b1 --- /dev/null +++ b/InfoGenie-frontend/public/aimodelapp/AI生成表情包/env.js @@ -0,0 +1,26 @@ +// 环境配置文件 +// 此文件定义了AI应用的基本配置 + +// API配置 +window.API_CONFIG = { + baseUrl: 'http://127.0.0.1:5002', + endpoints: { + expressionMaker: '/api/aimodelapp/expression-maker' + } +}; + +// 认证配置 +window.AUTH_CONFIG = { + tokenKey: 'token', + getToken: () => localStorage.getItem('token'), + isAuthenticated: () => !!localStorage.getItem('token') +}; + +// 应用配置 +window.APP_CONFIG = { + name: 'InfoGenie AI工具', + version: '1.0.0', + debug: false +}; + +console.log('环境配置已加载'); \ No newline at end of file diff --git a/InfoGenie-frontend/public/aimodelapp/AI生成表情包/script.js b/InfoGenie-frontend/public/aimodelapp/AI生成表情包/script.js index 8afea55e..471e7237 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI生成表情包/script.js +++ b/InfoGenie-frontend/public/aimodelapp/AI生成表情包/script.js @@ -11,10 +11,18 @@ const expressionsContainer = document.getElementById('expressions'); // 调用后端API async function callBackendAPI(text, style) { try { - const response = await fetch('http://127.0.0.1:5002/api/aimodelapp/expression-maker', { + // 获取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' + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${token}` }, body: JSON.stringify({ text: text, @@ -23,6 +31,9 @@ async function callBackendAPI(text, 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}`); } @@ -198,7 +209,12 @@ async function generateExpressions() { displayExpressions(expressions); } catch (error) { console.error('生成表情失败:', error); - showErrorMessage(`生成失败: ${error.message}`); + // 检查是否是萌芽币不足导致的错误 + if (error.message && error.message.includes('萌芽币余额不足')) { + showErrorMessage(`萌芽币不足: 每次使用AI功能需要消耗100萌芽币,请通过每日签到获取更多萌芽币`); + } else { + showErrorMessage(`生成失败: ${error.message}`); + } } finally { showLoading(false); } diff --git a/InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/env.js b/InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/env.js new file mode 100644 index 00000000..8b3c1a0f --- /dev/null +++ b/InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/env.js @@ -0,0 +1,26 @@ +// 环境配置文件 +// 此文件定义了AI应用的基本配置 + +// API配置 +window.API_CONFIG = { + baseUrl: 'http://127.0.0.1:5002', + endpoints: { + translation: '/api/aimodelapp/translation' + } +}; + +// 认证配置 +window.AUTH_CONFIG = { + tokenKey: 'token', + getToken: () => localStorage.getItem('token'), + isAuthenticated: () => !!localStorage.getItem('token') +}; + +// 应用配置 +window.APP_CONFIG = { + name: 'InfoGenie AI工具', + version: '1.0.0', + debug: false +}; + +console.log('环境配置已加载'); \ No newline at end of file diff --git a/InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/script.js b/InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/script.js index 535cc287..87495ab2 100755 --- a/InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/script.js +++ b/InfoGenie-frontend/public/aimodelapp/AI语言翻译助手/script.js @@ -11,11 +11,18 @@ const translationResultContainer = document.getElementById('translationResult'); // 调用后端API async function callBackendAPI(sourceText, targetLanguage) { try { - const response = await fetch('http://127.0.0.1:5002/api/aimodelapp/translation', { + const token = AUTH_CONFIG.getToken(); + const headers = { + 'Content-Type': 'application/json' + }; + + if (token) { + headers['Authorization'] = `Bearer ${token}`; + } + + const response = await fetch(`${API_CONFIG.baseUrl}${API_CONFIG.endpoints.translation}`, { method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, + headers: headers, body: JSON.stringify({ source_text: sourceText, target_language: targetLanguage @@ -23,6 +30,9 @@ async function callBackendAPI(sourceText, targetLanguage) { }); 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}`); } diff --git a/InfoGenie-frontend/public/aimodelapp/coin-manager.js b/InfoGenie-frontend/public/aimodelapp/coin-manager.js deleted file mode 100644 index 2685272a..00000000 --- a/InfoGenie-frontend/public/aimodelapp/coin-manager.js +++ /dev/null @@ -1,288 +0,0 @@ -/** - * InfoGenie 萌芽币管理工具 - * 此模块负责管理用户AI功能的萌芽币余额和消费 - * 为所有AI模型应用提供统一的萌芽币检查和显示功能 - */ - -class CoinManager { - constructor() { - // 状态变量 - this.coins = 0; - this.aiCost = 100; - this.canUseAi = false; - this.username = ''; - this.usageCount = 0; - this.recentUsage = []; - this.isLoaded = false; - this.isLoading = false; - this.error = null; - - // UI元素 - this.coinInfoContainer = null; - - // 初始化 - this.init(); - } - - /** - * 初始化萌芽币管理器 - */ - async init() { - // 创建UI元素 - this.createCoinInfoUI(); - - // 加载萌芽币信息 - await this.loadCoinsInfo(); - - // 监听网络状态变化 - window.addEventListener('online', () => this.loadCoinsInfo()); - } - - /** - * 创建萌芽币信息UI - */ - createCoinInfoUI() { - // 检查是否已创建 - if (this.coinInfoContainer) { - return; - } - - // 创建容器 - this.coinInfoContainer = document.createElement('div'); - this.coinInfoContainer.className = 'coin-info-container'; - this.coinInfoContainer.style = ` - position: fixed; - top: 10px; - right: 10px; - background: rgba(255, 255, 255, 0.95); - border-radius: 8px; - padding: 12px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); - z-index: 9999; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - max-width: 300px; - transition: all 0.3s ease; - border: 1px solid rgba(74, 222, 128, 0.4); - `; - - // 更新UI内容 - this.updateCoinInfoUI(); - - // 添加到页面 - document.body.appendChild(this.coinInfoContainer); - } - - /** - * 更新萌芽币信息UI - */ - updateCoinInfoUI() { - if (!this.coinInfoContainer) { - return; - } - - let content = ''; - - if (this.isLoading) { - content = '
加载中...
'; - } else if (this.error) { - content = ` -
-
加载失败
-
${this.error}
- -
- `; - } else if (!this.isLoaded) { - content = '
正在检查萌芽币余额...
'; - } else { - const usageHistory = this.recentUsage.length > 0 - ? ` -
-
最近使用记录:
- ${this.recentUsage.map(usage => ` -
- ${this.formatApiType(usage.api_type)} (-${usage.cost}币) - ${this.formatDate(usage.timestamp)} -
- `).join('')} -
- ` - : ''; - - content = ` -
-
${this.username || '用户'}的萌芽币
-
- ${this.canUseAi ? '可使用' : '币不足'} -
-
- -
-
- ${this.coins} -
-
萌芽币
-
- -
- AI功能每次使用消耗 ${this.aiCost} 萌芽币 -
- - ${usageHistory} - `; - } - - this.coinInfoContainer.innerHTML = content; - } - - /** - * 加载萌芽币信息 - */ - async loadCoinsInfo() { - try { - this.isLoading = true; - this.error = null; - this.updateCoinInfoUI(); - - // 获取JWT token - const token = localStorage.getItem('token'); - - if (!token) { - this.error = '未登录,无法获取萌芽币信息'; - this.isLoading = false; - this.updateCoinInfoUI(); - return; - } - - // 调用API - const response = await fetch('/api/aimodelapp/coins', { - method: 'GET', - headers: { - 'Authorization': `Bearer ${token}` - } - }); - - if (!response.ok) { - const errorData = await response.json(); - throw new Error(errorData.message || '获取萌芽币信息失败'); - } - - const data = await response.json(); - - if (data.success) { - // 更新状态 - this.coins = data.data.coins; - this.aiCost = data.data.ai_cost; - this.canUseAi = data.data.can_use_ai; - this.username = data.data.username; - this.usageCount = data.data.usage_count; - this.recentUsage = data.data.recent_usage || []; - this.isLoaded = true; - } else { - throw new Error(data.message || '获取萌芽币信息失败'); - } - } catch (error) { - console.error('加载萌芽币信息失败:', error); - this.error = error.message || '获取萌芽币信息失败'; - } finally { - this.isLoading = false; - this.updateCoinInfoUI(); - } - } - - /** - * 格式化API类型 - */ - formatApiType(apiType) { - const typeMap = { - 'chat': 'AI聊天', - 'name-analysis': '姓名评测', - 'variable-naming': '变量命名', - 'poetry': 'AI写诗', - 'translation': 'AI翻译', - 'classical_conversion': '文言文转换', - 'expression-maker': '表情制作', - 'linux-command': 'Linux命令' - }; - - return typeMap[apiType] || apiType; - } - - /** - * 格式化日期 - */ - formatDate(isoString) { - try { - const date = new Date(isoString); - return `${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes().toString().padStart(2, '0')}`; - } catch (e) { - return isoString; - } - } - - /** - * 检查是否有足够的萌芽币 - */ - hasEnoughCoins() { - return this.canUseAi; - } - - /** - * 显示萌芽币不足提示 - */ - showInsufficientCoinsMessage() { - alert(`萌芽币余额不足!\n当前余额:${this.coins},需要:${this.aiCost}\n请通过每日签到等方式获取更多萌芽币。`); - } - - /** - * 在API调用前检查萌芽币 - * @returns {boolean} 是否有足够的萌芽币 - */ - checkBeforeApiCall() { - // 强制刷新萌芽币状态 - this.loadCoinsInfo().then(() => { - // 检查余额 - if (!this.hasEnoughCoins()) { - this.showInsufficientCoinsMessage(); - return false; - } - return true; - }); - - // 使用当前缓存的状态进行快速检查 - if (!this.hasEnoughCoins()) { - this.showInsufficientCoinsMessage(); - return false; - } - return true; - } -} - -// 创建全局实例 -const coinManager = new window.CoinManager = new CoinManager(); - -// 导出实例 -export default coinManager; diff --git a/InfoGenie-frontend/src/components/Header.js b/InfoGenie-frontend/src/components/Header.js index c6b5d7a4..ac89ce0d 100755 --- a/InfoGenie-frontend/src/components/Header.js +++ b/InfoGenie-frontend/src/components/Header.js @@ -33,14 +33,18 @@ const Logo = styled(Link)` .logo-icon { margin-right: 8px; - font-size: 24px; + width: 36px; + height: 36px; + object-fit: cover; + border-radius: 50%; } @media (max-width: 768px) { font-size: 18px; .logo-icon { - font-size: 20px; + width: 30px; + height: 30px; } } `; @@ -231,7 +235,7 @@ const Header = () => { - + InfoGenie Logo 神奇万事通 diff --git a/InfoGenie-frontend/src/config/StaticPageConfig.js b/InfoGenie-frontend/src/config/StaticPageConfig.js index ebac76ed..780da47d 100755 --- a/InfoGenie-frontend/src/config/StaticPageConfig.js +++ b/InfoGenie-frontend/src/config/StaticPageConfig.js @@ -67,7 +67,7 @@ export const SMALL_GAMES = [ description: '节奏感游戏,考验你的反应速度和手指协调', link: '/smallgame/别踩白方块/index.html', gradient: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', - icon: '⚫' + icon: '⬛' }, { title: '俄罗斯方块', @@ -98,19 +98,19 @@ export const API_60S_CATEGORIES = [ icon: '🔥', color: '#ff6b6b', apis: [ - { title: '哔哩哔哩热搜榜', link: '/60sapi/热搜榜单/哔哩哔哩热搜榜/index.html' }, - { title: '抖音热搜榜', link: '/60sapi/热搜榜单/抖音热搜榜/index.html' }, - { title: '猫眼票房排行榜', link: '/60sapi/热搜榜单/猫眼票房排行榜/index.html' }, - { title: '头条热搜榜', link: '/60sapi/热搜榜单/头条热搜榜/index.html' }, - { title: '网易云榜单', link: '/60sapi/热搜榜单/网易云榜单/index.html' }, - { title: '微博热搜榜', link: '/60sapi/热搜榜单/微博热搜榜/index.html' }, - { title: '知乎热门话题', link: '/60sapi/热搜榜单/知乎热门话题/index.html' }, - { title: 'Hacker News 榜单', link: '/60sapi/热搜榜单/Hacker News 榜单/index.html' }, - { title: '小红书热点', link: '/60sapi/热搜榜单/小红书热点/index.html' }, - { title: '百度实时热搜', link: '/60sapi/热搜榜单/百度实时热搜/index.html' }, - { title: '百度电视剧榜', link: '/60sapi/热搜榜单/百度电视剧榜/index.html' }, - { title: '百度贴吧话题榜', link: '/60sapi/热搜榜单/百度贴吧话题榜/index.html' }, - { title: '懂车帝热搜', link: '/60sapi/热搜榜单/懂车帝热搜/index.html' }, + { title: '哔哩哔哩热搜榜', link: '/60sapi/热搜榜单/哔哩哔哩热搜榜/index.html', icon: '📺' }, + { title: '抖音热搜榜', link: '/60sapi/热搜榜单/抖音热搜榜/index.html', icon: '🎵' }, + { title: '猫眼票房排行榜', link: '/60sapi/热搜榜单/猫眼票房排行榜/index.html', icon: '🎬' }, + { title: '头条热搜榜', link: '/60sapi/热搜榜单/头条热搜榜/index.html', icon: '📰' }, + { title: '网易云榜单', link: '/60sapi/热搜榜单/网易云榜单/index.html', icon: '🎶' }, + { title: '微博热搜榜', link: '/60sapi/热搜榜单/微博热搜榜/index.html', icon: '📱' }, + { title: '知乎热门话题', link: '/60sapi/热搜榜单/知乎热门话题/index.html', icon: '💡' }, + { title: 'Hacker News 榜单', link: '/60sapi/热搜榜单/Hacker News 榜单/index.html', icon: '💻' }, + { title: '小红书热点', link: '/60sapi/热搜榜单/小红书热点/index.html', icon: '📖' }, + { title: '百度实时热搜', link: '/60sapi/热搜榜单/百度实时热搜/index.html', icon: '🔍' }, + { title: '百度电视剧榜', link: '/60sapi/热搜榜单/百度电视剧榜/index.html', icon: '📺' }, + { title: '百度贴吧话题榜', link: '/60sapi/热搜榜单/百度贴吧话题榜/index.html', icon: '💬' }, + { title: '懂车帝热搜', link: '/60sapi/热搜榜单/懂车帝热搜/index.html', icon: '🚗' }, ] }, { @@ -118,10 +118,10 @@ export const API_60S_CATEGORIES = [ icon: '📰', color: '#4ecdc4', apis: [ - { title: '必应每日壁纸', link: '/60sapi/日更资讯/必应每日壁纸/index.html' }, - { title: '历史上的今天', link: '/60sapi/日更资讯/历史上的今天/index.html' }, - { title: '每日国际汇率', link: '/60sapi/日更资讯/每日国际汇率/index.html' }, - { title: '每天60s读懂世界', link: '/60sapi/日更资讯/每天60s读懂世界/index.html' } + { title: '必应每日壁纸', link: '/60sapi/日更资讯/必应每日壁纸/index.html', icon: '🖼️' }, + { title: '历史上的今天', link: '/60sapi/日更资讯/历史上的今天/index.html', icon: '📅' }, + { title: '每日国际汇率', link: '/60sapi/日更资讯/每日国际汇率/index.html', icon: '💱' }, + { title: '每天60s读懂世界', link: '/60sapi/日更资讯/每天60s读懂世界/index.html', icon: '🌍' } ] }, { @@ -129,20 +129,20 @@ export const API_60S_CATEGORIES = [ icon: '🛠️', color: '#45b7d1', apis: [ - { title: '百度百科词条', link: '/60sapi/实用功能/百度百科词条/index.html' }, - { title: '公网IP地址', link: '/60sapi/实用功能/公网IP地址/index.html' }, - { title: '哈希解压压缩', link: '/60sapi/实用功能/哈希解压压缩/index.html' }, - { title: '链接OG信息', link: '/60sapi/实用功能/链接OG信息/index.html' }, - { title: '密码强度检测', link: '/60sapi/实用功能/密码强度检测/index.html' }, - { title: '农历信息', link: '/60sapi/实用功能/农历信息/index.html' }, - { title: '配色方案', link: '/60sapi/实用功能/配色方案/index.html' }, - { title: '身体健康分析', link: '/60sapi/实用功能/身体健康分析/index.html' }, - { title: '生成二维码', link: '/60sapi/实用功能/生成二维码/index.html' }, - { title: '随机密码生成器', link: '/60sapi/实用功能/随机密码生成器/index.html' }, - { title: '随机颜色', link: '/60sapi/实用功能/随机颜色/index.html' }, - { title: '天气预报', link: '/60sapi/实用功能/天气预报/index.html' }, - { title: 'EpicGames免费游戏', link: '/60sapi/实用功能/EpicGames免费游戏/index.html' }, - { title: '在线机器翻译', link: '/60sapi/实用功能/在线翻译/index.html' }, + { title: '百度百科词条', link: '/60sapi/实用功能/百度百科词条/index.html', icon: '📚' }, + { title: '公网IP地址', link: '/60sapi/实用功能/公网IP地址/index.html', icon: '🌐' }, + { title: '哈希解压压缩', link: '/60sapi/实用功能/哈希解压压缩/index.html', icon: '🗜️' }, + { title: '链接OG信息', link: '/60sapi/实用功能/链接OG信息/index.html', icon: '🔗' }, + { title: '密码强度检测', link: '/60sapi/实用功能/密码强度检测/index.html', icon: '🔐' }, + { title: '农历信息', link: '/60sapi/实用功能/农历信息/index.html', icon: '📅' }, + { title: '配色方案', link: '/60sapi/实用功能/配色方案/index.html', icon: '🎨' }, + { title: '身体健康分析', link: '/60sapi/实用功能/身体健康分析/index.html', icon: '🏥' }, + { title: '生成二维码', link: '/60sapi/实用功能/生成二维码/index.html', icon: '📱' }, + { title: '随机密码生成器', link: '/60sapi/实用功能/随机密码生成器/index.html', icon: '🔒' }, + { title: '随机颜色', link: '/60sapi/实用功能/随机颜色/index.html', icon: '🌈' }, + { title: '天气预报', link: '/60sapi/实用功能/天气预报/index.html', icon: '🌤️' }, + { title: 'EpicGames免费游戏', link: '/60sapi/实用功能/EpicGames免费游戏/index.html', icon: '🎮' }, + { title: '在线机器翻译', link: '/60sapi/实用功能/在线翻译/index.html', icon: '🌍' }, ] }, { @@ -150,14 +150,14 @@ export const API_60S_CATEGORIES = [ icon: '🎉', color: '#f7b731', apis: [ - { title: '随机唱歌音频', link: '/60sapi/娱乐消遣/随机唱歌音频/index.html' }, - { title: '随机发病文学', link: '/60sapi/娱乐消遣/随机发病文学/index.html' }, - { title: '随机搞笑段子', link: '/60sapi/娱乐消遣/随机搞笑段子/index.html' }, - { title: '随机冷笑话', link: '/60sapi/娱乐消遣/随机冷笑话/index.html' }, - { title: '随机一言', link: '/60sapi/娱乐消遣/随机一言/index.html' }, - { title: '随机运势', link: '/60sapi/娱乐消遣/随机运势/index.html' }, - { title: '随机JavaScript趣味题', link: '/60sapi/娱乐消遣/随机JavaScript趣味题/index.html' }, - { title: '随机KFC文案', link: '/60sapi/娱乐消遣/随机KFC文案/index.html' } + { title: '随机唱歌音频', link: '/60sapi/娱乐消遣/随机唱歌音频/index.html', icon: '🎤' }, + { title: '随机发病文学', link: '/60sapi/娱乐消遣/随机发病文学/index.html', icon: '📖' }, + { title: '随机搞笑段子', link: '/60sapi/娱乐消遣/随机搞笑段子/index.html', icon: '😂' }, + { title: '随机冷笑话', link: '/60sapi/娱乐消遣/随机冷笑话/index.html', icon: '😄' }, + { title: '随机一言', link: '/60sapi/娱乐消遣/随机一言/index.html', icon: '💭' }, + { title: '随机运势', link: '/60sapi/娱乐消遣/随机运势/index.html', icon: '⭐' }, + { title: '随机JavaScript趣味题', link: '/60sapi/娱乐消遣/随机JavaScript趣味题/index.html', icon: '💻' }, + { title: '随机KFC文案', link: '/60sapi/娱乐消遣/随机KFC文案/index.html', icon: '🍗' } ] } ]; diff --git a/InfoGenie-frontend/src/pages/AiModelPage.js b/InfoGenie-frontend/src/pages/AiModelPage.js index 7adf4d89..f7e5684f 100755 --- a/InfoGenie-frontend/src/pages/AiModelPage.js +++ b/InfoGenie-frontend/src/pages/AiModelPage.js @@ -116,7 +116,12 @@ const AppTheme = styled.div` width: 40px; height: 40px; border-radius: 8px; - background: ${props => props.$gradient}; + display: flex; + align-items: center; + justify-content: center; + font-size: 24px; + background: rgba(74, 222, 128, 0.1); + border: 1px solid rgba(74, 222, 128, 0.3); `; const LaunchButton = styled.button` @@ -295,10 +300,7 @@ const AiModelPage = () => { // 将token传递给iframe iframe.contentWindow.localStorage.setItem('token', token); - // 确保coin-manager.js已加载 - if (iframe.contentWindow.coinManager) { - iframe.contentWindow.coinManager.loadCoinsInfo(); - } + // Token已传递给iframe } } catch (error) { console.error('iframe通信错误:', error); @@ -391,7 +393,7 @@ const AiModelPage = () => { {app.description} - + {app.icon} { e.stopPropagation(); handleLaunchApp(app); diff --git a/InfoGenie-frontend/src/pages/Api60sPage.js b/InfoGenie-frontend/src/pages/Api60sPage.js index aa325219..f6e9596e 100755 --- a/InfoGenie-frontend/src/pages/Api60sPage.js +++ b/InfoGenie-frontend/src/pages/Api60sPage.js @@ -283,7 +283,7 @@ const Api60sPage = () => { > - {category.icon} + {api.icon || category.icon} {api.title} diff --git a/InfoGenie-frontend/src/pages/SmallGamePage.js b/InfoGenie-frontend/src/pages/SmallGamePage.js index 2d933b8c..75e714d2 100755 --- a/InfoGenie-frontend/src/pages/SmallGamePage.js +++ b/InfoGenie-frontend/src/pages/SmallGamePage.js @@ -102,7 +102,12 @@ const GameTheme = styled.div` width: 40px; height: 40px; border-radius: 8px; - background: ${props => props.$gradient}; + display: flex; + align-items: center; + justify-content: center; + font-size: 24px; + background: rgba(74, 222, 128, 0.1); + border: 1px solid rgba(74, 222, 128, 0.3); `; const PlayButton = styled.button` @@ -311,7 +316,7 @@ const SmallGamePage = () => { {game.description} - + {game.icon} { e.stopPropagation(); handlePlayGame(game); diff --git a/InfoGenie-frontend/前端萌芽币消费系统集成文档.md b/InfoGenie-frontend/前端萌芽币消费系统集成文档.md deleted file mode 100644 index 64896fb9..00000000 --- a/InfoGenie-frontend/前端萌芽币消费系统集成文档.md +++ /dev/null @@ -1,100 +0,0 @@ -# InfoGenie前端萌芽币消费系统集成文档 - -## 概述 - -本文档描述了InfoGenie前端如何与后端的萌芽币消费系统进行集成。后端已实现AI模型应用每次调用消耗100萌芽币的功能,前端需要相应地支持显示萌芽币余额、使用记录,并在API调用前检查余额是否充足。 - -## 实现细节 - -### 1. API调用 - -新增了获取萌芽币余额和使用历史的API调用: - -```javascript -// 在 /src/utils/api.js 中添加 -export const aiModelAPI = { - // 获取萌芽币余额和使用历史 - getCoins: () => api.get('/api/aimodelapp/coins'), -}; -``` - -### 2. 萌芽币管理器 - -创建了统一的萌芽币管理工具 `/public/aimodelapp/coin-manager.js`,提供以下功能: - -- 获取和显示用户萌芽币余额 -- 显示最近的AI使用记录 -- 在调用AI API前检查萌芽币余额是否充足 -- 在API调用成功后更新萌芽币信息 - -### 3. 前端集成 - -所有AI模型应用页面都需要进行以下修改: - -1. 引入萌芽币管理器脚本: -```html - -``` - -2. 在API调用前添加萌芽币检查: -```javascript -// 检查萌芽币余额是否足够 -if (window.coinManager && !window.coinManager.checkBeforeApiCall()) { - return; -} -``` - -3. 确保所有AI API调用都添加JWT Token认证: -```javascript -const token = localStorage.getItem('token'); -// 添加到请求头 -headers: { - 'Authorization': `Bearer ${token}` -} -``` - -4. 在API调用成功后刷新萌芽币信息: -```javascript -if (window.coinManager) { - window.coinManager.loadCoinsInfo(); -} -``` - -### 4. 萌芽币提示显示 - -萌芽币管理器会在页面右上角显示一个悬浮窗口,包含: -- 当前萌芽币余额 -- 每次调用消耗的萌芽币数量 -- 最近的使用记录 -- 当余额不足时的警告提示 - -### 5. 用户体验优化 - -- 在API调用失败时,会检查是否是因为萌芽币不足导致的,并给出相应提示 -- 引导用户通过每日签到等方式获取更多萌芽币 -- 实时显示萌芽币余额变化 - -## 使用示例 - -以AI变量命名助手为例,已完成集成: - -1. 引入coin-manager.js -2. 修改API调用函数添加Token认证 -3. 添加萌芽币检查逻辑 -4. 添加错误处理,区分普通错误和萌芽币不足错误 - -## 后续工作 - -为所有AI模型应用页面添加相同的萌芽币集成,包括: -- AI写诗小助手 -- AI姓名评测 -- AI翻译助手 -- AI文章转文言文 -- AI生成表情包 -- AI生成Linux命令 - -## 注意事项 - -- 萌芽币消费系统只对AI模型应用有效,其他功能不消耗萌芽币 -- 每次调用AI API都会消耗100萌芽币,无论成功与否 -- 用户可以通过每日签到获取萌芽币