|
@@ -1,7 +1,7 @@
|
|
<template>
|
|
<template>
|
|
<a-layout style="min-height: 100vh">
|
|
<a-layout style="min-height: 100vh">
|
|
<a-layout-sider theme="dark" :width="140" :collapsed-width="48" collapsible :trigger="null"
|
|
<a-layout-sider theme="dark" :width="140" :collapsed-width="48" collapsible :trigger="null"
|
|
- @collapse="evMenuSecondLongShow" v-model:collapsed="menuSecondLongShow">
|
|
|
|
|
|
+ v-model:collapsed="menuSecondLongShow">
|
|
<div class="logo-layout">
|
|
<div class="logo-layout">
|
|
<div class="logo">
|
|
<div class="logo">
|
|
<img src="@/assets/images/logo.png" style="height: 26px; width: 26px;" />
|
|
<img src="@/assets/images/logo.png" style="height: 26px; width: 26px;" />
|
|
@@ -9,9 +9,8 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <a-menu v-model:selectedKeys="menuTabSate" theme="dark" mode="inline" @mouseleave="evMouseleaveMenu">
|
|
|
|
- <a-menu-item v-for="routeItem in routesData" :key="routeItem.name"
|
|
|
|
- @mouseenter="evMenuGetFn(routeItem, 'mouseenter')" @click="changeRoutesItems(routeItem)">
|
|
|
|
|
|
+ <a-menu v-model:selectedKeys="menuTabSate" theme="dark" mode="inline">
|
|
|
|
+ <a-menu-item v-for="routeItem in routesData" :key="routeItem.name" @click="changeRoutesItems(routeItem)">
|
|
<template #icon>
|
|
<template #icon>
|
|
<svg-icon :icon="routeItem.meta.icon"></svg-icon>
|
|
<svg-icon :icon="routeItem.meta.icon"></svg-icon>
|
|
</template>
|
|
</template>
|
|
@@ -26,23 +25,23 @@
|
|
</a-layout-header>
|
|
</a-layout-header>
|
|
<a-layout>
|
|
<a-layout>
|
|
<a-layout-sider id="layout-sider" :collapsed="false" :width="menuSecondData &&
|
|
<a-layout-sider id="layout-sider" :collapsed="false" :width="menuSecondData &&
|
|
- menuSecondData.children &&
|
|
|
|
- menuSecondData.children.length > 0
|
|
|
|
|
|
+ menuSecondData &&
|
|
|
|
+ menuSecondData.length > 0
|
|
? 160
|
|
? 160
|
|
: 0
|
|
: 0
|
|
- " @mouseleave="evMouseLeavesSubMenu">
|
|
|
|
|
|
+ ">
|
|
<a-menu :selectedKeys="routeItemSelectedKeys" id="layout-sider" theme="light" mode="vertical"
|
|
<a-menu :selectedKeys="routeItemSelectedKeys" id="layout-sider" theme="light" mode="vertical"
|
|
:collapsed="false" :auto-open="true">
|
|
:collapsed="false" :auto-open="true">
|
|
- <template v-for="routeItem in menuSecondData?.children || []">
|
|
|
|
|
|
+ <template v-for="routeItem in menuSecondData || []">
|
|
<!-- {{ routeItem }} -->
|
|
<!-- {{ routeItem }} -->
|
|
- <a-menu-item v-if="!routeItem.children || routeItem.children.length === 0"
|
|
|
|
- :key="routeItem.name?.toString()" @click="evGoPage(routeItem)">
|
|
|
|
|
|
+ <a-menu-item v-if="menuSecondData.length !== 0" :key="routeItem.name?.toString()"
|
|
|
|
+ @click="evGoPage(routeItem)">
|
|
<span class="menu-level-font">{{ routeItem.meta.title }}</span>
|
|
<span class="menu-level-font">{{ routeItem.meta.title }}</span>
|
|
</a-menu-item>
|
|
</a-menu-item>
|
|
-
|
|
|
|
- <template v-else-if="routeItem.children && routeItem.children.length > 0">
|
|
|
|
|
|
+ <!--
|
|
|
|
+ <template v-else-if="menuSecondData && menuSecondData.length > 0">
|
|
<sub-menu :key="routeItem.name" :menu-info="routeItem" @go="evGoPage" />
|
|
<sub-menu :key="routeItem.name" :menu-info="routeItem" @go="evGoPage" />
|
|
- </template>
|
|
|
|
|
|
+ </template> -->
|
|
</template>
|
|
</template>
|
|
</a-menu>
|
|
</a-menu>
|
|
</a-layout-sider>
|
|
</a-layout-sider>
|
|
@@ -62,7 +61,7 @@ import { useRoute, useRouter } from "vue-router";
|
|
import { useSystemStore } from "@/store/modules/systemStore";
|
|
import { useSystemStore } from "@/store/modules/systemStore";
|
|
import LayoutHeader from "@/components/Layout/components/layoutHeader/index.vue";
|
|
import LayoutHeader from "@/components/Layout/components/layoutHeader/index.vue";
|
|
import subMenu from "@/components/Layout/components/subMenu/index.vue";
|
|
import subMenu from "@/components/Layout/components/subMenu/index.vue";
|
|
-import {RouterTagData} from '@/store/modules/routerTag.js'
|
|
|
|
|
|
+import { RouterTagData } from '@/store/modules/routerTag.js'
|
|
|
|
|
|
// 标签页仓库
|
|
// 标签页仓库
|
|
const settingStore = RouterTagData()
|
|
const settingStore = RouterTagData()
|
|
@@ -76,37 +75,11 @@ const menuSecondLongShow = ref(systemStore.menuSecondLongShow);
|
|
// 主菜单
|
|
// 主菜单
|
|
const routesData = router.options.routes[0]?.children || [];
|
|
const routesData = router.options.routes[0]?.children || [];
|
|
|
|
|
|
-const menuTabSate = ref([systemStore.getMenuTabSate || routesData[0].name]);
|
|
|
|
|
|
+const menuTabSate = ref();
|
|
//子菜单
|
|
//子菜单
|
|
-const menuSecondData = ref(systemStore.getRouteItem);
|
|
|
|
-// 选中的状态路由列表
|
|
|
|
-const menuSecondSelectedStatusData = ref(systemStore.getRouteItem);
|
|
|
|
|
|
+const menuSecondData = ref();
|
|
const routeItemSelectedKeys = ref();
|
|
const routeItemSelectedKeys = ref();
|
|
|
|
|
|
-const evMenuSecondLongShow = () => {
|
|
|
|
- systemStore.setStateValue({
|
|
|
|
- key: "menuSecondLongShow",
|
|
|
|
- value: menuSecondLongShow.value ? 1 : 0,
|
|
|
|
- localStorage: true,
|
|
|
|
- });
|
|
|
|
-};
|
|
|
|
-const evMouseleaveMenu = (e) => {
|
|
|
|
- if (
|
|
|
|
- e.relatedTarget?.offsetParent?.id &&
|
|
|
|
- e.relatedTarget?.offsetParent?.id == "layout-sider"
|
|
|
|
- )
|
|
|
|
- return;
|
|
|
|
- menuSecondData.value = menuSecondSelectedStatusData.value;
|
|
|
|
-};
|
|
|
|
-// 子菜单
|
|
|
|
-const evMouseLeavesSubMenu = () => {
|
|
|
|
- menuSecondData.value = menuSecondSelectedStatusData.value;
|
|
|
|
-};
|
|
|
|
-// 鼠标滑动上去更新菜单栏 目前先屏蔽
|
|
|
|
-const evMenuGetFn = (routeItem, type) => {
|
|
|
|
- // menuSecondData.value = routeItem;
|
|
|
|
- // console.log(routeItem);
|
|
|
|
-};
|
|
|
|
|
|
|
|
// 查找最下级
|
|
// 查找最下级
|
|
const findPath = (data) => {
|
|
const findPath = (data) => {
|
|
@@ -119,43 +92,62 @@ const findPath = (data) => {
|
|
|
|
|
|
// 主路由 状态
|
|
// 主路由 状态
|
|
const changeRoutesItems = (e) => {
|
|
const changeRoutesItems = (e) => {
|
|
- const item = findPath(e);
|
|
|
|
- evGoPage(item);
|
|
|
|
|
|
+ evGoPage(e);
|
|
};
|
|
};
|
|
|
|
|
|
// 跳转路由
|
|
// 跳转路由
|
|
const evGoPage = async (routeItem) => {
|
|
const evGoPage = async (routeItem) => {
|
|
- // settingStore.tagsPushData(routeItem);
|
|
|
|
- await router.push({
|
|
|
|
- name: routeItem.name,
|
|
|
|
- });
|
|
|
|
- menuTabSate.value = [route.matched[1].name];
|
|
|
|
|
|
+ // 主路由跳转
|
|
|
|
+ if (routeItem.children) {
|
|
|
|
+ menuSecondData.value = routeItem.children
|
|
|
|
+ await router.push({
|
|
|
|
+ name: routeItem.children[0].name,
|
|
|
|
+ });
|
|
|
|
+ routeItemSelectedKeys.value = routeItem.children[0].name
|
|
|
|
+ } else {
|
|
|
|
+ await router.push({
|
|
|
|
+ name: routeItem.name,
|
|
|
|
+ });
|
|
|
|
+ routeItemSelectedKeys.value = routeItem.name
|
|
|
|
+ }
|
|
systemStore.setStateValue({
|
|
systemStore.setStateValue({
|
|
key: "menuTabSate",
|
|
key: "menuTabSate",
|
|
- value: menuTabSate.value[0] || "",
|
|
|
|
|
|
+ value: routeItem.children?routeItem.children[0].name:routeItem.name,
|
|
localStorage: true,
|
|
localStorage: true,
|
|
});
|
|
});
|
|
|
|
+ settingStore.getDefault(routeItem.children?routeItem.children[0].name:routeItem.name)
|
|
|
|
|
|
- menuSecondSelectedStatusData.value = routesData.find(
|
|
|
|
- (item) => item.name == menuTabSate.value
|
|
|
|
- );
|
|
|
|
- menuSecondData.value = menuSecondSelectedStatusData.value;
|
|
|
|
- systemStore.setStateValue({
|
|
|
|
- key: "routeItem",
|
|
|
|
- value: JSON.stringify(menuSecondData.value),
|
|
|
|
- localStorage: true,
|
|
|
|
- });
|
|
|
|
|
|
+ settingStore.tagsPushData(routeItem.children?routeItem.children[0]:routeItem)
|
|
};
|
|
};
|
|
|
|
|
|
watch(
|
|
watch(
|
|
route,
|
|
route,
|
|
(val) => {
|
|
(val) => {
|
|
if (val.name) {
|
|
if (val.name) {
|
|
- routeItemSelectedKeys.value = [val.name];
|
|
|
|
|
|
+ routesData.forEach(item => {
|
|
|
|
+ item.children.forEach(res => {
|
|
|
|
+ if (res.name == val.name) {
|
|
|
|
+ menuSecondData.value = item.children
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ })
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- { immediate: true }
|
|
|
|
|
|
+ { immediate: true, deep: true }
|
|
);
|
|
);
|
|
|
|
+
|
|
|
|
+watch(() => settingStore.getMenuTabSate, val => {
|
|
|
|
+ if (val) {
|
|
|
|
+ routeItemSelectedKeys.value = [val]
|
|
|
|
+ menuTabSate.value = routesData.map(item => {
|
|
|
|
+ const found = item.children.find(res => res.name === val);
|
|
|
|
+ return found ? item.name : null;
|
|
|
|
+ }).filter(name => name !== null);
|
|
|
|
+ } else {
|
|
|
|
+ routeItemSelectedKeys.value = [routesData[0].children?.name]
|
|
|
|
+ menuTabSate.value = [routesData[0].name]
|
|
|
|
+ }
|
|
|
|
+}, { immediate: true })
|
|
</script>
|
|
</script>
|
|
<style scoped lang="less">
|
|
<style scoped lang="less">
|
|
.layout-header {
|
|
.layout-header {
|