PageDisposalManagementTaskItem.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <div class="disaster-precaution-container">
  3. <header class="disaster-precaution-container__header">
  4. <img :src="BackIcon" alt="back" class="back-icon" @click="router.back()" />
  5. <span class="disaster-precaution-container__title">{{ headerTitle }}</span>
  6. </header>
  7. <main class="disaster-precaution-container__main">
  8. <component :is="dynamicComponent" :id="id" ref="dynamicComponentRef" />
  9. </main>
  10. <footer class="disaster-precaution-container__footer" v-if="operate">
  11. <el-button @click="router.back()">取消</el-button>
  12. <el-button type="primary" @click="submit">提交</el-button>
  13. </footer>
  14. <UploadLoading :form-loading="formLoading" v-if="formLoading" />
  15. </div>
  16. </template>
  17. <script lang="ts" setup>
  18. import { useRoute, useRouter } from 'vue-router';
  19. import { ref, computed, defineAsyncComponent } from 'vue';
  20. import { ElMessage } from 'element-plus';
  21. import UploadLoading from '@/components/UploadLoading.vue';
  22. import { createDisasterHandleTask } from '@/api/disaster-control';
  23. import BackIcon from 'assets/svg/back.svg';
  24. const router = useRouter();
  25. const route = useRoute();
  26. const operate = route.query.operate;
  27. const id = route.query.id;
  28. const headerTitle = computed(() => {
  29. const fixedTitle = '灾害处置任务';
  30. if (operate === 'create') {
  31. return `创建${fixedTitle}`;
  32. }
  33. return `查看${fixedTitle}`;
  34. });
  35. const dynamicComponent = computed(() => {
  36. if (operate === 'create') {
  37. return defineAsyncComponent(() => import('./src/components/CreateDisposalManagementTaskItem.vue'));
  38. } else {
  39. return defineAsyncComponent(() => import('./src/components/ViewDisposalControlItem.vue'));
  40. }
  41. });
  42. const dynamicComponentRef = ref();
  43. const formLoading = ref(false);
  44. const submit = async () => {
  45. if (!dynamicComponentRef.value) return;
  46. const res = await dynamicComponentRef.value.handleValidate();
  47. if (!res) return;
  48. formLoading.value = true;
  49. const formData = dynamicComponentRef.value.getFormData();
  50. try {
  51. await createDisasterHandleTask(formData);
  52. ElMessage.success('提交成功');
  53. router.back();
  54. } finally {
  55. formLoading.value = false;
  56. }
  57. };
  58. </script>
  59. <style lang="scss" scoped>
  60. @use '../style/disaster.scss' as *;
  61. @use './src/style/common.scss' as *;
  62. </style>