new.jsp 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992
  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  2. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  3. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
  4. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  5. <jsp:include page="${data._INCLUDE}/header.jsp"></jsp:include>
  6. <script>
  7. function patientNewInit() {
  8. if( $( "#basalN" ).is( ":checked" ) ) {
  9. $( "td.basalDisease input" ).prop( "disabled", true );
  10. }
  11. $( "label.label-readonly-check" ).each( function( i, v ){
  12. var $this = $(v);
  13. var checkbox = $this.find( "input[type='checkbox']" );
  14. var textbox = $this.find( "input[type='text']" );
  15. if( !checkbox.is(":checked") ){
  16. textbox.prop( "readonly", true );
  17. }
  18. });
  19. };
  20. function setEventHandler(){
  21. //체크yes시 content입력 처리
  22. $( "label.label-readonly-check input[type='checkbox']" ).on( "click", function(){
  23. var $this = $( this );
  24. $this.closest( "label" ).find( "input[type='text']" ).prop( "readonly", $this.is( ":checked" ) === false );
  25. if( $this.is( ":checked" ) === false ) {
  26. $this.closest( "label" ).find( "input[type='text']" ).val( "" );
  27. } else {
  28. $this.closest( "label" ).find( "input[type='text']" ).focus();
  29. };
  30. });
  31. //기저질환유무 처리
  32. $( "input[name='basalDiseaseYn']" ).on( "click", function(){
  33. var $this = $( this );
  34. if( $this.val() == "Y" ){
  35. patientNewInit();
  36. $( ".basalDisease input" ).prop( "disabled", false );
  37. } else {
  38. $( "td.basalDisease input" ).prop( "disabled", true );
  39. $( "td.basalDisease input[type='checkbox']" ).prop( "checked", false );
  40. $( "td.basalDisease input[type='text']" ).val( "" );
  41. }
  42. });
  43. $( "input[name='pregnancyStatus']" ).on( "click", function(){
  44. var $this = $( this );
  45. if ($this.val() == "Y") {
  46. $("#pregnancyWeek").prop("disabled", false);
  47. } else {
  48. $("#pregnancyWeek").prop("disabled", true);
  49. $("#pregnancyWeek").val("");
  50. }
  51. });
  52. //입소일시
  53. // $( ".hospitalizationDate" ).on( "change", function(){
  54. // console.log("asdfasdf");
  55. // var ymd = $( "#hospitalizationDateYmd" ).val();
  56. // // var hour = $( "#hospitalizationDateHour" ).val();
  57. // // var min = $( "#hospitalizationDateMin" ).val();
  58. // // hour = Number(hour) < 10 ? "0" + hour : hour;
  59. // // min = Number(min) < 10 ? "0" + min : min;
  60. // // $( "#hospitalizationDate" ).val( ymd + " " + hour + ":" + min + ":00" );
  61. // $( "#hospitalizationDate" ).val( ymd );
  62. // });
  63. //성별 남선택시 임신유무 고정
  64. $( "input[name='gender']" ).on( "click", function(){
  65. var gender = $( this ).val();
  66. console.log( gender );
  67. if( gender == "M" ) {
  68. $( "input[name='pregnancyStatus']:input[value='N']" ).prop( "checked", true );
  69. $( "input[name='pregnancyStatus']:input[value='Y']" ).prop( "disabled", true );
  70. $( "#pregnancyWeek" ).val( "" ).prop( "disabled", true );
  71. } else {
  72. $( "input[name='pregnancyStatus']:input[value='N']" ).prop( "checked", false );
  73. $( "input[name='pregnancyStatus']:input[value='Y']" ).prop( "disabled", false );
  74. }
  75. });
  76. // //생년월일
  77. // $( ".select-date" ).on( "change", function(){
  78. // var $this = $( this );
  79. // var wrap = $this.closest( "div.date" );
  80. // var dateYear = wrap.find( ".date-year" ).val();
  81. // var dateMonth = wrap.find( ".date-month" ).val();
  82. // var dateDay = wrap.find( ".date-day" ).val();
  83. // dateMonth = Number(dateMonth) < 10 ? "0" + dateMonth : dateMonth;
  84. // dateDay = Number(dateDay) < 10 ? "0" + dateDay : dateDay;
  85. // wrap.find( "input.error-box" ).val( dateYear + "-" + dateMonth + "-" + dateDay );
  86. // });
  87. // 퇴소예정일 기본 +10일 오늘날짜기준
  88. // var expectedDischargeDate = moment().add(10, 'days').format("YYYY-MM-DD");
  89. // $( "input[name='expectedDischargeDate']" ).val( expectedDischargeDate );
  90. // // *확진일 변경시 + 10일 퇴소예정일 변경
  91. // $("input[name='confirmationDate']").on( "change", function(){
  92. // var ten = moment( $(this).val() ).add(10, 'days').format("YYYY-MM-DD");
  93. // $("input[name='expectedDischargeDate']").val( ten );
  94. // })
  95. $( "input.date" ).daterangepicker({
  96. singleDatePicker : true,
  97. showDropdowns : true,
  98. locale : {
  99. format : "YYYY-MM-DD"
  100. },
  101. maxDate : new Date(),
  102. minDate : "1900-01-01"
  103. });
  104. $( "input.date-no-req" ).daterangepicker({
  105. singleDatePicker : true,
  106. showDropdowns : true,
  107. locale : {
  108. format : "YYYY-MM-DD"
  109. },
  110. autoUpdateInput: false,
  111. maxDate : new Date(),
  112. minDate : "1900-01-01"
  113. }).on( "apply.daterangepicker", function( ev, picker ) {
  114. $(this).val(picker.startDate.format('YYYY-MM-DD'));
  115. });
  116. $( "input.date-no-req2" ).daterangepicker({
  117. singleDatePicker : true,
  118. showDropdowns : true,
  119. locale : {
  120. format : "YYYY-MM-DD"
  121. },
  122. autoUpdateInput: false,
  123. minDate : new Date()
  124. }).on( "apply.daterangepicker", function( ev, picker ) {
  125. $(this).val(picker.startDate.format('YYYY-MM-DD'));
  126. });
  127. }
  128. $( function(){
  129. patientNewInit();
  130. setEventHandler();
  131. $( "#patientForm" ).validate({
  132. rules: {
  133. hospitalizationDate : {
  134. minDate : true,
  135. date : true,
  136. maxDate : true
  137. },
  138. patientPhone : {
  139. phoneValid : true
  140. },
  141. guardianPhone : {
  142. phoneValid : true
  143. },
  144. jumin : {
  145. minDate : true,
  146. date : true,
  147. maxDate : true
  148. },
  149. symptomStartDate : {
  150. minDate : true,
  151. maxDate : true,
  152. date : true
  153. },
  154. disisolationDate : {
  155. minDate : true,
  156. date : true,
  157. maxDate : true
  158. },
  159. expectedDischargeDate : {
  160. date : true
  161. },
  162. bloodPressureLevelCon : {
  163. number : true
  164. },
  165. bloodPressureLevelRel : {
  166. number : true
  167. },
  168. patientNumber : {
  169. number : true
  170. },
  171. },
  172. messages : {
  173. // jumin : "생년월일을 모두 선택해주세요",
  174. gender: "성별을 선택해주세요",
  175. // wardNumber : "동을 입력해주세요",
  176. roomNumber : "호실을 입력해주세요",
  177. hospitalizationDate : {
  178. date:"입소일시를 선택해주세요"
  179. },
  180. // residentNumberFront: "주민등록번호 앞 6자리를 입력해주세요",
  181. // residentNumberLast: "주민등록번호 뒷자리를 입력해주세요"
  182. },
  183. onkeyup: function( element, event ) {
  184. $( element ).valid();
  185. },
  186. onfocusout: function (element) {
  187. $( element ).val( $.trim( $( element ).val() ) );
  188. $( element ).valid();
  189. },
  190. errorPlacement: function(error, element) {
  191. if (element.attr("type") == "radio") {
  192. error.insertBefore(element);
  193. } else {
  194. error.insertAfter(element);
  195. }
  196. if( element.attr("name") == "residentNumberFront" || element.attr("name") == "residentNumberLast" ) {
  197. element.after(error);
  198. }
  199. },
  200. submitHandler: function(form) {
  201. if( $( "input[name='bloodPressureLevelCon']" ).val() != "" ) {
  202. if( $( "input[name='bloodPressureLevelRel']" ).val() == "" ) {
  203. alert( '혈압을 모두입력하세요' );
  204. return false;
  205. }
  206. }
  207. if( $( "input[name='bloodPressureLevelRel']" ).val() != "" ) {
  208. if( $( "input[name='bloodPressureLevelCon']" ).val() == "" ) {
  209. alert( '혈압을 모두입력하세요' );
  210. return false;
  211. }
  212. }
  213. if( $( "input[name='foreignerYn']" ).is(":checked") ) {
  214. if( $( "#foreignNumberCheck" ).val() == "false" ) {
  215. // alertBox({ txt : '외국인인 경우 고유식별정보를 입력해주세요' });
  216. var ff = $( "#foreignNumberFront" ).val();
  217. var fl = $( "#foreignNumberLast" ).val();
  218. var pn = $( "#passportNumber" ).val();
  219. if( $.trim( ff||fl||pn ) != '' ) {
  220. $( "#fModal" ).modal('show');
  221. fModalCheck();
  222. return false;
  223. }
  224. }
  225. } else {
  226. var rf = $('input[name="residentNumberFront"]').val();
  227. var rl = $('input[name="residentNumberLast"]').val();
  228. if( $.trim( rf || rl ) != '' ) {
  229. var fVal = $('input[name="residentNumberLast"]').val().substr(0,1);
  230. if( fVal >= 5 && fVal <= 8 ) {
  231. alertBox({ txt : '올바른 주민등록번호를 입력해주세요' });
  232. return false;
  233. }
  234. if( validRegistrationNumber( rf, rl ) != true ) {
  235. alertBox({ txt : '올바른 주민등록번호를 입력해주세요' });
  236. return false;
  237. }
  238. }
  239. }
  240. if( $( "#residentNumberLast" ).val() != "" ) {
  241. $( "#residentNumberLast" ).val( btoa( $( "#residentNumberLast" ).val() ) );
  242. }
  243. if( $( "#foreignNumberLast" ).val() != "" ) {
  244. $( "#foreignNumberLast" ).val( btoa( $( "#foreignNumberLast" ).val() ) );
  245. }
  246. if( $( "#passportNumber" ).val() != "" ) {
  247. $( "#passportNumber" ).val( btoa( $( "#passportNumber" ).val() ) );
  248. }
  249. $( "#submitBtn" ).prop( "disabled", true );
  250. form.submit();
  251. }
  252. });
  253. // 외국인 체크버튼 클릭 이벤트
  254. $(document).on('click','input.check-foreigner',function(){
  255. var foreigner = $(this).prop('checked');
  256. if(foreigner){
  257. $( ".k-input" ).hide();
  258. $( ".f-input" ).show();
  259. $('#fModal').modal('show');
  260. $( "div.f-input .f-txt" ).show();
  261. $( "div.f-input .f-val" ).show().text("");
  262. $('input[name="residentNumberFront"]').val("");
  263. $('input[name="residentNumberLast"]').val("");
  264. $('input.check-foreigner').not(this).prop('checked', true);
  265. $('input[name="patientPhone"]').val('010-0000-0000');
  266. } else {
  267. $( ".k-input" ).show();
  268. $( ".f-input" ).hide();
  269. $('input[name="residentNumberFront"]').val("");
  270. $('input[name="residentNumberLast"]').val("");
  271. $('input.check-foreigner').not(this).prop('checked', false);
  272. $('input[name="patientPhone"]').val('').prop('readonly',false);
  273. }
  274. fModalReset();
  275. });
  276. // $("#fModal").on('hidden.bs.modal', function () {
  277. // $( "#foreignNumberFront, #foreignNumberLast, #passportNumber" ).val("").prop( "disabled", false );
  278. // });
  279. $( "#foreignNumberFront, #foreignNumberLast" ).on( "keyup", function() {
  280. if( $("#foreignNumberFront").val().length >= 6 ) {
  281. $("#foreignNumberLast").focus();
  282. }
  283. if( $( this ).val() != "" ){
  284. $( "#passportNumber" ).prop("disabled", true);
  285. } else {
  286. if( $( "#foreignNumberFront" ).val() == "" && $( "#foreignNumberFront" ).val() == $( "#foreignNumberLast" ).val() ) {
  287. $( "#passportNumber" ).prop("disabled", false);
  288. }
  289. }
  290. });
  291. $( "#passportNumber" ).on( "keyup", function() {
  292. if( $( this ).val() != "" ){
  293. $( "#foreignNumberFront, #foreignNumberLast" ).prop("disabled", true);
  294. } else {
  295. if( $( "#passportNumber" ).val() == "" ) {
  296. $( "#foreignNumberFront, #foreignNumberLast" ).prop("disabled", false);
  297. }
  298. }
  299. });
  300. });
  301. function fModalReset(){
  302. $( "#foreignNumberCheck" ).val( "false" );
  303. $( "#foreignNumberFront, #foreignNumberLast, #passportNumber" ).val( "" ).prop('readonly', false).prop( "disabled", false );
  304. $( "span.f-val" ).hide().val("");
  305. $( "span.f-txt" ).show();
  306. }
  307. function fModalCheck() {
  308. var ff = $( "#foreignNumberFront" ).val();
  309. var fl = $( "#foreignNumberLast" ).val();
  310. var pn = $( "#passportNumber" ).val();
  311. if( ff.length == 0 && fl.length == 0 && pn.length == 0 ) {
  312. alertBox({ txt : '외국인 등록번호 또는 여권번호 중 하나만을 선택하여 입력하시기 바랍니다' });
  313. return;
  314. } else if( pn.length == 0 && ( ff.length > 0 || fl.length > 0 ) ) {
  315. if( ff.length != 6 || fl.length != 7 ) {
  316. alertBox({ txt : '외국인 등록번호를 모두 입력하세요' });
  317. return;
  318. }
  319. if( ff.length == 6 && fl.length == 7 ) {
  320. var fVal = $( "#foreignNumberLast" ).val().substr(0,1);
  321. if( fVal >= 5 && fVal <= 8 ) {
  322. if( validRegistrationNumber( ff, fl ) ) {
  323. $( "div.f-input .f-txt" ).hide();
  324. $( "div.f-input .f-val" ).show().text( "외국인 등록번호 (" + ff + "-*******)" );
  325. $( "#foreignNumberCheck" ).val( "true" );
  326. $( "#foreignNumberFront, #foreignNumberLast" ).prop( "readonly", true );
  327. $("#fModal").modal("hide");
  328. } else {
  329. alertBox({ txt : '올바른 외국인 등록번호를 입력하세요 1' });
  330. fModalReset();
  331. }
  332. return;
  333. } else {
  334. alertBox({ txt : '올바른 외국인 등록번호를 입력하세요' });
  335. fModalReset();
  336. }
  337. }
  338. } else if( ff.length == 0 && fl.length == 0 && pn != "" ) {
  339. var newPn = pn.length > 3 ? pn.substr(0, pn.length - 3 ) + "***" : pn;
  340. $( "div.f-input .f-txt" ).hide();
  341. $( "div.f-input .f-val" ).show().text( "여권번호 (" + newPn + ")" );
  342. $( "#foreignNumberCheck" ).val( "true" );
  343. $( "#passportNumber" ).prop( "readonly", true );
  344. $("#fModal").modal("hide");
  345. return;
  346. }
  347. }
  348. function resetInput( t ) {
  349. if( $(t).siblings('input[type="text"]').val() != "" ) {
  350. $(t).siblings('input[type="text"]').val('').prop('readonly', false).trigger('keyup');
  351. $('#foreignNumberCheck').val( "false" );
  352. $( "span.f-val" ).hide().val("");
  353. $( "span.f-txt" ).show();
  354. }
  355. }
  356. function validRegistrationNumber( f, l ) {
  357. var rn = f + "" + l;
  358. rn = rn.split("-").join('');
  359. if( rn.length !== 13 ) return false;
  360. var checkSum = 0;
  361. for(var i=0; i<12; i++) checkSum += ((rn.substr(i,1)>>0)*((i%8)+2));
  362. var rrnMatch = (11-(checkSum%11))%10 == rn.substr(12,1);
  363. var frnMatch = (13-(checkSum%11))%10 == rn.substr(12,1);
  364. return rrnMatch || frnMatch;
  365. };
  366. function ssnCheck(_ssn1, _ssn2) {
  367. var ssn1 = _ssn1,
  368. ssn2 = _ssn2,
  369. ssn = ssn1+''+ssn2,
  370. arr_ssn = [],
  371. compare = [2,3,4,5,6,7,8,9,2,3,4,5],
  372. sum = 0;
  373. // 공식: M = (11 - ((2×A + 3×B + 4×C + 5×D + 6×E + 7×F + 8×G + 9×H + 2×I + 3×J + 4×K + 5×L) % 11)) % 10
  374. for (var i = 0; i<13; i++) {
  375. arr_ssn[i] = ssn.substring(i,i+1);
  376. }
  377. for (var i = 0; i<12; i++) {
  378. sum = sum + (arr_ssn[i] * compare[i]);
  379. }
  380. sum = (11 - (sum % 11)) % 10;
  381. if (sum != arr_ssn[12]) {
  382. return false;
  383. }
  384. return true;
  385. }
  386. </script>
  387. <style>
  388. .f-edit:hover{color:#47bac1;}
  389. .error {margin:0 5px;}
  390. @font-face
  391. {
  392. font-family:'dotsfont';
  393. src:url('dotsfont.eot');
  394. src:url('dotsfont.eot?#iefix') format('embedded-opentype'),
  395. url('dotsfont.svg#font') format('svg');
  396. font-weight:normal;
  397. font-style:normal;
  398. }
  399. input.type-password
  400. {-webkit-text-security:disc;font-family:dotsfont;}
  401. </style>
  402. </head>
  403. <body>
  404. <div class="wrapper">
  405. <jsp:include page="${data._INCLUDE}/sidebar.jsp"></jsp:include>
  406. <div class="main">
  407. <jsp:include page="${data._INCLUDE}/top.jsp"></jsp:include>
  408. <main class="content">
  409. <div class="container-fluid p-0">
  410. <!-- 환자관리 : 신규환자 등록 START -->
  411. <div class="row">
  412. <div class="col-12 col-lg-6">
  413. <h1 class="h3 mb-3">환자정보등록</h1>
  414. </div>
  415. <div class="col-12 col-lg-6 text-right">
  416. <nav aria-label="breadcrumb">
  417. <ol class="breadcrumb">
  418. <li class="breadcrumb-item"><a href="javscript:;">Home</a></li>
  419. <li class="breadcrumb-item">환자관리</li>
  420. <li class="breadcrumb-item active">환자정보 등록</li>
  421. </ol>
  422. </nav>
  423. </div>
  424. </div>
  425. <div class="row">
  426. <div class="col-12">
  427. <div class="card">
  428. <div class="card-body">
  429. <c:if test="${centerCount eq 0}">
  430. <table class="table mobile-table">
  431. <tr>
  432. <th>치료센터</th>
  433. <td class="text-danger">등록된 생활치료센터가 없거나<br/>환자 신규등록 권한이 없습니다. </td>
  434. </tr>
  435. </table>
  436. </c:if>
  437. <c:if test="${centerCount > 0}">
  438. <c:set var="now" value="<%=new java.util.Date()%>" />
  439. <c:set var="action" value="/patient/new/insert" />
  440. <form id="patientForm" action="${action}" method="post" onsubmit="return false">
  441. <table class="table mobile-table">
  442. <colgroup>
  443. <col style="width:15%">
  444. <col style="width:35%">
  445. <col style="width:15%">
  446. <col style="width:35%">
  447. </colgroup>
  448. <tr>
  449. <th>치료센터</th>
  450. <td><c:out value="${centerName}"/></td>
  451. <th><span class="fix">*</span>입소일시</th>
  452. <td colspan="2">
  453. <!-- 입소일시 -->
  454. <c:set var="sysYmd"><fmt:formatDate value="${now}" pattern="yyyy-MM-dd" /></c:set>
  455. <div class="form-group calendar-bar mb-xl-0">
  456. <input class="form-control date hospitalizationDate" type="text" value="${sysYmd}" onKeyup="inputYMDNumber(this);" name="hospitalizationDate" id="hospitalizationDateYmd" required>
  457. <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
  458. </div>
  459. </td>
  460. </tr>
  461. <tr>
  462. <th>환자번호</th>
  463. <td>
  464. <input type="text" name="patientNumber" onkeypress="onlyNumber();" maxlength="15" class="form-control" placeholder="환자 번호를 입력해주세요.">
  465. </td>
  466. <th>주민등록번호
  467. <label class="form-check form-check-inline">(
  468. <input class="form-check-input check-foreigner" type="checkbox">
  469. <span class="form-check-label">외국인</span>)
  470. </label>
  471. </th>
  472. <td>
  473. <div class="form-check-inline k-input">
  474. <div>
  475. <input type="text" id="residentNumberFront" name="residentNumberFront" onkeypress="onlyNumber();" maxlength="6" class="form-control" placeholder="주민등록번호 앞 6자리" autocomplete="off" >
  476. </div>
  477. <div>
  478. <span class="ml-1 mr-1">-</span>
  479. </div>
  480. <div>
  481. <input type="text" id="residentNumberLast" name="residentNumberLast" onkeypress="onlyNumber();" maxlength="7" class="form-control type-password" placeholder="·······" autocomplete="off" >
  482. </div>
  483. </div>
  484. <div class="form-check-inline f-input mb-1" style="display: none;">
  485. <span class="f-txt">외국인 고유식별정보를 입력하세요 (선택)</span>
  486. <span class="f-val text-secondary ml-1"></span>
  487. <span class="f-edit" style="cursor:pointer;" onclick="$('#fModal').modal('show');">
  488. <i id="memoLinkIcon" class="align-middle ml-2 fas fa-fw fa-edit"></i>
  489. </span>
  490. </div>
  491. <!-- 외국인 고유식별 정보 입력 modal -->
  492. <div class="modal fade" id="fModal" tabindex="-1" role="dialog" aria-hidden="true" data-memoid="">
  493. <div class="modal-dialog modal-dialog-centered" role="document">
  494. <div class="modal-content" style="border-bottom-right-radius: 0; border-bottom-left-radius: 0;">
  495. <div class="modal-body m-3">
  496. <h2 class="text-center mb-3">외국인 고유식별정보 입력</h2>
  497. <hr/>
  498. <table class="table">
  499. <colgroup>
  500. <col style="width:15%">
  501. <col style="width:35%">
  502. </colgroup>
  503. <tr>
  504. <th>외국인 등록번호</th>
  505. <td>
  506. <div class="form-check-inline">
  507. <input type="hidden" id="foreignNumberCheck" value="false">
  508. <input type="text" id="foreignNumberFront" name="foreignNumberFront" onkeypress="onlyNumber();" maxlength="6" class="form-control" placeholder="외국인 등록번호 앞 6자리">
  509. <span class="ml-1 mr-1">-</span>
  510. <input type="text" id="foreignNumberLast" name="foreignNumberLast" onkeypress="onlyNumber();" maxlength="7" class="form-control type-password" placeholder="·······" autocomplete="new-password">
  511. <button type="button" class="btn btn-outline-danger ml-2" onclick="resetInput(this);">x</button>
  512. </div>
  513. </td>
  514. </tr>
  515. <tr>
  516. <th>여권번호</th>
  517. <td>
  518. <div class="form-check-inline">
  519. <input type="text" id="passportNumber" name="passportNumber" class="form-control jumin-check" placeholder="여권번호" maxlength="9">
  520. <button type="button" class="btn btn-outline-danger ml-2" onclick="resetInput(this);">x</button>
  521. </div>
  522. </td>
  523. </tr>
  524. </table>
  525. <p class="h4 mt-3 text-center">※ <span class="text-secondary">외국인 등록번호</span> 또는 <span class="text-secondary">여권번호</span> 중 하나만을 선택하여 입력하시기 바랍니다.</p>
  526. </div>
  527. <div class="modal-footer bg-white" style="justify-content: center !important;">
  528. <button type="button" class="btn btn-outline-primary" data-dismiss="modal">취소</button>
  529. <button type="button" class="btn btn-primary" onclick="fModalCheck();">입력 완료</button>
  530. </div>
  531. </div>
  532. </div>
  533. </div>
  534. </td>
  535. </tr>
  536. <tr>
  537. <th><span class="fix">*</span>병동 번호
  538. <c:if test="${centerType eq 'S'}" ><br/><span class="ml-2">(거주지 번호)</span></c:if>
  539. </th>
  540. <td>
  541. <div class="form-check-inline">
  542. <!-- 병동 번호 (동 /호실) -->
  543. <input type="text" class="form-control" name="wardNumber"> <span class="ml-1 mr-2">동</span>
  544. <input type="text" class="form-control" name="roomNumber" required> <span class="ml-1">호</span>
  545. </div>
  546. <c:if test="${centerType eq 'S'}">
  547. <div class="mt-1">
  548. <span class="text-danger">재택치료는 "호" 항목만 사용해 주세요.</span>
  549. </div>
  550. </c:if>
  551. </td>
  552. <th><span class="fix">*</span>이름</th>
  553. <td>
  554. <!-- 환자 이름 -->
  555. <input type="text" name="patientName" class="form-control" placeholder="이름을 입력해주세요" required>
  556. </td>
  557. </tr>
  558. <tr>
  559. <th><span class="fix">*</span>성별</th>
  560. <td>
  561. <!-- 성별 -->
  562. <label class="form-check form-check-inline mb-0">
  563. <input class="form-check-input" type="radio" name="gender" value="M" required>
  564. <span class="form-check-label">남</span>
  565. </label>
  566. <label class="form-check form-check-inline mb-0">
  567. <input class="form-check-input" type="radio" name="gender" value="F" required>
  568. <span class="form-check-label">여</span>
  569. </label>
  570. </td>
  571. <th><span class="fix">*</span>생년월일</th>
  572. <td>
  573. <!-- 생년월일 -->
  574. <div class="form-group calendar-bar mb-xl-0">
  575. <input type="text" class="form-control date jumin" onKeyup="inputYMDNumber(this);" id="jumin" name="jumin" autocomplete="off" placeholder="yyyy-mm-dd 형식으로 입력하세요" required>
  576. <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
  577. </div>
  578. </td>
  579. </tr>
  580. <tr>
  581. <th><span class="fix">*</span>연락처</th>
  582. <td>
  583. <div class="form-check form-check-inline calendar-bar mb-xl-0">
  584. <input type="text" name="patientPhone" class="form-control" placeholder="연락처를 입력해주세요" required>
  585. </div>
  586. <label class="form-check form-check-inline">
  587. <input class="form-check-input check-foreigner" name="foreignerYn" type="checkbox" value="Y">
  588. <span class="form-check-label">외국인</span>
  589. </label>
  590. </td>
  591. <th>보호자 연락처</th>
  592. <td>
  593. <input type="text" name="guardianPhone" class="form-control" placeholder="보호자 연락처를 입력해주세요">
  594. </td>
  595. </tr>
  596. <tr>
  597. <th>증상시작일</th>
  598. <td>
  599. <div class="form-group calendar-bar mb-xl-0">
  600. <input class="form-control date-no-req" type="text" name="symptomStartDate" onKeyup="inputYMDNumber(this);" autocomplete="off">
  601. <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
  602. </div>
  603. </td>
  604. <th><span class="fix">*</span>확진일</th>
  605. <td>
  606. <div class="form-group calendar-bar mb-xl-0">
  607. <input class="form-control date valid" type="text" name="confirmationDate" autocomplete="off" aria-invalid="false">
  608. <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
  609. </div>
  610. </td>
  611. </tr>
  612. <!-- 안보이도록처리 (신규등록 환자 상태는 무조건 입소, 빈값으로 submit) -->
  613. <tr class="d-none">
  614. <!-- <th>격리해제 예정일</th> -->
  615. <th>상태 변경일</br>(퇴소, 지정병원이송, 기타)</th>
  616. <td colspan="3">
  617. <div class="form-group calendar-bar mb-xl-0">
  618. <input class="form-control date-no-req" type="text" name="disisolationDate" onKeyup="inputYMDNumber(this);" autocomplete="off">
  619. <i class="align-middle mr-2 fas fa-fw fa-calendar-alt"></i>
  620. </div>
  621. </td>
  622. </tr>
  623. <tr>
  624. <th>퇴소예정일</th>
  625. <td>
  626. <div class="form-group calendar-bar mb-xl-0">
  627. <input class="form-control date-no-req" type="text" name="expectedDischargeDate" onKeyup="inputYMDNumber(this);" autocomplete="off">
  628. </div>
  629. </td>
  630. <th>담당 의료진</th>
  631. <td>
  632. <select class="custom-select valid" name="managerId" aria-invalid="false">
  633. <option value="">의료진 선택</option>
  634. <c:forEach var="sl" items="${staffList}">
  635. <option value="${sl.id}"><c:out value="${sl.name} (${sl.id})"/></option>
  636. </c:forEach>
  637. </select>
  638. </td>
  639. </tr>
  640. <tr>
  641. <th>문진작성(환자용 앱)</th>
  642. <td colspan="3">
  643. <label class="form-check form-check-inline">
  644. <input class="form-check-input" type="radio" id="serveyY" name="serveyYn" value="Y">
  645. <span class="form-check-label">가능</span>
  646. </label>
  647. <label class="form-check form-check-inline">
  648. <input class="form-check-input" type="radio" id="serveyN" name="serveyYn" value="N">
  649. <span class="form-check-label">불가능</span>
  650. </label>
  651. <span class="text-danger">(문진작성이 가능일 경우에만 환자용 앱에서 문진 작성이 가능합니다.)</span>
  652. </td>
  653. </tr>
  654. <tr>
  655. <th>최근약복용<br />(최근 24시간 이내)</th>
  656. <td>
  657. <label class="form-check form-check-inline">
  658. <input class="form-check-input" type="radio" value="N" name="drugYn" onclick="$('#drugContent').attr('readonly', true).val('');">
  659. <span class="form-check-label">미복용</span>
  660. </label>
  661. <label class="form-check form-check-inline">
  662. <input class="form-check-input" type="radio" value="Y" name="drugYn" onclick="$('#drugContent').removeAttr('readonly');">
  663. <span class="form-check-label">복용</span>
  664. </label>
  665. <label class="form-check form-check-inline">
  666. <input type="text" id="drugContent" class="form-control" name="drugContent" placeholder="약명을 입력하세요." readonly>
  667. </label>
  668. </td>
  669. <th>임신</th>
  670. <td>
  671. <label class="form-check form-check-inline">
  672. <input class="form-check-input" type="radio" name="pregnancyStatus" value="N">
  673. <span class="form-check-label">무</span>
  674. </label>
  675. <label class="form-check form-check-inline">
  676. <input class="form-check-input" type="radio" name="pregnancyStatus" value="Y">
  677. <span class="form-check-label">유</span>
  678. </label>
  679. <label class="form-check form-check-inline">
  680. <select class="custom-select" name="pregnancyWeek" id="pregnancyWeek" disabled>
  681. <option value="" selected="">임신 주차</option>
  682. <c:forEach var="p" begin="1" end="40" step="1">
  683. <option value="${p}">${p} 주</option>
  684. </c:forEach>
  685. </select>
  686. </label>
  687. </td>
  688. </tr>
  689. <tr>
  690. <th rowspan="4">기저질환 여부</th>
  691. <td colspan="3">
  692. <label class="form-check form-check-inline">
  693. <input class="form-check-input" type="radio" id="basalY" name="basalDiseaseYn" value="Y">
  694. <span class="form-check-label">예</span>
  695. </label>
  696. <label class="form-check form-check-inline">
  697. <input class="form-check-input" type="radio" id="basalN" name="basalDiseaseYn" value="N">
  698. <span class="form-check-label">아니오</span>
  699. </label>
  700. (예인 경우 하단의 기저질환을 선택하세요)
  701. </td>
  702. </tr>
  703. <tr>
  704. <td colspan="3" class="basalDisease">
  705. <label class="form-check form-check-inline">
  706. <input class="form-check-input" name="highBloodPressureCheck" type="checkbox" value="Y">
  707. <span class="form-check-label">고혈압</span>
  708. </label>
  709. <label class="form-check form-check-inline">
  710. <input class="form-check-input" name="lowBloodPressureCheck" type="checkbox" value="Y">
  711. <span class="form-check-label">저혈압</span>
  712. </label>
  713. <label class="form-check form-check-inline">
  714. <input class="form-check-input" name="organTransplantCheck" type="checkbox" value="Y">
  715. <span class="form-check-label">장기이식(신장, 간 등)</span>
  716. </label>
  717. <label class="form-check form-check-inline">
  718. <input class="form-check-input" name="diabetesCheck" type="checkbox" value="Y">
  719. <span class="form-check-label">당뇨병</span>
  720. </label>
  721. <label class="form-check form-check-inline">
  722. <input class="form-check-input" name="respiratoryDiseaseCheck" type="checkbox" value="Y">
  723. <span class="form-check-label">호흡기 질환</span>
  724. </label>
  725. <label class="form-check form-check-inline">
  726. <input class="form-check-input" name="immunologicalDiseaseCheck" type="checkbox" value="Y">
  727. <span class="form-check-label">면역질환(류마티스 등)</span>
  728. </label>
  729. </td>
  730. </tr>
  731. <tr>
  732. <td colspan="3" class="basalDisease">
  733. <label class="form-check form-check-inline">
  734. <input class="form-check-input" name="heartDisease" type="checkbox" value="Y">
  735. <span class="form-check-label">심장질환</span>
  736. </label>
  737. <label class="form-check form-check-inline">
  738. <input class="form-check-input" name="liverDisease" type="checkbox" value="Y">
  739. <span class="form-check-label">간질환</span>
  740. </label>
  741. <label class="form-check form-check-inline label-readonly-check">
  742. <input class="form-check-input" name="operation" type="checkbox" value="Y">
  743. <!-- ( <input type="text" id="operationContent" name="operationContent" class="form-control form-control-sm w150" name=""> ) -->
  744. <span class="form-check-label">수술</span>
  745. </label>
  746. <label class="form-check form-check-inline">
  747. <input class="form-check-input" name="allergyCheck" type="checkbox" value="Y">
  748. <span class="form-check-label">알레르기</span>
  749. </label>
  750. <label class="form-check form-check-inline">
  751. <input class="form-check-input" name="kidneyDisease" type="checkbox" value="Y">
  752. <span class="form-check-label">신장질환</span>
  753. </label>
  754. </td>
  755. </tr>
  756. <tr>
  757. <td colspan="3" class="basalDisease">
  758. <label class="form-check form-check-inline label-readonly-check">
  759. <input class="form-check-input" name="cancerCheck" type="checkbox" value="Y">
  760. <span class="form-check-label">암 ( <input type="text" name="cancerName" class="form-control form-control-sm w150"> )</span>
  761. </label>
  762. <label class="form-check form-check-inline label-readonly-check">
  763. <input class="form-check-input" name="etcCheckDisease" type="checkbox" value="Y">
  764. <span class="form-check-label">기타 ( <input type="text" name="etcContentDisease" class="form-control form-control-sm w150"> )</span>
  765. </label>
  766. </td>
  767. </tr>
  768. <!-- 현재 증상 (입소 당시) -->
  769. <tr>
  770. <th rowspan="3">현재 증상<br />(입소 당시)</th>
  771. <td colspan="3">
  772. <label class="form-check form-check-inline">
  773. <input class="form-check-input" name="feverCheck" type="checkbox" value="Y">
  774. <span class="form-check-label">열감(열나는 느낌)</span>
  775. </label>
  776. <label class="form-check form-check-inline">
  777. <input class="form-check-input" name="coughCheck" type="checkbox" value="Y">
  778. <span class="form-check-label">기침</span>
  779. </label>
  780. <label class="form-check form-check-inline">
  781. <input class="form-check-input" name="colic" type="checkbox" value="Y">
  782. <span class="form-check-label">복통(배아픔)</span>
  783. </label>
  784. <label class="form-check form-check-inline">
  785. <input class="form-check-input" name="coldFitCheck" type="checkbox" value="Y">
  786. <span class="form-check-label">오한(추운 느낌)</span>
  787. </label>
  788. <label class="form-check form-check-inline">
  789. <input class="form-check-input" name="sputumCheck" type="checkbox" value="Y">
  790. <span class="form-check-label">가래</span>
  791. </label>
  792. <label class="form-check form-check-inline">
  793. <input class="form-check-input" name="ocinCheck" type="checkbox" value="Y">
  794. <span class="form-check-label">오심(구역질)</span>
  795. </label>
  796. <label class="form-check form-check-inline">
  797. <input class="form-check-input" name="chestPain" type="checkbox" value="Y">
  798. <span class="form-check-label">흉통(가슴 통증)</span>
  799. </label>
  800. </td>
  801. </tr>
  802. <tr>
  803. <td colspan="3">
  804. <label class="form-check form-check-inline">
  805. <input class="form-check-input" name="noseCheck" type="checkbox" value="Y">
  806. <span class="form-check-label">콧물 또는 코 막힘</span>
  807. </label>
  808. <label class="form-check form-check-inline">
  809. <input class="form-check-input" name="vomitingCheck" type="checkbox" value="Y">
  810. <span class="form-check-label">구토</span>
  811. </label>
  812. <label class="form-check form-check-inline">
  813. <input class="form-check-input" name="musclePainCheck" type="checkbox" value="Y">
  814. <span class="form-check-label">근육통(몸살)</span>
  815. </label>
  816. <label class="form-check form-check-inline">
  817. <input class="form-check-input" name="soreThroatCheck" type="checkbox" value="Y">
  818. <span class="form-check-label">인후통(목 아픔)</span>
  819. </label>
  820. <label class="form-check form-check-inline">
  821. <input class="form-check-input" name="diarrheaCheck" type="checkbox" value="Y">
  822. <span class="form-check-label">설사</span>
  823. </label>
  824. <label class="form-check form-check-inline">
  825. <input class="form-check-input" name="headacheCheck" type="checkbox" value="Y">
  826. <span class="form-check-label">두통(머리아픔)</span>
  827. </label>
  828. <label class="form-check form-check-inline">
  829. <input class="form-check-input" name="dyspneaCheck" type="checkbox" value="Y">
  830. <span class="form-check-label">호흡곤란(숨가쁨)</span>
  831. </label>
  832. <label class="form-check form-check-inline">
  833. <input class="form-check-input" name="fatigueCheck" type="checkbox" value="Y">
  834. <span class="form-check-label">권태감(피곤함)</span>
  835. </label>
  836. </td>
  837. </tr>
  838. <tr>
  839. <td colspan="3">
  840. <label class="form-check form-check-inline label-readonly-check">
  841. <input class="form-check-input" name="etcCheckSymptom" type="checkbox" value="Y">
  842. <span class="form-check-label">기타 ( <input type="text" name="etcContentSymptom" class="form-control form-control-sm w150"> )</span>
  843. </label>
  844. </td>
  845. </tr>
  846. <tr>
  847. <th>체온</th>
  848. <td>우측 (<input type="text" class="form-control form-control-sm w50" name="feverRight">)℃ / 좌측 (<input type="text" class="form-control form-control-sm w50" name="feverLeft">)℃</td>
  849. <th>맥박수</th>
  850. <td>
  851. (<input type="text" class="form-control form-control-sm w50" name="pulseRate">) 회/분
  852. </td>
  853. </tr>
  854. <tr>
  855. <th>호흡수</th>
  856. <td>
  857. (<input type="text" class="form-control form-control-sm w50" name="respirationRate">) 회/분
  858. </td>
  859. <th>혈압</th>
  860. <td>수축기 (
  861. <input type="text" class="form-control form-control-sm w50" name="bloodPressureLevelCon">)mmHg
  862. / 이완기 (
  863. <input type="text" class="form-control form-control-sm w50" name="bloodPressureLevelRel">)mmHg
  864. </td>
  865. </tr>
  866. <tr>
  867. <th>산소포화도</th>
  868. <td colspan="3">
  869. (<input type="text" class="form-control form-control-sm w50" name="oxygenSaturation">) %
  870. </td>
  871. </tr>
  872. <tr>
  873. <th>기타 환자 메모</th>
  874. <td colspan="3">
  875. <textarea class="form-control" name="patientEtc" rows="10" maxlength="2000" placeholder="2000자 까지 입력 가능합니다."></textarea>
  876. </td>
  877. </tr>
  878. </table>
  879. <div class="row mt-3">
  880. <div class="col-12">
  881. <div class="text-right">
  882. <button type="button" class="btn btn-outline-primary w100" onclick="history.back();">취소</button>
  883. <button type="submit" class="btn btn-primary w100" id="submitBtn">등록</button>
  884. </div>
  885. </div>
  886. </div>
  887. </form>
  888. </c:if>
  889. </div>
  890. </div>
  891. </div>
  892. </div>
  893. <!-- 환자관리 : 신규환자 등록 END -->
  894. </div>
  895. </main>
  896. <jsp:include page="${data._INCLUDE}/footer.jsp"></jsp:include>
  897. </div>
  898. </div>
  899. </body>
  900. </html>