From a63543a5c793c8954fa2f9da0ee4fb215c62d8c2 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 20 五月 2024 10:26:46 +0800 Subject: [PATCH] !118 ♥️发布 5.2.0-BETA 公测版本 Merge pull request !118 from 疯狂的狮子Li/dev --- src/layout/components/Settings/index.vue | 174 +++++++++++++++++++++++---------------------------------- 1 files changed, 70 insertions(+), 104 deletions(-) diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue index d5522ae..3082beb 100644 --- a/src/layout/components/Settings/index.vue +++ b/src/layout/components/Settings/index.vue @@ -1,11 +1,11 @@ <template> - <el-drawer v-model="showSettings" :withHeader="false" direction="rtl" size="300px" close-on-click-modal> + <el-drawer v-model="showSettings" :with-header="false" direction="rtl" size="300px" close-on-click-modal> <h3 class="drawer-title">涓婚椋庢牸璁剧疆</h3> <div class="setting-drawer-block-checbox"> <div class="setting-drawer-block-checbox-item" @click="handleTheme(SideThemeEnum.DARK)"> <img src="@/assets/images/dark.svg" alt="dark" /> - <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;"> + <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block"> <i aria-label="鍥炬爣: check" class="anticon anticon-check"> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class> <path @@ -17,7 +17,7 @@ </div> <div class="setting-drawer-block-checbox-item" @click="handleTheme(SideThemeEnum.LIGHT)"> <img src="@/assets/images/light.svg" alt="light" /> - <div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;"> + <div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block"> <i aria-label="鍥炬爣: check" class="anticon anticon-check"> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class> <path @@ -37,7 +37,7 @@ <div class="drawer-item"> <span>娣辫壊妯″紡</span> <span class="comp-style"> - <el-switch v-model="isDark" @change="toggleDark" class="drawer-switch" /> + <el-switch v-model="isDark" class="drawer-switch" @change="toggleDark" /> </span> </div> @@ -48,35 +48,35 @@ <div class="drawer-item"> <span>寮�鍚� TopNav</span> <span class="comp-style"> - <el-switch v-model="topNav" class="drawer-switch" /> + <el-switch v-model="settingsStore.topNav" class="drawer-switch" @change="topNavChange" /> </span> </div> <div class="drawer-item"> <span>寮�鍚� Tags-Views</span> <span class="comp-style"> - <el-switch v-model="tagsView" class="drawer-switch" /> + <el-switch v-model="settingsStore.tagsView" class="drawer-switch" /> </span> </div> <div class="drawer-item"> <span>鍥哄畾 Header</span> <span class="comp-style"> - <el-switch v-model="fixedHeader" class="drawer-switch" /> + <el-switch v-model="settingsStore.fixedHeader" class="drawer-switch" /> </span> </div> <div class="drawer-item"> <span>鏄剧ず Logo</span> <span class="comp-style"> - <el-switch v-model="sidebarLogo" class="drawer-switch" /> + <el-switch v-model="settingsStore.sidebarLogo" class="drawer-switch" /> </span> </div> <div class="drawer-item"> <span>鍔ㄦ�佹爣棰�</span> <span class="comp-style"> - <el-switch v-model="dynamicTitle" class="drawer-switch" /> + <el-switch v-model="settingsStore.dynamicTitle" class="drawer-switch" @change="dynamicTitleChange" /> </span> </div> @@ -88,126 +88,92 @@ </template> <script setup lang="ts"> -import { useDynamicTitle } from '@/utils/dynamicTitle' -import useAppStore from '@/store/modules/app' -import useSettingsStore from '@/store/modules/settings' -import usePermissionStore from '@/store/modules/permission' -import { handleThemeStyle } from '@/utils/theme' -import { ComponentInternalInstance } from "vue"; -import { SettingTypeEnum } from "@/enums/SettingTypeEnum"; -import { SideThemeEnum } from "@/enums/SideThemeEnum"; +import { useDynamicTitle } from '@/utils/dynamicTitle'; +import useAppStore from '@/store/modules/app'; +import useSettingsStore from '@/store/modules/settings'; +import usePermissionStore from '@/store/modules/permission'; +import { handleThemeStyle } from '@/utils/theme'; +import { SideThemeEnum } from '@/enums/SideThemeEnum'; +import defaultSettings from '@/settings'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; -const appStore = useAppStore() -const settingsStore = useSettingsStore() -const permissionStore = usePermissionStore() - +const appStore = useAppStore(); +const settingsStore = useSettingsStore(); +const permissionStore = usePermissionStore(); const showSettings = ref(false); const theme = ref(settingsStore.theme); const sideTheme = ref(settingsStore.sideTheme); const storeSettings = computed(() => settingsStore); -const predefineColors = ref(["#409EFF", "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585"]); +const predefineColors = ref(['#409EFF', '#ff4500', '#ff8c00', '#ffd700', '#90ee90', '#00ced1', '#1e90ff', '#c71585']); // 鏄惁鏆楅粦妯″紡 const isDark = useDark({ storageKey: 'useDarkKey', valueDark: 'dark', - valueLight: 'light', + valueLight: 'light' }); -watch(isDark, ()=> { +// 鍖归厤鑿滃崟棰滆壊 +watch(isDark, () => { if (isDark.value) { - settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: SideThemeEnum.DARK }) + settingsStore.sideTheme = SideThemeEnum.DARK; } else { - settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: sideTheme.value }) + settingsStore.sideTheme = sideTheme.value; } -}) +}); const toggleDark = () => useToggle(isDark); -/** 鏄惁闇�瑕乼opNav */ -const topNav = computed({ - get: () => storeSettings.value.topNav, - set: (val) => { - settingsStore.changeSetting({ key: SettingTypeEnum.TOP_NAV, value: val }) - if (!val) { - appStore.toggleSideBarHide(false); - permissionStore.setSidebarRouters(permissionStore.defaultRoutes); - } - } -}) -/** 鏄惁闇�瑕乼agview */ -const tagsView = computed({ - get: () => storeSettings.value.tagsView, - set: (val) => { - settingsStore.changeSetting({ key: SettingTypeEnum.TAGS_VIEW, value: val }) - } -}) -/**鏄惁闇�瑕佸浐瀹氬ご閮� */ -const fixedHeader = computed({ - get: () => storeSettings.value.fixedHeader, - set: (val) => { - settingsStore.changeSetting({ key: SettingTypeEnum.FIXED_HEADER, value: val }) - } -}) -/**鏄惁闇�瑕佷晶杈规爮鐨刲ogo */ -const sidebarLogo = computed({ - get: () => storeSettings.value.sidebarLogo, - set: (val) => { - settingsStore.changeSetting({ key: SettingTypeEnum.SIDEBAR_LOGO, value: val }) - } -}) -/**鏄惁闇�瑕佷晶杈规爮鐨勫姩鎬佺綉椤电殑title */ -const dynamicTitle = computed({ - get: () => storeSettings.value.dynamicTitle, - set: (val) => { - settingsStore.changeSetting({ key: SettingTypeEnum.DYNAMIC_TITLE, value: val }) - // 鍔ㄦ�佽缃綉椤垫爣棰� - useDynamicTitle() - } -}) +const topNavChange = (val: any) => { + if (!val) { + appStore.toggleSideBarHide(false); + permissionStore.setSidebarRouters(permissionStore.defaultRoutes as any); + } +}; -const themeChange = (val: string | null) => { - settingsStore.changeSetting({ key: SettingTypeEnum.THEME, value: val }) - theme.value = val; - if (val) { - handleThemeStyle(val); - } -} +const dynamicTitleChange = () => { + // 鍔ㄦ�佽缃綉椤垫爣棰� + useDynamicTitle(); +}; + +const themeChange = (val: string) => { + settingsStore.theme = val; + handleThemeStyle(val); +}; const handleTheme = (val: string) => { - sideTheme.value = val; - if (isDark.value && val === SideThemeEnum.LIGHT) { - // 鏆楅粦妯″紡棰滆壊涓嶅彉 - settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: SideThemeEnum.DARK }) - return - } - settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: val }) -} + sideTheme.value = val; + if (isDark.value && val === SideThemeEnum.LIGHT) { + // 鏆楅粦妯″紡棰滆壊涓嶅彉 + settingsStore.sideTheme = SideThemeEnum.DARK; + return; + } + settingsStore.sideTheme = val; +}; const saveSetting = () => { - proxy?.$modal.loading("姝e湪淇濆瓨鍒版湰鍦帮紝璇风◢鍊�..."); - let layoutSetting = { - "topNav": storeSettings.value.topNav, - "tagsView": storeSettings.value.tagsView, - "fixedHeader": storeSettings.value.fixedHeader, - "sidebarLogo": storeSettings.value.sidebarLogo, - "dynamicTitle": storeSettings.value.dynamicTitle, - "sideTheme": storeSettings.value.sideTheme, - "theme": storeSettings.value.theme - }; - localStorage.setItem("layout-setting", JSON.stringify(layoutSetting)); - setTimeout(() => {proxy?.$modal.closeLoading()}, 1000) -} + proxy?.$modal.loading('姝e湪淇濆瓨鍒版湰鍦帮紝璇风◢鍊�...'); + const settings = useStorage<LayoutSetting>('layout-setting', defaultSettings); + settings.value.topNav = storeSettings.value.topNav; + settings.value.tagsView = storeSettings.value.tagsView; + settings.value.fixedHeader = storeSettings.value.fixedHeader; + settings.value.sidebarLogo = storeSettings.value.sidebarLogo; + settings.value.dynamicTitle = storeSettings.value.dynamicTitle; + settings.value.sideTheme = storeSettings.value.sideTheme; + settings.value.theme = storeSettings.value.theme; + setTimeout(() => { + proxy?.$modal.closeLoading(); + }, 1000); +}; const resetSetting = () => { - proxy?.$modal.loading("姝e湪娓呴櫎璁剧疆缂撳瓨骞跺埛鏂帮紝璇风◢鍊�..."); - localStorage.removeItem("layout-setting") - setTimeout("window.location.reload()", 1000) -} + proxy?.$modal.loading('姝e湪娓呴櫎璁剧疆缂撳瓨骞跺埛鏂帮紝璇风◢鍊�...'); + useStorage<any>('layout-setting', null).value = null; + setTimeout('window.location.reload()', 1000); +}; const openSetting = () => { - showSettings.value = true; -} + showSettings.value = true; +}; defineExpose({ - openSetting, -}) + openSetting +}); </script> <style lang="scss" scoped> -- Gitblit v1.9.3