zuozhengqing
2023-12-20 a4ad4789a091367fc2d63e0a6250a816335ea501
src/router/index.js
@@ -5,16 +5,29 @@
import clientRouter from "./client/index.js"
import salesRouter from "./sales/index.js"
import serviceRouter from "./service/index.js"
import backgroundConfigRouter from "./backgroundConfig/index.js"
import {getMenuTreeByRole} from "@/api/menus/index"
import store from '@/store/index.js';
// import backgroundConfigRouter from "./backgroundConfig/index.js"
Vue.use(Router)
const login = (resolve) => require(["@/views/other/login/index"], resolve)
const client = (resolve) => require(["@/views/client/index"], resolve)
const sales = (resolve) => require(["@/views/sales/index"], resolve)
const service = (resolve) => require(["@/views/service/index"], resolve)
const background = (resolve) => require(["@/views/backgroundConfig/index"], resolve)
const noData = (resolve) => require(["@/views/NoData/index"], resolve)
// const background = (resolve) => require(["@/views/backgroundConfig/index"], resolve)
export const routes = [
  // 无数据页面
  {
    path: "noData",
    name: "noData",
    meta: {
      title: "",
      auth: true,
    },
    component: noData,
  },
  {
    path: "client", // 客户管理
    name: "client",
@@ -44,17 +57,17 @@
      title: "服务管理",
      isAllways: true
    }
  },
  {
    path: "background", // 后台设置
    name: "background",
    component: background,
    children: backgroundConfigRouter,
    meta: {
      title: "后台设置",
      isAllways: true
    }
  }
  // {
  //   path: "background", // 后台设置
  //   name: "background",
  //   component: background,
  //   children: backgroundConfigRouter,
  //   meta: {
  //     title: "后台设置",
  //     isAllways: true
  //   }
  // }
]
export const constantRoutes = [
  {
@@ -98,6 +111,46 @@
const router = createRouter()
let isSkip = false;
async function hasPermission(routePath) {
  isSkip = false;
  try {
    const res = await getMenuTreeByRole();
    const newPath = {
      path: "/noData"
    };
    const foundObject = res.data.list.find(obj => obj.systemType === 2);
    if (foundObject) {
      store.commit('setMenus', foundObject.menus);
      foundObject.menus.forEach(item => {
        const nextPath = item.children.find(obj => obj.path === routePath);
        if (nextPath) {
          newPath.path = nextPath.path;
          isSkip = true;
        }
      });
    } else {
      newPath.path = '/noData';
    }
    return newPath;
  } catch (error) {
    return { path: "/noData" };
  }
}
router.beforeEach(async (to, from, next) => {
  try {
    const result = await hasPermission(to.path);
    console.log(result,"result")
    next();
    if (!isSkip) {
      next('/noData')
    }
  } catch (error) {
    console.error('Error in navigation guard:', error);
    next();
  }
});
// router.beforeEach((to, from, next) => {
// must call `next`
// console.log(to, from)