framework.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import store from '@/store'
  2. import demoMenus from '@/demo/demo-menus'
  3. import menus from '@/data/menus'
  4. import router from '@/router'
  5. import httputils from '@/utils/httputils'
  6. // const userInfo = { username: 'admin', permissions: ['demo'] }
  7. const userInfo = null
  8. function toLogin() {
  9. router.push('/login')
  10. }
  11. function checkMenu(menu, ps) {
  12. let result = { name: menu.name, icon: menu.icon, path: menu.path, disabled: menu.disabled }
  13. if (menu.children) {
  14. // 如果有下级菜单权限,则自动拥有上级菜单权限
  15. result.children = []
  16. menu.children.forEach(child => {
  17. let submenu = checkMenu(child, ps)
  18. if (submenu) {
  19. result.children.push(submenu)
  20. }
  21. })
  22. return result.children.length > 0 ? result : null
  23. } else if (menu.opts) {
  24. return menu.opts.some(opt => ps[opt.permission]) ? result : null
  25. } else {
  26. // 如果没有下级菜单且没有opts属性, 菜单可以直接访问,不需要权限
  27. return result
  28. }
  29. }
  30. export default {
  31. /**
  32. * 路由守卫, 每次路由跳转时验证登录
  33. * @param {*} to
  34. * @param {*} from
  35. * @param {*} next
  36. */
  37. routerBeforeEach: async function(to, from, next) {
  38. console.log('router before ', to)
  39. if (to.path == '/auth' || to.path == '/login') {
  40. next()
  41. } else {
  42. if (to.meta.breadcrumbs) {
  43. store.dispatch('setBreadcrumb', to.meta.breadcrumbs)
  44. } else {
  45. store.dispatch('setBreadcrumb', [])
  46. }
  47. // next()
  48. let userInfo = store.getters['layout/userInfo']
  49. if (!userInfo) {
  50. // 本地是未登录状态, 保存目标页面地址, 去登录
  51. let lastRoute = { path: to.path, params: to.params, query: to.query }
  52. store.commit('setLastRoute', lastRoute)
  53. toLogin()
  54. } else {
  55. if (to.meta.breadcrumbs) {
  56. store.dispatch('setBreadcrumb', to.meta.breadcrumbs)
  57. }
  58. next()
  59. }
  60. return true
  61. }
  62. },
  63. getMenus(permissions) {
  64. let result = []
  65. let allMenus = []
  66. // 开发环境下展示demo页面
  67. // if (process.env.NODE_ENV === 'development') {
  68. // allMenus = demoMenus
  69. // }
  70. allMenus = allMenus.concat(menus)
  71. let ps = !permissions ? {} : permissions
  72. console.log(ps)
  73. allMenus.forEach(item => {
  74. let menu = checkMenu(item, ps)
  75. if (menu) {
  76. result.push(menu)
  77. }
  78. })
  79. return result
  80. },
  81. login(username, password) {
  82. return new Promise((resolve, reject) => {
  83. if (username == 'admin') {
  84. resolve({ result: 'success', ssoToken: 'admin-token' })
  85. } else {
  86. resolve({ result: 'fail', message: 'username or password error' })
  87. }
  88. })
  89. },
  90. loadUserInfo() {
  91. // return new Promise((resolve, reject) => resolve({ result: 'success', ...userInfo }))
  92. return httputils.getJson(`/admin/ibms/user/userInfo`)
  93. },
  94. toLogout() {
  95. // TODO
  96. router.push('/auth')
  97. store.commit('setSsoToken', null)
  98. let ssoServer = process.env.SSO_SERVER
  99. let redirectUrl = window.location.protocol + '//' + window.location.host + '/'
  100. window.location.href = `${ssoServer}/logout?redirectUrl=${redirectUrl}`
  101. },
  102. toLoginPage: toLogin
  103. }