From a593a8b22f384467d0ae10df2b022d61b0cea88c Mon Sep 17 00:00:00 2001 From: aaron <> Date: Wed, 4 Feb 2026 10:41:29 +0800 Subject: [PATCH] update --- frontend/css/style.css | 140 ++++++++++++++++++++++++++++++++++++++--- frontend/index.html | 37 +++++++++-- frontend/js/app.js | 25 ++++---- 3 files changed, 176 insertions(+), 26 deletions(-) diff --git a/frontend/css/style.css b/frontend/css/style.css index 9ff75b9..0fef21c 100644 --- a/frontend/css/style.css +++ b/frontend/css/style.css @@ -579,8 +579,8 @@ html, body { box-shadow: 0 0 0 1px var(--accent); } -/* Author Info */ -.author-info { +/* Footer Info */ +.footer-info { display: flex; align-items: center; justify-content: center; @@ -591,25 +591,23 @@ html, body { letter-spacing: 0.5px; } -.author-label { +.copyright { color: var(--text-secondary); - text-transform: uppercase; } -.author-divider { +.footer-divider { color: var(--border-bright); } -.author-contact { +.contact-link { color: var(--accent); - font-family: 'Monaco', 'Courier New', monospace; cursor: pointer; transition: all 0.2s; padding: 4px 8px; - border-radius: 2px; + border-radius: 4px; } -.author-contact:hover { +.contact-link:hover { background: var(--accent-dim); box-shadow: 0 0 8px var(--accent-dim); } @@ -818,3 +816,127 @@ html, body { border: 1px solid var(--border); border-radius: 2px; } + +/* Contact Modal */ +.contact-modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.8); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + padding: 20px; + animation: fadeIn 0.2s ease; +} + +.contact-modal-content { + position: relative; + background: var(--bg-primary); + border: 1px solid var(--border-bright); + border-radius: 8px; + padding: 32px; + max-width: 400px; + width: 100%; + box-shadow: 0 8px 32px rgba(0, 255, 65, 0.15); +} + +.contact-modal-content .modal-close-btn { + position: absolute; + top: 16px; + right: 16px; + width: 32px; + height: 32px; + background: transparent; + border: 1px solid var(--border); + border-radius: 4px; + color: var(--text-secondary); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s; +} + +.contact-modal-content .modal-close-btn:hover { + background: var(--accent-dim); + border-color: var(--accent); + color: var(--accent); +} + +.contact-title { + font-size: 20px; + font-weight: 600; + color: var(--text-primary); + margin: 0 0 24px 0; + text-align: center; +} + +.contact-info { + display: flex; + flex-direction: column; + gap: 16px; + margin-bottom: 20px; +} + +.contact-item { + display: flex; + align-items: center; + gap: 12px; + padding: 12px; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: 6px; + color: var(--text-secondary); + font-size: 14px; +} + +.contact-item svg { + color: var(--accent); + flex-shrink: 0; +} + +.contact-item strong { + color: var(--accent); + font-family: 'Monaco', 'Courier New', monospace; + font-weight: 600; +} + +.copy-btn { + width: 100%; + padding: 12px; + background: var(--accent-dim); + border: 1px solid var(--accent); + border-radius: 6px; + color: var(--accent); + font-size: 14px; + font-weight: 500; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + transition: all 0.2s; +} + +.copy-btn:hover { + background: var(--accent); + color: var(--bg-primary); + box-shadow: 0 0 12px var(--accent-dim); +} + +.copy-btn svg { + flex-shrink: 0; +} + +.contact-hint { + text-align: center; + color: var(--text-tertiary); + font-size: 12px; + margin: 0; + padding-top: 12px; + border-top: 1px solid var(--border); +} diff --git a/frontend/index.html b/frontend/index.html index 7144887..b061f56 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -140,11 +140,9 @@ - -
- 联系龙哥 - | - 微信:aaronlzhou + +
@@ -162,6 +160,35 @@ + + +
+
+ +

联系作者

+
+
+ + + + 微信号:aaronlzhou +
+ +
+

欢迎交流讨论股票分析和AI技术

+
+
diff --git a/frontend/js/app.js b/frontend/js/app.js index b7dd92f..663a843 100644 --- a/frontend/js/app.js +++ b/frontend/js/app.js @@ -11,6 +11,7 @@ createApp({ charts: {}, showImageModal: false, modalImageUrl: '', + showContactModal: false, availableModels: [], currentModel: null, selectedModel: null @@ -81,12 +82,12 @@ createApp({ while (true) { const { done, value } = await reader.read(); if (done) { - console.log(`流式接收完成,共 ${chunkCount} 个数据块`); + break; } chunkCount++; - console.log(`接收数据块 ${chunkCount}: ${value ? value.length : 0} 字节`); + // 解码数据 buffer += decoder.decode(value, { stream: true }); @@ -99,7 +100,7 @@ createApp({ if (line.startsWith('data: ')) { try { const data = JSON.parse(line.slice(6)); - console.log('接收到数据:', data); + if (data.type === 'session_id') { this.sessionId = data.session_id; @@ -113,12 +114,12 @@ createApp({ } else if (data.type === 'done') { // 完成 - 标记流式输出结束 this.messages[messageIndex].streaming = false; - console.log('流式输出完成'); + } else if (data.type === 'error') { throw new Error(data.error); } } catch (e) { - console.error('解析SSE数据失败:', e, line); + } } } @@ -128,7 +129,7 @@ createApp({ this.messages[messageIndex].streaming = false; } catch (error) { - console.error('发送消息失败:', error); + this.messages[messageIndex].content = '抱歉,发送消息失败,请稍后重试。'; this.messages[messageIndex].streaming = false; } finally { @@ -259,7 +260,7 @@ createApp({ navigator.clipboard.writeText(wechatId).then(() => { this.showCopyNotification(); }).catch(err => { - console.error('复制失败:', err); + this.fallbackCopy(wechatId); }); } else { @@ -280,7 +281,7 @@ createApp({ document.execCommand('copy'); this.showCopyNotification(); } catch (err) { - console.error('复制失败:', err); + } document.body.removeChild(textarea); @@ -322,7 +323,7 @@ createApp({ navigator.clipboard.writeText(plainText).then(() => { this.showNotification('已复制内容'); }).catch(err => { - console.error('复制失败:', err); + this.fallbackCopy(plainText); }); } else { @@ -376,7 +377,7 @@ createApp({ this.showNotification('长按图片可保存'); } catch (error) { - console.error('生成分享图失败:', error); + this.showNotification('生成失败,请重试'); } }, @@ -424,7 +425,7 @@ createApp({ this.selectedModel = data.current ? data.current.provider : null; } } catch (error) { - console.error('加载模型列表失败:', error); + } }, @@ -451,7 +452,7 @@ createApp({ this.showNotification('切换失败'); } } catch (error) { - console.error('切换模型失败:', error); + this.showNotification('切换失败'); } }