oneByOneManagementItem.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <div class="safety-platform-container">
  3. <header class="safety-platform-container__header">
  4. <BreadcrumbBack />
  5. <span class="breadcrumb-title">{{ headerTitle }}</span>
  6. </header>
  7. <component :is="dynamicComponent" />
  8. </div>
  9. </template>
  10. <script setup lang="ts">
  11. import { computed, defineAsyncComponent } from 'vue';
  12. import { useRoute } from 'vue-router';
  13. import BreadcrumbBack from '@/components/BreadcrumbBack.vue';
  14. const route = useRoute();
  15. const operate = computed(() => route.query.operate as string);
  16. const headerTitle = computed(() => {
  17. switch (operate.value) {
  18. case 'one-by-one-create':
  19. return '新增举一反三';
  20. case 'one-by-one-edit':
  21. return '编辑举一反三';
  22. case 'one-by-one-view':
  23. return '查看举一反三';
  24. case 'one-by-one-notify-target':
  25. return '通知对象';
  26. case 'one-by-one-audit-detail':
  27. return '审核';
  28. case 'one-by-one-audit-view':
  29. return '审核查看';
  30. default:
  31. return '未知操作';
  32. }
  33. });
  34. const dynamicComponent = computed(() => {
  35. switch (operate.value) {
  36. case 'one-by-one-notify-target':
  37. return defineAsyncComponent(() => import('./components/OneByOneNotifyTarget.vue'));
  38. case 'one-by-one-audit-detail':
  39. return defineAsyncComponent(() => import('./components/OneByOneAuditDetail.vue'));
  40. case 'one-by-one-audit-view':
  41. return defineAsyncComponent(() => import('./components/OneByOneAuditDetail.vue'));
  42. default:
  43. return defineAsyncComponent(() => import('./components/oneByOneManagementDetail.vue'));
  44. }
  45. });
  46. </script>
  47. <style scoped lang="scss">
  48. @use '@/styles/page-details-layout.scss' as *;
  49. @use '@/styles/page-main-layout.scss' as *;
  50. .safety-platform-container__header {
  51. flex-direction: row !important;
  52. justify-content: flex-start !important;
  53. gap: 8px !important;
  54. }
  55. </style>