From bc63ba9611e09aa0d820088930aa76b492575b60 Mon Sep 17 00:00:00 2001 From: thzxx Date: Sun, 5 Apr 2026 19:55:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Agent=20=E9=A2=84=E8=AE=BE=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=20-=20=E4=B8=80=E9=94=AE=E5=88=87=E6=8D=A2=E8=A7=92?= =?UTF-8?q?=E8=89=B2/=E5=B7=A5=E4=BD=9C=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 内置 6 个预设:默认、翻译官、代码审查、写作助手、数据分析师、学习导师 - 每个预设包含:系统提示词、温度、上下文长度、Think 开关 - 预设栏胶囊按钮,点击即切换,自动应用全部配置 - 支持创建/编辑/删除自定义预设,IndexedDB 持久化 - 切换预设时同步设置面板 UI + toast 提示 - 温度参数集成到聊天 API 调用 --- css/style.css | 160 ++++++++++++++++++ index.html | 53 ++++++ js/app.js | 10 ++ js/components/input-area.js | 4 +- js/components/preset-bar.js | 212 ++++++++++++++++++++++++ js/preset-manager.js | 314 ++++++++++++++++++++++++++++++++++++ 6 files changed, 752 insertions(+), 1 deletion(-) create mode 100644 js/components/preset-bar.js create mode 100644 js/preset-manager.js diff --git a/css/style.css b/css/style.css index d3c3352..9790192 100644 --- a/css/style.css +++ b/css/style.css @@ -372,6 +372,166 @@ body::before { border: 1px solid rgba(0, 245, 212, 0.2); } +/* ── 预设栏 ── */ +.preset-bar { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 16px; + background: var(--bg-secondary); + border-bottom: 1px solid var(--border-glass); + flex-shrink: 0; + overflow: hidden; +} + +.preset-list { + display: flex; + gap: 6px; + flex: 1; + overflow-x: auto; + overflow-y: hidden; + scrollbar-width: none; + -ms-overflow-style: none; + padding: 2px 0; +} + +.preset-list::-webkit-scrollbar { display: none; } + +.preset-chip { + display: flex; + align-items: center; + gap: 5px; + padding: 5px 12px; + border-radius: 20px; + border: 1px solid var(--border-glass); + background: var(--bg-glass-light); + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; + font-family: var(--font-sans); + white-space: nowrap; + cursor: pointer; + transition: var(--transition); + flex-shrink: 0; + user-select: none; +} + +.preset-chip:hover { + background: var(--bg-glass-hover); + border-color: rgba(0, 245, 212, 0.3); + color: var(--text-primary); + transform: translateY(-1px); +} + +.preset-chip.active { + background: var(--gradient-main); + border-color: transparent; + color: #fff; + font-weight: 600; + box-shadow: 0 2px 10px rgba(0, 245, 212, 0.25); +} + +.preset-chip.active:hover { + box-shadow: 0 4px 16px rgba(0, 245, 212, 0.35); + transform: translateY(-1px); +} + +.preset-chip-icon { + font-size: 14px; + line-height: 1; +} + +.preset-chip-name { + line-height: 1; +} + +.preset-add-btn { + width: 30px; + height: 30px; + border-radius: 50%; + border: 1px dashed var(--border-glass); + background: transparent; + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: var(--transition); + flex-shrink: 0; +} + +.preset-add-btn:hover { + border-color: var(--accent-cyan); + color: var(--accent-cyan); + background: rgba(0, 245, 212, 0.06); + transform: scale(1.1); +} + +.preset-add-btn svg { + width: 16px; + height: 16px; +} + +/* ── 预设模态框 ── */ +.preset-name-row { + display: flex; + gap: 8px; + align-items: center; +} + +.preset-icon-input { + width: 56px !important; + text-align: center; + font-size: 18px; + flex-shrink: 0; + padding: 8px 4px !important; +} + +.preset-temp-slider { + width: 100%; + -webkit-appearance: none; + appearance: none; + height: 6px; + border-radius: 3px; + background: var(--bg-glass-light); + outline: none; + margin: 8px 0; +} + +.preset-temp-slider::-webkit-slider-thumb { + -webkit-appearance: none; + width: 20px; + height: 20px; + border-radius: 50%; + background: var(--gradient-main); + cursor: pointer; + box-shadow: 0 2px 8px rgba(0, 245, 212, 0.3); + transition: transform 0.15s ease; +} + +.preset-temp-slider::-webkit-slider-thumb:hover { + transform: scale(1.2); +} + +.preset-temp-slider::-moz-range-thumb { + width: 20px; + height: 20px; + border-radius: 50%; + background: var(--gradient-main); + cursor: pointer; + border: none; + box-shadow: 0 2px 8px rgba(0, 245, 212, 0.3); +} + +.preset-modal-actions { + display: flex; + gap: 8px; + align-items: center; + margin-top: 16px; + padding-top: 12px; + border-top: 1px solid var(--border-glass); +} + /* ── Think 按钮(输入栏内) ── */ .think-toggle { display: flex; diff --git a/index.html b/index.html index a100612..a81decb 100644 --- a/index.html +++ b/index.html @@ -366,6 +366,59 @@ + + +