锁定 Outpost 主路径主题,并优化地图编辑属性面板浅色对比。

统一 outpost-light/purple/blue 壳层 token,修复扩展字段与操作按钮在浅色下的可读性。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zhaowei.huang
2026-07-26 11:31:53 +08:00
co-authored by Cursor
parent 6986370e9d
commit 95c1a74122
18 changed files with 3790 additions and 1651 deletions
@@ -2,8 +2,11 @@ import { defineStore } from 'pinia'
import {
DEFAULT_THEME_ID,
LEGACY_THEMES,
PRIMARY_THEMES,
applyThemeVars,
findTheme,
resolveThemeId,
THEMES,
type ThemePreset
} from '@/styles/themes'
@@ -28,6 +31,9 @@ interface UiState {
}
const STORAGE_KEY = 'simple.ui.state'
/** Outpost 壳层上线:旧本地主题只换了 id、观感几乎不变 → 升 schema 强制一次默认浅色 */
const THEME_SCHEMA_KEY = 'simple.ui.themeSchema'
const THEME_SCHEMA_VERSION = 2
const DEFAULT_STATE: UiState = {
sidebarCollapsed: false,
@@ -39,14 +45,33 @@ const DEFAULT_STATE: UiState = {
function loadInitial(): UiState {
try {
const raw = localStorage.getItem(STORAGE_KEY)
if (!raw) return { ...DEFAULT_STATE }
if (!raw) {
localStorage.setItem(THEME_SCHEMA_KEY, String(THEME_SCHEMA_VERSION))
return { ...DEFAULT_STATE }
}
const parsed = JSON.parse(raw) as Partial<UiState>
return {
let themeId = resolveThemeId(parsed.themeId ?? DEFAULT_STATE.themeId)
const schema = Number(localStorage.getItem(THEME_SCHEMA_KEY) || '0')
const migrated = schema < THEME_SCHEMA_VERSION
if (migrated) {
// ponytail: 一次强制 outpost-light,兼容主题仍可从高级菜单切回
themeId = DEFAULT_THEME_ID
localStorage.setItem(THEME_SCHEMA_KEY, String(THEME_SCHEMA_VERSION))
}
const state: UiState = {
sidebarCollapsed: parsed.sidebarCollapsed ?? DEFAULT_STATE.sidebarCollapsed,
theme: parsed.theme === 'dark' ? 'dark' : 'light',
themeId: parsed.themeId ?? DEFAULT_STATE.themeId,
themeId,
themeOverrides: parsed.themeOverrides ?? {}
}
if (migrated) {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(state))
} catch {
/* ignore */
}
}
return state
} catch (err) {
console.warn('[ui.store] localStorage 中的 UI 状态解析失败,已回退默认:', err)
return { ...DEFAULT_STATE }
@@ -60,8 +85,16 @@ export const useUiStore = defineStore('ui', {
activeTheme(state): ThemePreset {
return mergeThemePreset(findTheme(state.themeId), state.themeOverrides[state.themeId])
},
/** 所有可选主题列表 */
/** 顶栏精选主题(浅色 / 紫色 / 蓝色) */
availableThemes(): ThemePreset[] {
return PRIMARY_THEMES
},
/** 高级 → 兼容主题(旧深色霓虹) */
legacyThemes(): ThemePreset[] {
return LEGACY_THEMES
},
/** 全量(自定义配色等内部用) */
allThemes(): ThemePreset[] {
return THEMES
}
},
@@ -107,7 +140,7 @@ export const useUiStore = defineStore('ui', {
this.persist()
},
/** 切换品牌主题色板 */
/** 切换品牌主题色板(精选或兼容均可) */
setThemeId(id: string) {
const preset = findTheme(id)
this.themeId = preset.id