framework.js 3.1 KB

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