mirror of
				https://github.com/soybeanjs/soybean-admin.git
				synced 2025-11-04 07:43:42 +08:00 
			
		
		
		
	@@ -25,6 +25,10 @@ function handleGrayscaleChange(value: boolean) {
 | 
			
		||||
  themeStore.setGrayscale(value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function handleColourWeaknessChange(value: boolean) {
 | 
			
		||||
  themeStore.setColourWeakness(value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const showSiderInverted = computed(() => !themeStore.darkMode && themeStore.layout.mode.includes('vertical'));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
@@ -53,6 +57,9 @@ const showSiderInverted = computed(() => !themeStore.darkMode && themeStore.layo
 | 
			
		||||
    <SettingItem :label="$t('theme.grayscale')">
 | 
			
		||||
      <NSwitch :value="themeStore.grayscale" @update:value="handleGrayscaleChange" />
 | 
			
		||||
    </SettingItem>
 | 
			
		||||
    <SettingItem :label="$t('theme.colourWeakness')">
 | 
			
		||||
      <NSwitch :value="themeStore.colourWeakness" @update:value="handleColourWeaknessChange" />
 | 
			
		||||
    </SettingItem>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -65,6 +65,7 @@ const local: App.I18n.Schema = {
 | 
			
		||||
      auto: 'Follow System'
 | 
			
		||||
    },
 | 
			
		||||
    grayscale: 'Grayscale',
 | 
			
		||||
    colourWeakness: 'Colour Weakness',
 | 
			
		||||
    layoutMode: {
 | 
			
		||||
      title: 'Layout Mode',
 | 
			
		||||
      vertical: 'Vertical Menu Mode',
 | 
			
		||||
 
 | 
			
		||||
@@ -65,6 +65,7 @@ const local: App.I18n.Schema = {
 | 
			
		||||
      auto: '跟随系统'
 | 
			
		||||
    },
 | 
			
		||||
    grayscale: '灰色模式',
 | 
			
		||||
    colourWeakness: '色弱模式',
 | 
			
		||||
    layoutMode: {
 | 
			
		||||
      title: '布局模式',
 | 
			
		||||
      vertical: '左侧菜单模式',
 | 
			
		||||
 
 | 
			
		||||
@@ -10,8 +10,8 @@ import {
 | 
			
		||||
  createThemeToken,
 | 
			
		||||
  getNaiveTheme,
 | 
			
		||||
  initThemeSettings,
 | 
			
		||||
  toggleCssDarkMode,
 | 
			
		||||
  toggleGrayscaleMode
 | 
			
		||||
  toggleAuxiliaryColorModes,
 | 
			
		||||
  toggleCssDarkMode
 | 
			
		||||
} from './shared';
 | 
			
		||||
 | 
			
		||||
/** Theme store */
 | 
			
		||||
@@ -33,6 +33,9 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
 | 
			
		||||
  /** grayscale mode */
 | 
			
		||||
  const grayscaleMode = computed(() => settings.value.grayscale);
 | 
			
		||||
 | 
			
		||||
  /** colourWeakness mode */
 | 
			
		||||
  const colourWeaknessMode = computed(() => settings.value.colourWeakness);
 | 
			
		||||
 | 
			
		||||
  /** Theme colors */
 | 
			
		||||
  const themeColors = computed(() => {
 | 
			
		||||
    const { themeColor, otherColor, isInfoFollowPrimary } = settings.value;
 | 
			
		||||
@@ -79,6 +82,15 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
 | 
			
		||||
    settings.value.grayscale = isGrayscale;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Set colourWeakness value
 | 
			
		||||
   *
 | 
			
		||||
   * @param isColourWeakness
 | 
			
		||||
   */
 | 
			
		||||
  function setColourWeakness(isColourWeakness: boolean) {
 | 
			
		||||
    settings.value.colourWeakness = isColourWeakness;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Toggle theme scheme */
 | 
			
		||||
  function toggleThemeScheme() {
 | 
			
		||||
    const themeSchemes: UnionKey.ThemeScheme[] = ['light', 'dark', 'auto'];
 | 
			
		||||
@@ -167,9 +179,9 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    watch(
 | 
			
		||||
      grayscaleMode,
 | 
			
		||||
      [grayscaleMode, colourWeaknessMode],
 | 
			
		||||
      val => {
 | 
			
		||||
        toggleGrayscaleMode(val);
 | 
			
		||||
        toggleAuxiliaryColorModes(val[0], val[1]);
 | 
			
		||||
      },
 | 
			
		||||
      { immediate: true }
 | 
			
		||||
    );
 | 
			
		||||
@@ -197,6 +209,7 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
 | 
			
		||||
    naiveTheme,
 | 
			
		||||
    settingsJson,
 | 
			
		||||
    setGrayscale,
 | 
			
		||||
    setColourWeakness,
 | 
			
		||||
    resetStore,
 | 
			
		||||
    setThemeScheme,
 | 
			
		||||
    toggleThemeScheme,
 | 
			
		||||
 
 | 
			
		||||
@@ -180,20 +180,16 @@ export function toggleCssDarkMode(darkMode = false) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Toggle grayscale mode
 | 
			
		||||
 * Toggle auxiliary color modes
 | 
			
		||||
 *
 | 
			
		||||
 * @param grayscaleMode Is grayscale mode
 | 
			
		||||
 * @param grayscaleMode
 | 
			
		||||
 * @param colourWeakness
 | 
			
		||||
 */
 | 
			
		||||
export function toggleGrayscaleMode(grayscaleMode = false) {
 | 
			
		||||
  const GRAYSCALE_CLASS = 'grayscale';
 | 
			
		||||
 | 
			
		||||
  const { add, remove } = toggleHtmlClass(GRAYSCALE_CLASS);
 | 
			
		||||
 | 
			
		||||
  if (grayscaleMode) {
 | 
			
		||||
    add();
 | 
			
		||||
  } else {
 | 
			
		||||
    remove();
 | 
			
		||||
  }
 | 
			
		||||
export function toggleAuxiliaryColorModes(grayscaleMode = false, colourWeakness = false) {
 | 
			
		||||
  const htmlElement = document.documentElement;
 | 
			
		||||
  htmlElement.style.filter = [grayscaleMode ? 'grayscale(100%)' : '', colourWeakness ? 'invert(80%)' : '']
 | 
			
		||||
    .filter(Boolean)
 | 
			
		||||
    .join(' ');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type NaiveColorScene = '' | 'Suppl' | 'Hover' | 'Pressed' | 'Active';
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,3 @@ body,
 | 
			
		||||
html {
 | 
			
		||||
  overflow-x: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
html.grayscale {
 | 
			
		||||
  filter: grayscale(100%);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
export const themeSettings: App.Theme.ThemeSetting = {
 | 
			
		||||
  themeScheme: 'light',
 | 
			
		||||
  grayscale: false,
 | 
			
		||||
  colourWeakness: false,
 | 
			
		||||
  recommendColor: false,
 | 
			
		||||
  themeColor: '#646cff',
 | 
			
		||||
  otherColor: {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								src/typings/app.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								src/typings/app.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -10,6 +10,8 @@ declare namespace App {
 | 
			
		||||
      themeScheme: UnionKey.ThemeScheme;
 | 
			
		||||
      /** grayscale mode */
 | 
			
		||||
      grayscale: boolean;
 | 
			
		||||
      /** colour weakness mode */
 | 
			
		||||
      colourWeakness: boolean;
 | 
			
		||||
      /** Whether to recommend color */
 | 
			
		||||
      recommendColor: boolean;
 | 
			
		||||
      /** Theme color */
 | 
			
		||||
@@ -332,6 +334,7 @@ declare namespace App {
 | 
			
		||||
      theme: {
 | 
			
		||||
        themeSchema: { title: string } & Record<UnionKey.ThemeScheme, string>;
 | 
			
		||||
        grayscale: string;
 | 
			
		||||
        colourWeakness: string;
 | 
			
		||||
        layoutMode: { title: string; reverseHorizontalMix: string } & Record<UnionKey.ThemeLayoutMode, string>;
 | 
			
		||||
        recommendColor: string;
 | 
			
		||||
        recommendColorDesc: string;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user