Initial commit: One Pipe System
完整的管理系统,包含账户管理、卡片管理、套餐管理、财务管理等功能模块。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
264
src/store/modules/setting.ts
Normal file
264
src/store/modules/setting.ts
Normal file
@@ -0,0 +1,264 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
import { MenuThemeType } from '@/types/store'
|
||||
import AppConfig from '@/config'
|
||||
import { SystemThemeEnum, MenuThemeEnum, MenuTypeEnum, ContainerWidthEnum } from '@/enums/appEnum'
|
||||
import { setElementThemeColor } from '@/utils/ui'
|
||||
import { useCeremony } from '@/composables/useCeremony'
|
||||
|
||||
const { defaultMenuWidth, defaultCustomRadius, defaultTabStyle } = AppConfig.systemSetting
|
||||
|
||||
// 系统设置
|
||||
export const useSettingStore = defineStore(
|
||||
'settingStore',
|
||||
() => {
|
||||
const menuType = ref(MenuTypeEnum.LEFT)
|
||||
const menuOpenWidth = ref(defaultMenuWidth)
|
||||
const systemThemeType = ref(SystemThemeEnum.AUTO)
|
||||
const systemThemeMode = ref(SystemThemeEnum.AUTO)
|
||||
const menuThemeType = ref(MenuThemeEnum.DESIGN)
|
||||
const systemThemeColor = ref(AppConfig.elementPlusTheme.primary)
|
||||
const boxBorderMode = ref(true)
|
||||
const uniqueOpened = ref(true)
|
||||
const showMenuButton = ref(true)
|
||||
const showRefreshButton = ref(true)
|
||||
const showCrumbs = ref(true)
|
||||
const autoClose = ref(false)
|
||||
const showWorkTab = ref(true)
|
||||
const showLanguage = ref(true)
|
||||
const showNprogress = ref(true)
|
||||
const colorWeak = ref(false)
|
||||
const showSettingGuide = ref(true)
|
||||
const pageTransition = ref('slide-left')
|
||||
const tabStyle = ref(defaultTabStyle)
|
||||
const menuOpen = ref(true)
|
||||
const refresh = ref(false)
|
||||
const watermarkVisible = ref(false)
|
||||
const customRadius = ref(defaultCustomRadius)
|
||||
const holidayFireworksLoaded = ref(false)
|
||||
const showFestivalText = ref(false)
|
||||
const festivalDate = ref('')
|
||||
const dualMenuShowText = ref(false)
|
||||
const containerWidth = ref(ContainerWidthEnum.FULL)
|
||||
|
||||
const getMenuTheme = computed((): MenuThemeType => {
|
||||
const list = AppConfig.themeList.filter((item) => item.theme === menuThemeType.value)
|
||||
if (isDark.value) {
|
||||
return AppConfig.darkMenuStyles[0]
|
||||
} else {
|
||||
return list[0]
|
||||
}
|
||||
})
|
||||
|
||||
const isDark = computed((): boolean => {
|
||||
return systemThemeType.value === SystemThemeEnum.DARK
|
||||
})
|
||||
|
||||
const getMenuOpenWidth = computed((): string => {
|
||||
return menuOpenWidth.value + 'px' || defaultMenuWidth + 'px'
|
||||
})
|
||||
|
||||
const getCustomRadius = computed((): string => {
|
||||
return customRadius.value + 'rem' || defaultCustomRadius + 'rem'
|
||||
})
|
||||
|
||||
const isShowFireworks = computed((): boolean => {
|
||||
return festivalDate.value === useCeremony().currentFestivalData.value?.date ? false : true
|
||||
})
|
||||
|
||||
const switchMenuLayouts = (type: MenuTypeEnum) => {
|
||||
menuType.value = type
|
||||
}
|
||||
|
||||
const setMenuOpenWidth = (width: number) => {
|
||||
menuOpenWidth.value = width
|
||||
}
|
||||
|
||||
const setGlopTheme = (theme: SystemThemeEnum, themeMode: SystemThemeEnum) => {
|
||||
systemThemeType.value = theme
|
||||
systemThemeMode.value = themeMode
|
||||
}
|
||||
|
||||
const switchMenuStyles = (theme: MenuThemeEnum) => {
|
||||
menuThemeType.value = theme
|
||||
}
|
||||
|
||||
const setElementTheme = (theme: string) => {
|
||||
systemThemeColor.value = theme
|
||||
setElementThemeColor(theme)
|
||||
}
|
||||
|
||||
const setBorderMode = () => {
|
||||
boxBorderMode.value = !boxBorderMode.value
|
||||
}
|
||||
|
||||
const setContainerWidth = (width: ContainerWidthEnum) => {
|
||||
containerWidth.value = width
|
||||
}
|
||||
|
||||
const setUniqueOpened = () => {
|
||||
uniqueOpened.value = !uniqueOpened.value
|
||||
}
|
||||
|
||||
const setButton = () => {
|
||||
showMenuButton.value = !showMenuButton.value
|
||||
}
|
||||
|
||||
const setAutoClose = () => {
|
||||
autoClose.value = !autoClose.value
|
||||
}
|
||||
|
||||
const setShowRefreshButton = () => {
|
||||
showRefreshButton.value = !showRefreshButton.value
|
||||
}
|
||||
|
||||
const setCrumbs = () => {
|
||||
showCrumbs.value = !showCrumbs.value
|
||||
}
|
||||
|
||||
const setWorkTab = (show: boolean) => {
|
||||
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: string) => {
|
||||
pageTransition.value = transition
|
||||
}
|
||||
|
||||
const setTabStyle = (style: string) => {
|
||||
tabStyle.value = style
|
||||
}
|
||||
|
||||
const setMenuOpen = (open: boolean) => {
|
||||
menuOpen.value = open
|
||||
}
|
||||
|
||||
const reload = () => {
|
||||
refresh.value = !refresh.value
|
||||
}
|
||||
|
||||
const setWatermarkVisible = (visible: boolean) => {
|
||||
watermarkVisible.value = visible
|
||||
}
|
||||
|
||||
const setCustomRadius = (radius: string) => {
|
||||
customRadius.value = radius
|
||||
document.documentElement.style.setProperty('--custom-radius', `${radius}rem`)
|
||||
}
|
||||
|
||||
const setholidayFireworksLoaded = (isLoad: boolean) => {
|
||||
holidayFireworksLoaded.value = isLoad
|
||||
}
|
||||
|
||||
const setShowFestivalText = (show: boolean) => {
|
||||
showFestivalText.value = show
|
||||
}
|
||||
|
||||
const setFestivalDate = (date: string) => {
|
||||
festivalDate.value = date
|
||||
}
|
||||
|
||||
const setDualMenuShowText = (show: boolean) => {
|
||||
dualMenuShowText.value = show
|
||||
}
|
||||
|
||||
// 初始化主题样式
|
||||
const initThemeStyles = () => {
|
||||
setElementThemeColor(systemThemeColor.value)
|
||||
document.documentElement.style.setProperty('--custom-radius', `${customRadius.value}rem`)
|
||||
}
|
||||
|
||||
nextTick(() => {
|
||||
initThemeStyles()
|
||||
})
|
||||
|
||||
return {
|
||||
menuType,
|
||||
menuOpenWidth,
|
||||
systemThemeType,
|
||||
systemThemeMode,
|
||||
menuThemeType,
|
||||
systemThemeColor,
|
||||
boxBorderMode,
|
||||
uniqueOpened,
|
||||
showMenuButton,
|
||||
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,
|
||||
setAutoClose,
|
||||
setShowRefreshButton,
|
||||
setCrumbs,
|
||||
setWorkTab,
|
||||
setLanguage,
|
||||
setNprogress,
|
||||
setColorWeak,
|
||||
hideSettingGuide,
|
||||
openSettingGuide,
|
||||
setPageTransition,
|
||||
setTabStyle,
|
||||
setMenuOpen,
|
||||
reload,
|
||||
setWatermarkVisible,
|
||||
setCustomRadius,
|
||||
setholidayFireworksLoaded,
|
||||
setShowFestivalText,
|
||||
setFestivalDate,
|
||||
setDualMenuShowText
|
||||
}
|
||||
},
|
||||
{
|
||||
persist: {
|
||||
key: 'setting',
|
||||
storage: localStorage
|
||||
}
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user