Selaa lähdekoodia

Merge branch 'master' of http://wcollector.idatabank.com:5230/dbs289/LifeCenter.git

junekeunsong 4 vuotta sitten
vanhempi
commit
ff23fc4dcd

+ 129 - 19
src/main/webapp/WEB-INF/jsp/clinic/info.jsp

@@ -8,6 +8,39 @@
 <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
 <script>
 
+var PHR_VALUE_DEFAULT = {
+	TEMPERATURE: {
+		VALUE: 36.5,
+		MIN: 20,
+		MAX: 50
+	},
+	BLOOD_PRESSURE_SYSTOLIC: {
+		VALUE: 120,
+		MIN: 50,
+		MAX: 250
+	},
+	BLOOD_PRESSURE_DIASTOLIC: {
+		VALUE: 80,
+		MIN: 20,
+		MAX: 160
+	},
+	OXYGEN_SATURATION: {
+		VALUE: 95,
+		MIN: 60,
+		MAX: 100
+	},
+	PULSE_RATE: {
+		VALUE: 65,
+		MIN: 30,
+		MAX: 200
+	},
+	BLOOD_SUGAR: {
+		VALUE: 120,
+		MIN: 10,
+		MAX: 600
+	}
+}
+
 function dateFormatter(date) {
 	return moment(date).format("YYYY-MM-DD HH:mm:ss");
 }
