defaults.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <template>
  2. <el-container class="layout-container">
  3. <Aside />
  4. <el-container class="flex-center" :class="{ 'layout-backtop': !isFixedHeader }">
  5. <Header v-if="isFixedHeader" />
  6. <el-scrollbar ref="layoutDefaultsScrollbarRef" :class="{ 'layout-backtop': isFixedHeader }">
  7. <Header v-if="!isFixedHeader" />
  8. <Main />
  9. </el-scrollbar>
  10. </el-container>
  11. <el-backtop target=".layout-backtop .el-scrollbar__wrap"></el-backtop>
  12. </el-container>
  13. </template>
  14. <script lang="ts">
  15. import { computed, getCurrentInstance, watch, defineComponent } from 'vue';
  16. import { useRoute } from 'vue-router';
  17. import { useStore } from '/@/store/index';
  18. import Aside from '/@/layout/component/aside.vue';
  19. import Header from '/@/layout/component/header.vue';
  20. import Main from '/@/layout/component/main.vue';
  21. export default defineComponent({
  22. name: 'layoutDefaults',
  23. components: { Aside, Header, Main },
  24. setup() {
  25. const { proxy } = getCurrentInstance() as any;
  26. const store = useStore();
  27. const route = useRoute();
  28. const isFixedHeader = computed(() => {
  29. return store.state.themeConfig.themeConfig.isFixedHeader;
  30. });
  31. // 监听路由的变化
  32. watch(
  33. () => route.path,
  34. () => {
  35. proxy.$refs.layoutDefaultsScrollbarRef.wrap$ && (proxy.$refs.layoutDefaultsScrollbarRef.wrap$.scrollTop = 0)
  36. }
  37. );
  38. return {
  39. isFixedHeader,
  40. };
  41. },
  42. });
  43. </script>