main.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 Wrapper from './components/Wrapper'
  12. import Permission from './components/Permission'
  13. import StatusWrapper from './components/StatusWrapper'
  14. import Pagination from './components/Pagination'
  15. import CTable from './components/CTable'
  16. import AutoText from '@/components/AutoText'
  17. import EditInput from './components/EditInput'
  18. import SearchInput from './components/SearchInput'
  19. import {
  20. showLoading,
  21. closeLoading
  22. } from './utils/pop'
  23. import { setBase } from '@/api/user'
  24. async function startApp () {
  25. document.body.setAttribute('version', __VERSION__)
  26. Vue.use(Element)
  27. Vue.component('Wrapper', Wrapper)
  28. Vue.component('Permission', Permission)
  29. Vue.component('StatusWrapper', StatusWrapper)
  30. Vue.component('Pagination', Pagination)
  31. Vue.component('CTable', CTable)
  32. Vue.component('AutoText', AutoText)
  33. Vue.component('EditInput', EditInput)
  34. Vue.component('SearchInput', SearchInput)
  35. Vue.prototype.$showLoading = showLoading
  36. Vue.prototype.$closeLoading = closeLoading
  37. Vue.config.productionTip = false
  38. Vue.config.errorHandler = err => {
  39. closeLoading()
  40. throw err
  41. }
  42. Vue.prototype.$keycloak = keycloak
  43. Vue.prototype.__PLACEHOLDER__ = __PLACEHOLDER__
  44. Vue.prototype.__SENSOR_ELK__ = __SENSOR_ELK__
  45. console.log(keycloak)
  46. setBase(keycloak)
  47. await store.dispatch('user/login', keycloak.token)
  48. new Vue({
  49. router,
  50. store,
  51. render: h => h(App)
  52. }).$mount('#app')
  53. }
  54. const initOptions = {
  55. url: process.env.VUE_APP_KEYCLOAK_OPTIONS_URL,
  56. realm: process.env.VUE_APP_KEYCLOAK_OPTIONS_REALM,
  57. clientId: process.env.VUE_APP_KEYCLOAK_OPTIONS_CLIENTID,
  58. onLoad: process.env.VUE_APP_KEYCLOAK_OPTIONS_ONLOAD
  59. }
  60. const keycloak = Keycloak(initOptions)
  61. keycloak
  62. .init({ onLoad: initOptions.onLoad })
  63. .then(auth => {
  64. if (!auth) {
  65. console.error('Authenticated Failed[403]')
  66. return
  67. }
  68. // Token Refresh
  69. setInterval(() => {
  70. keycloak.updateToken(70).then(refreshed => {
  71. if (refreshed) {
  72. console.info('Token refreshed')
  73. store.dispatch('user/login', keycloak.token)
  74. } else {
  75. console.warn(`Token not refreshed, valid for ${Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000)} seconds`)
  76. }
  77. }).catch(() => console.error('Failed to refresh token'))
  78. }, 6000)
  79. })
  80. .catch(() => console.error('Authenticated Failed'))
  81. .finally(startApp)