feat(projects): 添加自动跟随系统主题设置

This commit is contained in:
相思 2022-04-29 15:02:51 +08:00
parent 3d8befa376
commit ba07b695dd
6 changed files with 41 additions and 12 deletions

View File

@ -1,5 +1,7 @@
<template> <template>
<n-divider title-placement="center">深色主题</n-divider> <n-divider title-placement="center">主题</n-divider>
<n-space vertical size="large">
<setting-menu label="深色主题">
<div class="flex-center"> <div class="flex-center">
<n-switch :value="theme.darkMode" @update:value="theme.setDarkMode"> <n-switch :value="theme.darkMode" @update:value="theme.setDarkMode">
<template #checked> <template #checked>
@ -10,10 +12,23 @@
</template> </template>
</n-switch> </n-switch>
</div> </div>
</setting-menu>
<setting-menu label="跟随系统">
<n-switch :value="theme.followSystemTheme" @update:value="theme.setFollowSystemTheme">
<template #checked>
<icon-ic:baseline-do-not-disturb class="text-14px text-primary" />
</template>
<template #unchecked>
<icon-ic:round-hdr-auto class="text-14px text-primary" />
</template>
</n-switch>
</setting-menu>
</n-space>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { useThemeStore } from '@/store'; import { useThemeStore } from '@/store';
import SettingMenu from '../SettingMenu/index.vue';
const theme = useThemeStore(); const theme = useThemeStore();
</script> </script>

View File

@ -1,4 +1,5 @@
{ {
"followSystemTheme": true,
"darkMode": false, "darkMode": false,
"layout": { "layout": {
"minWidth": 900, "minWidth": 900,

View File

@ -29,6 +29,7 @@ const themeColorList = [
]; ];
const defaultThemeSetting: Theme.Setting = { const defaultThemeSetting: Theme.Setting = {
followSystemTheme: true,
darkMode: false, darkMode: false,
layout: { layout: {
minWidth: 900, minWidth: 900,

View File

@ -26,6 +26,16 @@ export const useThemeStore = defineStore('theme-store', {
setDarkMode(darkMode: boolean) { setDarkMode(darkMode: boolean) {
this.darkMode = darkMode; this.darkMode = darkMode;
}, },
/** 设置自动跟随系统主题 */
setFollowSystemTheme(visible: boolean) {
this.followSystemTheme = visible;
},
/** 自动跟随系统主题 */
autoFollowSystemMode(darkMode: boolean) {
if (this.followSystemTheme) {
this.darkMode = darkMode;
}
},
/** 切换/关闭 暗黑模式 */ /** 切换/关闭 暗黑模式 */
toggleDarkMode() { toggleDarkMode() {
this.darkMode = !this.darkMode; this.darkMode = !this.darkMode;

View File

@ -53,7 +53,7 @@ export default function subscribeThemeStore() {
osTheme, osTheme,
newValue => { newValue => {
const isDark = newValue === 'dark'; const isDark = newValue === 'dark';
theme.setDarkMode(isDark); theme.autoFollowSystemMode(isDark);
}, },
{ immediate: true } { immediate: true }
); );

View File

@ -98,6 +98,8 @@ declare namespace Service {
declare namespace Theme { declare namespace Theme {
/** 主题配置 */ /** 主题配置 */
interface Setting { interface Setting {
/** 是否自动跟随系统主题 */
followSystemTheme: boolean;
/** 暗黑模式 */ /** 暗黑模式 */
darkMode: boolean; darkMode: boolean;
/** 布局样式 */ /** 布局样式 */