view.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div v-if="loading" class="loading-container">
  3. <el-loading :visible="loading" element-loading-text="加载中..." />
  4. </div>
  5. <TaskOrderDetailDialog
  6. v-else-if="taskOrderDetail"
  7. :task-order="taskOrderDetail"
  8. :in-page-mode="true"
  9. :type="type"
  10. @refresh="handleRefresh"
  11. />
  12. <div v-else class="loading-container">
  13. <p>无法加载任务详情,或任务单不存在。</p>
  14. <el-button @click="goBack" type="primary" class="mt-4">关闭</el-button>
  15. </div>
  16. </template>
  17. <script setup lang="ts">
  18. defineOptions({ name: 'BoilerTaskOrderView' })
  19. import { ref, computed, onMounted, watch } from 'vue'
  20. import { useRoute } from 'vue-router'
  21. import TaskOrderDetailDialog from './components/TaskOrderDetailDialog.vue'
  22. import { BoilerTaskOrderApi } from '@/api/pressure2/boilertaskorder'
  23. import { ElMessage, ElLoading } from 'element-plus'
  24. import { useTagsViewStore } from '@/store/modules/tagsView'
  25. const route = useRoute()
  26. const tagsViewStore = useTagsViewStore()
  27. const taskOrderDetail = ref<Record<string, any> | undefined>(undefined)
  28. const loading = ref(true)
  29. const taskId = computed(() => {
  30. return route.query.id as string
  31. })
  32. const type = computed(() => {
  33. return route.query.type as string
  34. })
  35. const fetchTaskDetail = async () => {
  36. if (!taskId.value) {
  37. ElMessage.error('任务ID无效!')
  38. loading.value = false
  39. taskOrderDetail.value = undefined // 确保在ID无效时清除旧数据
  40. return
  41. }
  42. loading.value = true
  43. try {
  44. const response = await BoilerTaskOrderApi.getTaskOrder(taskId.value)
  45. if (response) {
  46. taskOrderDetail.value = response
  47. } else {
  48. ElMessage.error('加载任务详情失败或数据为空!')
  49. taskOrderDetail.value = undefined
  50. }
  51. } catch (error) {
  52. console.error("Failed to fetch task detail:", error)
  53. ElMessage.error('加载任务详情异常!')
  54. taskOrderDetail.value = undefined
  55. } finally {
  56. loading.value = false
  57. }
  58. }
  59. const goBack = () => {
  60. tagsViewStore.closeSelectedTag(route)
  61. }
  62. // 处理子组件刷新事件
  63. const handleRefresh = async () => {
  64. await fetchTaskDetail()
  65. }
  66. // 组件挂载时获取数据
  67. onMounted(() => {
  68. fetchTaskDetail()
  69. })
  70. // 监听路由参数变化,如果ID变化则重新获取数据 (适用于同一个组件实例在不同ID间切换的情况)
  71. watch(() => route.query.id, (newId, oldId) => {
  72. if (newId && newId !== oldId) {
  73. fetchTaskDetail()
  74. }
  75. })
  76. </script>
  77. <style lang="scss" scoped>
  78. .loading-container {
  79. display: flex;
  80. flex-direction: column; /* 使按钮在文本下方 */
  81. justify-content: center;
  82. align-items: center;
  83. min-height: calc(100vh - 150px); /* 调整高度以适应您的布局 */
  84. text-align: center;
  85. }
  86. </style>