Skip to content

Commit 6e0cce4

Browse files
committed
feat(projects): add switch for customize darkmode transition
1 parent d3ebe95 commit 6e0cce4

File tree

7 files changed

+27
-2
lines changed

7 files changed

+27
-2
lines changed

src/components/common/dark-mode-switch.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ defineOptions({ name: 'DarkModeSwitch' });
1313
interface Props {
1414
/** 暗黑模式 */
1515
dark?: boolean;
16+
/** 自定义暗黑模式动画过渡 */
17+
customizeTransition?: boolean;
1618
}
1719
1820
const props = withDefaults(defineProps<Props>(), {
@@ -38,7 +40,7 @@ async function handleSwitch(event: MouseEvent) {
3840
const x = event.clientX;
3941
const y = event.clientY;
4042
41-
if (!document.startViewTransition) {
43+
if (!props.customizeTransition || !document.startViewTransition) {
4244
darkMode.value = !darkMode.value;
4345
return;
4446
}

src/layouts/common/global-header/components/theme-mode.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
<template>
22
<hover-container class="w-40px" :inverted="theme.header.inverted" tooltip-content="主题模式">
3-
<dark-mode-switch :dark="theme.darkMode" class="wh-full" @update:dark="theme.setDarkMode" />
3+
<dark-mode-switch
4+
:dark="theme.darkMode"
5+
:customize-transition="theme.isCustomizeDarkModeTransition"
6+
class="wh-full"
7+
@update:dark="theme.setDarkMode"
8+
/>
49
</hover-container>
510
</template>
611

src/layouts/common/setting-drawer/components/dark-mode/index.vue

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121
</template>
2222
</n-switch>
2323
</setting-menu>
24+
<setting-menu label="自定义暗黑主题动画过渡">
25+
<n-switch :value="theme.isCustomizeDarkModeTransition" @update:value="theme.setIsCustomizeDarkModeTransition">
26+
<template #checked>
27+
<icon-ic-baseline-do-not-disturb class="text-14px text-white" />
28+
</template>
29+
<template #unchecked>
30+
<icon-ic-round-hdr-auto class="text-14px text-white" />
31+
</template>
32+
</n-switch>
33+
</setting-menu>
2434
<setting-menu label="侧边栏深色">
2535
<n-switch :value="theme.sider.inverted" @update:value="theme.setSiderInverted" />
2636
</setting-menu>

src/settings/theme.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"darkMode": false,
33
"followSystemTheme": true,
4+
"isCustomizeDarkModeTransition": false,
45
"layout": {
56
"minWidth": 900,
67
"mode": "vertical",

src/settings/theme.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const themeColorList = [
3737
const defaultThemeSetting: Theme.Setting = {
3838
darkMode: false,
3939
followSystemTheme: true,
40+
isCustomizeDarkModeTransition: false,
4041
layout: {
4142
minWidth: 900,
4243
mode: 'vertical',

src/store/modules/theme/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ export const useThemeStore = defineStore('theme-store', {
4343
setFollowSystemTheme(visible: boolean) {
4444
this.followSystemTheme = visible;
4545
},
46+
/** 设置自动跟随系统主题 */
47+
setIsCustomizeDarkModeTransition(isCustomize: boolean) {
48+
this.isCustomizeDarkModeTransition = isCustomize;
49+
},
4650
/** 自动跟随系统主题 */
4751
setAutoFollowSystemMode(darkMode: boolean) {
4852
if (this.followSystemTheme) {

src/typings/system.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ declare namespace Theme {
9090
darkMode: boolean;
9191
/** 是否自动跟随系统主题 */
9292
followSystemTheme: boolean;
93+
/** 自定义暗黑动画过渡 */
94+
isCustomizeDarkModeTransition: boolean;
9395
/** 布局样式 */
9496
layout: Layout;
9597
/** 滚动模式 */

0 commit comments

Comments
 (0)