ManagePage.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <PageHeader />
  3. <div class="main">
  4. <div class="manage-tabs">
  5. <BaseButton
  6. v-for="tab in MANAGE_TAB_LIST"
  7. :key="tab.id"
  8. :text="tab.label"
  9. :class="{ 'nav-tab-item--active': activeTab === tab.id }"
  10. @click="switchTab(tab.id)"
  11. />
  12. </div>
  13. <ManageBasicReport v-show="activeTab === 'dashboard'" />
  14. <ManageBasicArchive v-show="activeTab === 'archive'" />
  15. <ManageFinanceReport v-show="activeTab === 'audit'" />
  16. <ManageHistoryQuery v-show="activeTab === 'assets'" />
  17. </div>
  18. </template>
  19. <script setup>
  20. import { onMounted, ref, watch } from 'vue';
  21. import { useRoute, useRouter } from 'vue-router';
  22. import PageHeader from '@/components/layout/PageHeader.vue';
  23. import ManageBasicReport from '@/components/manage/pages/ManageBasicReport.vue';
  24. import ManageBasicArchive from '@/components/manage/pages/ManageBasicArchive.vue';
  25. import ManageFinanceReport from '@/components/manage/pages/ManageFinanceReport.vue';
  26. import ManageHistoryQuery from '@/components/manage/pages/ManageHistoryQuery.vue';
  27. import { useEnterpriseStore } from '@/store/enterprise';
  28. import BaseButton from '@/components/base/BaseButton.vue';
  29. import {
  30. MANAGE_TAB_LIST,
  31. buildManageRoute,
  32. isManageTabId,
  33. parseManageRoute,
  34. } from '@/utils/manageRoutes';
  35. const route = useRoute();
  36. const router = useRouter();
  37. const enterpriseStore = useEnterpriseStore();
  38. const activeTab = ref('dashboard');
  39. const syncTabFromRoute = () => {
  40. const { tab } = parseManageRoute(route);
  41. activeTab.value = isManageTabId(tab) ? tab : 'dashboard';
  42. };
  43. const switchTab = (tabId) => {
  44. if (!isManageTabId(tabId)) return;
  45. if (tabId === activeTab.value) return;
  46. if (tabId === 'audit') {
  47. router.replace(buildManageRoute({ tab: 'audit', sub: 'pending' }));
  48. return;
  49. }
  50. router.replace(buildManageRoute({ tab: tabId }));
  51. };
  52. watch(() => route.fullPath, syncTabFromRoute, { immediate: true });
  53. onMounted(() => {
  54. enterpriseStore.fetchList();
  55. });
  56. </script>
  57. <style scoped>
  58. .main {
  59. width: 100%;
  60. max-width: var(--page-max-width);
  61. padding: 24px;
  62. display: flex;
  63. flex-direction: column;
  64. gap: 12px;
  65. }
  66. .manage-tabs {
  67. width: 100%;
  68. max-width: var(--content-max-width);
  69. display: flex;
  70. flex-wrap: wrap;
  71. align-items: center;
  72. gap: 16px;
  73. }
  74. @media screen and (max-width: 1440px) {
  75. .main,
  76. .manage-tabs {
  77. width: 100%;
  78. max-width: 1440px;
  79. }
  80. }
  81. </style>