app.js 2.7 KB

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