GroupLeaderAudit.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <template>
  2. <div class="layout_container" style="height: 550px;">
  3. <div style="height: 500px;">
  4. <div class="line-wrapper">
  5. <div class="line-left">患者姓名:</div>
  6. <div class="line-right">{{data.patName}}</div>
  7. </div>
  8. <div class="line-wrapper">
  9. <div class="line-left">住院号:</div>
  10. <div class="line-right">{{data.patNo}}</div>
  11. </div>
  12. <div class="line-wrapper">
  13. <div class="line-left">编码员姓名:</div>
  14. <div class="line-right">{{data.coderName}}</div>
  15. </div>
  16. <div class="line-wrapper" style="align-items: flex-start">
  17. <div class="line-left">
  18. 主要错误:
  19. </div>
  20. <div class="line-right">
  21. <el-checkbox-group v-model="majorError">
  22. <div>
  23. <el-checkbox value="主要诊断填写错误">主要诊断填写错误</el-checkbox>
  24. </div>
  25. <div>
  26. <el-checkbox value="主要诊断编码错误">主要诊断编码错误</el-checkbox>
  27. </div>
  28. <div>
  29. <el-checkbox value="主要手术填写错误">主要手术填写错误</el-checkbox>
  30. </div>
  31. <div>
  32. <el-checkbox value="主要手术编码错误">主要手术编码错误</el-checkbox>
  33. </div>
  34. </el-checkbox-group>
  35. </div>
  36. </div>
  37. <div class="line-wrapper">
  38. <div class="line-left">
  39. <span class="required">*</span>审核状态:
  40. </div>
  41. <div class="line-right">
  42. <el-radio-group v-model="auditState">
  43. <el-radio value="APPROVED">通过</el-radio>
  44. <el-radio value="REJECTED">不通过</el-radio>
  45. </el-radio-group>
  46. </div>
  47. </div>
  48. <div class="line-wrapper" style="align-items: flex-start">
  49. <div class="line-left">
  50. <span class="required">*</span>审核意见:
  51. </div>
  52. <div class="line-right">
  53. <el-input
  54. v-model="auditRemark"
  55. type="textarea"
  56. :rows="5"
  57. :placeholder="placeholder"
  58. />
  59. </div>
  60. </div>
  61. <div class="line-wrapper" style="align-items: flex-start">
  62. <div class="line-left">
  63. </div>
  64. <div class="line-right">
  65. <el-button
  66. @click="handleClickConfirm"
  67. size="default"
  68. type="primary"
  69. style="width: 100%"
  70. >
  71. 提交审核
  72. </el-button>
  73. <div style="width: 100%; text-align: right; margin-top: 20px">
  74. <a href="#" style="text-decoration: underline" @click="viewAuditHistory">
  75. 审核历史
  76. </a>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. <el-drawer v-model="showAuditHistory" title="组长审核历史记录">
  82. <el-timeline>
  83. <el-timeline-item
  84. v-for="item in histories"
  85. :timestamp="item.createTime"
  86. placement="top"
  87. >
  88. <el-card>
  89. <h4>
  90. 编码员:{{ item.coderName }}
  91. </h4>
  92. <p v-if="item.majorError" class="major-error">主要错误:{{item.majorError}}</p>
  93. <p class="audit-remark">审核结果:{{ item.auditRemark }}</p>
  94. <p style="font-size: 12px; color: dimgray">
  95. <span>审核人:{{ item.auditName }}</span>
  96. <span style="margin-left: 32px">审核时间:{{ item.createTime }}</span>
  97. </p>
  98. <img :src="item.auditState === 'APPROVED' ? approveImg : rejectImg" alt="" class="img-state">
  99. </el-card>
  100. </el-timeline-item>
  101. </el-timeline>
  102. <div
  103. v-if="histories.length === 0"
  104. style="font-size: 36px;
  105. height: 86%;
  106. color: #777777;
  107. display: flex;
  108. align-items: center;
  109. justify-content: center"
  110. >
  111. 没有有效的质控记录
  112. </div>
  113. </el-drawer>
  114. </div>
  115. </template>
  116. <script lang="ts" setup>
  117. import {xcMessage} from "@/utils/xiaochan-element-plus";
  118. import {submitLeaderAudit,fetchLeaderAudit} from "@/api/case-front-sheet";
  119. import approveImg from "@/assets/approved.png";
  120. import rejectImg from "@/assets/reject.png";
  121. const props = defineProps({
  122. data: {
  123. type: Object,
  124. required: true,
  125. },
  126. closeModal: {
  127. type: Function,
  128. }
  129. })
  130. const auditRemark = ref('')
  131. const auditState = ref('APPROVED')
  132. const majorError = ref([])
  133. const placeholder = computed(() => {
  134. return auditState.value === 'APPROVED' ? '审核通过' : '请在此输入审核意见'
  135. })
  136. function handleClickConfirm() {
  137. if (auditState.value === 'REJECTED' && !auditRemark.value) {
  138. xcMessage.error('审核意见不能为空!');
  139. return
  140. }
  141. if (auditState.value === 'APPROVED' && majorError.value.length > 0) {
  142. xcMessage.error('勾选了主要错误,审核状态请选择【不通过】')
  143. return
  144. }
  145. props.data.auditState = auditState.value
  146. props.data.auditRemark = auditRemark.value
  147. props.data.majorErrorList = majorError.value
  148. submitLeaderAudit(props.data).then(res => {
  149. xcMessage.success('操作成功。')
  150. props.closeModal()
  151. })
  152. }
  153. const showAuditHistory = ref(false);
  154. const histories = ref([])
  155. function viewAuditHistory() {
  156. fetchLeaderAudit(props.data).then(res => {
  157. histories.value = res
  158. showAuditHistory.value = true;
  159. })
  160. }
  161. </script>
  162. <style scoped>
  163. .line-wrapper {
  164. display: flex;
  165. margin: 12px 0;
  166. align-items: center;
  167. }
  168. .line-left {
  169. width: 120px;
  170. text-align: right;
  171. padding-right: 8px;
  172. }
  173. .line-right {
  174. width: 300px;
  175. text-align: left;
  176. padding-left: 30px;
  177. }
  178. .required {
  179. margin-right: 4px;
  180. color: red;
  181. }
  182. .img-state {
  183. width: 64px;
  184. position: absolute;
  185. top: 0;
  186. right: 0;
  187. }
  188. </style>