index.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <!-- 架构首页 -->
  2. <template>
  3. <div class="appBox" :class="settingStore.isSidebarCompact ? 'compact' : ''">
  4. <EaseRequest v-if="settingStore.showApiModal"></EaseRequest>
  5. <div :class="`${setting.style.value} ${setting.layout.value}`">
  6. <!-- 上左右 -->
  7. <template v-if="setting.layout.value === 'top'">
  8. <t-layout key="side" :class="mainLayoutCls">
  9. <t-header><layout-header /></t-header>
  10. <div class="topBox">
  11. <t-aside><layout-side-nav /></t-aside>
  12. <t-layout>
  13. <t-content><layout-content-side /></t-content>
  14. </t-layout>
  15. </div>
  16. </t-layout>
  17. </template>
  18. </div>
  19. </div>
  20. </template>
  21. <script setup lang="ts">
  22. import { computed, onMounted, watch } from 'vue'
  23. import { storeToRefs } from 'pinia'
  24. import { useRoute } from 'vue-router'
  25. import { useSettingStore, useTabsRouterStore } from '@/store'
  26. import LayoutHeader from './components/LayoutHeader.vue'
  27. import LayoutContentSide from './components/LayoutContentSide.vue'
  28. import LayoutSideNav from './components/LayoutSideNav.vue'
  29. import { prefix } from '@/config/global'
  30. import EaseRequest from './components/EaseRequest.vue'
  31. const route = useRoute()
  32. const settingStore = useSettingStore()
  33. const tabsRouterStore = useTabsRouterStore()
  34. const setting = storeToRefs(settingStore)
  35. // mainLayoutCls是一个计算属性,用于控制主布局的样式
  36. const mainLayoutCls = computed(() => [
  37. {
  38. 't-layout--with-sider': settingStore.showSidebar
  39. }
  40. ])
  41. // 添加新路由
  42. const appendNewRoute = () => {
  43. const {
  44. path,
  45. query,
  46. meta: { title },
  47. name
  48. } = route
  49. tabsRouterStore.appendTabRouterList({
  50. path,
  51. query,
  52. title: title as string,
  53. name,
  54. isAlive: true,
  55. meta: route.meta
  56. })
  57. }
  58. // 生命周期
  59. onMounted(() => {
  60. appendNewRoute()
  61. })
  62. // 监听路由变化,添加新路由,滚动到顶部
  63. watch(
  64. () => route.path,
  65. () => {
  66. appendNewRoute()
  67. document
  68. .querySelector(`.${prefix}-layout`)
  69. .scrollTo({ top: 0, behavior: 'smooth' })
  70. }
  71. )
  72. </script>
  73. <style lang="less" scoped>
  74. .set {
  75. position: fixed;
  76. right: 20px;
  77. top: 17px;
  78. cursor: pointer;
  79. color: #000;
  80. padding: 3px 7px;
  81. z-index: 1002;
  82. padding-bottom: 5px;
  83. .t-icon {
  84. width: 16px;
  85. height: 16px;
  86. }
  87. }
  88. .special {
  89. top: 12px;
  90. }
  91. </style>