Skip to content

路由跳转默认激活样式问题

scss 样式重复问题

注意

当使用 vite 引入 scss 全局变量时(例如:variables.module.scss),如果此 variable.module.scss 全局变量还在 js 或者 ts 中引入使用的话,那么会报错 SassError: This file is already being loaded。

那么要如何解决此问题呢?很简单,只需要添加一个 global.module.scss 文件即可。

bash

// 引入要进行全局使用的 scss, variables.module.scss
@import 'variables.module.scss';

然后在 js 或者 ts 中,把引入的 variables.module.scss 变为 global.module.scss 即可

修改 SideBarMenu

  • 路由跳转 router

  • 默认激活 default-active

  • 样式问题方便日后换主题

vue
<template>
  <el-menu
    :uniqueOpened="true"
    router
    :default-active="activeMenu"
    :background-color="variables.menuBg"
    :text-color="variables.menuText"
    :active-text-color="variables.menuActiveText"
    :collapse="useCollapse().sidebarOpened"
  >
    <SideBarItem
      v-for="item in routes"
      :key="item.path"
      :route="item"
    ></SideBarItem>
  </el-menu>
</template>

<script setup>
import { filterRouters, generateMenus } from "@/utils/route";
import { useVariables } from "@/stores/variables";
import { useCollapse } from "@/stores/sidebaropen";
/* 获取 变量 */
const { variables } = useVariables();
/* 获取路由 */
const router = useRouter();
const routes = computed(() => {
  const filterRoutes = filterRouters(router.getRoutes());
  return generateMenus(filterRoutes);
});
/* 计算高亮 */
const route = useRoute();

const activeMenu = computed(() => {
  const { meta, path } = route;

  if (meta.activeMenu) {
    return meta.activeMenu;
  }
  return path;
});
</script>

<style lang="scss">
.el-menu {
  border-right: none;
}
</style>