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