This commit is contained in:
ljw
2024-09-13 16:34:15 +08:00
commit 364064e5ce
62 changed files with 8448 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
<template>
<el-menu
class="menus"
:collapse="isCollapse"
:default-active="activeIndex"
background-color="#2d3a4b"
text-color="#fff"
active-text-color="#409eff"
router
>
<menu-item v-for="(route,index) in routes" :key="route.name" :route="route"></menu-item>
</el-menu>
</template>
<script>
import { defineComponent, ref, onMounted, watch, computed } from 'vue'
import { useRouteStore } from '@/store/router'
import MenuItem from '@/layout/components/menu/item.vue'
import { useRoute } from 'vue-router'
import { useAppStore } from '@/store/app'
export default defineComponent({
name: 'Menu',
created () {
},
components: { MenuItem },
setup () {
const routes = ref([])
const route = useRoute()
const app = useAppStore()
const isCollapse = computed(() => app.setting.sideIsCollapse)
const activeIndex = computed(() => route.name)
routes.value = useRouteStore().routes
return {
routes,
activeIndex,
isCollapse,
}
},
})
</script>
<style lang="scss" scoped>
.menus {
min-height: 100vh;
border-right: none;
&:not(.el-menu--collapse) {
width: 210px;
}
}
</style>
<style>
</style>
+52
View File
@@ -0,0 +1,52 @@
<template>
<el-sub-menu v-if="route.children&&route.children.filter(c=>!c.meta?.hide).length>1&&route.children.some(r => !r.meta?.hide)"
:key="route.name"
:index="route.name"
>
<template #title>
<el-icon v-if="route.meta?.icon">
<component :is="`el-icon-${route.meta.icon}`"></component>
</el-icon>
<span>{{route.meta?.title||route.name}}</span>
</template>
<menu-item v-for="(_route,_index) in route.children"
:route="_route"
:key="_route.name">
</menu-item>
</el-sub-menu>
<el-menu-item v-else-if="!parseRoute(route).meta?.hide" :route="parseRoute(route)" :index="parseRoute(route).name">
<el-icon v-if="parseRoute(route).meta?.icon">
<component :is="`el-icon-${parseRoute(route).meta.icon}`"></component>
</el-icon>
<span>{{parseRoute(route).meta?.title||parseRoute(route).name}}</span>
</el-menu-item>
</template>
<script>
import { defineComponent } from 'vue'
export default defineComponent({
name: 'MenuItem',
props: {
route: {},
},
mounted () {
},
setup (props) {
//判断仅有一个子项的route
const parseRoute = (route) => {
if (route.children && route.children.filter(c => !c.meta?.hide).length === 1) {
return route.children.filter(c => !c.meta?.hide)[0]
} else {
return route
}
}
return {
parseRoute,
}
},
})
</script>
<style lang="scss" scoped>
</style>