main.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import Keycloak from 'keycloak-js'
  2. import Vue from 'vue'
  3. import 'element-ui/lib/theme-chalk/index.css'
  4. import './scss/index.scss'
  5. import Element from 'element-ui'
  6. import App from './App'
  7. import store from './store'
  8. import router from './router'
  9. import './icons'
  10. import './permission'
  11. import {
  12. Role,
  13. Access
  14. } from './constant'
  15. import Wrapper from './components/Wrapper'
  16. import Permission from './components/Permission'
  17. import StatusWrapper from './components/StatusWrapper'
  18. import Pagination from './components/Pagination'
  19. import CTable from './components/CTable'
  20. import AutoText from './components/AutoText'
  21. import EditInput from './components/EditInput'
  22. import SearchInput from './components/SearchInput'
  23. import {
  24. showLoading,
  25. closeLoading
  26. } from './utils/pop'
  27. function startApp () {
  28. document.body.setAttribute('version', __VERSION__)
  29. Vue.use(Element)
  30. Vue.component('Wrapper', Wrapper)
  31. Vue.component('Permission', Permission)
  32. Vue.component('StatusWrapper', StatusWrapper)
  33. Vue.component('Pagination', Pagination)
  34. Vue.component('CTable', CTable)
  35. Vue.component('AutoText', AutoText)
  36. Vue.component('EditInput', EditInput)
  37. Vue.component('SearchInput', SearchInput)
  38. Vue.prototype.$keycloak = keycloak
  39. Vue.prototype.$showLoading = showLoading
  40. Vue.prototype.$closeLoading = closeLoading
  41. Vue.prototype.Access = Access
  42. Vue.prototype.__PLACEHOLDER__ = __PLACEHOLDER__
  43. Vue.prototype.__SENSOR_ELK__ = __SENSOR_ELK__
  44. Vue.config.productionTip = false
  45. Vue.config.errorHandler = err => {
  46. closeLoading()
  47. throw err
  48. }
  49. store.dispatch('user/login', keycloak)
  50. store.dispatch('permission/generateRoutes', store.getters.roles)
  51. router.addRoutes(store.getters.permissionRoutes)
  52. Vue.prototype.hasEditPermission = !store.getters.roles.has(Role.VISITOR)
  53. new Vue({
  54. router,
  55. store,
  56. render: h => h(App)
  57. }).$mount('#app')
  58. }
  59. const initOptions = {
  60. url: process.env.VUE_APP_KEYCLOAK_OPTIONS_URL,
  61. realm: process.env.VUE_APP_KEYCLOAK_OPTIONS_REALM,
  62. clientId: process.env.VUE_APP_KEYCLOAK_OPTIONS_CLIENTID,
  63. onLoad: process.env.VUE_APP_KEYCLOAK_OPTIONS_ONLOAD
  64. }
  65. const keycloak = Keycloak(initOptions)
  66. keycloak
  67. .init({ onLoad: initOptions.onLoad })
  68. .then(auth => {
  69. if (!auth) {
  70. console.error('Authenticated Failed[403]')
  71. return
  72. }
  73. console.log(keycloak)
  74. // Token Refresh
  75. setInterval(() => {
  76. keycloak.updateToken(70).then(refreshed => {
  77. if (refreshed) {
  78. console.info('Token refreshed', keycloak)
  79. store.commit('user/SET_TOKEN', keycloak.token)
  80. } else {
  81. console.warn(`Token not refreshed, valid for ${Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000)} seconds`)
  82. }
  83. }).catch(() => console.error('Failed to refresh token'))
  84. }, 6000)
  85. })
  86. .catch(() => console.error('Authenticated Failed'))
  87. .finally(startApp)