index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <div class="full-screen flex flex-justify-start">
  3. <el-container>
  4. <el-header class="header">
  5. <top @openMenu="show = true" />
  6. </el-header>
  7. <div class="flex" style="padding: 20px 20px; background-color: #f6f7f8">
  8. <el-aside style="width: 200px; position: fixed; left: 0" v-if="!mini">
  9. <left />
  10. </el-aside>
  11. <el-main class="wt-main hide-scrollbar" @scroll="scroll">
  12. <div class="wrapper">
  13. <router-view v-slot="{ Component, route }">
  14. <keep-alive :include="keepAlive.list">
  15. <component :is="Component" :key="route.fullPath" />
  16. </keep-alive>
  17. </router-view>
  18. </div>
  19. </el-main>
  20. </div>
  21. </el-container>
  22. <el-drawer v-model="show" direction="ltr" :with-header="false" :size="280">
  23. <div>
  24. <div class="padding-left flex flex-justify-start">
  25. <el-button icon="DArrowLeft" circle @click="show = false" />
  26. </div>
  27. <left />
  28. </div>
  29. </el-drawer>
  30. </div>
  31. </template>
  32. <script>
  33. import left from './left.vue'
  34. import top from './top.vue'
  35. import keepAliveStore from '../store/keepAlive.js'
  36. import permissionStore from '@/store/permission.js'
  37. export default {
  38. name: 'index.vue',
  39. components: { left, top },
  40. setup() {
  41. const keepAlive = keepAliveStore()
  42. const permission = permissionStore()
  43. return { keepAlive, permission }
  44. },
  45. data() {
  46. return {
  47. show: false,
  48. mini: false
  49. }
  50. },
  51. created() {
  52. this.keepAlive.$subscribe(res => {
  53. console.log(this.keepAlive.list)
  54. })
  55. this.getPermission()
  56. },
  57. mounted() {
  58. this.setScale()
  59. this.onresize = this.debounce(() => this.setScale(), 100)
  60. window.addEventListener('resize', this.onresize)
  61. },
  62. beforeUnmount() {
  63. window.removeEventListener('resize', this.onresize)
  64. },
  65. methods: {
  66. getPermission() {
  67. this.$api.login.getPermission().then(res => {
  68. if (res.code === 200) {
  69. this.permission.cleanPermission()
  70. this.permission.addPermission(res.data)
  71. }
  72. })
  73. },
  74. scroll(event) {
  75. this.$bus.emit('scorll', event)
  76. },
  77. // 防抖
  78. debounce(fn, t) {
  79. const delay = t || 500
  80. let timer
  81. return function () {
  82. const args = arguments
  83. if (timer) {
  84. clearTimeout(timer)
  85. }
  86. const that = this
  87. timer = setTimeout(() => {
  88. timer = null
  89. fn.apply(that, args)
  90. }, delay)
  91. }
  92. },
  93. // 设置缩放比例
  94. setScale() {
  95. const width = document.documentElement.clientWidth
  96. if (width < 1620) {
  97. this.mini = true
  98. } else {
  99. this.mini = false
  100. }
  101. this.$bus.emit('sizeChange', width)
  102. }
  103. }
  104. }
  105. </script>
  106. <style lang="scss" scoped>
  107. .header {
  108. padding: 0;
  109. }
  110. .wt-main {
  111. width: 1200px;
  112. height: calc(100vh - 100px);
  113. background-color: #f6f7f8;
  114. overflow-x: hidden;
  115. padding: 0;
  116. }
  117. :deep(.el-drawer) {
  118. --el-drawer-bg-color: #f6f7f8;
  119. }
  120. </style>