mirror of
				https://github.com/soybeanjs/soybean-admin.git
				synced 2025-11-04 07:43:42 +08:00 
			
		
		
		
	feat(projects): 添加自动跟随系统主题设置
This commit is contained in:
		@@ -1,19 +1,34 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <n-divider title-placement="center">深色主题</n-divider>
 | 
					  <n-divider title-placement="center">主题</n-divider>
 | 
				
			||||||
  <div class="flex-center">
 | 
					  <n-space vertical size="large">
 | 
				
			||||||
    <n-switch :value="theme.darkMode" @update:value="theme.setDarkMode">
 | 
					    <setting-menu label="深色主题">
 | 
				
			||||||
      <template #checked>
 | 
					      <div class="flex-center">
 | 
				
			||||||
        <icon-mdi-white-balance-sunny class="text-14px text-primary" />
 | 
					        <n-switch :value="theme.darkMode" @update:value="theme.setDarkMode">
 | 
				
			||||||
      </template>
 | 
					          <template #checked>
 | 
				
			||||||
      <template #unchecked>
 | 
					            <icon-mdi-white-balance-sunny class="text-14px text-primary" />
 | 
				
			||||||
        <icon-mdi-moon-waning-crescent class="text-14px text-primary" />
 | 
					          </template>
 | 
				
			||||||
      </template>
 | 
					          <template #unchecked>
 | 
				
			||||||
    </n-switch>
 | 
					            <icon-mdi-moon-waning-crescent class="text-14px text-primary" />
 | 
				
			||||||
  </div>
 | 
					          </template>
 | 
				
			||||||
 | 
					        </n-switch>
 | 
				
			||||||
 | 
					      </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;
 | 
				
			||||||
    /** 布局样式 */
 | 
					    /** 布局样式 */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user