app.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import Vue from 'vue'
  2. import i18n from '@/language'
  3. import 'element-ui/lib/theme-chalk/index.css'
  4. import './scss/index.scss'
  5. import Element, {
  6. MessageBox,
  7. InputNumber
  8. } from 'element-ui'
  9. import App from './App.vue'
  10. import store from './store'
  11. import router from './router'
  12. import './icons'
  13. import './components'
  14. import './permission'
  15. import {
  16. showLoading,
  17. closeLoading
  18. } from '@/utils/pop'
  19. export default async function startApp (keycloak, auth) {
  20. console.log('app')
  21. console.time('app')
  22. document.body.setAttribute('version', __VERSION__)
  23. if (auth) {
  24. refreshKeycloak(keycloak)
  25. }
  26. InputNumber.methods.handleInputChange = function (value) {
  27. const newVal = value === '' ? this.min === -Infinity ? void 0 : this.min : Number(value)
  28. if (!isNaN(newVal) || value === '') {
  29. this.setCurrentValue(newVal)
  30. }
  31. this.userInput = null
  32. }
  33. Vue.use(Element)
  34. Vue.config.productionTip = false
  35. Vue.config.errorHandler = err => {
  36. closeLoading()
  37. throw (err || 'custom reject')
  38. }
  39. Vue.prototype.$keycloak = keycloak
  40. Vue.prototype.$showLoading = showLoading
  41. Vue.prototype.$closeLoading = closeLoading
  42. Vue.prototype.$REQUEST_LIMIT = { limit: 0 }
  43. Vue.prototype.$designProgram = function (id) {
  44. window.open(this.$router.resolve({
  45. name: 'program',
  46. params: { id }
  47. }).href, '_blank')
  48. }
  49. window._AMapSecurityConfig = {
  50. securityJsCode: process.env.VUE_APP_GAODE_MAP_JSCODE
  51. }
  52. await store.dispatch('user/login', keycloak)
  53. store.dispatch('permission/generateRoutes')
  54. router.addRoutes(store.getters.permissionRoutes)
  55. new Vue({
  56. router,
  57. i18n,
  58. store,
  59. render: h => h(App)
  60. }).$mount('#app')
  61. console.timeEnd('app')
  62. }
  63. function refreshKeycloak (keycloak) {
  64. // Token Refresh
  65. setInterval(() => {
  66. keycloak.updateToken(70).then(refreshed => {
  67. if (refreshed) {
  68. store.dispatch('user/refresh', keycloak).catch(() => {
  69. try {
  70. MessageBox.close()
  71. } finally {
  72. store.dispatch('user/clearToken')
  73. MessageBox.confirm(
  74. '账号信息发生变化,请重新登录',
  75. '系统提示',
  76. {
  77. type: 'warning',
  78. confirmButtonText: '重新登录',
  79. center: true,
  80. showClose: false,
  81. showCancelButton: false,
  82. closeOnClickModal: false,
  83. closeOnPressEscape: false,
  84. closeOnHashChange: false
  85. }
  86. ).then(() => {
  87. store.dispatch('user/logout')
  88. })
  89. }
  90. })
  91. } else {
  92. console.warn(`Token not refreshed, valid for ${Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000)} seconds`)
  93. }
  94. }).catch(e => console.error('Failed to refresh token', e))
  95. }, 6000)
  96. }