navs.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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', 'organization', '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. }
  18. const getNames = (config) => {
  19. let names = []
  20. config.forEach(item => {
  21. names.push(item.name)
  22. item.children && names.push(...getNames(item.children))
  23. })
  24. return names
  25. }
  26. const _getNavs = (items, notJoinNavs) => {
  27. let ret = []
  28. for (let i = 0; i < items.length; i++) {
  29. if (~notJoinNavs.indexOf(items[i].name)) {
  30. continue
  31. } else {
  32. if (items[i].children && items[i].name !== 'organization') {
  33. ret.push(..._getNavs(items[i].children, notJoinNavs))
  34. } else if (ICON_MAP[items[i].name]){
  35. let item = {
  36. ...items[i],
  37. icon: ICON_MAP[items[i].name]
  38. }
  39. ret.push(item)
  40. // delete item.component
  41. }
  42. }
  43. }
  44. return ret
  45. }
  46. const getNavs = () => {
  47. let names = getNames(config)
  48. let showNames = user.value.permission.map(item => item.viewName)
  49. console.log('showNames',showNames,user.value.permission);
  50. let notJoinNavs = names.filter(name =>
  51. ~Object.keys(attach).indexOf(name) || (
  52. !~showNames.indexOf(name) &&
  53. !~MUST_JOIN_NAVS.indexOf(name)
  54. )
  55. )
  56. return _getNavs(config, notJoinNavs)
  57. }
  58. const navs = ref([])
  59. watch(
  60. () => user.value.permission,
  61. () => navs.value = getNavs()
  62. )
  63. setTimeout(() => navs.value = getNavs())
  64. export default navs