EmrTest.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template>
  2. <div style="height: 10%;display: flex">
  3. <el-button @click="copyClick">复制选中的值</el-button>
  4. <div class="describe">
  5. <div class="pat-info">
  6. <div>
  7. <test-describe front="姓名"
  8. :text="inspectionHeader?.ptnt_NAME"/>
  9. </div>
  10. <div>
  11. <test-describe front="性别"
  12. :text="filterSex(inspectionHeader?.ptnt_SEX)"/>
  13. </div>
  14. <div>
  15. <test-describe front="年龄"
  16. :text="inspectionHeader.ptnt_AGE + filterAgeUnit(inspectionHeader.ptnt_AGE_UNIT) "/>
  17. </div>
  18. <div>
  19. <test-describe front="住院号"
  20. :text="inspectionHeader.ptnt_NO"/>
  21. </div>
  22. <div>
  23. <test-describe front="科室"
  24. :text="inspectionHeader.dept_NAME"/>
  25. </div>
  26. <div>
  27. <test-describe front="床号"
  28. :text="inspectionHeader.ptnt_BED_NO"/>
  29. </div>
  30. <div>
  31. <test-describe front="标本类型"
  32. :text="inspectionHeader.smpl_NAME "/>
  33. </div>
  34. <div>
  35. <test-describe front="申请项目"
  36. :text="inspectionHeader?.aply_CNTN.substring(0, 13) + inspectionHeader.aply_CNTN.substring(13)"/>
  37. </div>
  38. </div>
  39. <div class="test-date">
  40. <div>
  41. <test-describe front="接收时间"
  42. :text="inspectionHeader.aply_DATE "/>
  43. </div>
  44. <div>
  45. <test-describe front="检验时间"
  46. :text="inspectionHeader.ordr_CREATE_DATE "/>
  47. </div>
  48. <div>
  49. <test-describe front="报告时间"
  50. :text="inspectionHeader.audt_TIME "/>
  51. </div>
  52. <div>
  53. <test-describe front="送检医生"
  54. :text="inspectionHeader.test_USR_NAME "/>
  55. </div>
  56. <div>
  57. <test-describe front="检验人"
  58. :text="inspectionHeader.ordr_USR_NAME "/>
  59. </div>
  60. <div>
  61. <test-describe front="审核人"
  62. :text="inspectionHeader.audt_USR_NAME "/>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="container">
  68. <el-auto-resizer>
  69. <template #default="{ height, width }">
  70. <div style="display: flex">
  71. <div class="sidebar">
  72. <xc-table-v3 :height="height"
  73. @row-click="sidebarRow"
  74. :data="sidebarList"
  75. :columns="sidebarColums"/>
  76. </div>
  77. <div class="main">
  78. <xc-table-v3 :height="height"
  79. ref="tableRef"
  80. :data="mainList"
  81. :columns="mainColums"/>
  82. </div>
  83. </div>
  84. </template>
  85. </el-auto-resizer>
  86. </div>
  87. </template>
  88. <script setup name='EmrTest' lang="tsx">
  89. // 查询检验
  90. import {getServerDateApi} from "@/api/public-api";
  91. import {queryInspectionDetail, queryInspectionsIndex} from '@/api/inspections'
  92. import {patInfo} from './emr-tools-store'
  93. import {onMounted, ref} from "vue";
  94. import XcTableV3 from "@/components/xiao-chan/xc-table-v3/XcTableV3.vue";
  95. import {XcColumn} from "@/components/xiao-chan/xc-table-v3/XcColumn";
  96. import {xcMessage} from '@/utils/xiaochan-element-plus'
  97. import TestDescribe from "@/components/zhu-yuan-yi-sheng/emr/auxiliary-tools/test-describe.vue";
  98. const emits = defineEmits(['close'])
  99. const sidebarList = ref()
  100. const mainList = ref()
  101. const tableRef = ref()
  102. const inspectionHeader = ref({
  103. aply_CNTN: ''
  104. })
  105. const query = async () => {
  106. const param = {
  107. type: 1,
  108. content: patInfo.value.inpatientNo,
  109. start: patInfo.value.admissDate,
  110. end: await getServerDateApi(),
  111. }
  112. queryInspectionsIndex(param).then((res) => {
  113. sidebarList.value = res
  114. })
  115. }
  116. const sidebarColums: XcColumn<any>[] = [
  117. {title: '名称', key: 'aply_CTNT'}
  118. ]
  119. const mainColums: XcColumn<any>[] = [
  120. {title: '选择', type: 'selection'},
  121. {title: '名称', key: 'itm_NAME'},
  122. {title: '结果', key: 'itm_SRC_VALUE'},
  123. {title: '单位', key: 'itm_UNIT'},
  124. {title: '说明', key: 'itm_ALERT'},
  125. {title: '参考值', key: 'range'},
  126. ]
  127. const sidebarRow = (row) => {
  128. tableRef.value.table().clearSelection()
  129. queryInspectionDetail(row.ordr_ID).then((res) => {
  130. mainList.value = res.inspectionItems
  131. inspectionHeader.value = res.inspectionHeader
  132. console.log(res)
  133. })
  134. }
  135. const copyClick = () => {
  136. let temp = tableRef.value.table().getSelectionRows()
  137. if (temp.length === 0) {
  138. xcMessage.error('请先选选择数据')
  139. }
  140. let data = ''
  141. temp.forEach(item => {
  142. data += `${item.itm_NAME} ${item.itm_VALUE} ${item.itm_UNIT} ${item.range}\n`
  143. })
  144. let copyData = {
  145. content: [{type: 'text', data}],
  146. plainText: data,
  147. }
  148. window.localStorage.setItem(
  149. "clipBoardData",
  150. JSON.stringify(copyData)
  151. )
  152. xcMessage.success('复制成功')
  153. emits('close')
  154. }
  155. function filterSex(val) {
  156. switch (val) {
  157. case '0':
  158. return '未填'
  159. case '1':
  160. return '男'
  161. case '2':
  162. return '女'
  163. case '3':
  164. return '未知'
  165. }
  166. return ''
  167. }
  168. function filterAgeUnit(val) {
  169. switch (val) {
  170. case '0':
  171. return '岁'
  172. case '1':
  173. return '月'
  174. case '2':
  175. return '天'
  176. case '3':
  177. return '时'
  178. }
  179. return ''
  180. }
  181. onMounted(() => {
  182. query()
  183. })
  184. </script>
  185. <style scoped lang="scss">
  186. .container {
  187. width: 100%;
  188. height: 90%;
  189. }
  190. .sidebar {
  191. width: 220px;
  192. }
  193. .main {
  194. width: 100%;
  195. height: 100%;
  196. }
  197. .describe {
  198. width: 100%;
  199. margin-left: 20px;
  200. font-size: 12px;
  201. .pat-info {
  202. display: flex;
  203. div {
  204. padding: 5px;
  205. }
  206. }
  207. .test-date {
  208. display: flex;
  209. div {
  210. padding: 5px;
  211. }
  212. }
  213. }
  214. </style>