123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import { storeToRefs } from "pinia";
- import { getConfig } from "@/config";
- import { emitter } from "@/utils/mitt";
- import userAvatar from "@/assets/user.jpg";
- import { getTopMenu } from "@/router/utils";
- import { useFullscreen } from "@vueuse/core";
- import { useGlobal } from "@pureadmin/utils";
- import type { routeMetaType } from "../types";
- import { useRouter, useRoute } from "vue-router";
- import { router, remainingPaths } from "@/router";
- import { computed, type CSSProperties } from "vue";
- import { useAppStoreHook } from "@/store/modules/app";
- import { useUserStoreHook } from "@/store/modules/user";
- import { usePermissionStoreHook } from "@/store/modules/permission";
- import ExitFullscreen from "@iconify-icons/ri/fullscreen-exit-fill";
- import Fullscreen from "@iconify-icons/ri/fullscreen-fill";
- const errorInfo = "当前路由配置不正确,请检查配置";
- export function useNav() {
- const route = useRoute();
- const pureApp = useAppStoreHook();
- const routers = useRouter().options.routes;
- const { isFullscreen, toggle } = useFullscreen();
- const { wholeMenus } = storeToRefs(usePermissionStoreHook());
- /** 平台`layout`中所有`el-tooltip`的`effect`配置,默认`light` */
- const tooltipEffect = getConfig()?.TooltipEffect ?? "light";
- const getDivStyle = computed((): CSSProperties => {
- return {
- width: "100%",
- display: "flex",
- alignItems: "center",
- justifyContent: "space-between",
- overflow: "hidden"
- };
- });
- /** 用户名 */
- const username = computed(() => {
- return useUserStoreHook()?.username;
- });
- const avatarsStyle = computed(() => {
- return username.value ? { marginRight: "10px" } : "";
- });
- const isCollapse = computed(() => {
- return !pureApp.getSidebarStatus;
- });
- const device = computed(() => {
- return pureApp.getDevice;
- });
- const { $storage, $config } = useGlobal<GlobalPropertiesApi>();
- const layout = computed(() => {
- return $storage?.layout?.layout;
- });
- const title = computed(() => {
- return $config.Title;
- });
- /** 动态title */
- function changeTitle(meta: routeMetaType) {
- const Title = getConfig().Title;
- if (Title) document.title = `${meta.title} | ${Title}`;
- else document.title = meta.title;
- }
- /** 退出登录 */
- function logout() {
- useUserStoreHook().logOut();
- }
- function backTopMenu() {
- router.push(getTopMenu()?.path);
- }
- function onPanel() {
- emitter.emit("openPanel");
- }
- function toggleSideBar() {
- pureApp.toggleSideBar();
- }
- function handleResize(menuRef) {
- menuRef?.handleResize();
- }
- function resolvePath(route) {
- if (!route.children) return console.error(errorInfo);
- 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) {
- if (wholeMenus.value.length === 0 || isRemaining(indexPath)) return;
- emitter.emit("changLayoutRoute", indexPath);
- }
- /** 判断路径是否参与菜单 */
- function isRemaining(path: string) {
- return remainingPaths.includes(path);
- }
- /** 获取`logo` */
- function getLogo() {
- // return new URL("/logo.svg", import.meta.url).href;
- return new URL("/logo.png", import.meta.url).href;
- }
- return {
- route,
- title,
- device,
- layout,
- logout,
- routers,
- $storage,
- isFullscreen,
- Fullscreen,
- ExitFullscreen,
- toggle,
- backTopMenu,
- onPanel,
- getDivStyle,
- changeTitle,
- toggleSideBar,
- menuSelect,
- handleResize,
- resolvePath,
- getLogo,
- isCollapse,
- pureApp,
- username,
- userAvatar,
- avatarsStyle,
- tooltipEffect
- };
- }
|