锁定 Outpost 主路径主题,并优化地图编辑属性面板浅色对比。
统一 outpost-light/purple/blue 壳层 token,修复扩展字段与操作按钮在浅色下的可读性。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user