feat(layout): 添加侧边栏折叠状态管理功能
- 在 counter store 中新增 isCollapseStore 状态管理 - 使用 Pinia 的 storeToRefs 替代 props 传递方式 - 实现侧边栏宽度动态切换逻辑,支持折叠展开 - 移除组件间 props 传递,统一使用全局状态管理 - 配置 ESLint 规则禁用单词组件名检查 - 优化布局组件的状态管理架构
This commit is contained in:
@@ -1,16 +1,14 @@
|
|||||||
|
<!-- eslint-disable vue/multi-word-component-names -->
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {ref} from "vue";
|
import {useIsCollapseStore} from "@/stores/counter.ts";
|
||||||
|
import {storeToRefs} from "pinia";
|
||||||
defineProps<{
|
|
||||||
isCollapse: boolean
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const iconComponent = ref("location")
|
|
||||||
|
|
||||||
|
const isCollapseStore = useIsCollapseStore()
|
||||||
|
const {isCollapse} = storeToRefs(isCollapseStore)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-aside>
|
<el-aside :width="!isCollapse?'200px':'auto'">
|
||||||
<el-scrollbar>
|
<el-scrollbar>
|
||||||
<el-menu
|
<el-menu
|
||||||
default-active="2"
|
default-active="2"
|
||||||
@@ -47,9 +45,9 @@ const iconComponent = ref("location")
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.el-aside {
|
//.el-aside {
|
||||||
width: 200px;
|
// width: 200px;
|
||||||
}
|
//}
|
||||||
:deep(.el-menu.el-menu--vertical) {
|
:deep(.el-menu.el-menu--vertical) {
|
||||||
min-height: calc(100vh - 60px);
|
min-height: calc(100vh - 60px);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
<!-- eslint-disable vue/multi-word-component-names -->
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {ref} from 'vue'
|
|
||||||
import AppMain from "@/layout/components/AppMain.vue"
|
import AppMain from "@/layout/components/AppMain.vue"
|
||||||
import Sidebar from "@/layout/components/Sidebar/index.vue"
|
import Sidebar from "@/layout/components/Sidebar/index.vue"
|
||||||
|
import {useIsCollapseStore} from "@/stores/counter.ts";
|
||||||
|
import {storeToRefs} from "pinia";
|
||||||
|
|
||||||
let isCollapse = ref(false);
|
const isCollapseStore = useIsCollapseStore()
|
||||||
|
const {isCollapse} = storeToRefs(isCollapseStore)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -17,7 +20,7 @@ let isCollapse = ref(false);
|
|||||||
</template>
|
</template>
|
||||||
</el-header>
|
</el-header>
|
||||||
<el-container>
|
<el-container>
|
||||||
<Sidebar :isCollapse="isCollapse"></Sidebar>
|
<Sidebar></Sidebar>
|
||||||
<AppMain></AppMain>
|
<AppMain></AppMain>
|
||||||
</el-container>
|
</el-container>
|
||||||
</el-container>
|
</el-container>
|
||||||
|
|||||||
@@ -1,12 +1,19 @@
|
|||||||
import { ref, computed } from 'vue'
|
import {ref, computed} from 'vue'
|
||||||
import { defineStore } from 'pinia'
|
import {defineStore, mapState} from 'pinia'
|
||||||
|
|
||||||
export const useCounterStore = defineStore('counter', () => {
|
export const useCounterStore = defineStore('counter', () => {
|
||||||
const count = ref(0)
|
const count = ref(0)
|
||||||
const doubleCount = computed(() => count.value * 2)
|
const doubleCount = computed(() => count.value * 2)
|
||||||
|
|
||||||
function increment() {
|
function increment() {
|
||||||
count.value++
|
count.value++
|
||||||
}
|
}
|
||||||
|
|
||||||
return { count, doubleCount, increment }
|
return {count, doubleCount, increment}
|
||||||
|
})
|
||||||
|
|
||||||
|
export const useIsCollapseStore = defineStore('isCollapse', {
|
||||||
|
state: () => ({
|
||||||
|
isCollapse: false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user