navs.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { config } from '@/router'
  2. import { attach } from '@/constant/view'
  3. import user from './user'
  4. import { watch, ref } from 'vue'
  5. // 所有权限都有的router
  6. export const MUST_JOIN_NAVS = ['viewLayout', 'login', 'register', 'forget', 'scene', 'sceneVisitor']
  7. // router对应的icon
  8. const ICON_MAP = {
  9. estate: 'iconfire_scenes',
  10. home: 'iconfire_home',
  11. vrmodel: 'iconfire_scenes',
  12. camera: 'iconfire_camera',
  13. dispatch: 'iconfire_management',
  14. organization: 'el-icon-guide',
  15. teaching: 'iconfire_study',
  16. user: 'iconfire_user',
  17. role:'iconfire_user',
  18. }
  19. const getNames = (config) => {
  20. let names = []
  21. config.forEach(item => {
  22. names.push(item.name)
  23. item.children && names.push(...getNames(item.children))
  24. })
  25. return names
  26. }
  27. const _getNavs = (items, notJoinNavs) => {
  28. let ret = []
  29. for (let i = 0; i < items.length; i++) {
  30. if (~notJoinNavs.indexOf(items[i].name)) {
  31. continue
  32. } else {
  33. if (items[i].children && items[i].name !== 'organization') {
  34. ret.push(..._getNavs(items[i].children, notJoinNavs))
  35. } else if (ICON_MAP[items[i].name]){
  36. let item = {
  37. ...items[i],
  38. icon: ICON_MAP[items[i].name]
  39. }
  40. ret.push(item)
  41. // delete item.component
  42. }
  43. }
  44. }
  45. console.log('_getNavs',ret);
  46. return ret
  47. }
  48. const getNavs = () => {
  49. let names = getNames(config)
  50. let showNames = user.value.permission.map(item => item.viewName)
  51. console.log('showNames',showNames,user.value.permission);
  52. let notJoinNavs = names.filter(name =>
  53. ~Object.keys(attach).indexOf(name) || (
  54. !~showNames.indexOf(name) &&
  55. !~MUST_JOIN_NAVS.indexOf(name)
  56. )
  57. )
  58. return _getNavs(config, notJoinNavs)
  59. }
  60. const navs = ref([])
  61. watch(
  62. () => user.value.permission,
  63. () => navs.value = getNavs()
  64. )
  65. setTimeout(() => navs.value = getNavs())
  66. export default navs