PageEmergencyListInfo.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <div class="safety-platform-container">
  3. <div class="safety-platform-container__header">
  4. <BreadcrumbBack />
  5. <div class="breadcrumb-title">{{ headerTitle }}</div>
  6. </div>
  7. <main class="safety-platform-container__main">
  8. <component ref="dynamicComponentRef" :is="dynamicComponent" :id="id" />
  9. </main>
  10. <footer class="safety-platform-container__footer">
  11. <el-button @click="router.back()">取消</el-button>
  12. <el-button type="primary" @click="handleSubmit">提交</el-button>
  13. </footer>
  14. </div>
  15. </template>
  16. <script setup lang="ts">
  17. import { useRoute, useRouter } from 'vue-router';
  18. import { ref, computed, defineAsyncComponent } from 'vue';
  19. import { ElMessage } from 'element-plus';
  20. import { addEmergencySupply, editEmergencySupply } from '@/api/emergency-supplier';
  21. const route = useRoute();
  22. const router = useRouter();
  23. const type = String(route.query.type);
  24. const id = Number(route.query.id);
  25. const dynamicComponentRef = ref();
  26. const headerTitle = computed(() => {
  27. const title = '应急物资';
  28. if (type === 'add') {
  29. return `添加${title}`;
  30. }
  31. return `编辑${title}`;
  32. });
  33. const dynamicComponent = computed(() => {
  34. if (type === 'add') {
  35. return defineAsyncComponent(() => import('./src/components/AddEmergencyItem.vue'));
  36. }
  37. return defineAsyncComponent(() => import('./src/components/EditEmergencyItem.vue'));
  38. });
  39. const handleSubmit = async() => {
  40. if (!dynamicComponentRef.value) return;
  41. const message = type === 'add' ? '添加' : '修改';
  42. const res = await dynamicComponentRef.value.handleValidate();
  43. if (!res) return;
  44. const data = dynamicComponentRef.value.getFormData();
  45. if (type === 'add') {
  46. await addEmergencySupply(data);
  47. } else {
  48. await editEmergencySupply(data);
  49. }
  50. ElMessage.success(`${message}成功`);
  51. router.back();
  52. };
  53. </script>
  54. <style scoped lang="scss">
  55. @use '@/styles/page-details-layout.scss' as *;
  56. @use './src/styles/info-common.scss' as *;
  57. </style>