新增: 设置页 UX 重构(master-detail 左导航 + 搜索 + 即时反馈 + 导入导出)

- SettingsNav 左导航 7 类 + 顶部搜索(索引匹配 label/desc 高亮定位)
- GeneralPanel 拆分 Appearance/Performance/Advanced Section
- SettingRow 统一行 + 即时反馈(已保存)+ 下轮生效 badge
- 统一组件库 settings.css(scoped 重复 class 抽全局)
- 导入导出(默认排除 keyring 密钥)
- activeCategory 持久化 + 窄屏折叠 tab
This commit is contained in:
lxy
2026-06-21 20:50:44 +08:00
parent 4b5da38e28
commit 330bb7f505
17 changed files with 1539 additions and 606 deletions
+40 -4
View File
@@ -3,6 +3,25 @@ export default {
// ===== Page title =====
title: '⚙️ Settings',
// ===== Left nav categories (phase 3 master-detail) =====
navAppearance: 'Appearance',
navAiModel: 'AI Models',
navKnowledge: 'Knowledge',
navPerformance: 'Performance',
navSecurity: 'Security',
navAdvanced: 'Advanced',
// ===== Settings search (phase 4) =====
searchPlaceholder: 'Search settings…',
searchNoResult: 'No results',
// ===== Instant feedback (phase 5 SettingRow) =====
savedHint: '✓ Saved',
nextRoundBadge: 'Next message',
// ===== Connection mgmt (phase 7: experimental badge, not wired to AI yet) =====
experimentalBadge: 'Experimental · not wired to AI tools',
// ===== AI Provider panel =====
panelAiProvider: '🤖 AI Model Config',
addProvider: '+ Add Provider',
@@ -73,6 +92,10 @@ export default {
// ===== General settings panel =====
panelGeneral: '🎨 General',
// 阶段2 UX 重构:GeneralPanel 拆 3 Section 后各 Section 标题
sectionAppearance: '🎨 Appearance',
sectionPerformance: '⚡ Performance',
sectionAdvanced: '⚙️ Advanced',
labelTheme: 'Theme',
descTheme: 'Dark / light',
themeDark: '🌙 Dark',
@@ -97,6 +120,9 @@ export default {
labelShowTokenUsage: 'Show token usage',
descShowTokenUsage: 'Show token consumption of each reply in conversations',
labelStreamingMd: 'Streaming Markdown rendering',
descStreamingMd: 'Render code blocks/lists/headings during streaming (unclosed code blocks degrade to plain text to avoid flicker); when off, only plain text is shown during streaming and full formatting applies after generation completes',
labelGlobalConcurrency: 'Global max concurrency',
descGlobalConcurrency: 'Shared cap on simultaneous LLM requests across all conversations',
@@ -104,7 +130,8 @@ export default {
descPerConvConcurrency: 'Concurrent LLM calls within one conversation (main loop / title / distill shared)',
labelAgentMaxIterations: 'Agent max iterations',
descAgentMaxIterations: 'Max rounds of the agentic loop (stream → tool → feedback) (1-50, default 10); changes take effect on the next message',
descAgentMaxIterations: 'Max rounds of the agentic loop (stream → tool → feedback) (0=unlimited, 1-50, default 10); changes take effect on the next message',
labelUnlimited: 'Unlimited',
labelAgentMaxRetries: 'Stream failure retries',
descAgentMaxRetries: 'Auto-retry count on stream failure (0-10, default 3); only retries pre-stream failures (no token output yet); mid-stream failures are abandoned',
@@ -131,12 +158,9 @@ export default {
labelTriggerMode: 'Distill trigger',
descTriggerMode: 'When auto-distillation is triggered',
triggerOnComplete: 'On conversation complete',
triggerOnIdle: 'On conversation idle',
triggerManualOnly: 'Manual only',
labelMinMessages: 'Min message count',
descMinMessages: 'Distillation triggers only after this many messages (filters out small talk noise)',
labelIdleTimeout: 'Idle timeout (s)',
descIdleTimeout: 'Seconds to wait in idle-trigger mode',
labelAutoInject: 'Auto-inject related knowledge',
descAutoInject: 'Retrieve related knowledge and inject it into the conversation context during chat',
labelVectorEnabled: 'Semantic retrieval (vector)',
@@ -159,6 +183,18 @@ export default {
toastSetDefaultFail: 'Failed to set default: {msg}',
toastConnIncomplete: 'Please fill in Name and Host',
// ===== Import / Export (phase 6) =====
export: 'Export',
import: 'Import',
exportHint: 'Export all preferences (appSettings + knowledge config) as a JSON file',
importHint: 'Import from a JSON file and overwrite current preferences',
importConfirm: 'Importing will overwrite all current preferences (appearance / performance / knowledge, etc.). Continue?',
importSuccess: 'Imported successfully (some items like concurrency / iterations take effect after restart or next message)',
importFail: 'Import failed: {msg}',
exportFail: 'Export failed: {msg}',
importInvalidJson: 'The file is not a valid DevFlow settings backup (wrong format)',
importScopeNote: 'Scope: appSettings + knowledge config (no provider keys)',
// ===== Confirm dialogs =====
confirmDeleteProvider: 'Delete provider "{name}"? This cannot be undone.',
confirmDeleteConn: 'Delete connection "{name}"?',