feat(layout): 添加侧边栏折叠状态管理功能

- 在 counter store 中新增 isCollapseStore 状态管理
- 使用 Pinia 的 storeToRefs 替代 props 传递方式
- 实现侧边栏宽度动态切换逻辑,支持折叠展开
- 移除组件间 props 传递,统一使用全局状态管理
- 配置 ESLint 规则禁用单词组件名检查
- 优化布局组件的状态管理架构
This commit is contained in:
2026-05-10 21:16:07 +08:00
parent bd71459c31
commit 07d33388ed
3 changed files with 25 additions and 17 deletions
@@ -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);
} }
+6 -3
View File
@@ -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>
+8 -1
View File
@@ -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
})
})