he wei
2025-04-23 b9bd29a1a81f6f7de479e3cc3fdfe3d85fc660bf
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<template>
  <div :class="['hh', { 'has-logo': showLogo }]" style="font-size: 14px">
    <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 { usePermissionStore } 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 = usePermissionStore();
const { sidebar } = storeToRefs(appStore);
const { routes: permission_routes } = storeToRefs(permissionStore);
const { secondMenuPopup, sidebarLogo: showLogo } = storeToRefs(settingsStore);
const { toggleSidebar } = appStore;
 
const variables = reactive({
    menuBg: '#304156',
    menuText: '#fff',
    menuActiveText: '#409EFF'
});
 
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;
});
 
watch(
    () => activeMenu.value,
    () => {
        if (isCollapse.value) {
            toggleSidebar();
        }
    }
);
 
 
const isCollapse = computed(() => {
    if (secondMenuPopup.value) {
        return true;
    }
    return !sidebar.value.opened;
});
</script>