feat(projects): 添加自动跟随系统主题设置
This commit is contained in:
parent
3d8befa376
commit
ba07b695dd
@ -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>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"followSystemTheme": true,
|
||||||
"darkMode": false,
|
"darkMode": false,
|
||||||
"layout": {
|
"layout": {
|
||||||
"minWidth": 900,
|
"minWidth": 900,
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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 }
|
||||||
);
|
);
|
||||||
|
2
src/typings/system.d.ts
vendored
2
src/typings/system.d.ts
vendored
@ -98,6 +98,8 @@ declare namespace Service {
|
|||||||
declare namespace Theme {
|
declare namespace Theme {
|
||||||
/** 主题配置 */
|
/** 主题配置 */
|
||||||
interface Setting {
|
interface Setting {
|
||||||
|
/** 是否自动跟随系统主题 */
|
||||||
|
followSystemTheme: boolean;
|
||||||
/** 暗黑模式 */
|
/** 暗黑模式 */
|
||||||
darkMode: boolean;
|
darkMode: boolean;
|
||||||
/** 布局样式 */
|
/** 布局样式 */
|
||||||
|
Loading…
Reference in New Issue
Block a user