FillAderverseEvent.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <template>
  2. <div class="layout_container layout-horizontal">
  3. <aside class="layout_el-table">
  4. <el-table
  5. :data="histories"
  6. stripe
  7. highlight-current-row
  8. @row-click="fetchReportDetail">
  9. <el-table-column prop="submitDatetime" label="提交时间" width="130"></el-table-column>
  10. <el-table-column prop="category" label="事件类型"></el-table-column>
  11. <el-table-column label="处理" width="60">
  12. <template v-slot="scope">
  13. <span v-html="filterHandled(scope.row.handled)"></span>
  14. </template>
  15. </el-table-column>
  16. </el-table>
  17. </aside>
  18. <div class="layout_main layout_container">
  19. <header class="round-header">
  20. <el-button
  21. type="primary"
  22. icon="RefreshLeft"
  23. @click="genNewReport"
  24. >
  25. 填写新报告
  26. </el-button>
  27. <el-button
  28. type="primary"
  29. icon="Edit"
  30. @click="beforeSubmit"
  31. :disabled="disableSubmit"
  32. >
  33. 提交/修改当前报告
  34. </el-button>
  35. </header>
  36. <div class="layout_main">
  37. <EventEditor :report="report"/>
  38. </div>
  39. </div>
  40. </div>
  41. </template>
  42. <script setup>
  43. import {computed, onMounted, ref} from 'vue'
  44. import {ElMessage, ElMessageBox} from 'element-plus'
  45. import {getHistories, getReportDetail, submitNewReport} from '@/api/adverse-event'
  46. import {formatDatetime} from '@/utils/date'
  47. import {useUserStore} from "@/pinia/user-store";
  48. import EventEditor from "@/views/hospitalization/adverse-event/component/EventEditor.vue";
  49. const userInfo = useUserStore().userInfo
  50. const histories = ref([])
  51. const report = initReport()
  52. const isModify = ref(false)
  53. const fetchHistories = () => {
  54. getHistories().then((res) => {
  55. histories.value = res
  56. })
  57. }
  58. const fetchReportDetail = (val) => {
  59. getReportDetail(val.pid, 'nurse').then((res) => {
  60. report.value = res
  61. isModify.value = true
  62. })
  63. }
  64. const genNewReport = () => {
  65. report.value = initReport().value
  66. isModify.value = false
  67. }
  68. const beforeSubmit = () => {
  69. const message = validateReport(report.value)
  70. if (message) {
  71. ElMessage({
  72. message,
  73. type: 'warning',
  74. duration: 2500,
  75. showClose: true,
  76. })
  77. return
  78. }
  79. ElMessageBox.confirm('确定提交此报告?', '提示', {
  80. type: 'warning',
  81. confirmButtonText: '确定',
  82. cancelButtonText: '取消',
  83. }).then(() => {
  84. report.value.isModify = isModify.value
  85. report.value.occurDatetime = formatDatetime(report.value.occurDatetime)
  86. submitNewReport(report.value).then(() => {
  87. ElMessage({
  88. message: '提交成功。',
  89. type: 'success',
  90. duration: 2000,
  91. showClose: true,
  92. })
  93. fetchHistories()
  94. genNewReport()
  95. })
  96. }).catch(() => {})
  97. }
  98. const disableSubmit = computed(() => {
  99. return report.value.handled === 1
  100. })
  101. onMounted(() => {
  102. fetchHistories()
  103. })
  104. function initReport() {
  105. return ref({
  106. deptCode: userInfo.deptCode,
  107. userName: userInfo.name,
  108. category: null,
  109. occurDatetime: null,
  110. userLevel: '护士',
  111. workYear: 1,
  112. eventResult: null,
  113. course: null,
  114. result: null,
  115. nurseReasonArr: [],
  116. nurseReasonElse: null,
  117. patientReasonArr: [],
  118. patientReasonElse: null,
  119. environReasonArr: [],
  120. environReasonElse: null,
  121. manageReasonArr: [],
  122. manageReasonElse: null,
  123. proNurseArr: [],
  124. proNurseElse: null,
  125. proPatientArr: [],
  126. proPatientElse: null,
  127. proEnvironArr: [],
  128. proEnvironElse: null,
  129. proManageArr: [],
  130. proManageElse: null,
  131. })
  132. }
  133. function validateReport(val) {
  134. if (!val.category) {
  135. return '请选择事件类型!'
  136. }
  137. if (!val.occurDatetime) {
  138. return '请选择发生日期!'
  139. }
  140. if (!val.deptCode) {
  141. return '请选择发生科室!'
  142. }
  143. if (val.eventResult == null) {
  144. return '请选择损害程度!'
  145. }
  146. if (!val.course) {
  147. return '请填写事件经过!';
  148. }
  149. if (!val.result) {
  150. return '请填写事件结果与补救措施!'
  151. }
  152. if (val.nurseReasonArr.length === 0) {
  153. return '请选择工作人员因素!'
  154. }
  155. if (val.proNurseArr.length === 0) {
  156. return '请选择工作人员因素改进措施!'
  157. }
  158. return null
  159. }
  160. function filterHandled(val) {
  161. return val === 1 ? '<span style="color:green">已处理</span>' : '<span style="color:red">未处理</span>'
  162. }
  163. </script>