!64 版本升级
* Merge branch 'dev' of gitee.com:JavaLionLi/plus-ui into ts * 升级依赖 * !61 fix: 删除重复环境变量ElUploadInstance * fix: 删除重复环境变量ElUploadInstance
This commit is contained in:
		| @ -1,19 +1,18 @@ | ||||
| <template> | ||||
|   <el-menu :default-active="activeMenu" mode="horizontal" @select="handleSelect" :ellipsis="false"> | ||||
|   <el-menu :default-active="activeMenu" mode="horizontal" :ellipsis="false" @select="handleSelect"> | ||||
|     <template v-for="(item, index) in topMenus"> | ||||
|       <el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index" v-if="index < visibleNumber" | ||||
|         ><svg-icon | ||||
|         v-if="item.meta && item.meta.icon && item.meta.icon !== '#'" | ||||
|         :icon-class="item.meta ? item.meta.icon : '' " /> {{ item.meta?.title }}</el-menu-item | ||||
|       <el-menu-item v-if="index < visibleNumber" :key="index" :style="{ '--theme': theme }" :index="item.path" | ||||
|         ><svg-icon v-if="item.meta && item.meta.icon && item.meta.icon !== '#'" :icon-class="item.meta ? item.meta.icon : ''" /> | ||||
|         {{ item.meta?.title }}</el-menu-item | ||||
|       > | ||||
|     </template> | ||||
|  | ||||
|     <!-- 顶部菜单超出数量折叠 --> | ||||
|     <el-sub-menu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber"> | ||||
|     <el-sub-menu v-if="topMenus.length > visibleNumber" :style="{ '--theme': theme }" index="more"> | ||||
|       <template #title>更多菜单</template> | ||||
|       <template v-for="(item, index) in topMenus"> | ||||
|         <el-menu-item :index="item.path" :key="index" v-if="index >= visibleNumber" | ||||
|           ><svg-icon :icon-class="item.meta ? item.meta.icon : '' " /> {{ item.meta?.title }}</el-menu-item | ||||
|         <el-menu-item v-if="index >= visibleNumber" :key="index" :index="item.path" | ||||
|           ><svg-icon :icon-class="item.meta ? item.meta.icon : ''" /> {{ item.meta?.title }}</el-menu-item | ||||
|         > | ||||
|       </template> | ||||
|     </el-sub-menu> | ||||
| @ -26,7 +25,7 @@ import { isHttp } from '@/utils/validate'; | ||||
| import useAppStore from '@/store/modules/app'; | ||||
| import useSettingsStore from '@/store/modules/settings'; | ||||
| import usePermissionStore from '@/store/modules/permission'; | ||||
| import { RouteOption } from 'vue-router'; | ||||
| import { RouteRecordRaw } from 'vue-router'; | ||||
|  | ||||
| // 顶部栏初始数 | ||||
| const visibleNumber = ref<number>(-1); | ||||
| @ -35,9 +34,9 @@ const currentIndex = ref<string>(); | ||||
| // 隐藏侧边栏路由 | ||||
| const hideList = ['/index', '/user/profile']; | ||||
|  | ||||
| const appStore = useAppStore() | ||||
| const settingsStore = useSettingsStore() | ||||
| const permissionStore = usePermissionStore() | ||||
| const appStore = useAppStore(); | ||||
| const settingsStore = useSettingsStore(); | ||||
| const permissionStore = usePermissionStore(); | ||||
| const route = useRoute(); | ||||
| const router = useRouter(); | ||||
|  | ||||
| @ -48,73 +47,73 @@ const routers = computed(() => permissionStore.topbarRouters); | ||||
|  | ||||
| // 顶部显示菜单 | ||||
| const topMenus = computed(() => { | ||||
|   let topMenus:RouteOption[] = []; | ||||
|   let topMenus: RouteRecordRaw[] = []; | ||||
|   routers.value.map((menu) => { | ||||
|     if (menu.hidden !== true) { | ||||
|       // 兼容顶部栏一级菜单内部跳转 | ||||
|       if (menu.path === "/") { | ||||
|           topMenus.push(menu.children? menu.children[0] : menu); | ||||
|       if (menu.path === '/') { | ||||
|         topMenus.push(menu.children ? menu.children[0] : menu); | ||||
|       } else { | ||||
|           topMenus.push(menu); | ||||
|         topMenus.push(menu); | ||||
|       } | ||||
|     } | ||||
|   }) | ||||
|   }); | ||||
|   return topMenus; | ||||
| }) | ||||
| }); | ||||
|  | ||||
| // 设置子路由 | ||||
| const childrenMenus = computed(() => { | ||||
|   let childrenMenus:RouteOption[] = []; | ||||
|   let childrenMenus: RouteRecordRaw[] = []; | ||||
|   routers.value.map((router) => { | ||||
|     router.children?.forEach((item) => { | ||||
|       if (item.parentPath === undefined) { | ||||
|         if(router.path === "/") { | ||||
|           item.path = "/" + item.path; | ||||
|         if (router.path === '/') { | ||||
|           item.path = '/' + item.path; | ||||
|         } else { | ||||
|           if(!isHttp(item.path)) { | ||||
|             item.path = router.path + "/" + item.path; | ||||
|           if (!isHttp(item.path)) { | ||||
|             item.path = router.path + '/' + item.path; | ||||
|           } | ||||
|         } | ||||
|         item.parentPath = router.path; | ||||
|       } | ||||
|       childrenMenus.push(item); | ||||
|     }) | ||||
|   }) | ||||
|     }); | ||||
|   }); | ||||
|   return constantRoutes.concat(childrenMenus); | ||||
| }) | ||||
| }); | ||||
|  | ||||
| // 默认激活的菜单 | ||||
| const activeMenu = computed(() => { | ||||
|   const path = route.path; | ||||
|   let activePath = path; | ||||
|   if (path !== undefined && path.lastIndexOf("/") > 0 && hideList.indexOf(path) === -1) { | ||||
|   if (path !== undefined && path.lastIndexOf('/') > 0 && hideList.indexOf(path) === -1) { | ||||
|     const tmpPath = path.substring(1, path.length); | ||||
|     activePath = "/" + tmpPath.substring(0, tmpPath.indexOf("/")); | ||||
|     activePath = '/' + tmpPath.substring(0, tmpPath.indexOf('/')); | ||||
|     if (!route.meta.link) { | ||||
|         appStore.toggleSideBarHide(false); | ||||
|       appStore.toggleSideBarHide(false); | ||||
|     } | ||||
|   } else if(!route.children) { | ||||
|   } else if (!route.children) { | ||||
|     activePath = path; | ||||
|     appStore.toggleSideBarHide(true); | ||||
|   } | ||||
|   activeRoutes(activePath); | ||||
|   return activePath; | ||||
| }) | ||||
| }); | ||||
|  | ||||
| const setVisibleNumber = () => { | ||||
|   const width = document.body.getBoundingClientRect().width / 3; | ||||
|   visibleNumber.value = parseInt(String(width / 85)); | ||||
| } | ||||
| }; | ||||
|  | ||||
| const handleSelect = (key: string) => { | ||||
|   currentIndex.value = key; | ||||
|   const route = routers.value.find(item => item.path === key); | ||||
|   const route = routers.value.find((item) => item.path === key); | ||||
|   if (isHttp(key)) { | ||||
|     // http(s):// 路径新窗口打开 | ||||
|     window.open(key, "_blank"); | ||||
|     window.open(key, '_blank'); | ||||
|   } else if (!route || !route.children) { | ||||
|     // 没有子路由路径内部打开 | ||||
|     const routeMenu = childrenMenus.value.find(item => item.path === key); | ||||
|     const routeMenu = childrenMenus.value.find((item) => item.path === key); | ||||
|     if (routeMenu && routeMenu.query) { | ||||
|       let query = JSON.parse(routeMenu.query); | ||||
|       router.push({ path: key, query: query }); | ||||
| @ -127,35 +126,35 @@ const handleSelect = (key: string) => { | ||||
|     activeRoutes(key); | ||||
|     appStore.toggleSideBarHide(false); | ||||
|   } | ||||
| } | ||||
| }; | ||||
|  | ||||
| const activeRoutes = (key: string) => { | ||||
|   let routes:RouteOption[] = []; | ||||
|   let routes: RouteRecordRaw[] = []; | ||||
|   if (childrenMenus.value && childrenMenus.value.length > 0) { | ||||
|     childrenMenus.value.map((item) => { | ||||
|       if (key == item.parentPath || (key == "index" && "" == item.path)) { | ||||
|       if (key == item.parentPath || (key == 'index' && '' == item.path)) { | ||||
|         routes.push(item); | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   if(routes.length > 0) { | ||||
|   if (routes.length > 0) { | ||||
|     permissionStore.setSidebarRouters(routes); | ||||
|   } else { | ||||
|     appStore.toggleSideBarHide(true); | ||||
|   } | ||||
|   return routes; | ||||
| } | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|   window.addEventListener('resize', setVisibleNumber) | ||||
| }) | ||||
|   window.addEventListener('resize', setVisibleNumber); | ||||
| }); | ||||
| onBeforeUnmount(() => { | ||||
|   window.removeEventListener('resize', setVisibleNumber) | ||||
| }) | ||||
|   window.removeEventListener('resize', setVisibleNumber); | ||||
| }); | ||||
|  | ||||
| onMounted(() => { | ||||
|   setVisibleNumber() | ||||
| }) | ||||
|   setVisibleNumber(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
| @ -168,7 +167,8 @@ onMounted(() => { | ||||
|   margin: 0 10px !important; | ||||
| } | ||||
|  | ||||
| .topmenu-container.el-menu--horizontal > .el-menu-item.is-active, .el-menu--horizontal > .el-sub-menu.is-active .el-submenu__title { | ||||
| .topmenu-container.el-menu--horizontal > .el-menu-item.is-active, | ||||
| .el-menu--horizontal > .el-sub-menu.is-active .el-submenu__title { | ||||
|   border-bottom: 2px solid #{'var(--theme)'} !important; | ||||
|   color: #303133; | ||||
| } | ||||
| @ -184,7 +184,9 @@ onMounted(() => { | ||||
| } | ||||
|  | ||||
| /* 背景色隐藏 */ | ||||
| .topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus, .topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover, .topmenu-container.el-menu--horizontal>.el-submenu .el-submenu__title:hover { | ||||
| .topmenu-container.el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, | ||||
| .topmenu-container.el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, | ||||
| .topmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title:hover { | ||||
|   background-color: #ffffff !important; | ||||
| } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 ahaos
					ahaos