index.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <div class="avue-contail"
  3. :class="{'avue--collapse':isCollapse}">
  4. <div class="avue-header">
  5. <!-- 顶部导航栏 -->
  6. <top/>
  7. </div>
  8. <div class="avue-layout">
  9. <div class="avue-left">
  10. <!-- 左侧导航栏 -->
  11. <sidebar/>
  12. </div>
  13. <div class="avue-main">
  14. <!-- 顶部标签卡 -->
  15. <tags/>
  16. <!-- 主体视图层 -->
  17. <el-scrollbar style="height:100%">
  18. <keep-alive>
  19. <router-view class="avue-view"
  20. v-if="$route.meta.$keepAlive"/>
  21. </keep-alive>
  22. <router-view class="avue-view"
  23. v-if="!$route.meta.$keepAlive"/>
  24. </el-scrollbar>
  25. </div>
  26. </div>
  27. <div class="avue-shade"
  28. @click="showCollapse"></div>
  29. </div>
  30. </template>
  31. <script>
  32. import {mapGetters} from 'vuex'
  33. import tags from './tags'
  34. import top from './top/'
  35. import sidebar from './sidebar/'
  36. import admin from '@/util/admin';
  37. import {validatenull} from '@/util/validate';
  38. import {calcDate} from '@/util/date.js';
  39. import {getStore} from '@/util/store.js';
  40. export default {
  41. components: {
  42. top,
  43. tags,
  44. sidebar
  45. },
  46. name: 'index',
  47. data() {
  48. return {
  49. //刷新token锁
  50. refreshLock: false,
  51. //刷新token的时间
  52. refreshTime: '',
  53. }
  54. },
  55. created() {
  56. //实时检测刷新token
  57. this.refreshToken()
  58. },
  59. destroyed() {
  60. console.log("销毁")
  61. console.log(this.refreshTime)
  62. clearInterval(this.refreshTime)
  63. },
  64. mounted() {
  65. this.init()
  66. },
  67. computed: mapGetters(['isLock', 'isCollapse', 'website', 'expires_in']),
  68. props: [],
  69. methods: {
  70. showCollapse() {
  71. this.$store.commit("SET_COLLAPSE")
  72. },
  73. // 屏幕检测
  74. init() {
  75. this.$store.commit('SET_SCREEN', admin.getScreen())
  76. window.onresize = () => {
  77. setTimeout(() => {
  78. this.$store.commit('SET_SCREEN', admin.getScreen())
  79. }, 0);
  80. }
  81. },
  82. // 实时检测刷新token
  83. refreshToken() {
  84. this.refreshTime = setInterval(() => {
  85. const token = getStore({
  86. name: 'access_token',
  87. debug: true,
  88. });
  89. if (validatenull(token)) {
  90. return;
  91. }
  92. if (this.expires_in <= 1000 && !this.refreshLock) {
  93. this.refreshLock = true
  94. this.$store
  95. .dispatch('RefreshToken')
  96. .catch(() => {
  97. clearInterval(this.refreshTime)
  98. });
  99. this.refreshLock = false
  100. }
  101. this.$store.commit("SET_EXPIRES_IN",this.expires_in - 10);
  102. }, 10000);
  103. },
  104. }
  105. }
  106. </script>