118 lines
3.0 KiB
TypeScript
118 lines
3.0 KiB
TypeScript
import { computed } from "vue";
|
|
import { router } from "/@/router";
|
|
import { emitter } from "/@/utils/mitt";
|
|
import { routeMetaType } from "../types";
|
|
import { transformI18n } from "/@/plugins/i18n";
|
|
import { storageSession } from "/@/utils/storage";
|
|
import { useAppStoreHook } from "/@/store/modules/app";
|
|
import { Title } from "../../../public/serverConfig.json";
|
|
import { useEpThemeStoreHook } from "/@/store/modules/epTheme";
|
|
import { remainingPaths } from "/@/router/modules/index";
|
|
|
|
export function useNav() {
|
|
const pureApp = useAppStoreHook();
|
|
// 用户名
|
|
const usename: string = storageSession.getItem("info")?.username;
|
|
|
|
// 设置国际化选中后的样式
|
|
const getDropdownItemStyle = computed(() => {
|
|
return (locale, t) => {
|
|
return {
|
|
background: locale === t ? useEpThemeStoreHook().epThemeColor : "",
|
|
color: locale === t ? "#f4f4f5" : "#000"
|
|
};
|
|
};
|
|
});
|
|
|
|
const isCollapse = computed(() => {
|
|
return !pureApp.getSidebarStatus;
|
|
});
|
|
|
|
// 动态title
|
|
function changeTitle(meta: routeMetaType) {
|
|
if (Title)
|
|
document.title = `${transformI18n(meta.title, meta.i18n)} | ${Title}`;
|
|
else document.title = transformI18n(meta.title, meta.i18n);
|
|
}
|
|
|
|
// 退出登录
|
|
function logout() {
|
|
storageSession.removeItem("info");
|
|
router.push("/login");
|
|
}
|
|
|
|
function backHome() {
|
|
router.push("/welcome");
|
|
}
|
|
|
|
function onPanel() {
|
|
emitter.emit("openPanel");
|
|
}
|
|
|
|
function toggleSideBar() {
|
|
pureApp.toggleSideBar();
|
|
}
|
|
|
|
function handleResize(menuRef) {
|
|
menuRef.handleResize();
|
|
}
|
|
|
|
function resolvePath(route) {
|
|
const httpReg = /^http(s?):\/\//;
|
|
const routeChildPath = route.children[0]?.path;
|
|
if (httpReg.test(routeChildPath)) {
|
|
return route.path + "/" + routeChildPath;
|
|
} else {
|
|
return routeChildPath;
|
|
}
|
|
}
|
|
|
|
function menuSelect(indexPath: string, routers): void {
|
|
if (isRemaining(indexPath)) return;
|
|
let parentPath = "";
|
|
const parentPathIndex = indexPath.lastIndexOf("/");
|
|
if (parentPathIndex > 0) {
|
|
parentPath = indexPath.slice(0, parentPathIndex);
|
|
}
|
|
// 找到当前路由的信息
|
|
function findCurrentRoute(indexPath: string, routes) {
|
|
return routes.map(item => {
|
|
if (item.path === indexPath) {
|
|
if (item.redirect) {
|
|
findCurrentRoute(item.redirect, item.children);
|
|
} else {
|
|
// 切换左侧菜单 通知标签页
|
|
emitter.emit("changLayoutRoute", {
|
|
indexPath,
|
|
parentPath
|
|
});
|
|
}
|
|
} else {
|
|
if (item.children) findCurrentRoute(indexPath, item.children);
|
|
}
|
|
});
|
|
}
|
|
findCurrentRoute(indexPath, routers);
|
|
}
|
|
|
|
// 判断路径是否参与菜单
|
|
function isRemaining(path: string): boolean {
|
|
return remainingPaths.includes(path);
|
|
}
|
|
|
|
return {
|
|
logout,
|
|
backHome,
|
|
onPanel,
|
|
changeTitle,
|
|
toggleSideBar,
|
|
menuSelect,
|
|
handleResize,
|
|
resolvePath,
|
|
isCollapse,
|
|
pureApp,
|
|
usename,
|
|
getDropdownItemStyle
|
|
};
|
|
}
|