PageLossReport.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <template>
  2. <div class="disaster-precaution-container">
  3. <header class="disaster-precaution-container__header">
  4. <span class="disaster-precaution-container__title">灾害损失上报</span>
  5. <el-tabs v-model="activeName">
  6. <el-tab-pane v-for="item in LOSS_REPORT_TABS" :key="item.value" :label="item.label" :name="item.value" />
  7. </el-tabs>
  8. </header>
  9. <main class="disaster-precaution-container__main">
  10. <component :is="dynamicComponent" />
  11. </main>
  12. </div>
  13. </template>
  14. <script setup lang="ts">
  15. import { LOSS_REPORT_TABS } from './src/constant';
  16. import { computed, ref, defineAsyncComponent, onUnmounted } from 'vue';
  17. const activeName = ref(sessionStorage.getItem('loss-report-active') || LOSS_REPORT_TABS[0].value);
  18. const dynamicComponent = computed(() => {
  19. switch (activeName.value) {
  20. case LOSS_REPORT_TABS[0].value:
  21. return defineAsyncComponent(() => import('./src/components/ReportTask.vue'));
  22. case LOSS_REPORT_TABS[1].value:
  23. return defineAsyncComponent(() => import('./src/components/LossRecord.vue'));
  24. }
  25. });
  26. onUnmounted(() => {
  27. sessionStorage.setItem('loss-report-active', activeName.value);
  28. });
  29. </script>
  30. <style scoped lang="scss">
  31. @use '../style/disaster.scss' as *;
  32. .disaster-precaution-container__header {
  33. padding-bottom: 0 !important;
  34. }
  35. :deep(.el-tabs__header) {
  36. margin: 0;
  37. }
  38. :deep(.el-tabs__item) {
  39. font-size: 14px !important;
  40. }
  41. </style>