血透系统pad前端

TodayTab.vue 41KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087
  1. <template>
  2. <div v-loading="loading" id="today_panel">
  3. <div class="grid">
  4. <div class="list">
  5. <ul>
  6. <li @click="menuClick(1)">
  7. <img src="@/assets/record/2.png">
  8. <p>透析处方</p>
  9. </li>
  10. <li @click="menuClick(2)">
  11. <img src="@/assets/record/3.png">
  12. <p>接诊评估</p>
  13. </li>
  14. <li @click="menuClick(3)">
  15. <img src="@/assets/record/4.png">
  16. <p>透前评估</p>
  17. </li>
  18. <li style="position: relative;" @click="menuClick(4)">
  19. <img src="@/assets/record/5.png">
  20. <span class="redpoint" v-if="getUnReadNum()">{{getUnReadNum()}}
  21. </span>
  22. <p>临时医嘱</p>
  23. </li>
  24. <li @click="menuClick(5)">
  25. <img src="@/assets/record/6.png">
  26. <p>双人核对</p>
  27. </li>
  28. </ul>
  29. </div>
  30. <div class="list">
  31. <ul>
  32. <li @click="menuClick(0)">
  33. <img src="@/assets/record/1.png">
  34. <p>透析上机</p>
  35. </li>
  36. <li @click="menuClick(6)">
  37. <img src="@/assets/record/7.png">
  38. <p>透析监测</p>
  39. </li>
  40. <li @click="menuClick(7)">
  41. <img src="@/assets/record/8.png">
  42. <p>透析下机</p>
  43. </li>
  44. <li @click="menuClick(8)">
  45. <img src="@/assets/record/9.png">
  46. <p>透后评估</p>
  47. </li>
  48. <li @click="menuClick(9)">
  49. <img src="@/assets/record/10.png">
  50. <p>治疗小结</p>
  51. </li>
  52. </ul>
  53. </div>
  54. </div>
  55. <div class="blueBorder"></div>
  56. <details-info title="基本信息" :patient="patient"
  57. :device_number="schedual.device_number == null || schedual.device_number == undefined ? '' : schedual.device_number.number"
  58. :step_data="stepData"></details-info>
  59. <div class="blueBorder"></div>
  60. <dialysis-prescription id="prescription" :prescription="prescription" :solution="solution" title="透析处方"
  61. :device_number_map="device_map"></dialysis-prescription>
  62. <div class="blueBorder"></div>
  63. <accepts-assessment id="accepts_assessment" :record="receiver_treatment_access" title="接诊评估"></accepts-assessment>
  64. <div class="blueBorder"></div>
  65. <assessment-before id="assessment_before" :record="predialysis_evaluation" ref="assessment_before"
  66. title="透前评估"></assessment-before>
  67. <div class="blueBorder"></div>
  68. <stat-order id="stat_order" ref="stat_order" title="临时医嘱" :doctor_map="admin_user_map" :advice_groups="advice_groups"></stat-order>
  69. <div class="blueBorder"></div>
  70. <dialysis-computer id="dialysis_computer" ref="dialysis_computer" title="透析上机 " :record="dialysis_order"
  71. :admin_map="admin_user_map" :device_number_map="device_number_map"></dialysis-computer>
  72. <div class="blueBorder"></div>
  73. <double-check id="double_check" ref="double_check" title="双人核对 " :record="double_check"></double-check>
  74. <div class="blueBorder"></div>
  75. <dialysis-monitoring id="monitoring" ref="monitoring" title="透析监测"></dialysis-monitoring>
  76. <div class="blueBorder"></div>
  77. <dialysis-off id="dialysis_off" ref="dialysis_off" title="透析下机 " :record="dialysis_order"
  78. :admin_map="admin_user_map"></dialysis-off>
  79. <div class="blueBorder"></div>
  80. <assessment-after id="assessment_after" ref="assessment_after" title="透后评估"
  81. :record="assessment_after_dislysis"></assessment-after>
  82. <div class="blueBorder"></div>
  83. <treatment-of id="treatment_of" ref="treatment_of" title="治疗小结" :record="treatment_summary"></treatment-of>
  84. <!-- <div class="blueBorder"></div>
  85. <operation-staff title="操作人员 "></operation-staff> -->
  86. <!-- 弹框 -->
  87. <!-- <van-popup v-show="false" title="长期处方" :overlay="true" @click-overlay="popupDidHide(0)" :close-on-click-overlay="false">
  88. <long-dialog @longSolution="closeDialog(0)" @closeLongDialog="closeDialog(0)" :patient_prop="patient" :solution_prop="solution" :machines_prop="devices" ref="long_dialog" ></long-dialog>
  89. </van-popup> -->
  90. <van-popup title="透析处方" v-model="menuList[1].showPopup" :overlay="true" :close-on-click-overlay="false">
  91. <prescription-dialog :patient_prop="patient" :solution_prop="solution" :machines_prop="devices"
  92. :prescription_prop="prescription" @finish="closePrescriptionDialog" :operators="operators"
  93. @close="closePrescriptionDialog" @prescription="prescriptionFunc" @longSolution="longSolutionFunc" ref="prescription_dialog"></prescription-dialog>
  94. </van-popup>
  95. <van-popup title="接诊评估" v-model="menuList[2].showPopup" :overlay="true" :close-on-click-overlay="false">
  96. <accepts-dialog :accepts="receiver_treatment_access" :patient_prop="patient" @finish="closeAcceptsAssessment"
  97. @close="closeAcceptsAssessment"></accepts-dialog>
  98. </van-popup>
  99. <van-popup title="透前评估" v-model="menuList[3].showPopup" :overlay="true" :close-on-click-overlay="false">
  100. <assessment-dialog :predialysis="predialysis_evaluation" :last_predialysis="last_predialysis_evaluation"
  101. :patient_prop="patient" @evaluation="update_evaluation" @close="closeAssessmentBefore"
  102. ref="assessment_dialog"></assessment-dialog>
  103. </van-popup>
  104. <van-popup title="临时医嘱" v-model="menuList[4].showPopup" :overlay="true" :close-on-click-overlay="false">
  105. <orders-dialog :patient_prop="patient" :advice_groups="advice_groups" :advice_list_prop="doctor_advices" :admin_users_prop="admin_users" @orderDialog="closeStatOrder" ref="orders_dialog" > </orders-dialog>
  106. </van-popup>
  107. <van-popup title="双人查对" v-model="menuList[5].showPopup" :overlay="true" :close-on-click-overlay="false">
  108. <double-dialog :patient_prop="patient" :record="double_check" :admin_users_prop="admin_users"
  109. @did_update="closeDoubleCheck" @close="closeDoubleCheck"></double-dialog>
  110. </van-popup>
  111. <van-popup title="透析上机" v-model="menuList[0].showPopup" :overlay="true" :close-on-click-overlay="false">
  112. <computer-dialog :schedule="schedual" :patient_prop="patient" :record="dialysis_order" :admins="admin_users"
  113. :device_numbers="device_numbers" :admin_map="admin_user_map"
  114. :device_number_map="device_number_map" @did_start="closeDialysisComputer"
  115. @close="closeDialysisComputer" ref="computer_dialog"></computer-dialog>
  116. </van-popup>
  117. <van-popup title="透析监测" v-model="menuList[6].showPopup" :overlay="true" :close-on-click-overlay="false">
  118. <monit-dialog :monitor_records="monitor_records" :last_monitor_record="last_monitor_record" :patient="patient" :order="dialysis_order"
  119. @did_add_monitor="didAddMonitor" @did_edit_monitor="didEditMonitor" @did_delete_monitor="didDelMonitor" @close="closeMonitoring"
  120. ref="monit_dialog"></monit-dialog>
  121. </van-popup>
  122. <van-popup title="透析下机" v-model="menuList[7].showPopup" :overlay="true" :close-on-click-overlay="false">
  123. <plane-dialog :patient_prop="patient" :record="dialysis_order" :admins="admin_users" :admin_map="admin_user_map"
  124. @did_off="closeDialysisOff" @close="closeDialysisOff" ref="plane_dialog"></plane-dialog>
  125. </van-popup>
  126. <van-popup title="透后评估" v-model="menuList[8].showPopup" :overlay="true" :close-on-click-overlay="false">
  127. <thoroug-dialog :patient_prop="patient" :record="assessment_after_dislysis"
  128. :last_record="last_assessment_after_dislysis" @did_update="closeAssessmentAfter"
  129. @close="closeAssessmentAfter" ref="thoroug_dialog"></thoroug-dialog>
  130. </van-popup>
  131. <van-popup title="治疗小结" v-model="menuList[9].showPopup" :overlay="true" :close-on-click-overlay="false">
  132. <treatment-dialog :patient_prop="patient" :record="treatment_summary" @did_update="closeTreatmentOf"
  133. @close="closeTreatmentOf" ref="treatment_dialog"></treatment-dialog>
  134. </van-popup>
  135. <!-- <div class="fixedNav" ref="fixed_nav" v-show="show_fixed_nav">
  136. <ul>
  137. <li @click="menuClick(1)">透析处方</li>
  138. <li @click="menuClick(2)">接诊评估</li>
  139. <li @click="menuClick(3)">透前评估</li>
  140. <li @click="menuClick(4)">临时医嘱</li>
  141. <li @click="menuClick(0)">透析上机</li>
  142. <li @click="menuClick(5)">双人核对</li>
  143. <li @click="menuClick(6)">透析监测</li>
  144. <li @click="menuClick(7)">透析下机</li>
  145. <li @click="menuClick(8)">透后评估</li>
  146. <li @click="menuClick(9)">治疗小结</li>
  147. </ul>
  148. </div> -->
  149. <el-button class="goTop" v-show="goTopShow" @click="goTop" type="primary" icon="el-icon-arrow-up" circle style="position:fixed;right:50px;bottom:50px;"></el-button>
  150. </div>
  151. </template>
  152. <script>
  153. import DetailsInfo from "./detailsInfo";
  154. import DialysisPrescription from "./dialysisPrescription";
  155. import PastData from "./pastData";
  156. import AcceptsAssessment from "./acceptsAssessment";
  157. import AssessmentBefore from "./assessmentBefore";
  158. import StatOrder from "./statOrder";
  159. import DialysisComputer from "./dialysisComputer";
  160. import DoubleCheck from "./doubleCheck";
  161. import DialysisMonitoring from "./dialysisMonitoring";
  162. import DialysisOff from "./dialysisOff";
  163. import AssessmentAfter from "./assessmentAfter";
  164. import TreatmentOf from "./treatmentOf";
  165. import OperationStaff from "./operationStaff";
  166. import LongDialog from "../dialog/LongDialog";
  167. import PrescriptionDialog from "../dialog/PrescriptionDialog";
  168. import AssessmentDialog from "../dialog/AssessmentDialog";
  169. import ThorougDialog from "../dialog/ThorougDialog";
  170. import AcceptsDialog from "../dialog/AcceptsDialog";
  171. import PlaneDialog from "../dialog/PlaneDialog";
  172. import TreatmentDialog from "../dialog/TreatmentDialog";
  173. import DoubleDialog from "../dialog/DoubleDialog";
  174. import OrdersDialog from "../dialog/OrdersDialog";
  175. import MonitDialog from "../dialog/MonitDialog";
  176. import ComputerDialog from "../dialog/ComputerDialog";
  177. import { dialysisGlobalConfig, getDialysisRecord } from "@/api/dialysis";
  178. import { parseTime } from "@/utils";
  179. export default {
  180. name: "TodayTab",
  181. components: {
  182. DetailsInfo,
  183. DialysisPrescription,
  184. PastData,
  185. AcceptsAssessment,
  186. AssessmentBefore,
  187. StatOrder,
  188. DialysisComputer,
  189. DoubleCheck,
  190. DialysisMonitoring,
  191. DialysisOff,
  192. AssessmentAfter,
  193. TreatmentOf,
  194. OperationStaff,
  195. LongDialog,
  196. PrescriptionDialog,
  197. AssessmentDialog,
  198. ThorougDialog,
  199. AcceptsDialog,
  200. PlaneDialog,
  201. TreatmentDialog,
  202. DoubleDialog,
  203. OrdersDialog,
  204. MonitDialog,
  205. ComputerDialog
  206. },
  207. data() {
  208. return {
  209. loading: true,
  210. // show_fixed_nav: false,
  211. patient_id: 0,
  212. date: 0,
  213. menuList: [
  214. { value: "2", label: " 透析处方", showPopup: false },
  215. { value: "3", label: " 接诊评估", showPopup: false },
  216. { value: "4", label: " 透前评估", showPopup: false },
  217. { value: "5", label: " 临时医嘱", showPopup: false },
  218. { value: "6", label: " 透析上机", showPopup: false },
  219. { value: "1", label: " 双人核对", showPopup: false },
  220. { value: "7", label: " 透析监测", showPopup: false },
  221. { value: "8", label: " 透析下机", showPopup: false },
  222. { value: "9", label: " 透后评估", showPopup: false },
  223. { value: "10", label: " 治疗小结", showPopup: false }
  224. ],
  225. operators: [], //操作人
  226. patient: {}, // 患者信息
  227. schedual: {}, // 患者排班信息
  228. prescription: {}, // 透析处方
  229. solution: {}, // 透析方案
  230. receiver_treatment_access: {}, // 接诊评估
  231. predialysis_evaluation: {}, // 透前评估
  232. last_predialysis_evaluation: {}, // 上次透前评估
  233. doctor_advices: [], // 临时医嘱
  234. advice_groups: [], // 对 doctor_advices 进行分组后的组列表,元素为 { group_no, start_time, advices:[advice object] }
  235. double_check: {}, // 双人核对
  236. assessment_after_dislysis: {}, // 透后评估
  237. last_assessment_after_dislysis: {}, // 上次透后评估
  238. treatment_summary: {}, // 治疗小结
  239. monitor_records: [], // 透析监测
  240. last_monitor_record: {
  241. id: 0,
  242. operate_time: new Date().getTime(),
  243. sodium_concentration: "",
  244. dialysate_temperature: ""
  245. }, // 上一次透析的监测记录
  246. dialysis_order: {}, // 透析记录
  247. admin_users: [], //系统用户列表
  248. devices: [], //设备
  249. device_numbers: [], // 床位号
  250. admin_user_map: {}, // {user_id: admin_user object}
  251. device_map: {}, // {device_id: device}
  252. device_number_map: {}, // {device_number_id: device_number}
  253. scrollTop: "",
  254. goTopShow: false
  255. };
  256. },
  257. computed: {
  258. stepData: function() {
  259. var steps = [
  260. { title: "透析处方", name: "prescription", value: 0 },
  261. { title: "接诊评估", name: "accepts_assessment", value: 0 },
  262. { title: "透前评估", name: "assessment_before", value: 0 },
  263. { title: "临时医嘱", name: "stat_order", value: 0 },
  264. { title: "透析上机", name: "dialysis_computer", value: 0 },
  265. { title: "双人核对", name: "double_check", value: 0 },
  266. { title: "透析监测", name: "dialysis_monitoring", value: 0 },
  267. { title: "透析下机", name: "dialysis_off", value: 0 },
  268. { title: "透后评估", name: "assessment_after", value: 0 },
  269. { title: "治疗小结", name: "treatment_of", value: 0 }
  270. ];
  271. if (!isNaN(this.prescription.id) && this.prescription.id > 0) {
  272. steps[0].value = 1;
  273. }
  274. if (
  275. !isNaN(this.receiver_treatment_access.id) &&
  276. this.receiver_treatment_access.id > 0
  277. ) {
  278. steps[1].value = 1;
  279. }
  280. if (
  281. typeof this.predialysis_evaluation.id != "undefined" &&
  282. !isNaN(this.predialysis_evaluation.id) &&
  283. this.predialysis_evaluation.id > 0
  284. ) {
  285. steps[2].value = 1;
  286. }
  287. if (this.doctor_advices.length > 0) {
  288. steps[3].value = 1;
  289. }
  290. if (!isNaN(this.dialysis_order.id) && this.dialysis_order.id > 0) {
  291. steps[4].value = 1;
  292. if (this.dialysis_order.stage == 2) {
  293. steps[7].value = 1;
  294. }
  295. }
  296. if (
  297. !isNaN(this.double_check.creater) &&
  298. this.double_check.creater > 0 &&
  299. !isNaN(this.double_check.modifier) &&
  300. this.double_check.modifier > 0
  301. ) {
  302. steps[5].value = 1;
  303. }
  304. if (this.monitor_records.length > 0) {
  305. steps[6].value = 1;
  306. }
  307. if (
  308. !isNaN(this.assessment_after_dislysis.id) &&
  309. this.assessment_after_dislysis.id > 0
  310. ) {
  311. steps[8].value = 1;
  312. }
  313. if (!isNaN(this.treatment_summary.id) && this.treatment_summary.id > 0) {
  314. steps[9].value = 1;
  315. }
  316. return steps;
  317. }
  318. },
  319. created() {
  320. var patient_id = this.$route.query.patient_id;
  321. var date = this.$route.query.date;
  322. this.patient_id = patient_id;
  323. this.date = date;
  324. this.requestDialysisRecord();
  325. },
  326. mounted() {
  327. window.addEventListener("scroll", this.handleScroll);
  328. },
  329. watch: {
  330. doctor_advices: function() {
  331. this.$refs.stat_order.setAdvices(this.doctor_advices);
  332. },
  333. monitor_records: function() {
  334. this.$refs.monitoring.setRecords(this.monitor_records);
  335. },
  336. $route: "requestDialysisRecord"
  337. },
  338. methods: {
  339. // handleScroll: function() {
  340. // var scrollTop =
  341. // window.pageYOffset ||
  342. // document.documentElement.scrollTop ||
  343. // document.body.scrollTop;
  344. // this.show_fixed_nav = scrollTop > 160;
  345. // },
  346. didAddMonitor(monitor) {
  347. this.monitor_records.push(monitor);
  348. this.monitor_records.sort((a, b) => b.operate_time - a.operate_time);
  349. // for (let index = 0; index < this.monitor_records.length; index++) {
  350. // const record = this.monitor_records[index];
  351. // if (record.operate_time <= monitor.operate_time) {
  352. // this.monitor_records.splice(index, 0, monitor)
  353. // break
  354. // }
  355. // }
  356. this.monitor_records.reverse();
  357. this.last_monitor_record = monitor;
  358. },
  359. didEditMonitor(monitor) {
  360. var mrl = this.monitor_records.length;
  361. var monitor_index = -1;
  362. for (let index = 0; index < mrl; index++) {
  363. if (this.monitor_records[index].id == monitor.id) {
  364. monitor_index = index;
  365. break;
  366. }
  367. }
  368. console.log(monitor);
  369. console.log(this.monitor_records[monitor_index]);
  370. this.monitor_records[monitor_index].arterial_pressure =
  371. monitor.arterial_pressure;
  372. this.monitor_records[monitor_index].blood_flow_volume =
  373. monitor.blood_flow_volume;
  374. this.monitor_records[monitor_index].breathing_rate =
  375. monitor.breathing_rate;
  376. this.monitor_records[monitor_index].dialysate_temperature =
  377. monitor.dialysate_temperature;
  378. this.monitor_records[monitor_index].temperature =
  379. monitor.temperature;
  380. this.monitor_records[monitor_index].diastolic_bp = monitor.diastolic_bp;
  381. this.monitor_records[monitor_index].displacement_quantity =
  382. monitor.displacement_quantity;
  383. this.monitor_records[monitor_index].dispose = monitor.dispose;
  384. this.monitor_records[monitor_index].ktv = monitor.ktv;
  385. this.monitor_records[monitor_index].monitor_date = monitor.monitor_date;
  386. this.monitor_records[monitor_index].monitoring_nurse =
  387. monitor.monitoring_nurse;
  388. this.monitor_records[monitor_index].operate_time = monitor.operate_time;
  389. this.monitor_records[monitor_index].pulse_frequency =
  390. monitor.pulse_frequency;
  391. this.monitor_records[monitor_index].replacement_rate =
  392. monitor.replacement_rate;
  393. this.monitor_records[monitor_index].result = monitor.result;
  394. this.monitor_records[monitor_index].sodium_concentration =
  395. monitor.sodium_concentration;
  396. this.monitor_records[monitor_index].symptom = monitor.symptom;
  397. this.monitor_records[monitor_index].systolic_bp = monitor.systolic_bp;
  398. this.monitor_records[monitor_index].transmembrane_pressure =
  399. monitor.transmembrane_pressure;
  400. this.monitor_records[monitor_index].ultrafiltration_rate =
  401. monitor.ultrafiltration_rate;
  402. this.monitor_records[monitor_index].ultrafiltration_volume =
  403. monitor.ultrafiltration_volume;
  404. this.monitor_records[monitor_index].venous_pressure =
  405. monitor.venous_pressure;
  406. this.monitor_records[monitor_index].diastolic_blood_pressure =
  407. monitor.diastolic_blood_pressure;
  408. this.monitor_records[monitor_index].systolic_blood_pressure =
  409. monitor.systolic_blood_pressure;
  410. this.monitor_records.sort((a, b) => b.operate_time - a.operate_time);
  411. // if (monitor_index >= 0) {
  412. // var record = this.monitor_records[monitor_index]
  413. //
  414. // this.monitor_records.splice(monitor_index, 1)
  415. // if(this.monitor_records.length == 0){
  416. // this.monitor_records.splice(0, 0, monitor)
  417. // }else {
  418. //
  419. // for (let index = 0; index < this.monitor_records.length; index++) {
  420. // const temp = this.monitor_records[index];
  421. // if (temp.operate_time <= monitor.operate_time) {
  422. // this.monitor_records.splice(index, 0, monitor)
  423. // break
  424. // }
  425. // }
  426. // }
  427. // }
  428. },
  429. didDelMonitor(record_id) {
  430. var mrl = this.monitor_records.length;
  431. for (let index = 0; index < mrl; index++) {
  432. if (this.monitor_records[index].id == record_id) {
  433. this.monitor_records.splice(index, 1);
  434. break;
  435. }
  436. }
  437. },
  438. menuClick: function(popupIndex) {
  439. this.index = popupIndex;
  440. if (popupIndex >= 0) {
  441. this.menuList[popupIndex].showPopup = true;
  442. }
  443. if (
  444. popupIndex == 1 &&
  445. typeof this.$refs.prescription_dialog != "undefined"
  446. ) {
  447. this.$refs.prescription_dialog.open();
  448. } else if (
  449. popupIndex == 3 &&
  450. typeof this.$refs.assessment_dialog != "undefined"
  451. ) {
  452. this.$refs.assessment_dialog.open();
  453. } else if (
  454. popupIndex == 4 &&
  455. typeof this.$refs.orders_dialog != "undefined"
  456. ) {
  457. // this.$refs.orders_dialog.open();
  458. } else if (
  459. popupIndex == 0 &&
  460. typeof this.$refs.computer_dialog != "undefined"
  461. ) {
  462. this.$refs.computer_dialog.open();
  463. } else if (
  464. popupIndex == 6 &&
  465. typeof this.$refs.monit_dialog != "undefined"
  466. ) {
  467. this.$refs.monit_dialog.open();
  468. } else if (
  469. popupIndex == 7 &&
  470. typeof this.$refs.plane_dialog != "undefined"
  471. ) {
  472. this.$refs.plane_dialog.open();
  473. } else if (
  474. popupIndex == 8 &&
  475. typeof this.$refs.thoroug_dialog != "undefined"
  476. ) {
  477. this.$refs.thoroug_dialog.open();
  478. } else if (
  479. popupIndex == 9 &&
  480. typeof this.$refs.treatment_dialog != "undefined"
  481. ) {
  482. this.$refs.treatment_dialog.open();
  483. }
  484. },
  485. popupDidHide: function(popupIndex) {
  486. this.index = -1;
  487. },
  488. closeDialog(index) {
  489. this.index = -1;
  490. this.menuList[index].showPopup = false;
  491. },
  492. refresh() {
  493. var dateStr = parseTime(this.$route.query.date, "{y}-{m}-{d}");
  494. var params = {
  495. patient_id: this.$route.query.patient_id,
  496. date: dateStr
  497. };
  498. getDialysisRecord(params).then(rs => {
  499. var resp = rs.data;
  500. console.log(resp);
  501. if (resp.state == 1) {
  502. var patient = resp.data.patient; // 患者信息
  503. var schedual = resp.data.schedual; // 患者排班信息
  504. var prescription = resp.data.prescription; // 透析处方
  505. var solution = resp.data.solution; // 透析方案
  506. var receiver_treatment_access = resp.data.receiver_treatment_access; // 接诊评估
  507. var predialysis_evaluation = resp.data.predialysis_evaluation; // 透前评估
  508. var doctor_advices = resp.data.doctor_advices; // 临时医嘱
  509. for (let i = 0; i < doctor_advices.length; i++){
  510. doctor_advices[i]['is_selected'] = 0
  511. }
  512. console.log(doctor_advices)
  513. var double_check = resp.data.double_check; // 双人核对
  514. var assessment_after_dislysis = resp.data.assessment_after_dislysis; // 透后评估
  515. var treatment_summary = resp.data.treatment_summary; // 治疗小结
  516. var monitor_records = resp.data.monitor_records; // 透析监测
  517. var dialysis_order = resp.data.dialysis_order; // 透析记录
  518. var operators = resp.data.operators; // 操作人
  519. var last_predialysis_evaluation =
  520. resp.data.last_predialysis_evaluation; // 上一次透前评估
  521. var last_assessment_after_dislysis =
  522. resp.data.last_assessment_after_dislysis; // 上一次透前评估
  523. var last_monitor_record = resp.data.last_monitor_record;
  524. this.patient = patient;
  525. this.schedual = schedual == null ? {} : schedual;
  526. this.prescription = prescription == null ? { id: "" } : prescription;
  527. this.solution = solution == null ? { id: "" } : solution;
  528. this.receiver_treatment_access =
  529. receiver_treatment_access == null
  530. ? { id: "" }
  531. : receiver_treatment_access;
  532. this.predialysis_evaluation =
  533. predialysis_evaluation == null ? {} : predialysis_evaluation;
  534. this.last_predialysis_evaluation =
  535. last_predialysis_evaluation == null
  536. ? {}
  537. : last_predialysis_evaluation;
  538. this.doctor_advices = doctor_advices == null ? [] : doctor_advices;
  539. if (this.doctor_advices.length > 0) {
  540. var group = this.newAdviceGroupObject();
  541. var initGroupBlock = function(group, advice) {
  542. group.group_no = advice.groupno;
  543. // group.start_time = advice.start_time
  544. // group.advice_doctor = advice.advice_doctor
  545. // group.exec_staff = advice.execution_staff
  546. // group.exec_time = advice.execution_time
  547. // group.checker = advice.checker
  548. };
  549. for (let index = 0; index < this.doctor_advices.length; index++) {
  550. const advice = this.doctor_advices[index];
  551. if (advice.groupno == 0) {
  552. // 老版本的医嘱没有分组的概念,所以这一个 if 是解决这个问题的,将每个无分组的医嘱各自归为一组
  553. if (advice.parent_id > 0) {
  554. if (this.advice_groups.length > 0) {
  555. var parent_group = this.advice_groups[
  556. this.advice_groups.length - 1
  557. ];
  558. if (parent_group.advices.length > 0) {
  559. if (parent_group.advices[0].id == advice.parent_id) {
  560. parent_group.advices.push(advice);
  561. }
  562. }
  563. }
  564. continue;
  565. } else {
  566. if (group.group_no > 0) {
  567. this.advice_groups.push(group);
  568. group = this.newAdviceGroupObject();
  569. }
  570. initGroupBlock(group, advice);
  571. group.advices.push(advice);
  572. this.advice_groups.push(group);
  573. group = this.newAdviceGroupObject();
  574. continue;
  575. }
  576. }
  577. if (group.group_no > 0 && group.group_no != advice.groupno) {
  578. this.advice_groups.push(group);
  579. group = this.newAdviceGroupObject();
  580. }
  581. if (group.group_no == 0) {
  582. initGroupBlock(group, advice);
  583. }
  584. if (group.group_no == advice.groupno) {
  585. group.advices.push(advice);
  586. }
  587. }
  588. if (group.group_no > 0) {
  589. // 上述的算法会导致最后一组没有加到advice_groups,这里要手动加上
  590. this.advice_groups.push(group);
  591. }
  592. // console.log(this.advice_groups)
  593. }
  594. this.double_check = double_check == null ? { id: "" } : double_check;
  595. this.assessment_after_dislysis =
  596. assessment_after_dislysis == null
  597. ? { id: "" }
  598. : assessment_after_dislysis;
  599. this.last_assessment_after_dislysis =
  600. last_assessment_after_dislysis == null
  601. ? { id: "" }
  602. : last_assessment_after_dislysis;
  603. this.treatment_summary =
  604. treatment_summary == null ? { id: "" } : treatment_summary;
  605. this.monitor_records = monitor_records == null ? [] : monitor_records;
  606. this.last_monitor_record =
  607. last_monitor_record == null
  608. ? this.last_monitor_record
  609. : last_monitor_record;
  610. this.dialysis_order =
  611. dialysis_order == null ? { id: "" } : dialysis_order;
  612. this.operators = operators;
  613. this.$refs.stat_order.setAdvices(this.doctor_advices);
  614. this.$refs.monitoring.setRecords(this.monitor_records);
  615. this.title = patient.name;
  616. dialysisGlobalConfig().then(rs => {
  617. var res = rs.data;
  618. if (res.state == 1) {
  619. // console.log(res)
  620. // this.$refs.detail_menu.setGlobalConfig(res.data)
  621. this.admin_users = res.data.admin_users;
  622. this.devices = res.data.devices;
  623. this.device_numbers = res.data.device_numbers;
  624. var device_map = {};
  625. for (let index = 0; index < this.devices.length; index++) {
  626. const device = this.devices[index];
  627. device_map[device.id] = device;
  628. }
  629. this.device_map = device_map;
  630. var admin_map = {};
  631. for (let index = 0; index < this.admin_users.length; index++) {
  632. const admin = this.admin_users[index];
  633. admin_map[admin.id] = admin;
  634. }
  635. this.admin_user_map = admin_map;
  636. var device_number_map = {};
  637. for (let index = 0; index < this.device_numbers.length; index++) {
  638. const device_number = this.device_numbers[index];
  639. device_number_map[device_number.id] = device_number;
  640. }
  641. this.device_number_map = device_number_map;
  642. }
  643. this.loading = false;
  644. });
  645. } else {
  646. this.$toast({
  647. message: resp.msg
  648. });
  649. this.loading = false;
  650. }
  651. });
  652. },
  653. requestDialysisRecord() {
  654. var dateStr = parseTime(this.date, "{y}-{m}-{d}");
  655. var params = {
  656. patient_id: this.patient_id,
  657. date: dateStr
  658. };
  659. getDialysisRecord(params).then(rs => {
  660. var resp = rs.data;
  661. console.log(resp);
  662. if (resp.state == 1) {
  663. var patient = resp.data.patient; // 患者信息
  664. var schedual = resp.data.schedual; // 患者排班信息
  665. var prescription = resp.data.prescription; // 透析处方
  666. var solution = resp.data.solution; // 透析方案
  667. var receiver_treatment_access = resp.data.receiver_treatment_access; // 接诊评估
  668. var predialysis_evaluation = resp.data.predialysis_evaluation; // 透前评估
  669. var doctor_advices = resp.data.doctor_advices; // 临时医嘱
  670. for (let i = 0; i < doctor_advices.length; i++){
  671. doctor_advices[i]['is_selected'] = 0
  672. }
  673. console.log(doctor_advices)
  674. var double_check = resp.data.double_check; // 双人核对
  675. var assessment_after_dislysis = resp.data.assessment_after_dislysis; // 透后评估
  676. var treatment_summary = resp.data.treatment_summary; // 治疗小结
  677. var monitor_records = resp.data.monitor_records; // 透析监测
  678. var dialysis_order = resp.data.dialysis_order; // 透析记录
  679. var operators = resp.data.operators; // 操作人
  680. var last_predialysis_evaluation =
  681. resp.data.last_predialysis_evaluation; // 上一次透前评估
  682. var last_assessment_after_dislysis =
  683. resp.data.last_assessment_after_dislysis; // 上一次透前评估
  684. var last_monitor_record = resp.data.last_monitor_record;
  685. this.patient = patient;
  686. this.schedual = schedual == null ? {} : schedual;
  687. this.prescription = prescription == null ? { id: "" } : prescription;
  688. this.solution = solution == null ? { id: "" } : solution;
  689. this.receiver_treatment_access =
  690. receiver_treatment_access == null
  691. ? { id: "" }
  692. : receiver_treatment_access;
  693. this.predialysis_evaluation =
  694. predialysis_evaluation == null ? {} : predialysis_evaluation;
  695. this.last_predialysis_evaluation =
  696. last_predialysis_evaluation == null
  697. ? {}
  698. : last_predialysis_evaluation;
  699. this.doctor_advices = doctor_advices == null ? [] : doctor_advices;
  700. if (this.doctor_advices.length > 0) {
  701. var group = this.newAdviceGroupObject();
  702. var initGroupBlock = function(group, advice) {
  703. group.group_no = advice.groupno;
  704. // group.start_time = advice.start_time
  705. // group.advice_doctor = advice.advice_doctor
  706. // group.exec_staff = advice.execution_staff
  707. // group.exec_time = advice.execution_time
  708. // group.checker = advice.checker
  709. };
  710. for (let index = 0; index < this.doctor_advices.length; index++) {
  711. const advice = this.doctor_advices[index];
  712. if (advice.groupno == 0) {
  713. // 老版本的医嘱没有分组的概念,所以这一个 if 是解决这个问题的,将每个无分组的医嘱各自归为一组
  714. if (advice.parent_id > 0) {
  715. if (this.advice_groups.length > 0) {
  716. var parent_group = this.advice_groups[
  717. this.advice_groups.length - 1
  718. ];
  719. if (parent_group.advices.length > 0) {
  720. if (parent_group.advices[0].id == advice.parent_id) {
  721. parent_group.advices.push(advice);
  722. }
  723. }
  724. }
  725. continue;
  726. } else {
  727. if (group.group_no > 0) {
  728. this.advice_groups.push(group);
  729. group = this.newAdviceGroupObject();
  730. }
  731. initGroupBlock(group, advice);
  732. group.advices.push(advice);
  733. this.advice_groups.push(group);
  734. group = this.newAdviceGroupObject();
  735. continue;
  736. }
  737. }
  738. if (group.group_no > 0 && group.group_no != advice.groupno) {
  739. this.advice_groups.push(group);
  740. group = this.newAdviceGroupObject();
  741. }
  742. if (group.group_no == 0) {
  743. initGroupBlock(group, advice);
  744. }
  745. if (group.group_no == advice.groupno) {
  746. group.advices.push(advice);
  747. }
  748. }
  749. if (group.group_no > 0) {
  750. // 上述的算法会导致最后一组没有加到advice_groups,这里要手动加上
  751. this.advice_groups.push(group);
  752. }
  753. // console.log(this.advice_groups)
  754. }
  755. this.double_check = double_check == null ? { id: "" } : double_check;
  756. this.assessment_after_dislysis =
  757. assessment_after_dislysis == null
  758. ? { id: "" }
  759. : assessment_after_dislysis;
  760. this.last_assessment_after_dislysis =
  761. last_assessment_after_dislysis == null
  762. ? { id: "" }
  763. : last_assessment_after_dislysis;
  764. this.treatment_summary =
  765. treatment_summary == null ? { id: "" } : treatment_summary;
  766. this.monitor_records = monitor_records == null ? [] : monitor_records;
  767. this.last_monitor_record =
  768. last_monitor_record == null
  769. ? this.last_monitor_record
  770. : last_monitor_record;
  771. this.dialysis_order =
  772. dialysis_order == null ? { id: "" } : dialysis_order;
  773. this.operators = operators;
  774. this.$refs.stat_order.setAdvices(this.doctor_advices);
  775. this.$refs.monitoring.setRecords(this.monitor_records);
  776. this.title = patient.name;
  777. dialysisGlobalConfig().then(rs => {
  778. var res = rs.data;
  779. if (res.state == 1) {
  780. // console.log(res)
  781. // this.$refs.detail_menu.setGlobalConfig(res.data)
  782. this.admin_users = res.data.admin_users;
  783. this.devices = res.data.devices;
  784. this.device_numbers = res.data.device_numbers;
  785. var device_map = {};
  786. for (let index = 0; index < this.devices.length; index++) {
  787. const device = this.devices[index];
  788. device_map[device.id] = device;
  789. }
  790. this.device_map = device_map;
  791. var admin_map = {};
  792. for (let index = 0; index < this.admin_users.length; index++) {
  793. const admin = this.admin_users[index];
  794. admin_map[admin.id] = admin;
  795. }
  796. this.admin_user_map = admin_map;
  797. var device_number_map = {};
  798. for (let index = 0; index < this.device_numbers.length; index++) {
  799. const device_number = this.device_numbers[index];
  800. device_number_map[device_number.id] = device_number;
  801. }
  802. this.device_number_map = device_number_map;
  803. }
  804. this.loading = false;
  805. });
  806. } else {
  807. this.$toast({
  808. message: resp.msg
  809. });
  810. this.loading = false;
  811. }
  812. });
  813. },
  814. newAdviceGroupObject: function() {
  815. return Object.assign(
  816. {},
  817. {
  818. group_no: 0,
  819. // advice_doctor: 0,
  820. // start_time: 0,
  821. advices: []
  822. // exec_staff: 0,
  823. // exec_time: 0,
  824. // checker: 0,
  825. }
  826. );
  827. },
  828. prescriptionFunc:function(val){
  829. this.prescription = val
  830. },
  831. longSolutionFunc:function(val){
  832. this.solution = val
  833. },
  834. closePrescriptionDialog: function() {
  835. this.closeDialog(1);
  836. this.scrollToView("prescription");
  837. },
  838. closeAcceptsAssessment: function() {
  839. this.closeDialog(2);
  840. this.scrollToView("accepts_assessment");
  841. },
  842. closeAssessmentBefore: function() {
  843. this.closeDialog(3);
  844. this.scrollToView("assessment_before");
  845. },
  846. update_evaluation: function(evaluation) {
  847. this.predialysis_evaluation = evaluation;
  848. this.closeAssessmentBefore();
  849. },
  850. closeStatOrder: function() {
  851. this.closeDialog(4);
  852. this.doctor_advices.push([])
  853. this.scrollToView("stat_order");
  854. },
  855. closeDialysisComputer: function() {
  856. this.closeDialog(0);
  857. this.scrollToView("dialysis_computer");
  858. },
  859. closeDoubleCheck: function() {
  860. this.closeDialog(5);
  861. this.scrollToView("double_check");
  862. },
  863. closeMonitoring: function() {
  864. this.closeDialog(6);
  865. this.scrollToView("monitoring");
  866. },
  867. closeDialysisOff: function() {
  868. this.closeDialog(7);
  869. this.scrollToView("dialysis_off");
  870. },
  871. closeAssessmentAfter: function(assessment_after_dislysis) {
  872. this.closeDialog(8);
  873. this.scrollToView("assessment_after");
  874. if(assessment_after_dislysis != undefined){
  875. this.assessment_after_dislysis = assessment_after_dislysis
  876. }
  877. },
  878. closeTreatmentOf: function() {
  879. this.closeDialog(9);
  880. this.scrollToView("treatment_of");
  881. },
  882. scrollToView: function(id) {
  883. document.body.scrollTop =
  884. document.querySelector("#" + id).offsetTop - 100;
  885. document.documentElement.scrollTop =
  886. document.querySelector("#" + id).offsetTop - 100;
  887. },
  888. handleScroll() {
  889. this.scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
  890. if (this.scrollTop > 50) {
  891. this.goTopShow = true;
  892. }else{
  893. this.goTopShow = false;
  894. }
  895. },
  896. goTop() {
  897. let timer = null,
  898. _that = this;
  899. cancelAnimationFrame(timer);
  900. timer = requestAnimationFrame(function fn() {
  901. if (_that.scrollTop > 0) {
  902. _that.scrollTop -= 50;
  903. document.body.scrollTop = document.documentElement.scrollTop =
  904. _that.scrollTop;
  905. timer = requestAnimationFrame(fn);
  906. } else {
  907. cancelAnimationFrame(timer);
  908. _that.goTopShow = false;
  909. }
  910. });
  911. },
  912. destroyed() {
  913. window.removeEventListener("scroll", this.handleScroll);
  914. },getUnReadNum(){
  915. let doctorAdvice = []
  916. for (let y = 0; y < this.doctor_advices.length;y++) {
  917. if (this.doctor_advices[y].execution_state == 2) {
  918. doctorAdvice.push(this.doctor_advices[y])
  919. }
  920. }
  921. const sorted = this.groupBy(doctorAdvice, function (item) {
  922. return [item.groupno];
  923. });
  924. return sorted.length
  925. }, groupBy (array, f) {
  926. const groups = {}
  927. array.forEach(function (o) {
  928. const group = JSON.stringify(f(o))
  929. groups[group] = groups[group] || []
  930. groups[group].push(o)
  931. })
  932. return Object.keys(groups).map(function (group) {
  933. return groups[group]
  934. })
  935. }
  936. }
  937. };
  938. </script>
  939. <style style="stylesheet/scss" lang="scss" scoped>
  940. .today_panel {
  941. height: calc(100% - 63px);
  942. }
  943. .mainContent {
  944. position: relative;
  945. .grid {
  946. padding: 0.1rem 0 0.25rem 0;
  947. margin: 0.2rem 0 0 0;
  948. background: #fff;
  949. .list {
  950. ul {
  951. @include display-flex;
  952. @include align-items-center;
  953. @include text-align;
  954. @include justify-content-around;
  955. li {
  956. font-size: 0.24rem;
  957. color: #5d6b7a;
  958. margin-top: 0.35rem;
  959. p {
  960. line-height: 0.6rem;
  961. color: #34495e;
  962. font-size: 0.3rem;
  963. }
  964. img {
  965. width: 1rem;
  966. height: 1rem;
  967. }
  968. }
  969. }
  970. }
  971. }
  972. }
  973. .el-button.is-circle{
  974. padding: 18px!important;
  975. .el-icon-arrow-up{
  976. font-size: 20px!important;
  977. }
  978. }
  979. .redpoint{
  980. display:inline-block;
  981. height:20px;
  982. width:20px;
  983. line-height:18px;
  984. text-align:center;
  985. font-size:0.8em;
  986. border-radius:20px;
  987. color:#fff;
  988. background:red;
  989. position: absolute;
  990. border: 1px solid #fff;
  991. top: -8px;
  992. right: -8px;
  993. }
  994. </style>