App.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <div
  3. class="app-ct"
  4. :class="{ 'sidebar-open': sidebarOpen }"
  5. >
  6. <app-header @sidebar-change="sidebarOpen = !sidebarOpen" />
  7. <div class="app-bd">
  8. <div
  9. class="app-sd-mask"
  10. @click="sidebarOpen = false"
  11. />
  12. <app-aside />
  13. <router-view />
  14. </div>
  15. </div>
  16. </template>
  17. <style lang="scss" src="./assets/scss/demo.scss"></style>
  18. <script>
  19. import AppHeader from './components/AppHeader.vue'
  20. import AppAside from './components/AppAside.vue'
  21. export default {
  22. name: 'App',
  23. components: { AppHeader, AppAside },
  24. data () {
  25. return {
  26. sidebarOpen: false
  27. }
  28. },
  29. watch: {
  30. // 路由切换
  31. $route ($route) {
  32. // 关闭侧边栏
  33. this.sidebarOpen = false
  34. }
  35. }
  36. }
  37. </script>
  38. <style lang="scss" scoped>
  39. $side-width: 200px;
  40. $just-trans: all .2s ease-in-out;
  41. /* 布局 */
  42. .app-ct {
  43. display: flex;
  44. flex-direction: column;
  45. width: 100%;
  46. height: 100%;
  47. .app-sd {
  48. width: $side-width;
  49. transition: $just-trans;
  50. @include screen-mob {
  51. left: -$side-width;
  52. }
  53. }
  54. .app-bd {
  55. flex: 1;
  56. height: 0;
  57. position: relative;
  58. }
  59. }
  60. .sidebar-open {
  61. @include screen-mob {
  62. .app-sd-mask {
  63. display: block;
  64. }
  65. .app-sd {
  66. left: 0;
  67. }
  68. }
  69. }
  70. .app-sd-mask,
  71. .app-sd {
  72. position: absolute;
  73. top: 0;
  74. left: 0;
  75. z-index: 10;
  76. height: 100%;
  77. }
  78. .app-sd-mask {
  79. display: none;
  80. width: 100%;
  81. }
  82. .app-main {
  83. padding-left: $side-width;
  84. height: 100%;
  85. transition: $just-trans;
  86. @include screen-mob {
  87. padding-left: 0;
  88. }
  89. /deep/ .router-tab {
  90. height: 100%;
  91. }
  92. }
  93. </style>