app.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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.__PLACEHOLDER__ = __PLACEHOLDER__
  39. Vue.prototype.__WECHAT__ = __WECHAT__
  40. Vue.prototype.$keycloak = keycloak
  41. Vue.prototype.$showLoading = showLoading
  42. Vue.prototype.$closeLoading = closeLoading
  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. store,
  58. render: h => h(App)
  59. }).$mount('#app')
  60. console.timeEnd('app')
  61. }
  62. function refreshKeycloak (keycloak) {
  63. // Token Refresh
  64. setInterval(() => {
  65. keycloak.updateToken(70).then(refreshed => {
  66. if (refreshed) {
  67. store.dispatch('user/refresh', keycloak).catch(() => {
  68. try {
  69. MessageBox.close()
  70. } finally {
  71. store.dispatch('user/clearToken')
  72. MessageBox.confirm(
  73. '账号信息发生变化,请重新登录',
  74. '系统提示',
  75. {
  76. type: 'warning',
  77. confirmButtonText: '重新登录',
  78. center: true,
  79. showClose: false,
  80. showCancelButton: false,
  81. closeOnClickModal: false,
  82. closeOnPressEscape: false,
  83. closeOnHashChange: false
  84. }
  85. ).then(() => {
  86. store.dispatch('user/logout')
  87. })
  88. }
  89. })
  90. } else {
  91. console.warn(`Token not refreshed, valid for ${Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000)} seconds`)
  92. }
  93. }).catch(e => console.error('Failed to refresh token', e))
  94. }, 6000)
  95. }