examinationReport.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. <template>
  2. <view class="container">
  3. <view class="title_info" v-if="showCon">
  4. <view class="public_info_list">
  5. <view class="public_info_item">
  6. <view class="public_info_tit">患者姓名</view>
  7. <view class="public_info_val">{{reportInfo.Name}}</view>
  8. </view>
  9. <view class="public_info_item">
  10. <view class="public_info_tit">体检编号</view>
  11. <view class="public_info_val">1</view>
  12. </view>
  13. <view class="public_info_item">
  14. <view class="public_info_tit">体检日期</view>
  15. <view class="public_info_val">{{reportInfo.TjDate}}</view>
  16. </view>
  17. </view>
  18. </view>
  19. <view class="con_nav">
  20. <view class="nav_tit" :class="{'colorCustom': index=='1'}" @click="optionsClick('1')">体检总结</view>
  21. <view class="nav_tit" :class="{'colorCustom': index=='2'}" @click="optionsClick('2')">诊疗建议</view>
  22. <view class="nav_tit" :class="{'colorCustom': index=='3'}" @click="optionsClick('3')">项目详情</view>
  23. <view class="nav_tit" :class="{'colorCustom': index=='4'}" @click="optionsClick('4')">温馨提示</view>
  24. </view>
  25. <view class="con">
  26. <!-- 体检总结 Summary -->
  27. <view class="con_summary" v-if="index=='1'">
  28. <view class="con_inner">
  29. <view class="con_summary_item" v-for="(item, ind) in 20" :key="ind">1、高血压</view>
  30. </view>
  31. </view>
  32. <!-- 诊疗建议 Advice -->
  33. <view class="con_summary" v-if="index=='2'">
  34. <view class="con_inner">
  35. <view class="doctor_info border_bottom">
  36. <view class="info_item">
  37. <view class="info_item_txt">主检医师:张爱国</view>
  38. <view class="info_item_txt">日期:2020.06.10</view>
  39. </view>
  40. <view class="info_item">
  41. <view class="info_item_txt">主检医师:陈万金</view>
  42. <view class="info_item_txt">日期:2020.06.11</view>
  43. </view>
  44. </view>
  45. <view class="article_list">
  46. <view class="article" v-for="(item, ind) in 4" :key="ind">
  47. <view class="article_tit">1、血压高</view>
  48. <view class="article_val">您目前的血压以达到高血压的诊断标准140/90mHg,但偶尔一次血压高,不能诊断高血压,需要您在不同时间内复查3次</view>
  49. </view>
  50. </view>
  51. </view>
  52. </view>
  53. <!-- 项目详情 -->
  54. <view class="con_pro" v-if="index=='3'">
  55. <view class="scroll_nav">
  56. <view class="nav_item" :class="{'nav_item_active colorCustom': proSelected.ItemTitle==item.ItemTitle}" v-for="(item, ind) in reportInfo.Data_1" :key="ind" @click="titleClick(item)">{{item.ItemTitle}}</view>
  57. </view>
  58. <view class="scroll_con">
  59. <view class="public_info_list">
  60. <view class="public_info_item">
  61. <view class="public_info_tit">报告单号</view>
  62. <view class="public_info_val">{{queryBean.ReportId}}</view>
  63. </view>
  64. <view class="public_info_item">
  65. <view class="public_info_tit">报告医生</view>
  66. <view class="public_info_val">{{queryBean.ReportDoctor}}</view>
  67. </view>
  68. <!-- <view class="public_info_item">
  69. <view class="public_info_tit">是否急诊</view>
  70. <view class="public_info_val">否</view>
  71. </view> -->
  72. <view class="public_info_item">
  73. <view class="public_info_tit">报告时间</view>
  74. <view class="public_info_val">{{queryBean.SubmissionTime}}</view>
  75. </view>
  76. <!-- <view class="public_info_item">
  77. <view class="public_info_tit">体检小结</view>
  78. <view class="public_info_val">未见异常</view>
  79. </view> -->
  80. </view>
  81. <view class="tabel" v-if="proSelected.ItemType=='1'">
  82. <view class="table_box">
  83. <view class="tr">
  84. <view class="th name">检测指标</view>
  85. <view class="th">结果</view>
  86. <view class="th">状态</view>
  87. <view class="th value">参考值</view>
  88. <view class="th">单位</view>
  89. </view>
  90. <view class="tr" v-for="(item, key) in proSelected.Data_2" :key="key">
  91. <view class="td name">{{item.ItemDetailTitle}}</view>
  92. <view class="td">{{item.ResultVal}}</view>
  93. <view class="td">{{item.IsNormal}}</view>
  94. <view class="td value">{{item.ReferenceValues}}</view>
  95. <view class="td">{{item.Unit}}</view>
  96. </view>
  97. </view>
  98. </view>
  99. <view class="tabel" v-if="proSelected.ItemType=='2'">
  100. <view class="table_box">
  101. <view class="tr ctTh">
  102. <view class="th">结果</view>
  103. </view>
  104. <view class="tr ctTr">
  105. {{proSelected.DeptAdvice}}
  106. </view>
  107. <view class="tr ctTr">
  108. {{proSelected.Data_2[0].ResultVal}}
  109. </view>
  110. </view>
  111. </view>
  112. </view>
  113. </view>
  114. <!-- 温馨提示 -->
  115. <view class="con_summary" v-if="index=='4'">
  116. <view class="con_inner">
  117. <view class="con_tip_item" v-for="(item, ind) in 4" :key="ind">感谢您对我院体检部的信任,并选择我们作为您体检的医院,配合我们顺利的完成了这次医学体检。由于医疗科学技术对疾病认知的有限及医疗</view>
  118. </view>
  119. </view>
  120. </view>
  121. <view class="btn_list">
  122. <view class="btn_item">就诊推荐</view>
  123. <view class="btn_item btn_item_line">在线解答</view>
  124. </view>
  125. </view>
  126. </template>
  127. <script setup lang="ts">
  128. import { ref } from 'vue';
  129. import { onLoad } from '@dcloudio/uni-app';
  130. import { common } from '@/utils';
  131. import { getReportInfo } from '@/pagesPatient/service/report/index';
  132. const app = getApp();
  133. const showCon = ref(false);
  134. const currentUser = ref<any>({});
  135. const reportInfo = ref<any>({});
  136. const queryBean = ref<any>({});
  137. const index = ref('3'); //1 体检总结 2诊疗建议 3项目详情 4温馨提示
  138. const proSelected = ref<any>({}); //当前选中的项目
  139. onLoad((options: any) => {
  140. let qBean = options.queryBean ? JSON.parse(options.queryBean) : {};
  141. currentUser.value = app.globalData.currentUser;
  142. queryBean.value = qBean;
  143. main();
  144. });
  145. const main = async () => {
  146. let queryData = {
  147. MemberId: currentUser.value.MemberId,
  148. ReportId: queryBean.value.ReportId,
  149. ReportType: queryBean.value.ReportType,
  150. CardNo: currentUser.value.CardNo,
  151. CardType: '1',
  152. SampleNo: queryBean.value.SampleNo,
  153. EventNo: queryBean.value.EventNo,
  154. Store: {
  155. cardEncryptionStore: currentUser.value.encryptionStore || '',
  156. baseMemberEncryptionStore: currentUser.value.baseMemberEncryptionStore
  157. }
  158. };
  159. let resp = await getReportInfo(queryData);
  160. let rInfo = {};
  161. let pSelected = {};
  162. if (!common.isEmpty(resp)) {
  163. rInfo = resp[0];
  164. pSelected = resp[0].Data_1 && resp[0].Data_1.length > 0 ? resp[0].Data_1[0] : {};
  165. }
  166. reportInfo.value = rInfo;
  167. showCon.value = true;
  168. proSelected.value = pSelected;
  169. };
  170. /**
  171. * 选项点击
  172. */
  173. const optionsClick = (idx: string) => {
  174. index.value = idx;
  175. };
  176. /**
  177. * 项目详情nav点击
  178. */
  179. const titleClick = (item: any) => {
  180. proSelected.value = item;
  181. };
  182. </script>
  183. <style>
  184. @import "../../../static/css/box.wxss";
  185. .container {
  186. background: #fff;
  187. padding: 375upx 0 156upx;
  188. }
  189. .public_info_item {
  190. margin: 30upx 0;
  191. }
  192. .public_info_tit {
  193. color: #999;
  194. }
  195. .title_info .public_info_tit, .title_info .public_info_val {
  196. font-size: 30upx;
  197. }
  198. .title_info {
  199. position: fixed;
  200. width: 100%;
  201. top: 0;
  202. }
  203. .con_nav {
  204. position: fixed;
  205. width: 100%;
  206. top: 240upx;
  207. }
  208. .btn_list {
  209. position: fixed;
  210. width: 100%;
  211. bottom: 0;
  212. height: 156upx;
  213. padding: 24upx 30upx;
  214. display: flex;
  215. align-items: center;
  216. justify-content: space-between;
  217. border-top: 20upx solid #f2f5f6;
  218. }
  219. .btn_item {
  220. height: 100%;
  221. width: 333upx;
  222. display: flex;
  223. align-items: center;
  224. justify-content: center;
  225. font-size: 32upx;
  226. font-family: PingFang SC;
  227. font-weight: bold;
  228. color: rgba(255, 255, 255, 1);
  229. border-radius: 50px;
  230. background-color: #29cf8c;
  231. }
  232. .btn_item_line {
  233. background-color: #00a2fe;
  234. }
  235. .con_nav {
  236. height: 135upx;
  237. display: flex;
  238. align-items: center;
  239. border-top: 20upx solid #f2f5f6;
  240. font-size: 30upx;
  241. font-family: PingFang SC;
  242. font-weight: 500;
  243. color: rgba(102, 102, 102, 1);
  244. }
  245. .nav_tit {
  246. width: 25%;
  247. height: 100%;
  248. position: relative;
  249. display: flex;
  250. align-items: center;
  251. justify-content: center;
  252. }
  253. .con_nav .colorCustom::after {
  254. content: "";
  255. display: block;
  256. width: 40upx;
  257. height: 6upx;
  258. background: #29cf8c;
  259. border-radius: 3px;
  260. overflow: hidden;
  261. position: absolute;
  262. bottom: 20upx;
  263. left: 0;
  264. right: 0;
  265. margin: 0 auto;
  266. }
  267. .con {
  268. height: 100%;
  269. }
  270. .con_summary {
  271. height: 100%;
  272. padding: 0 30upx 30upx;
  273. }
  274. .con_inner {
  275. overflow: auto;
  276. -webkit-overflow-scrolling: touch;
  277. height: 100%;
  278. }
  279. .con_summary_item {
  280. font-size: 32upx;
  281. font-family: PingFang SC;
  282. font-weight: 500;
  283. color: rgba(51, 51, 51, 1);
  284. line-height: 64upx;
  285. word-break: break-all;
  286. }
  287. .doctor_info {
  288. padding: 20upx 10upx;
  289. font-size: 28upx;
  290. font-family: PingFang SC;
  291. font-weight: 500;
  292. color: rgba(153, 153, 153, 1);
  293. }
  294. .info_item {
  295. display: flex;
  296. align-items: center;
  297. justify-content: space-between;
  298. }
  299. .info_item_txt {
  300. line-height: 48upx;
  301. }
  302. .article_list {
  303. width: 100%;
  304. display: inline-block;
  305. }
  306. .article {
  307. margin: 20upx 0;
  308. }
  309. .article_tit {
  310. font-size: 32upx;
  311. font-family: PingFang SC;
  312. font-weight: 500;
  313. color: rgba(51, 51, 51, 1);
  314. line-height: 56upx;
  315. }
  316. .article_val {
  317. font-size: 30upx;
  318. font-family: PingFang SC;
  319. font-weight: 400;
  320. color: #666;
  321. line-height: 56upx;
  322. word-break: break-all;
  323. }
  324. .con_tip_item {
  325. font-size: 30upx;
  326. font-family: PingFang SC;
  327. font-weight: 500;
  328. color: rgba(51, 51, 51, 1);
  329. line-height: 48upx;
  330. margin: 20upx 0;
  331. }
  332. .con_pro {
  333. height: 100%;
  334. display: flex;
  335. align-items: flex-start;
  336. overflow: hidden;
  337. }
  338. .con_pro .public_info_item {
  339. margin: 20upx 0;
  340. }
  341. .scroll_nav, .scroll_con {
  342. width: 170upx;
  343. height: 100%;
  344. background-color: #fff;
  345. overflow: auto;
  346. -webkit-overflow-scrolling: touch;
  347. }
  348. .scroll_con {
  349. width: 580upx;
  350. border-left: 20upx solid #f2f5f6;
  351. border-top: 20upx solid #f2f5f6;
  352. }
  353. .nav_item {
  354. position: relative;
  355. }
  356. </style>