@@ -43,6 +76,52 @@ function nonFaceStart() {
 /*
  * 건강정보이력 탭 처리
  */
+
+function checkValidForPhrData(phrType, phrValue) {
+
+	var errorMessage = null;
+
+	var errorMessagePrefix = null;
+	var phrValueDefault = null;
+	
+	if (phrType === "temperature") {
+		errorMessagePrefix = "체온을";
+		phrValueDefault = PHR_VALUE_DEFAULT.TEMPERATURE;
+	}
+	else if (phrType === "bloodPressureSystolic") {
+		errorMessagePrefix = "수축기 혈압을";
+		phrValueDefault = PHR_VALUE_DEFAULT.BLOOD_PRESSURE_SYSTOLIC;
+	}
+	else if (phrType === "bloodPressureDiastolic") {
+		errorMessagePrefix = "이완기 혈압을";
+		phrValueDefault = PHR_VALUE_DEFAULT.BLOOD_PRESSURE_DIASTOLIC;
+	}
+	else if (phrType === "oxygenSaturation") {
+		errorMessagePrefix = "산소포화도를";
+		phrValueDefault = PHR_VALUE_DEFAULT.OXYGEN_SATURATION;
+	}
+	else if (phrType === "pulseRate") {
+		errorMessagePrefix = "맥박을";
+		phrValueDefault = PHR_VALUE_DEFAULT.PULSE_RATE;
+	}
+	else if (phrType === "bloodSugar") {
+		errorMessagePrefix = "혈당을";
+		phrValueDefault = PHR_VALUE_DEFAULT.BLOOD_SUGAR;
+	}
+
+	// 널 체크, 숫자 체크, 최대/최소 체크
+	if (!phrValue || phrValue.length === 0) {
+		errorMessage = errorMessagePrefix+" 입력해 주세요.";	
+	}
+	else if (isNaN(phrValue)) {
+		errorMessage = errorMessagePrefix+" 숫자로 입력해 주세요.";
+	}
+	else if (phrValue < phrValueDefault.MIN || phrValue > phrValueDefault.MAX) {
+		errorMessage = errorMessagePrefix+" "+phrValueDefault.MIN+"~"+phrValueDefault.MAX+" 범위 내로 입력해 주세요.";
+	}
+
+	return errorMessage;
+}
  
 function handlePhrData() {
 	var phrType = $("#phrTypeSelect option:selected").val();
@@ -51,31 +130,55 @@ function handlePhrData() {
 		phrValueSystolic = $("#phrValueSystolic").val();
 		phrValueDiastolic = $("#phrValueDiastolic").val();
 
-		if (!phrValueSystolic || phrValueSystolic.length === 0) {
-			alert("수축기 혈압을 입력해 주세요.");
+		// 유효성 체크
+		var errorMessage = checkValidForPhrData("bloodPressureSystolic", phrValueSystolic);
+		if (errorMessage) {
+			alert(errorMessage);
+			$("#phrValueSystolic").focus();
 			return;
 		}
-		if (!phrValueDiastolic || phrValueDiastolic.length === 0) {
-			alert("이완기 혈압을 입력해 주세요.");
+
+		errorMessage = checkValidForPhrData("bloodPressureDiastolic", phrValueDiastolic);
+		if (errorMessage) {
+			alert(errorMessage);
+			$("#phrValueDiastolic").focus();
 			return;
 		}
 
+		// 저장 진행
 		createPhrData(${patientIdx}, "bloodPressure", phrValueSystolic, phrValueDiastolic);
 
-		$("#phrValueSystolic").val("");
-		$("#phrValueDiastolic").val("");
+		$("#phrValueSystolic").val(PHR_VALUE_DEFAULT.BLOOD_PRESSURE_SYSTOLIC.VALUE);
+		$("#phrValueDiastolic").val(PHR_VALUE_DEFAULT.BLOOD_PRESSURE_DIASTOLIC.VALUE);
 	}
 	else {
 		phrValue = $("#phrValue").val();
 		
-		if (!phrValue || phrValue.length === 0) {
-			alert("값을 입력해 주세요.");
+		// 유효성 체크
+		var errorMessage = checkValidForPhrData(phrType, phrValue);
+		if (errorMessage) {
+			alert(errorMessage);
+			$("#phrValue").focus();
 			return;
 		}
 
+		// 저장 진행
 		createPhrData(${patientIdx}, phrType, phrValue);
 
-		$("#phrValue").val("");
+		var phrValueDefault = "";
+		if (phrType === "temperature") {
+			phrValueDefault = PHR_VALUE_DEFAULT.TEMPERATURE;
+		}
+		else if (phrType === "oxygenSaturation") {
+			phrValueDefault = PHR_VALUE_DEFAULT.OXYGEN_SATURATION;
+		}
+		else if (phrType === "pulseRate") {
+			phrValueDefault = PHR_VALUE_DEFAULT.PULSE_RATE;
+		}
+		else if (phrType === "bloodSugar") {
+			phrValueDefault = PHR_VALUE_DEFAULT.BLOOD_SUGAR;
+		}
+		$("#phrValue").val(phrValueDefault);
 	}
 
 	$("#defaultModalPrimary_1").modal("hide");
@@ -470,44 +573,51 @@ $(document).ready(function() {
 	$(document).on('click','[data-target="#defaultModalPrimary_1"]',function(){
 		var selectData = $('#phrTypeSelect').find('option:selected').val();
 		var healthInfoHTML = '';
+		var phrValueDefault = null;
 		if(selectData == 'temperature'){
+			phrValueDefault = PHR_VALUE_DEFAULT.TEMPERATURE;
 			healthInfoHTML += '<th>체온</th>';
 			healthInfoHTML += '<td>';
 			healthInfoHTML += '	<div class="form-group mb-xl-0">';
-			healthInfoHTML += '		<input id="phrValue" class="form-control" type="number" placeholder="체온 입력">';
+			healthInfoHTML += '		<input id="phrValue" class="form-control" type="number" placeholder="체온 입력" min="'+phrValueDefault.MIN+'" max="'+phrValueDefault.MAX+'" value="'+phrValueDefault.VALUE+'" step="0.1">';
 			healthInfoHTML += '	</div>';
 			healthInfoHTML += '</td>';
 		}
 		else if(selectData == 'bloodPressure'){
+			phrValueDefault1 = PHR_VALUE_DEFAULT.BLOOD_PRESSURE_SYSTOLIC;
+			phrValueDefault2 = PHR_VALUE_DEFAULT.BLOOD_PRESSURE_DIASTOLIC;
 			healthInfoHTML += '<th>혈압</th>';
 			healthInfoHTML += '<td>';
 			healthInfoHTML += '	<div class="form-group mb-xl-0">';
-			healthInfoHTML += '		<input id="phrValueSystolic" class="form-control mb-2" type="number" placeholder="수축기 혈압 입력">';
-			healthInfoHTML += '		<input id="phrValueDiastolic" class="form-control mb-2" type="number" placeholder="이완기 혈압 입력">';
+			healthInfoHTML += '		<input id="phrValueSystolic" class="form-control mb-2" type="number" placeholder="수축기 혈압 입력" min="'+phrValueDefault1.MIN+'" max="'+phrValueDefault1.MAX+'" value="'+phrValueDefault1.VALUE+'">';
+			healthInfoHTML += '		<input id="phrValueDiastolic" class="form-control mb-2" type="number" placeholder="이완기 혈압 입력" min="'+phrValueDefault2.MIN+'" max="'+phrValueDefault2.MAX+'" value="'+phrValueDefault2.VALUE+'">';
 			healthInfoHTML += '	</div>';
 			healthInfoHTML += '</td>';
 		}
 		else if(selectData == 'pulseRate'){
+			phrValueDefault = PHR_VALUE_DEFAULT.PULSE_RATE;
 			healthInfoHTML += '<th>맥박</th>';
 			healthInfoHTML += '<td>';
 			healthInfoHTML += '	<div class="form-group mb-xl-0">';
-			healthInfoHTML += '		<input id="phrValue" class="form-control" type="number" placeholder="맥박 입력">';
+			healthInfoHTML += '		<input id="phrValue" class="form-control" type="number" placeholder="맥박 입력"min="'+phrValueDefault.MIN+'" max="'+phrValueDefault.MAX+'" value="'+phrValueDefault.VALUE+'">';
 			healthInfoHTML += '	</div>';
 			healthInfoHTML += '</td>';
 		}
 		else if(selectData == 'oxygenSaturation'){
+			phrValueDefault = PHR_VALUE_DEFAULT.OXYGEN_SATURATION;
 			healthInfoHTML += '<th>산소포화도</th>';
 			healthInfoHTML += '<td>';
 			healthInfoHTML += '	<div class="form-group mb-xl-0">';
-			healthInfoHTML += '		<input id="phrValue" class="form-control" type="text" placeholder="산소포화도 입력">';
+			healthInfoHTML += '		<input id="phrValue" class="form-control" type="number" placeholder="산소포화도 입력" min="'+phrValueDefault.MIN+'" max="'+phrValueDefault.MAX+'" value="'+phrValueDefault.VALUE+'">';
 			healthInfoHTML += '	</div>';
 			healthInfoHTML += '</td>';
 		}
 		else if(selectData == 'bloodSugar'){
+			phrValueDefault = PHR_VALUE_DEFAULT.BLOOD_SUGAR;
 			healthInfoHTML += '<th>혈당</th>';
 			healthInfoHTML += '<td>';
 			healthInfoHTML += '	<div class="form-group mb-xl-0">';
-			healthInfoHTML += '		<input id="phrValue" class="form-control" type="text" placeholder="혈당 입력">';
+			healthInfoHTML += '		<input id="phrValue" class="form-control" type="number" placeholder="혈당 입력" min="'+phrValueDefault.MIN+'" max="'+phrValueDefault.MAX+'" value="'+phrValueDefault.VALUE+'"">';
 			healthInfoHTML += '	</div>';
 			healthInfoHTML += '</td>';
 		}
@@ -635,7 +745,7 @@ $(document).ready(function() {
 			memoInfoHTML += '<th>내용</th>';
 			memoInfoHTML += '<td>';
 			memoInfoHTML += '	<div class="form-row">';
-			memoInfoHTML += '		<textarea id="memoContent" class="form-control" rows="2" placeholder="내용을 입력하세요"></textarea>';
+			memoInfoHTML += '		<textarea id="memoContent" class="form-control" rows="15" placeholder="내용을 입력하세요"></textarea>';
 			memoInfoHTML += '	</div>';
 			memoInfoHTML += '</td>';
 		
@@ -658,11 +768,11 @@ $(document).ready(function() {
 		<div class="modal-dialog modal-sm" role="document">
 			<div class="modal-content">
 				<div class="modal-header">
-					<h5 class="modal-title">위험 표시 기준 안내</h5>
+					<h5 class="modal-title">알람 표시 기준 안내</h5>
 					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span> </button>
 				</div>
 				<div class="modal-body m-1">
-					<h4>생체측정 위험 표시 기준</h4>
+					<h4>생체측정 알람 표시 기준</h4>
 					<ul class="legend">
 						<li class="row fever">
 							<div class="col-lg-4">체온</div>
@@ -1073,7 +1183,7 @@ $(document).ready(function() {
 										<div class="graph-area mb-4" style="height:300px;">
 											<canvas id="phrChart"></canvas>
 										</div>
-										<h1 class="h4 text-right"><span class="small showLegend ml-2" data-toggle="modal" data-target="#legendGuide"><i class="mdi mdi-comment-question-outline"></i> 위험 표시 기준</span></h1>
+										<h1 class="h4 text-right"><span class="small showLegend ml-2" data-toggle="modal" data-target="#legendGuide"><i class="mdi mdi-comment-question-outline"></i> 알람 표시 기준</span></h1>
 										<div class="table-responsive">
 											<table id="phrDataTable" class="table data-table text-center">
 												<thead>

+ 6 - 6
src/main/webapp/WEB-INF/jsp/clinic/state.jsp

@@ -79,7 +79,7 @@ function retrieveStateData(page) {
 								html += '<div class="col-lg-2 col-md-6 mb-4">';
 								html += '	<div class="patients-stats" data-url="./info?patientIdx='+d.patientIdx+'">';
 								html += '		<div class="name">';
-								html += '			'+d.wardNumber+'/'+d.roomNumber+'('+d.patientName+')';
+								html += '			'+(d.wardNumber !== "" ? d.wardNumber+'/' : '')+d.roomNumber+'('+d.patientName+')';
 								html += '			<div class="check">';
 								html += '				<ul>';
 								if (d.memoCount > 0) {
@@ -124,7 +124,7 @@ function nextPage() {
 	
 	var next = $("#pagination .active").next();
 
-	if (!next.is(':visible')) {
+	if (!next.is(':visible') || next.hasClass("disabled")) {
 		$("#pagination .first").click();
 	}
 	else {
@@ -223,11 +223,11 @@ $(document).ready(function() {
 		<div class="modal-dialog modal-sm" role="document">
 			<div class="modal-content">
 				<div class="modal-header">
-					<h5 class="modal-title">위험 표시 기준 안내</h5>
+					<h5 class="modal-title">알람 표시 기준 안내</h5>
 					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span> </button>
 				</div>
 				<div class="modal-body m-1">
-					<h4>생체측정 위험 표시 기준</h4>
+					<h4>생체측정 알람 표시 기준</h4>
 					<ul class="legend">
 						<li class="row fever">
 							<div class="col-lg-4">체온</div>
@@ -293,7 +293,7 @@ $(document).ready(function() {
 								<div class="card-header">
 									<div class="row">
 										<div class="col-lg-6">
-											<h1 class="h4">- 상태현황<span class="small showLegend ml-2" data-toggle="modal" data-target="#legendGuide"><i class="mdi mdi-comment-question-outline"></i> 위험 표시 기준</span></h1>
+											<h1 class="h4">- 상태현황<span class="small showLegend ml-2" data-toggle="modal" data-target="#legendGuide"><i class="mdi mdi-comment-question-outline"></i> 알람 표시 기준</span></h1>
 										</div>
 										<div class="col-lg-6 search text-right">
 											<label> <select id="reloadIntervalSelect" class="custom-select" onchange="changeReloadInterval()">
@@ -318,7 +318,7 @@ $(document).ready(function() {
 										</c:when>
 										<c:otherwise>
 										<c:forEach var="patient" items="${items}" varStatus="status">
-											<c:set var="title" value="${patient.wardNumber}/${patient.roomNumber}(${patient.patientName})" />
+											<c:set var="title" value="${patient.wardNumber != '' ? patient.wardNumber : ''}${patient.wardNumber != '' ? '/' : ''}${patient.roomNumber}(${patient.patientName})" />
 											<c:set var="viewLink" value="./info?patientIdx=${patient.patientIdx}" />
 											<c:set var="temperatureStep" value="${patient.isTemperatureWarning ? 'step_two' : 'step_one'}" />
 											<c:set var="bloodPressureStep" value="${patient.isBloodPressureWarning ? 'step_two' : 'step_one'}" />