feat(wrapped-ui): 新增 Win98 主题与桌面化外观

- 主题系统新增 win98(显示名 Windows 98,快捷键扩展到 F1-F4),并区分 retro(pixel/CRT) 与桌面 GUI 主题
- 年度总结页新增 Win98 桌面背景与底部任务栏(背景色/视口高度适配)
- 封面与卡片 slide 形态支持 Win98 窗口外观(title bar/icon/controls)
- 主题切换器补充 Win98 选项并新增 Win98 专属切换器
- 新增 Win98 图标资源(Start + 桌面图标)
This commit is contained in:
2977094657
2026-02-02 00:04:54 +08:00
parent 7ce6abecca
commit 980f15d0a4
19 changed files with 767 additions and 29 deletions

View File

@@ -4,7 +4,8 @@
*/
const STORAGE_KEY = 'wrapped-theme'
const VALID_THEMES = ['off', 'gameboy', 'dos']
const VALID_THEMES = ['off', 'gameboy', 'dos', 'win98']
const RETRO_THEMES = new Set(['gameboy', 'dos'])
// 全局响应式状态(跨组件共享)
const theme = ref('off')
@@ -54,7 +55,10 @@ export function useWrappedTheme() {
// 计算属性:当前主题的 CSS 类名
const themeClass = computed(() => {
if (theme.value === 'off') return ''
return `wrapped-retro wrapped-theme-${theme.value}`
// Note: not every non-modern theme is "retro pixel/CRT".
// Keep wrapped-retro for themes that rely on pixel/CRT shared styles.
const base = RETRO_THEMES.has(theme.value) ? 'wrapped-retro ' : ''
return `${base}wrapped-theme-${theme.value}`
})
// 计算属性:主题显示名称
@@ -62,7 +66,8 @@ export function useWrappedTheme() {
const names = {
off: 'Modern',
gameboy: 'Game Boy',
dos: 'DOS Terminal'
dos: 'DOS Terminal',
win98: 'Windows 98'
}
return names[theme.value] || 'Modern'
})
@@ -88,6 +93,9 @@ export function useWrappedTheme() {
} else if (e.key === 'F3') {
e.preventDefault()
setTheme('dos')
} else if (e.key === 'F4') {
e.preventDefault()
setTheme('win98')
}
}