23 lines
812 B
Plaintext
23 lines
812 B
Plaintext
|
|
sequenceDiagram
|
|||
|
|
participant U as 坐席
|
|||
|
|
participant TB as TopBar.vue
|
|||
|
|
participant TS as useThemeStore
|
|||
|
|
participant UT as useTheme.ts
|
|||
|
|
participant DOM as document.documentElement
|
|||
|
|
participant LS as localStorage
|
|||
|
|
|
|||
|
|
U->>TB: 点击 ☀️/🌙 切换开关
|
|||
|
|
TB->>TS: toggleTheme()
|
|||
|
|
TS->>TS: currentTheme = currentTheme === 'light' ? 'dark' : 'light'
|
|||
|
|
TS->>UT: applyTheme(currentTheme)
|
|||
|
|
UT->>DOM: setAttribute('data-theme', theme)
|
|||
|
|
UT->>LS: setItem('theme', theme)
|
|||
|
|
DOM-->>DOM: CSS 变量自动切换(:root / [data-theme="dark"])
|
|||
|
|
DOM-->>U: 300ms 过渡动画,界面变色
|
|||
|
|
|
|||
|
|
Note over U,LS: 页面加载时
|
|||
|
|
U->>UT: 首次进入页面
|
|||
|
|
UT->>LS: getItem('theme')
|
|||
|
|
LS-->>UT: 'dark' | 'light' | null
|
|||
|
|
UT->>DOM: setAttribute('data-theme', theme || 'light')
|