info.jsp 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109
  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  2. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
  3. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  4. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  5. <jsp:include page="${data._INCLUDE}/header.jsp"></jsp:include>
  6. <link rel="stylesheet" href="/resources/bower_components/mdi/css/materialdesignicons.min.css">
  7. <script src="/resources/bower_components/moment/moment.min.js"></script>
  8. <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
  9. <script>
  10. /*
  11. * 비대면 진료 시작
  12. */
  13. function nonFaceStart() {
  14. getAjax("/patient/nonFaceStart", $("#hiddenForm").serialize(), function ( result ) {
  15. $("#nonface").append('<input type="hidden" name="member_name" value="'+result.member_name+'" />');
  16. $("#nonface").append('<input type="hidden" name="member_id" value="'+result.member_id+'" />');
  17. $("#nonface").append('<input type="hidden" name="room_id" value="'+result.room_id+'" />');
  18. $("#nonface").append('<input type="hidden" name="hashData" value="'+result.hashData+'">');
  19. $("#nonface").append('<input type="hidden" name="token" value="'+result.token+'">');
  20. $("#nonface").append('<input type="hidden" name="api_key" value="'+result.api_key+'">');
  21. $("#nonface").append('<input type="hidden" name="classify" value="d">');
  22. var gsWin = window.open('about:blank','nonface');
  23. var frm =document.nonface;
  24. frm.target ="nonface";
  25. frm.method ="post";
  26. frm.submit();
  27. }, function(){
  28. }, function(){
  29. });
  30. }
  31. /*
  32. * 건강정보이력 탭 처리
  33. */
  34. function handlePhrData() {
  35. var phrType = $("#phrTypeSelect option:selected").val();
  36. var phrValue = "";
  37. if (phrType === "bloodPressure") {
  38. phrValueSystolic = $("#phrValueSystolic").val();
  39. phrValueDiastolic = $("#phrValueDiastolic").val();
  40. if (!phrValueSystolic || phrValueSystolic.length === 0) {
  41. alert("수축기 혈압을 입력해 주세요.");
  42. return;
  43. }
  44. if (!phrValueDiastolic || phrValueDiastolic.length === 0) {
  45. alert("이완기 혈압을 입력해 주세요.");
  46. return;
  47. }
  48. createPhrData(${patientIdx}, "bloodPressure", phrValueSystolic, phrValueDiastolic);
  49. $("#phrValueSystolic").val("");
  50. $("#phrValueDiastolic").val("");
  51. }
  52. else {
  53. phrValue = $("#phrValue").val();
  54. if (!phrValue || phrValue.length === 0) {
  55. alert("값을 입력해 주세요.");
  56. return;
  57. }
  58. createPhrData(${patientIdx}, phrType, phrValue);
  59. $("#phrValue").val("");
  60. }
  61. $("#defaultModalPrimary_1").modal("hide");
  62. }
  63. function createPhrData(patientIdx, phrType, phrValue, phrValue2, needRetrieveData=true, recordedById="${data._SES_ID}", recordedByName="${data._SES_NAME}") {
  64. $.ajax({
  65. url : "./api/phrData",
  66. data : {patientIdx: patientIdx, phrType: phrType, phrValue: phrValue, phrValue2: phrValue2, recordedById: recordedById, recordedByName: recordedByName},
  67. method : "POST",
  68. dataType : "json",
  69. success : function( datas ){
  70. if (needRetrieveData) {
  71. retrievePhrData();
  72. }
  73. },
  74. error : function(error){
  75. alert(error.message);
  76. }
  77. }).done( function(){
  78. });
  79. }
  80. function retrievePhrData() {
  81. var phrType = $("#phrTypeSelect option:selected").val();
  82. var phrName = $("#phrTypeSelect option:selected").text();
  83. var params = {patientIdx: ${patientIdx}, phrType: phrType};
  84. $.ajax({
  85. url : "./api/phrDatas",
  86. data : params,
  87. method : "GET",
  88. dataType : "json",
  89. success : function( datas ){
  90. if (phrType==="bloodPressure") {
  91. drawBPChart(datas);
  92. }
  93. else {
  94. drawPhrChart(datas, phrName);
  95. }
  96. var html = "<thead><tr>";
  97. html += "<th>기록일시</th>";
  98. html += "<th>"+phrName+"</th>";
  99. html += "<th>기록자</th>";
  100. html += "</tr></thead>";
  101. html += "<tbody>";
  102. var contents = "<tr><td colspan=3>데이터가 없습니다.</td></tr>" ;
  103. if (datas.length > 0) {
  104. contents = "";
  105. datas.forEach(d => {
  106. var danger = d.isWarning ? "text-danger" : "";
  107. var row = "";
  108. row += "<tr>";
  109. row += "<td>" + d.createDate + "</td>";
  110. if (phrType==="bloodPressure") {
  111. row += "<td><span class='"+danger+"'>" + (isNaN(parseInt(d.phrValue)) ? "--" : parseInt(d.phrValue)) + " / " + (isNaN(parseInt(d.phrValue2)) ? "--" : parseInt(d.phrValue2)) + "</span></td>";
  112. }
  113. else if (phrType==="temperature") {
  114. row += "<td><span class='"+danger+"'>" + d.phrValue + "</span></td>";
  115. }
  116. else {
  117. row += "<td><span class='"+danger+"'>" + parseInt(d.phrValue) + "</span></td>";
  118. }
  119. row += "<td>" + d.recordedByName + "</td>";
  120. row += "</tr>";
  121. contents = row + contents;
  122. });
  123. };
  124. html += contents;
  125. html += "</tbody>";
  126. $("#phrDataTable").html(html);
  127. },
  128. error : function(error){
  129. alert(error.message);
  130. }
  131. }).done( function(){
  132. });
  133. }
  134. var myChart = null;
  135. function drawPhrChart(data, dataName) {
  136. if (myChart) {
  137. myChart.destroy();
  138. myChart = null;
  139. }
  140. var xDatas = [];
  141. var yDatas = [];
  142. data.forEach(d=> {
  143. var t = moment(d.createDate).format("MM-DD HH:mm:ss");
  144. xDatas.push(t);
  145. yDatas.push(d.phrValue);
  146. });
  147. var ctx = document.getElementById("phrChart").getContext('2d');
  148. myChart = new Chart(ctx, {
  149. type: 'line',
  150. data: {
  151. labels: xDatas,
  152. datasets: [{
  153. label: dataName,
  154. data: yDatas,
  155. fill: false,
  156. backgroundColor: '#fff',
  157. borderColor: '#5b7dff',
  158. borderWidth: 2,
  159. }]
  160. },
  161. options: {
  162. maintainAspectRatio: false,
  163. }
  164. });
  165. }
  166. function drawBPChart(data) {
  167. if (myChart) {
  168. myChart.destroy();
  169. myChart = null;
  170. }
  171. var xDatas = [];
  172. var y1Datas = [];
  173. var y2Datas = [];
  174. data.forEach(d=> {
  175. var t = moment(d.createDate).format("MM-DD HH:mm:ss");
  176. xDatas.push(t);
  177. y1Datas.push(d.phrValue);
  178. y2Datas.push(d.phrValue2);
  179. });
  180. var ctx = document.getElementById("phrChart").getContext('2d');
  181. myChart = new Chart(ctx, {
  182. type: 'line',
  183. data: {
  184. labels: xDatas,
  185. datasets: [{
  186. label: "수축기 혈압",
  187. data: y1Datas,
  188. fill: false,
  189. backgroundColor: '#fff',
  190. borderColor: '#5b7dff',
  191. borderWidth: 2,
  192. },{
  193. label: "이완기 혈압",
  194. data: y2Datas,
  195. fill: false,
  196. backgroundColor: '#fff',
  197. borderColor: 'rgb(255, 99, 132)',
  198. borderWidth: 2,
  199. }]
  200. },
  201. options: {
  202. maintainAspectRatio: false,
  203. }
  204. });
  205. }
  206. /*
  207. * 임상증상 탭 처리
  208. */
  209. function handleSymptomData() {
  210. if ($("input:checkbox[id='etcCheck']").is(":checked") && !$("#etcContent").val().trim()) {
  211. alert("기타 증상이 체크되었습니다. 내용을 입력해 주세요.");
  212. $("#etcContent").val("");
  213. return;
  214. }
  215. var checkedCount = ($("#defaultModalPrimary_2 input[type='checkbox']:checked").length);
  216. if (checkedCount === 0) {
  217. alert("증상을 체크해 주세요.");
  218. return;
  219. }
  220. var symptomObject = {
  221. patientIdx: ${patientIdx},
  222. coughCheck: $("input:checkbox[id='coughCheck']").is(":checked") ? "Y" : "N",
  223. dyspneaCheck: $("input:checkbox[id='dyspneaCheck']").is(":checked") ? "Y" : "N",
  224. coldFitCheck: $("input:checkbox[id='coldFitCheck']").is(":checked") ? "Y" : "N",
  225. musclePainCheck: $("input:checkbox[id='musclePainCheck']").is(":checked") ? "Y" : "N",
  226. headacheCheck: $("input:checkbox[id='headacheCheck']").is(":checked") ? "Y" : "N",
  227. soreThroatCheck: $("input:checkbox[id='soreThroatCheck']").is(":checked") ? "Y" : "N",
  228. smellPalateCheck: $("input:checkbox[id='smellPalateCheck']").is(":checked") ? "Y" : "N",
  229. fatigueCheck: $("input:checkbox[id='fatigueCheck']").is(":checked") ? "Y" : "N",
  230. appetiteLossCheck: $("input:checkbox[id='appetiteLossCheck']").is(":checked") ? "Y" : "N",
  231. sputumCheck: $("input:checkbox[id='sputumCheck']").is(":checked") ? "Y" : "N",
  232. ocinCheck: $("input:checkbox[id='ocinCheck']").is(":checked") ? "Y" : "N",
  233. vomitingCheck: $("input:checkbox[id='vomitingCheck']").is(":checked") ? "Y" : "N",
  234. diarrheaCheck: $("input:checkbox[id='diarrheaCheck']").is(":checked") ? "Y" : "N",
  235. dizzinessCheck: $("input:checkbox[id='dizzinessCheck']").is(":checked") ? "Y" : "N",
  236. noseCheck: $("input:checkbox[id='noseCheck']").is(":checked") ? "Y" : "N",
  237. etcCheck: $("input:checkbox[id='etcCheck']").is(":checked") ? "Y" : "N",
  238. etcContent: $("#etcContent").val(),
  239. recordedByName: "${data._SES_NAME}",
  240. recordedById: "${data._SES_ID}",
  241. }
  242. createSymptomData(symptomObject);
  243. $("#defaultModalPrimary_2 input[type='checkbox']:checked").prop("checked", false);
  244. $("#etcContent").val("");
  245. $("#defaultModalPrimary_2").modal("hide");
  246. }
  247. function createSymptomData(symptomObject) {
  248. $.ajax({
  249. url : "./api/symptomData",
  250. data : symptomObject,
  251. method : "POST",
  252. dataType : "json",
  253. success : function( datas ){
  254. retrieveSymptomData();
  255. },
  256. error : function(error){
  257. alert(error.message);
  258. }
  259. }).done( function(){
  260. });
  261. }
  262. function retrieveSymptomData() {
  263. var params = {patientIdx: ${patientIdx}};
  264. $.ajax({
  265. url : "./api/symptomDatas",
  266. data : params,
  267. method : "GET",
  268. dataType : "json",
  269. success : function( datas ){
  270. var html = "<tr><td colspan=18>데이터가 없습니다.</td></tr>" ;
  271. var checkSymbol = '<i class="mdi mdi-check-bold"></i>';
  272. if (datas.length > 0) {
  273. html = "";
  274. contents = datas.forEach(d => {
  275. html += "<tr>";
  276. html += "<th>" + d.createDate + "</th>";
  277. html += "<td>" + (d.coughCheck === "Y" ? checkSymbol : "-") + "</td>";
  278. html += "<td>" + (d.dyspneaCheck === "Y" ? checkSymbol : "-") + "</td>";
  279. html += "<td>" + (d.coldFitCheck === "Y" ? checkSymbol : "-") + "</td>";
  280. html += "<td>" + (d.musclePainCheck === "Y" ? checkSymbol : "-") + "</td>";
  281. html += "<td>" + (d.headacheCheck === "Y" ? checkSymbol : "-") + "</td>";
  282. html += "<td>" + (d.soreThroatCheck === "Y" ? checkSymbol : "-") + "</td>";
  283. html += "<td>" + (d.smellPalateCheck === "Y" ? checkSymbol : "-") + "</td>";
  284. html += "<td>" + (d.fatigueCheck === "Y" ? checkSymbol : "-") + "</td>";
  285. html += "<td>" + (d.appetiteLossCheck === "Y" ? checkSymbol : "-") + "</td>";
  286. html += "<td>" + (d.sputumCheck === "Y" ? checkSymbol : "-") + "</td>";
  287. html += "<td>" + (d.ocinCheck === "Y" ? checkSymbol : "-") + "</td>";
  288. html += "<td>" + (d.vomitingCheck === "Y" ? checkSymbol : "-") + "</td>";
  289. html += "<td>" + (d.diarrheaCheck === "Y" ? checkSymbol : "-") + "</td>";
  290. html += "<td>" + (d.dizzinessCheck === "Y" ? checkSymbol : "-") + "</td>";
  291. html += "<td>" + (d.noseCheck === "Y" ? checkSymbol : "-") + "</td>";
  292. html += "<td>" + (d.etcCheck === "Y" ? d.etcContent : "-") + "</td>";
  293. html += "<td>" + d.recordedByName + "</td>";
  294. html += "</tr>";
  295. });
  296. };
  297. $("#symptomDataTable > tbody").html(html);
  298. },
  299. error : function(error){
  300. alert(error.message);
  301. }
  302. }).done( function(){
  303. });
  304. }
  305. /*
  306. * 메모 탭 처리
  307. */
  308. function handleMemoData() {
  309. var memoContent = $("#memoContent").val().trim();
  310. if (!memoContent) {
  311. alert("메모 내용을 입력해 주세요.");
  312. $("#memoContent").val("");
  313. return;
  314. }
  315. createMemoData(memoContent);
  316. $("#memoContent").val("");
  317. $("#defaultModalPrimaryMemo").modal("hide");
  318. }
  319. function createMemoData(memoContent) {
  320. $.ajax({
  321. url : "./api/memoData",
  322. data : {patientIdx:${patientIdx}, contents:memoContent, recordedByName:"${data._SES_NAME}", recordedById:"${data._SES_ID}"},
  323. method : "POST",
  324. dataType : "json",
  325. success : function( datas ){
  326. retrieveMemoData();
  327. },
  328. error : function(error){
  329. alert(error.message);
  330. }
  331. }).done( function(){
  332. });
  333. }
  334. function retrieveMemoData() {
  335. var params = {patientIdx: ${patientIdx}};
  336. $.ajax({
  337. url : "./api/memoDatas",
  338. data : params,
  339. method : "GET",
  340. dataType : "json",
  341. success : function( datas ){
  342. var html = "<tr><td colspan=3>데이터가 없습니다.</td></tr>" ;
  343. if (datas.length > 0) {
  344. html = "";
  345. contents = datas.forEach(d => {
  346. html += "<tr>";
  347. html += "<td>" + d.createDate + "</td>";
  348. html += "<td><pre>" + d.contents + "</pre></td>";
  349. html += "<td>" + d.recordedByName + "</td>";
  350. html += "</tr>";
  351. });
  352. };
  353. $("#memoDataTable > tbody").html(html);
  354. },
  355. error : function(error){
  356. alert(error.message);
  357. }
  358. }).done( function(){
  359. });
  360. }
  361. $(document).ready(function() {
  362. // 최초 로드시 phrData 체온이 로드됨. 해당 데이터 차트 그려줌.
  363. var datas = [];
  364. <c:forEach var="phr" items="${phrItems}" varStatus="status">
  365. datas.push({createDate: "${phr.createDate}", phrValue: "${phr.phrValue}"});
  366. </c:forEach>
  367. drawPhrChart(datas, "체온");
  368. // 상단 환자 정보 영역 토글 이벤트
  369. $('.toggle .card-header').click(function () {
  370. $('.toggle .card-header a.toggleBtn').toggleClass('active');
  371. $('.toggle .user-info').toggleClass('active');
  372. })
  373. // 탭 클릭 이벤트
  374. $(document).on('click','.tab-item',function(){
  375. var targetTab = $(this).attr('tabindex');
  376. $('.tab-item').removeClass('active');
  377. $('.tab').removeClass('in');
  378. $(this).addClass('active');
  379. $(targetTab).addClass('in');
  380. if (targetTab==="#tabPhr") {
  381. retrievePhrData();
  382. }
  383. else if (targetTab==="#tabSymptom") {
  384. retrieveSymptomData();
  385. }
  386. else if (targetTab==="#tabMemo") {
  387. retrieveMemoData();
  388. }
  389. });
  390. // phrData 기록 추가 클릭 이벤트
  391. $(document).on('click','[data-target="#defaultModalPrimary_1"]',function(){
  392. var selectData = $('#phrTypeSelect').find('option:selected').val();
  393. var healthInfoHTML = '';
  394. if(selectData == 'temperature'){
  395. healthInfoHTML += '<th>체온</th>';
  396. healthInfoHTML += '<td>';
  397. healthInfoHTML += ' <div class="form-group mb-xl-0">';
  398. healthInfoHTML += ' <input id="phrValue" class="form-control" type="number" placeholder="체온 입력">';
  399. healthInfoHTML += ' </div>';
  400. healthInfoHTML += '</td>';
  401. }
  402. else if(selectData == 'bloodPressure'){
  403. healthInfoHTML += '<th>혈압</th>';
  404. healthInfoHTML += '<td>';
  405. healthInfoHTML += ' <div class="form-group mb-xl-0">';
  406. healthInfoHTML += ' <input id="phrValueSystolic" class="form-control mb-2" type="number" placeholder="수축기 혈압 입력">';
  407. healthInfoHTML += ' <input id="phrValueDiastolic" class="form-control mb-2" type="number" placeholder="이완기 혈압 입력">';
  408. healthInfoHTML += ' </div>';
  409. healthInfoHTML += '</td>';
  410. }
  411. else if(selectData == 'pulseRate'){
  412. healthInfoHTML += '<th>맥박</th>';
  413. healthInfoHTML += '<td>';
  414. healthInfoHTML += ' <div class="form-group mb-xl-0">';
  415. healthInfoHTML += ' <input id="phrValue" class="form-control" type="number" placeholder="맥박 입력">';
  416. healthInfoHTML += ' </div>';
  417. healthInfoHTML += '</td>';
  418. }
  419. else if(selectData == 'oxygenSaturation'){
  420. healthInfoHTML += '<th>산소포화도</th>';
  421. healthInfoHTML += '<td>';
  422. healthInfoHTML += ' <div class="form-group mb-xl-0">';
  423. healthInfoHTML += ' <input id="phrValue" class="form-control" type="text" placeholder="산소포화도 입력">';
  424. healthInfoHTML += ' </div>';
  425. healthInfoHTML += '</td>';
  426. }
  427. else if(selectData == 'bloodSugar'){
  428. healthInfoHTML += '<th>혈당</th>';
  429. healthInfoHTML += '<td>';
  430. healthInfoHTML += ' <div class="form-group mb-xl-0">';
  431. healthInfoHTML += ' <input id="phrValue" class="form-control" type="text" placeholder="혈당 입력">';
  432. healthInfoHTML += ' </div>';
  433. healthInfoHTML += '</td>';
  434. }
  435. else {
  436. }
  437. $('.healthInfo').html(healthInfoHTML);
  438. setTimeout(function (){
  439. $('.healthInfo').find('.form-group input:first-child').focus();
  440. }, 500);
  441. });
  442. });
  443. </script>
  444. </head>
  445. <body>
  446. <form id="nonface" name="nonface" action="https://lemon.medihere.com/app/vc">
  447. </form>
  448. <div class="modal fade" id="defaultModalPrimary_1" tabindex="-1" role="dialog" aria-hidden="true">
  449. <div class="modal-dialog modal-sm" role="document">
  450. <div class="modal-content">
  451. <div class="modal-header">
  452. <h5 class="modal-title">건강정보 입력</h5>
  453. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
  454. aria-hidden="true">&times;</span> </button>
  455. </div>
  456. <div class="modal-body m-3">
  457. <table class="table mobile-table">
  458. <colgroup>
  459. <col style="width: 30%">
  460. <col style="width: 70%">
  461. </colgroup>
  462. <tr>
  463. <th>기록자</th>
  464. <td>
  465. <div class="form-group mb-xl-0">
  466. <input class="form-control" type="text" value="${data._SES_NAME}" readonly>
  467. </div>
  468. </td>
  469. </tr>
  470. <tr class="healthInfo">
  471. <!-- 컨텐츠 동적 생성 -->
  472. </tr>
  473. </table>
  474. </div>
  475. <div class="modal-footer">
  476. <button type="button" class="btn btn-outline-primary" data-dismiss="modal">취소</button>
  477. <button type="button" class="btn btn-primary" onclick="handlePhrData()">등록</button>
  478. </div>
  479. </div>
  480. </div>
  481. </div>
  482. <div class="modal fade" id="defaultModalPrimary_2" tabindex="-1" role="dialog" aria-hidden="true">
  483. <div class="modal-dialog" role="document">
  484. <div class="modal-content">
  485. <div class="modal-header">
  486. <h5 class="modal-title">임상증상 입력</h5>
  487. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
  488. aria-hidden="true">&times;</span> </button>
  489. </div>
  490. <div class="modal-body m-3">
  491. <table class="table mobile-table">
  492. <colgroup>
  493. <col style="width: 30%">
  494. <col style="width: 70%">
  495. </colgroup>
  496. <tr>
  497. <th>기록자</th>
  498. <td>
  499. <div class="form-group mb-xl-0">
  500. <input class="form-control" type="text" value="${data._SES_NAME}" readonly>
  501. </div>
  502. </td>
  503. </tr>
  504. <tr>
  505. <th>임상증상</th>
  506. <td>
  507. <div class="form-group mb-xl-0">
  508. <label class="form-check form-check-inline">
  509. <input id="coughCheck" class="form-check-input" type="checkbox">
  510. <span class="form-check-label">
  511. 기침
  512. </span>
  513. </label>
  514. <label class="form-check form-check-inline">
  515. <input id="dyspneaCheck" class="form-check-input" type="checkbox">
  516. <span class="form-check-label">
  517. 호흡곤란
  518. </span>
  519. </label>
  520. <label class="form-check form-check-inline">
  521. <input id="coldFitCheck" class="form-check-input" type="checkbox">
  522. <span class="form-check-label">
  523. 오한
  524. </span>
  525. </label>
  526. <label class="form-check form-check-inline">
  527. <input id="musclePainCheck" class="form-check-input" type="checkbox">
  528. <span class="form-check-label">
  529. 근육통
  530. </span>
  531. </label>
  532. <label class="form-check form-check-inline">
  533. <input id="headacheCheck" class="form-check-input" type="checkbox">
  534. <span class="form-check-label">
  535. 두통
  536. </span>
  537. </label>
  538. <label class="form-check form-check-inline">
  539. <input id="soreThroatCheck" class="form-check-input" type="checkbox">
  540. <span class="form-check-label">
  541. 인후통
  542. </span>
  543. </label>
  544. <label class="form-check form-check-inline">
  545. <input id="smellPalateCheck" class="form-check-input" type="checkbox">
  546. <span class="form-check-label">
  547. 후각/미각 손실
  548. </span>
  549. </label>
  550. <label class="form-check form-check-inline">
  551. <input id="fatigueCheck" class="form-check-input" type="checkbox">
  552. <span class="form-check-label">
  553. 피로
  554. </span>
  555. </label>
  556. <label class="form-check form-check-inline">
  557. <input id="appetiteLossCheck" class="form-check-input" type="checkbox">
  558. <span class="form-check-label">
  559. 식욕감소
  560. </span>
  561. </label>
  562. <label class="form-check form-check-inline">
  563. <input id="sputumCheck" class="form-check-input" type="checkbox">
  564. <span class="form-check-label">
  565. 가래
  566. </span>
  567. </label>
  568. <label class="form-check form-check-inline">
  569. <input id="ocinCheck" class="form-check-input" type="checkbox">
  570. <span class="form-check-label">
  571. 오심
  572. </span>
  573. </label>
  574. <label class="form-check form-check-inline">
  575. <input id="vomitingCheck" class="form-check-input" type="checkbox">
  576. <span class="form-check-label">
  577. 구토
  578. </span>
  579. </label>
  580. <label class="form-check form-check-inline">
  581. <input id="diarrheaCheck" class="form-check-input" type="checkbox">
  582. <span class="form-check-label">
  583. 설사
  584. </span>
  585. </label>
  586. <label class="form-check form-check-inline">
  587. <input id="dizzinessCheck" class="form-check-input" type="checkbox">
  588. <span class="form-check-label">
  589. 어지러움
  590. </span>
  591. </label>
  592. <label class="form-check form-check-inline">
  593. <input id="noseCheck" class="form-check-input" type="checkbox">
  594. <span class="form-check-label">
  595. 콧물/코막힘
  596. </span>
  597. </label>
  598. <label class="form-check form-check-inline">
  599. <input id="etcCheck" class="form-check-input" type="checkbox">
  600. <span class="form-check-label">
  601. 기타 ( <input type="text" id="etcContent" class="form-control form-control-sm w150" value="" placeholder="증상 내용"> )
  602. </span>
  603. </label>
  604. </div>
  605. </td>
  606. </tr>
  607. </table>
  608. </div>
  609. <div class="modal-footer">
  610. <button type="button" class="btn btn-outline-primary" data-dismiss="modal">취소</button>
  611. <button type="button" class="btn btn-primary" onclick="handleSymptomData()">등록</button>
  612. </div>
  613. </div>
  614. </div>
  615. </div>
  616. <div class="modal fade" id="defaultModalPrimaryMemo" tabindex="-1" role="dialog" aria-hidden="true">
  617. <div class="modal-dialog" role="document">
  618. <div class="modal-content">
  619. <div class="modal-header">
  620. <h5 class="modal-title">의료진 메모 입력</h5>
  621. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
  622. aria-hidden="true">&times;</span> </button>
  623. </div>
  624. <div class="modal-body m-3">
  625. <table class="table mobile-table">
  626. <colgroup>
  627. <col style="width: 20%">
  628. <col style="width: 80%">
  629. </colgroup>
  630. <tr>
  631. <th>작성자</th>
  632. <td>
  633. <div class="form-row">
  634. <input type="text" name="" class="form-control" placeholder="이름을 입력하세요" value="${data._SES_NAME}" readonly>
  635. </div>
  636. </td>
  637. </tr>
  638. <tr>
  639. <th>내용</th>
  640. <td>
  641. <div class="form-row">
  642. <textarea id="memoContent" class="form-control" rows="2" placeholder="내용을 입력하세요"></textarea>
  643. </div>
  644. </td>
  645. </tr>
  646. </table>
  647. </div>
  648. <div class="modal-footer">
  649. <button type="button" class="btn btn-outline-primary" data-dismiss="modal">취소</button>
  650. <button type="button" class="btn btn-primary" onclick="handleMemoData()">등록</button>
  651. </div>
  652. </div>
  653. </div>
  654. </div>
  655. <div class="wrapper">
  656. <jsp:include page="${data._INCLUDE}/sidebar.jsp"></jsp:include>
  657. <div class="main">
  658. <jsp:include page="${data._INCLUDE}/top.jsp"></jsp:include>
  659. <main class="content">
  660. <form id="hiddenForm">
  661. <input type="hidden" id="pId" name="pId" value="<c:out value="${info.id}" />">
  662. <input type="hidden" id="pName" name="pName" value="<c:out value="${info.patientName}" />">
  663. <input type="hidden" id="roomId" name="roomId" value="<c:out value="${info.roomNumber}" />">
  664. </form>
  665. <div class="container-fluid p-0">
  666. <div class="row">
  667. <div class="col-12 col-lg-6">
  668. <h1 class="h3 mb-3">건강정보 조회</h1>
  669. </div>
  670. <div class="col-12 col-lg-6 text-right">
  671. <nav aria-label="breadcrumb">
  672. <ol class="breadcrumb">
  673. <li class="breadcrumb-item"><a href="javscript:;">Home</a></li>
  674. <li class="breadcrumb-item">진료관리</li>
  675. <li class="breadcrumb-item active">건강정보 조회</li>
  676. </ol>
  677. </nav>
  678. </div>
  679. </div>
  680. <div class="row">
  681. <div class="col-12">
  682. <div class="card toggle">
  683. <div class="card-header">
  684. <h1 class="h4"><c:out value="${info.patientName}" /> 환자 기본정보</h1>
  685. <a href="#" class="toggleBtn">메뉴</a>
  686. </div>
  687. <div class="card-body">
  688. <table class="table mobile-table user-info">
  689. <colgroup>
  690. <col style="width: 15%">
  691. <col style="width: 35%">
  692. <col style="width: 15%">
  693. <col style="width: 35%">
  694. </colgroup>
  695. <tr>
  696. <th>치료센터</th>
  697. <td><c:out value="${info.centerName}" /></td>
  698. <th>입소일시</th>
  699. <td colspan="2">
  700. <c:out value="${info.hospitalizationDate}" />
  701. </td>
  702. </tr>
  703. <tr>
  704. <th>병동 번호</th>
  705. <td>
  706. <c:out value="${info.wardNumber}동 ${info.roomNumber}호" />
  707. </td>
  708. <th>이름</th>
  709. <td>
  710. <c:out value="${info.patientName}" />
  711. </td>
  712. </tr>
  713. <tr>
  714. <th>성별</th>
  715. <td>
  716. <c:if test="${info.gender eq 'M'}">
  717. </c:if>
  718. <c:if test="${info.gender ne 'M'}">
  719. </c:if>
  720. </td>
  721. <th>생년월일</th>
  722. <td>
  723. <c:out value="${info.jumin}" />
  724. </td>
  725. </tr>
  726. <tr>
  727. <th>연락처</th>
  728. <td>
  729. <c:out value="${info.patientPhone}" />
  730. </td>
  731. <th>보호자 연락처</th>
  732. <td>
  733. <c:out value="${info.guardianPhone}" />
  734. </td>
  735. </tr>
  736. <tr>
  737. <th>증상시작일</th>
  738. <td>
  739. <c:out value="${info.symptomStartDate}" />
  740. </td>
  741. <th>확진일</th>
  742. <td>
  743. <c:out value="${info.confirmationDate}" />
  744. </td>
  745. </tr>
  746. <tr>
  747. <th>격리해제 예정일</th>
  748. <td>
  749. <c:out value="${info.disisolationDate}" />
  750. </td>
  751. <th>상태</th>
  752. <td>
  753. <c:if test="${info.state eq 'H'}">
  754. 입소
  755. </c:if>
  756. <c:if test="${info.state eq 'D'}">
  757. 퇴소
  758. </c:if>
  759. <c:if test="${info.state eq 'T'}">
  760. 지정병원 이송
  761. </c:if>
  762. <c:if test="${info.state eq 'E'}">
  763. 기타
  764. </c:if>
  765. </td>
  766. </tr>
  767. <tr>
  768. <th>최근 약복용<br />(최근 24시간 이내)</th>
  769. <td>
  770. <c:choose>
  771. <c:when test="${info.drugYn eq 'Y'}">
  772. 복용 (<c:out value="${info.drugContent}" />)
  773. </c:when>
  774. <c:otherwise>
  775. 미복용
  776. </c:otherwise>
  777. </c:choose>
  778. </td>
  779. <th>임신</th>
  780. <td>
  781. <c:choose>
  782. <c:when test="${info.pregnancyStatus eq 'N'}">
  783. </c:when>
  784. <c:otherwise>
  785. 유 (<c:out value="${info.pregnancyWeek}주차" />)
  786. </c:otherwise>
  787. </c:choose>
  788. </td>
  789. </tr>
  790. <tr>
  791. <th rowspan="2">기저질환 여부</th>
  792. <td colspan="3">
  793. <c:choose>
  794. <c:when test="${info.basalDiseaseYn eq 'Y'}">
  795. </c:when>
  796. <c:otherwise>
  797. </c:otherwise>
  798. </c:choose>
  799. </td>
  800. </tr>
  801. <tr>
  802. <td colspan="3">
  803. <%-- <c:if test="${info.highBloodPressureCheck eq 'Y'}">, 고혈압</c:if> --%>
  804. <%-- <c:if test="${info.lowBloodPressureCheck eq 'Y'}">, 저혈압</c:if> --%>
  805. <%-- <c:if test="${info.organTransplantCheck eq 'Y'}">, 장기이식(신장, 간 등)</c:if> --%>
  806. <%-- <c:if test="${info.diabetesCheck eq 'Y'}">, 당뇨</c:if> --%>
  807. <%-- <c:if test="${info.respiratoryDiseaseCheck eq 'Y'}">, 호흡기질환</c:if> --%>
  808. <%-- <c:if test="${info.immunologicalDiseaseCheck eq 'Y'}">, 면역질환(류마티스 등)</c:if> --%>
  809. <%-- <c:if test="${info.heartDisease eq 'Y'}">, 심장질환</c:if> --%>
  810. <%-- <c:if test="${info.liverDisease eq 'Y'}">, 간질환</c:if> --%>
  811. <%-- <c:if test="${info.operation eq 'Y'}">, 수술(<c:out value="${info.operationContent}" />)</c:if> --%>
  812. <%-- <c:if test="${info.allergyCheck eq 'Y'}">, 알레르기</c:if> --%>
  813. <%-- <c:if test="${info.kidneyDisease eq 'Y'}">, 신장질환</c:if> --%>
  814. <%-- <c:if test="${info.cancerCheck eq 'Y'}">, 암(<c:out value="${info.cancerName}" />)</c:if> --%>
  815. <%-- <c:if test="${info.ectCheckDisease eq 'Y'}">, 기타(<c:out value="${info.etcContentDisease}" />)</c:if> --%>
  816. <c:out value="${disease}" />
  817. </td>
  818. </tr>
  819. <tr>
  820. <th>현재 증상<br />(입소 당시)</th>
  821. <td colspan="3">
  822. <%-- <c:if test="${info.feverCheck eq 'Y'}">, 열감(열나는느낌)</c:if> --%>
  823. <%-- <c:if test="${info.coughCheck eq 'Y'}">, 기침</c:if> --%>
  824. <%-- <c:if test="${info.colic eq 'Y'}">, 복통(배아픔)</c:if> --%>
  825. <%-- <c:if test="${info.coldFitCheck eq 'Y'}">, 오한(추운 느낌)</c:if> --%>
  826. <%-- <c:if test="${info.sputumCheck eq 'Y'}">, 가래</c:if> --%>
  827. <%-- <c:if test="${info.ocinCheck eq 'Y'}">, 오심(구역질)</c:if> --%>
  828. <%-- <c:if test="${info.chestPain eq 'Y'}">, 흉통</c:if> --%>
  829. <%-- <c:if test="${info.noseCheck eq 'Y'}">, 콧물 또는 코 막힘</c:if> --%>
  830. <%-- <c:if test="${info.vomitingCheck eq 'Y'}">, 구토</c:if> --%>
  831. <%-- <c:if test="${info.musclePainCheck eq 'Y'}">, 근육통(몸살)</c:if> --%>
  832. <%-- <c:if test="${info.soreThroatCheck eq 'Y'}">, 인후통(목 아픔)</c:if> --%>
  833. <%-- <c:if test="${info.diarrheaCheck eq 'Y'}">, 설사</c:if> --%>
  834. <%-- <c:if test="${info.headacheCheck eq 'Y'}">, 두통(머리아픔)</c:if> --%>
  835. <%-- <c:if test="${info.dyspneaCheck eq 'Y'}">, 호흡곤란(숨가쁨)</c:if> --%>
  836. <%-- <c:if test="${info.fatigueCheck eq 'Y'}">, 권태감(피곤함)</c:if> --%>
  837. <%-- <c:if test="${info.ectCheckSymptom eq 'Y'}">, 기타(<c:out value="${info.etcContentSymptom}" />)</c:if> --%>
  838. <c:out value="${symptom}" />
  839. </td>
  840. </tr>
  841. <tr>
  842. <th>
  843. 체온
  844. </th>
  845. <td>
  846. <c:out value="우측 ${info.feverRight}℃ / 좌측 ${info.feverRight}℃" />
  847. </td>
  848. <th>
  849. 맥박수
  850. </th>
  851. <td>
  852. <c:out value="${info.pulseRate} 회/분" />
  853. </td>
  854. </tr>
  855. <tr>
  856. <th>
  857. 호흡수
  858. </th>
  859. <td>
  860. <c:out value="${info.respirationRate} 회/분" />
  861. </td>
  862. <th>
  863. 혈압
  864. </th>
  865. <td>
  866. <c:out value="수축기 ${info.bloodPressureLevelCon} mmHg / 이완기 ${info.bloodPressureLevelRel} mmHg" />
  867. </td>
  868. </tr>
  869. <tr>
  870. <th>
  871. 산소포화도
  872. </th>
  873. <td colspan="3">
  874. <c:out value="${info.oxygenSaturation} %" />
  875. </td>
  876. </tr>
  877. </table>
  878. <div class="row mt-3">
  879. <div class="col-12">
  880. <div class="text-right">
  881. <button class="btn btn-outline-success" onclick="nonFaceStart();">비대면 진료</button>
  882. <button class="btn btn-primary" onclick="location.href='./state'">목록</button>
  883. </div>
  884. </div>
  885. </div>
  886. </div>
  887. </div>
  888. </div>
  889. </div>
  890. <div class="row">
  891. <div class="col-12">
  892. <div class="card">
  893. <ul class="tab-nav">
  894. <li class="tab-item active" tabindex="#tabPhr">건강정보이력</li>
  895. <li class="tab-item" tabindex="#tabSymptom">임상증상</li>
  896. <li class="tab-item" tabindex="#tabMemo">의료진 메모</li>
  897. </ul>
  898. <div id="tabPhr" class="tab in">
  899. <div class="card-header">
  900. <h1 class="h4">
  901. - 건강정보 조회 <label> <select class="custom-select ml-1 form-control" id=phrTypeSelect name="inputState" onchange="retrievePhrData()">
  902. <option value="temperature" selected>체온</option>
  903. <option value="bloodPressure">혈압</option>
  904. <option value="pulseRate">맥박</option>
  905. <option value="oxygenSaturation">산소포화도</option>
  906. <option value="bloodSugar">혈당</option>
  907. </select>
  908. </label> <label class="ml-1">
  909. <button type="button" class="btn btn-primary ml-2" data-toggle="modal" data-target="#defaultModalPrimary_1">기록추가</button>
  910. </label>
  911. </h1>
  912. </div>
  913. <div class="card-body">
  914. <div class="graph-area mb-4" style="height:300px;">
  915. <canvas id="phrChart"></canvas>
  916. </div>
  917. <div class="table-responsive">
  918. <table id="phrDataTable" class="table data-table text-center">
  919. <thead>
  920. <tr>
  921. <th>기록일시</th>
  922. <th>체온</th>
  923. <th>기록자</th>
  924. </tr>
  925. </thead>
  926. <tbody>
  927. <c:choose>
  928. <c:when test="${phrTotal > 0}">
  929. <c:forEach var="i" begin="1" end="${phrTotal}">
  930. <tr>
  931. <td><c:out value="${phrItems[phrTotal-i].createDate}" /></td>
  932. <td><span class="${phrItems[phrTotal-i].isWarning ? 'text-danger' : ''}"><c:out value="${phrItems[phrTotal-i].phrValue} ℃" /></span></td>
  933. <td><c:out value="${phrItems[phrTotal-i].recordedByName}" /></td>
  934. </tr>
  935. </c:forEach>
  936. </c:when>
  937. <c:otherwise>
  938. <tr>
  939. <td colspan=3>데이터가 없습니다.</td>
  940. </tr>
  941. </c:otherwise>
  942. </c:choose>
  943. </tbody>
  944. </table>
  945. </div>
  946. </div>
  947. </div>
  948. <div id="tabSymptom" class="tab">
  949. <div class="card-header">
  950. <h1 class="h4">
  951. - 임상증상 <label class="ml-1">
  952. <button type="button" class="btn btn-primary ml-2" data-toggle="modal" data-target="#defaultModalPrimary_2">증상추가</button>
  953. </label>
  954. </h1>
  955. </div>
  956. <div class="card-body">
  957. <div class="table-responsive">
  958. <table id="symptomDataTable" class="table data-table text-center">
  959. <thead>
  960. <tr>
  961. <th>기록일시</th>
  962. <th>기침</th>
  963. <th>호흡곤란</th>
  964. <th>오한</th>
  965. <th>근육통</th>
  966. <th>두통</th>
  967. <th>인후통</th>
  968. <th>후각/미각 손실</th>
  969. <th>피로</th>
  970. <th>식용감소</th>
  971. <th>가래</th>
  972. <th>오심</th>
  973. <th>구토</th>
  974. <th>설사</th>
  975. <th>어지러움</th>
  976. <th>콧물/코막힘</th>
  977. <th>기타증상</th>
  978. <th>기록자</th>
  979. </tr>
  980. </thead>
  981. <tbody>
  982. </tbody>
  983. </table>
  984. </div>
  985. </div>
  986. </div>
  987. <div id="tabMemo" class="tab">
  988. <div class="card-header">
  989. <h1 class="h4">
  990. - 의료진 메모
  991. <button type="button" class="btn btn-primary ml-2" data-toggle="modal" data-target="#defaultModalPrimaryMemo">메모추가</button>
  992. </h1>
  993. </div>
  994. <div class="card-body">
  995. <div class="table-responsive">
  996. <table id="memoDataTable" class="table data-table text-center">
  997. <thead>
  998. <tr>
  999. <th>기록일시</th>
  1000. <th>내용</th>
  1001. <th>기록자</th>
  1002. </tr>
  1003. </thead>
  1004. <tbody>
  1005. </tbody>
  1006. </table>
  1007. </div>
  1008. </div>
  1009. </div>
  1010. </div>
  1011. </div>
  1012. </div>
  1013. </div>
  1014. </main>
  1015. <jsp:include page="${data._INCLUDE}/footer.jsp"></jsp:include>
  1016. </div>
  1017. </div>
  1018. </body>
  1019. </html>