import { defineStore } from 'pinia' import { ref, computed } from 'vue' import AppConfig from '@/config' import { SystemThemeEnum } from '@/enums/appEnum' import { setElementThemeColor } from '@/utils/ui' import { useCeremony } from '@/hooks/core/useCeremony' import { StorageConfig } from '@/utils' import { SETTING_DEFAULT_CONFIG } from '@/config/setting' const useSettingStore = defineStore( 'settingStore', () => { const menuType = ref(SETTING_DEFAULT_CONFIG.menuType) const menuOpenWidth = ref(SETTING_DEFAULT_CONFIG.menuOpenWidth) const menuOpen = ref(SETTING_DEFAULT_CONFIG.menuOpen) const dualMenuShowText = ref(SETTING_DEFAULT_CONFIG.dualMenuShowText) const systemThemeType = ref(SETTING_DEFAULT_CONFIG.systemThemeType) const systemThemeMode = ref(SETTING_DEFAULT_CONFIG.systemThemeMode) const menuThemeType = ref(SETTING_DEFAULT_CONFIG.menuThemeType) const systemThemeColor = ref(SETTING_DEFAULT_CONFIG.systemThemeColor) const showMenuButton = ref(SETTING_DEFAULT_CONFIG.showMenuButton) const showFastEnter = ref(SETTING_DEFAULT_CONFIG.showFastEnter) const showRefreshButton = ref(SETTING_DEFAULT_CONFIG.showRefreshButton) const showCrumbs = ref(SETTING_DEFAULT_CONFIG.showCrumbs) const showWorkTab = ref(SETTING_DEFAULT_CONFIG.showWorkTab) const showLanguage = ref(SETTING_DEFAULT_CONFIG.showLanguage) const showNprogress = ref(SETTING_DEFAULT_CONFIG.showNprogress) const showSettingGuide = ref(SETTING_DEFAULT_CONFIG.showSettingGuide) const showFestivalText = ref(SETTING_DEFAULT_CONFIG.showFestivalText) const watermarkVisible = ref(SETTING_DEFAULT_CONFIG.watermarkVisible) const autoClose = ref(SETTING_DEFAULT_CONFIG.autoClose) const uniqueOpened = ref(SETTING_DEFAULT_CONFIG.uniqueOpened) const colorWeak = ref(SETTING_DEFAULT_CONFIG.colorWeak) const refresh = ref(SETTING_DEFAULT_CONFIG.refresh) const holidayFireworksLoaded = ref(SETTING_DEFAULT_CONFIG.holidayFireworksLoaded) const boxBorderMode = ref(SETTING_DEFAULT_CONFIG.boxBorderMode) const pageTransition = ref(SETTING_DEFAULT_CONFIG.pageTransition) const tabStyle = ref(SETTING_DEFAULT_CONFIG.tabStyle) const customRadius = ref(SETTING_DEFAULT_CONFIG.customRadius) const containerWidth = ref(SETTING_DEFAULT_CONFIG.containerWidth) const festivalDate = ref('') const getMenuTheme = computed(() => { const list = AppConfig.themeList.filter((item) => item.theme === menuThemeType.value) if (isDark.value) { return AppConfig.darkMenuStyles[0] } else { return list[0] } }) const isDark = computed(() => { return systemThemeType.value === SystemThemeEnum.DARK }) const getMenuOpenWidth = computed(() => { return menuOpenWidth.value + 'px' || SETTING_DEFAULT_CONFIG.menuOpenWidth + 'px' }) const getCustomRadius = computed(() => { return customRadius.value + 'rem' || SETTING_DEFAULT_CONFIG.customRadius + 'rem' }) const isShowFireworks = computed(() => { return festivalDate.value === useCeremony().currentFestivalData.value?.date ? false : true }) const switchMenuLayouts = (type) => { menuType.value = type } const setMenuOpenWidth = (width) => { menuOpenWidth.value = width } const setGlopTheme = (theme, themeMode) => { systemThemeType.value = theme systemThemeMode.value = themeMode localStorage.setItem(StorageConfig.THEME_KEY, theme) } const switchMenuStyles = (theme) => { menuThemeType.value = theme } const setElementTheme = (theme) => { systemThemeColor.value = theme setElementThemeColor(theme) } const setBorderMode = () => { boxBorderMode.value = !boxBorderMode.value } const setContainerWidth = (width) => { containerWidth.value = width } const setUniqueOpened = () => { uniqueOpened.value = !uniqueOpened.value } const setButton = () => { showMenuButton.value = !showMenuButton.value } const setFastEnter = () => { showFastEnter.value = !showFastEnter.value } const setAutoClose = () => { autoClose.value = !autoClose.value } const setShowRefreshButton = () => { showRefreshButton.value = !showRefreshButton.value } const setCrumbs = () => { showCrumbs.value = !showCrumbs.value } const setWorkTab = (show) => { showWorkTab.value = show } const setLanguage = () => { showLanguage.value = !showLanguage.value } const setNprogress = () => { showNprogress.value = !showNprogress.value } const setColorWeak = () => { colorWeak.value = !colorWeak.value } const hideSettingGuide = () => { showSettingGuide.value = false } const openSettingGuide = () => { showSettingGuide.value = true } const setPageTransition = (transition) => { pageTransition.value = transition } const setTabStyle = (style) => { tabStyle.value = style } const setMenuOpen = (open) => { menuOpen.value = open } const reload = () => { refresh.value = !refresh.value } const setWatermarkVisible = (visible) => { watermarkVisible.value = visible } const setCustomRadius = (radius) => { customRadius.value = radius document.documentElement.style.setProperty('--custom-radius', `${radius}rem`) } const setholidayFireworksLoaded = (isLoad) => { holidayFireworksLoaded.value = isLoad } const setShowFestivalText = (show) => { showFestivalText.value = show } const setFestivalDate = (date) => { festivalDate.value = date } const setDualMenuShowText = (show) => { dualMenuShowText.value = show } return { menuType, menuOpenWidth, systemThemeType, systemThemeMode, menuThemeType, systemThemeColor, boxBorderMode, uniqueOpened, showMenuButton, showFastEnter, showRefreshButton, showCrumbs, autoClose, showWorkTab, showLanguage, showNprogress, colorWeak, showSettingGuide, pageTransition, tabStyle, menuOpen, refresh, watermarkVisible, customRadius, holidayFireworksLoaded, showFestivalText, festivalDate, dualMenuShowText, containerWidth, getMenuTheme, isDark, getMenuOpenWidth, getCustomRadius, isShowFireworks, switchMenuLayouts, setMenuOpenWidth, setGlopTheme, switchMenuStyles, setElementTheme, setBorderMode, setContainerWidth, setUniqueOpened, setButton, setFastEnter, setAutoClose, setShowRefreshButton, setCrumbs, setWorkTab, setLanguage, setNprogress, setColorWeak, hideSettingGuide, openSettingGuide, setPageTransition, setTabStyle, setMenuOpen, reload, setWatermarkVisible, setCustomRadius, setholidayFireworksLoaded, setShowFestivalText, setFestivalDate, setDualMenuShowText } }, { persist: { key: 'setting', storage: localStorage } } ) export { useSettingStore }