DrillSignRecordItem.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <template>
  2. <main class="safety-platform-container__main">
  3. <div v-if="recordData" class="drill-plan-record">
  4. <div class="item">
  5. <span class="label">演练内容:</span>
  6. <span class="text">{{ recordData.drillContent }}</span>
  7. </div>
  8. <div class="item">
  9. <span class="label">演练时间:</span>
  10. <span class="text">{{ recordData.drillTime }}</span>
  11. </div>
  12. <div class="item">
  13. <span class="label">演练地点:</span>
  14. <span class="text">{{ recordData.drillLocation }}</span>
  15. </div>
  16. <div class="item">
  17. <span class="label">参与人员描述:</span>
  18. <span class="text">{{ recordData.participants }}</span>
  19. </div>
  20. <div class="item">
  21. <span class="label">演练描述:</span>
  22. <span class="text">{{ recordData.drillDescription }}</span>
  23. </div>
  24. <div class="item">
  25. <span class="label">演练照片:</span>
  26. <ShowImages style="min-height: 100px; flex: 1" :image-list="getImageUrls(recordData.drillImage)" />
  27. </div>
  28. <div class="item">
  29. <span class="label">演练效果评估:</span>
  30. <span class="text">{{ recordData.drillEffectAssess }}</span>
  31. </div>
  32. <div class="item">
  33. <span class="label">演练问题分析:</span>
  34. <span class="text">{{ recordData.drillProblemAnalyse }}</span>
  35. </div>
  36. <div class="item">
  37. <span class="label">演练改进措施:</span>
  38. <span class="text">{{ recordData.drillImproveMethod }}</span>
  39. </div>
  40. </div>
  41. <!-- <div v-else class="empty">
  42. <img :src="EmptyImg" alt="empty" />
  43. <span>暂无数据</span>
  44. </div> -->
  45. </main>
  46. <footer
  47. class="safety-platform-container__footer"
  48. v-if="status === CONFIRM_STATUS_TYPE.WAIT_CONFIRM && recordData?.approvalStatus === 0"
  49. >
  50. <el-button type="primary" @click="drillSignApprovalDialogRef?.openDialog">审批</el-button>
  51. </footer>
  52. <DrillSignApprovalDialog
  53. ref="drillSignApprovalDialogRef"
  54. :id="id"
  55. :status="status"
  56. @success="handleApprovalSuccess"
  57. />
  58. </template>
  59. <script lang="ts" setup>
  60. import { onMounted, ref } from 'vue';
  61. import { CONFIRM_STATUS_TYPE } from '../constants';
  62. import { DrillPlanRecord } from '../types';
  63. import { queryEmergencyDrillRecordInEdit } from '@/api/emergency-drill/emergency-drill';
  64. import ShowImages from './ShowImages.vue';
  65. // import EmptyImg from 'assets/images/empty@1X.png';
  66. import DrillSignApprovalDialog from './DrillSignApprovalDialog.vue';
  67. const props = defineProps<{
  68. id: number;
  69. status: number;
  70. }>();
  71. const recordData = ref<DrillPlanRecord>();
  72. const drillSignApprovalDialogRef = ref();
  73. async function getData() {
  74. try {
  75. recordData.value = await queryEmergencyDrillRecordInEdit(props.id);
  76. } catch (e) {
  77. console.log(e);
  78. }
  79. }
  80. function handleApprovalSuccess() {
  81. drillSignApprovalDialogRef.value.closeDialog();
  82. getData();
  83. }
  84. onMounted(() => {
  85. getData();
  86. });
  87. function getImageUrls(imgs: string) {
  88. if (!imgs) return [];
  89. return JSON.parse(imgs);
  90. }
  91. </script>
  92. <style lang="scss" scoped>
  93. @use '@/styles/page-details-layout.scss' as *;
  94. .data {
  95. display: flex;
  96. }
  97. .item {
  98. display: flex;
  99. flex-direction: row;
  100. width: 100%;
  101. padding: 20px 10px;
  102. }
  103. .label {
  104. width: 150px;
  105. text-align: end;
  106. }
  107. .text {
  108. flex: 1;
  109. white-space: pre-wrap;
  110. /* word-break: break-all; */
  111. }
  112. .empty {
  113. display: flex;
  114. align-items: center;
  115. justify-content: center;
  116. flex-direction: column;
  117. margin-top: calc(70vh - 500px);
  118. }
  119. </style>