refactor(hooks): 状态管理模块拆分

This commit is contained in:
Soybean
2021-09-07 17:03:59 +08:00
parent 8601ce2ea1
commit 1128ae1870
23 changed files with 346 additions and 361 deletions

View File

@@ -10,7 +10,7 @@ import { computed } from 'vue';
import { useAppStore } from '@/store';
const app = useAppStore();
const showTitle = computed(() => !app.themeSettings.menuStyle.collapsed);
const showTitle = computed(() => !app.menu.collapsed);
const title = import.meta.env.VITE_APP_TITLE as string;
</script>
<style scoped></style>

View File

@@ -1,7 +1,7 @@
<template>
<n-divider title-placement="center">深色主题</n-divider>
<div class="flex-center">
<n-switch :value="app.themeSettings.darkMode" @update:value="handleDarkMode">
<n-switch :value="theme.darkMode" @update:value="handleDarkMode">
<template #checked>
<icon-mdi-white-balance-sunny class="text-14px text-primary" />
</template>
@@ -14,10 +14,10 @@
<script lang="ts" setup>
import { NDivider, NSwitch } from 'naive-ui';
import { useAppStore } from '@/store';
import { useThemeStore } from '@/store';
const app = useAppStore();
const { handleDarkMode } = useAppStore();
const theme = useThemeStore();
const { handleDarkMode } = useThemeStore();
</script>
<style scoped>
:deep(.n-switch__rail) {

View File

@@ -5,7 +5,7 @@
v-for="item in modeList"
:key="item.mode"
:mode="item.mode"
:checked="app.themeSettings.navStyle.mode === item.mode"
:checked="theme.navStyle.mode === item.mode"
@click="setNavMode(item.mode)"
/>
</n-space>
@@ -16,15 +16,15 @@ import { NDivider, NSpace } from 'naive-ui';
import { EnumNavMode } from '@/enum';
import type { NavMode } from '@/interface';
import { NavType } from './components';
import { useAppStore } from '@/store';
import { useThemeStore } from '@/store';
interface ModeList {
mode: NavMode;
label: string;
}
const app = useAppStore();
const { setNavMode } = useAppStore();
const theme = useThemeStore();
const { setNavMode } = useThemeStore();
const modeList: ModeList[] = [
{ mode: 'vertical', label: EnumNavMode.vertical },

View File

@@ -3,20 +3,20 @@
<n-space vertical size="large">
<div class="flex-y-center justify-between">
<span>分割菜单</span>
<n-switch :value="app.themeSettings.menuStyle.splitMenu" @update:value="handleSplitMenu" />
<n-switch :value="theme.menuStyle.splitMenu" @update:value="handleSplitMenu" />
</div>
<div class="flex-y-center justify-between">
<span>固定头部</span>
<n-switch :value="app.themeSettings.headerStyle.fixed" @update:value="handleFixedHeader" />
<n-switch :value="theme.headerStyle.fixed" @update:value="handleFixedHeader" />
</div>
</n-space>
</template>
<script lang="ts" setup>
import { NDivider, NSpace, NSwitch } from 'naive-ui';
import { useAppStore } from '@/store';
import { useThemeStore } from '@/store';
const app = useAppStore();
const { handleSplitMenu, handleFixedHeader } = useAppStore();
const theme = useThemeStore();
const { handleSplitMenu, handleFixedHeader } = useThemeStore();
</script>
<style scoped></style>

View File

@@ -1,18 +1,18 @@
<template>
<n-divider title-placement="center">系统主题</n-divider>
<n-grid :cols="8">
<n-grid-item v-for="color in app.themeSettings.themeColorList" :key="color">
<color-block :color="color" :checked="color === app.themeSettings.themeColor" @click="setThemeColor(color)" />
<n-grid-item v-for="color in theme.themeColorList" :key="color">
<color-block :color="color" :checked="color === theme.themeColor" @click="setThemeColor(color)" />
</n-grid-item>
</n-grid>
</template>
<script lang="ts" setup>
import { NDivider, NGrid, NGridItem } from 'naive-ui';
import { useAppStore } from '@/store';
import { ColorBlock } from '@/components';
import { useThemeStore } from '@/store';
import { ColorBlock } from '../common';
const app = useAppStore();
const { setThemeColor } = useAppStore();
const theme = useThemeStore();
const { setThemeColor } = useThemeStore();
</script>
<style scoped></style>

View File

@@ -0,0 +1,28 @@
<template>
<div class="flex-center w-20px h-20px mx-6px mb-8px cursor-pointer rounded-2px" :style="{ backgroundColor: color }">
<icon-ic-outline-check
v-if="checked"
class="text-14px text-white"
:class="[isWhite ? 'text-gray-700' : 'text-white']"
/>
</div>
</template>
<script lang="ts" setup>
import { computed } from 'vue';
const props = defineProps({
color: {
type: String,
required: true
},
checked: {
type: Boolean,
default: false
}
});
const whiteColors = ['#ffffff', '#fff', 'rgb(255,255,255)'];
const isWhite = computed(() => whiteColors.includes(props.color));
</script>
<style scoped></style>

View File

@@ -0,0 +1,3 @@
import ColorBlock from './ColorBlock.vue';
export { ColorBlock };