he wei
2025-04-03 c6a2d2debf161b987ff91c6ac9560d10fc98c54b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<template>
  <div :class="{ 'has-logo': showLogo }">
    <logo v-if="showLogo" :collapse="false" />
    <el-scrollbar wrap-class="scrollbar-wrapper">
      <el-menu class="left-menu" :default-active="activeMenu" :collapse="false"
        :background-color="variables.menuBg" :text-color="variables.menuText" :unique-opened="false"
        :active-text-color="variables.menuActiveText" :collapse-transition="false" mode="vertical">
        <sidebar-item v-for="route in permission_routes" :key="route.path" :item="route" :base-path="route.path" :is-top-route="true" />
      </el-menu>
    </el-scrollbar>
  </div>
</template>
 
<script setup name="Sidebar">
import { ref, reactive, watch, computed } from 'vue';
import { storeToRefs } from 'pinia';
import Logo from './Logo';
import SidebarItem from './SidebarItem';
// import variables from '@/styles/variables.modules.scss';
import useAppStore from '@/store/app';
import usePromissionStore from '@/store/permission';
import useSettingsStore from '@/store/settings';
import { useRoute, useRouter } from 'vue-router';
const route = useRoute();
const router = useRouter();
 
const settingsStore = useSettingsStore();
const appStore = useAppStore();
const permissionStore = usePromissionStore();
const { sidebar } = storeToRefs(appStore);
const { permission_routes: routes } = storeToRefs(permissionStore);
const { secondMenuPopup, sidebarLogo: showLogo } = storeToRefs(settingsStore);
const { toggleSidebar } = appStore;
 
const veriables = reactive()({
  menuBg: '#304156',
  menuText: '#fff',
  menuActiveText: '#409EFF'
});
 
watch(
  () => activeMenu.value,
  () => {
    if (isCollapse.value) {
      toggleSidebar();
    }
  }
);
 
const activeMenu = computed(() => {
  const { meta, path } = route;
  // if set path, the sidebar will highlight the path you set
  if (meta.activeMenu) {
    return meta.activeMenu;
  }
  return path;
});
 
const isCollapse = computed(() => {
  if (secondMenuPopup.value) {
    return true;
  }
  return !sidebar.value.opened;
});
</script>