Files
vue3-element-admin/src/layout/components/Sidebar/LeftMenu.vue
hxr e03d73bb48 fix: 🐛 补充 basePath 父级路径
Former-commit-id: cce921b52b3f93fb9be8d9619c788a5b1b585fe9
2023-08-15 05:35:35 +08:00

67 lines
1.7 KiB
Vue

<script lang="ts" setup>
import { useRoute } from "vue-router";
import SidebarItem from "./SidebarItem.vue";
import { useSettingsStore } from "@/store/modules/settings";
import { useAppStore } from "@/store/modules/app";
import variables from "@/styles/variables.module.scss";
import path from "path-browserify";
import { isExternal } from "@/utils/index";
const settingsStore = useSettingsStore();
const appStore = useAppStore();
const currRoute = useRoute();
const layout = computed(() => settingsStore.layout);
const props = defineProps({
menuList: {
required: true,
default: () => {
return [];
},
type: Array<any>,
},
basePath: {
type: String,
required: true,
},
});
/**
* 解析路径
*
* @param routePath 路由路径
*/
function resolvePath(routePath: string) {
if (isExternal(routePath)) {
return routePath;
}
if (isExternal(props.basePath)) {
return props.basePath;
}
// 完整路径 = 父级路径(/level/level_3) + 路由路径
const fullPath = path.resolve(props.basePath, routePath); // 相对路径 → 绝对路径
return fullPath;
}
</script>
<template>
<el-menu
:default-active="layout === 'top' ? '-' : currRoute.path"
:collapse="!appStore.sidebar.opened"
:background-color="variables.menuBg"
:text-color="variables.menuText"
:active-text-color="variables.menuActiveText"
:unique-opened="false"
:collapse-transition="false"
:mode="layout === 'top' ? 'horizontal' : 'vertical'"
>
<sidebar-item
v-for="route in menuList"
:key="route.path"
:item="route"
:base-path="resolvePath(route.path)"
:is-collapse="!appStore.sidebar.opened"
/>
</el-menu>
</template>