navs.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { config } from "@/router";
  2. import user from "./user";
  3. import { watch, ref } from "vue";
  4. // 不加入导航条的页面
  5. const NOT_JOIN_NAVS = [];
  6. // 所有权限都有的router
  7. const MUST_JOIN_NAVS = ["viewLayout"];
  8. // router对应的icon
  9. const ICON_MAP = { viewLayout: "el-icon-s-home" };
  10. const getNames = (config) => {
  11. let names = [];
  12. config.forEach((item) => {
  13. names.push(item.name);
  14. item.children && names.push(...getNames(item.children));
  15. });
  16. return names;
  17. };
  18. const _getNavs = (items, notJoinNavs) => {
  19. let ret = [];
  20. for (let i = 0; i < items.length; i++) {
  21. if (~notJoinNavs.indexOf(items[i].name)) {
  22. continue;
  23. } else {
  24. let item = {
  25. ...items[i],
  26. children: items[i].children ? _getNavs(items[i].children, notJoinNavs) : null,
  27. icon: ICON_MAP[items[i].name],
  28. };
  29. delete item.component;
  30. ret.push(item);
  31. }
  32. }
  33. console.log(ret,'ret');
  34. return ret;
  35. };
  36. const getNavs = () => {
  37. let names = getNames(config);
  38. let noShowNames = ['login']
  39. if (user.value.role == 3) {
  40. let layout = config.find((item) => item.name == "viewLayout");
  41. layout.children.forEach((item) => {
  42. if (item.name != "shop" && item.name != "scene") {
  43. noShowNames.push(item.name);
  44. }
  45. });
  46. }
  47. console.log(noShowNames,'noShowNames');
  48. let notJoinNavs = names.filter((name) => ~NOT_JOIN_NAVS.indexOf(name) || (
  49. ~noShowNames.indexOf(name) &&
  50. !~MUST_JOIN_NAVS.indexOf(name)
  51. ));
  52. console.log(notJoinNavs,'itemitem');
  53. return _getNavs(config, notJoinNavs);
  54. };
  55. const navs = ref([]);
  56. watch(
  57. () => user.value.role,
  58. () => (navs.value = getNavs())
  59. );
  60. setTimeout(() => (navs.value = getNavs()));
  61. export default navs;