feat:정보보기를 시추공 상세정보로 기능 변경

main
thkim 2025-02-28 17:06:48 +09:00
parent f7bbe0d62f
commit 0c27c57d90
16 changed files with 269 additions and 35 deletions

View File

@ -1,4 +1,9 @@
#src\main\resources\egovframework\egovProps\globals.properties
src\main\webapp\com\css\common.v2.0.css
src\main\webapp\com\css\common.v2.0.css.map
src\main\webapp\WEB-INF\views\home\index.jsp
#src\main\webapp\com\css\common.v2.0.css
#src\main\webapp\com\css\common.v2.0.css.map
#src\main\java\geoinfo\regi\manageList\ManageExcelUploadProc01Controller.java
#src\main\webapp\WEB-INF\views\web\input\excel_step00.jsp
#src\main\webapp\WEB-INF\views\web\input\excel_step31.jsp
src\main\webapp\WEB-INF\views\map\index.jsp
src\main\webapp\WEB-INF\views\map\projectSearch\projectSearch.jsp
src\main\webapp\js\map\main\main.js

View File

@ -514,13 +514,27 @@ public class BasicController {
NodeList nSLICKENSIDE_AVG = data.getElementsByTagName("slickensideAvg");
NodeList nSLICKENSIDE_ROUGH = data.getElementsByTagName("slickensideRough");
final String defaultNA = "-999";
String slickensideMax = wUtil.isNullNode(nSLICKENSIDE_MAX);
if( slickensideMax.equals("-") == true ) {
slickensideMax = defaultNA;
}
String slickensideMin = wUtil.isNullNode(nSLICKENSIDE_MIN);
if( slickensideMin.equals("-") == true ) {
slickensideMin = defaultNA;
}
String slickensideAvg = wUtil.isNullNode(nSLICKENSIDE_AVG);
if( slickensideAvg.equals("-") == true ) {
slickensideAvg = defaultNA;
}
params.put("slickensideDepthFrom", wUtil.isNullNode(nSLICKENSIDE_DEPTH_FROM));
params.put("slickensideDepthTo", wUtil.isNullNode(nSLICKENSIDE_DEPTH_TO));
params.put("slickensideDirection", wUtil.isNullNode(nSLICKENSIDE_DIRECTION));
params.put("slickensideAngle", wUtil.isNullNode(nSLICKENSIDE_ANGLE));
params.put("slickensideMax", wUtil.isNullNode(nSLICKENSIDE_MAX));
params.put("slickensideMin", wUtil.isNullNode(nSLICKENSIDE_MIN));
params.put("slickensideAvg", wUtil.isNullNode(nSLICKENSIDE_AVG));
params.put("slickensideMax", slickensideMax);
params.put("slickensideMin", slickensideMin);
params.put("slickensideAvg", slickensideAvg);
params.put("slickensideRough", wUtil.isNullNode(nSLICKENSIDE_ROUGH));
params.put("userId", request.getSession().getAttribute("USERID"));

View File

@ -835,7 +835,12 @@ public class ManageExcelUploadProc01Controller {
public HashMap<String,Object> subStep01_upload02(RsWrapper excelWp, HashMap<String,Object> params) throws Exception{
String resultMsg = "";
String _projNm = excelWp.get("col1",0).trim();
String _projNm = excelWp.get("col1",0);
if( _projNm == null ) {
throw new Exception( "프로젝트명이 존재하지 않습니다" );
} else {
_projNm = _projNm.trim();
}
String _projCdNm1 = excelWp.get("col1",1).trim();
String _projCdNm2 = excelWp.get("col3",1).trim();
String _gongsaNm = excelWp.get("col1",2).trim();

View File

@ -31,13 +31,13 @@
src="${pageContext.request.contextPath}/js/map/main/download.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/map/main/main.js"></script>
src="${pageContext.request.contextPath}/js/map/main/main.js?v=20250224"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/map/main/map.js"></script>
src="${pageContext.request.contextPath}/js/map/main/map.js?v=20250224"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/map/main/left/left.js"></script>
src="${pageContext.request.contextPath}/js/map/main/left/left.js?v=20250224"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/map/main/design.js"></script>
src="${pageContext.request.contextPath}/js/map/main/design.js?v=20250224"></script>
<script language="javascript">
$(document).ready(function() {
@ -156,7 +156,7 @@ function LoadingShow() {
<li><a href="javascript:showJusangdo();"
class="map-top-btn map-btn-icon-column">시추<br />주상도
</a></li>
<li><a href="javascript:showSichuInfo();"
<li><a href="javascript:showSichuInfoDetail();"
class="map-top-btn map-btn-icon-info">정보<br />보기
</a></li>
<li><a href="javascript:showSichuInfo2();"

View File

@ -10,7 +10,6 @@ var collection; // 그리드의 데이타 객체
// Data 저장.
function fn_save(rUrl) {
// ----------------------- kendoGrid XML 구조저장 시작 -----------------------
var grid = kendoJQuery("#kictGrid").data("kendoGrid");
var dataSource = grid.dataSource;
@ -360,16 +359,56 @@ function fn_grid_refresh(){
});
function onFocusRockJointSpacing(e) {
const parentElement = e.parentNode;
if (parentElement) {
const observer = new MutationObserver(mutations => {
for (const mutation of mutations) {
for (const addedNode of mutation.addedNodes) {
if (addedNode.nodeName === 'INPUT') { // Check if it's an INPUT element
const input = addedNode;
input.select();
observer.disconnect(); // Stop observing once found
return; // Important: Exit after finding the input
}
}
}
});
observer.observe(parentElement, { childList: true, subtree: true }); // Observe e's children and descendants
// Optional: Timeout in case the input never appears (for error handling)
setTimeout(() => {
observer.disconnect();
console.error("Input not found after timeout");
}, 5000); // Adjust timeout as needed
}
}
function onDataBound(e) {
var gridKict = kendoJQuery("#kictGrid");
var grid = kendoJQuery("#kictGrid").data("kendoGrid");
/* 탭 & 엔터키 이동 시작 */
grid.table.on('click', function(ev) {
if($(ev.target).is('.noneditable')){
//ev.preventDefault();
//ev.stopImmediatePropagation();
}
const allowHyphen = ev.target.getAttribute("data-allow-hyphen");
if( allowHyphen !== null && typeof allowHyphen !== 'undefined' && allowHyphen.toLowerCase() === "true" ) {
onFocusRockJointSpacing(ev.target);
}
});
grid.table.on('keydown', function moveToNext(e) {
@ -404,9 +443,9 @@ function fn_grid_refresh(){
slickensideDepthTo: { type: "number" },
slickensideDirection: { type: "number" },
slickensideAngle: { type: "number" },
slickensideMax: { type: "number" },
slickensideMin: { type: "number" },
slickensideAvg: { type: "number" },
slickensideMax: { type: "string" },
slickensideMin: { type: "string" },
slickensideAvg: { type: "string" },
slickensideRough: { type: "number" },
}
},
@ -429,9 +468,43 @@ function fn_grid_refresh(){
{
title: "절리간격",
columns: [
{ field: "slickensideMax", title: "최대(m)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (slickensideMax == null) ? '0' : slickensideMax #</div>" },
{ field: "slickensideMin", title: "최소(m)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (slickensideMin == null) ? '0' : slickensideMin #</div>" },
{ field: "slickensideAvg", title: "평균(m)", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (slickensideAvg == null) ? '0' : slickensideAvg #</div>" },
{ field: "slickensideMax", title: "최대(m)", editor: chooseEditorAllowHyphen, attributes: { style:"text-align: right" },
template: function(data){
// "<div class='td-data'>#= (slickensideMax == null) ? '0' : slickensideMax #</div>" },
if( data.slickensideMax === "") {
data.slickensideMax = "0";
} else if( data.slickensideMax === "-999") {
data.slickensideMax = "-";
}
var url = "<div class='td-data' data-allow-hyphen='true'>" + data.slickensideMax + "</div>";
return url;
}
},
{ field: "slickensideMin", title: "최소(m)", editor: chooseEditorAllowHyphen, attributes: { style:"text-align: right" },
template: function(data){
// "<div class='td-data'>#= (slickensideMin == null) ? '0' : slickensideMin #</div>" },
if( data.slickensideMin === "") {
data.slickensideMin = "0";
} else if( data.slickensideMin === "-999") {
data.slickensideMin = "-";
}
var url = "<div class='td-data' data-allow-hyphen='true'>" + data.slickensideMin + "</div>";
return url;
}
},
{ field: "slickensideAvg", title: "평균(m)", editor: chooseEditorAllowHyphen, attributes: { style:"text-align: right" },
template: function(data){
// "<div class='td-data'>#= (slickensideAvg == null) ? '0' : slickensideAvg #</div>"
if( data.slickensideAvg === "") {
data.slickensideAvg = "0";
} else if( data.slickensideAvg === "-999") {
data.slickensideAvg = "-";
}
var url = "<div class='td-data' data-allow-hyphen='true'>" + data.slickensideAvg + "</div>";
return url;
}
},
]
},
{ field: "slickensideRough", title: "거칠기", editor: chooseEditor, attributes: { style:"text-align: right" }, template: "<div class='td-data'>#= (slickensideRough == null) ? '0' : slickensideRough #</div>" },
@ -463,7 +536,6 @@ function fn_grid_refresh(){
// 입력 type 선택
function chooseEditor(container, options) {
switch (options.model.COLUMN) {
default:
numericEditor(container, options);
@ -471,6 +543,14 @@ function fn_grid_refresh(){
}
}
function chooseEditorAllowHyphen(container, options) {
switch (options.model.COLUMN) {
default:
numericEditorAllowHyphen(container, options);
break;
}
}
}
</script>
@ -480,7 +560,7 @@ function fn_grid_refresh(){
<div class="page-explanation page-explanation-sm marT20">
<div class="page-explanation-inner">
<p class="page-explanation-text">
※ 모두 필수 입력입니다. 값을 입력할 수 없는 경우 <span class="textR">-</span>(하이픈)을 기입해주세요.
※ 모두 필수 입력입니다. <span class="textR">절리간격 값이 (N/A)</span>인 경우 <span class="textR">-</span>(하이픈)을 기입해주세요.
</p>
</div>
</div>

View File

@ -16,7 +16,6 @@
</script>
<script type="text/javascript">
var _tempReference = new Array(); //시험항목 단위설정 저장변수
var _treeGrid;
var _selectedKey = ""; //버튼 클릭시 선택된 시추공홀코드 + 시험코드저장변수
@ -540,6 +539,7 @@ function fnGetKeyHoleCode(){
//====================================================
//kendoUI
kendoJQuery(document).ready(function() {
fnStep("${mapMetaInfo.STEP}", "ulStepList");
// 그리드 커스텀
@ -557,7 +557,7 @@ kendoJQuery(document).ready(function() {
data:[
<c:forEach var="item" items="${treeList}">
{ id : "${item.id}"
, parentId:"${item.pid}"
<c:if test=" item.pid.equals(\"2001\") == false }">, parentId:"${item.pid}"</c:if>
, expanded: false
<c:if test="${item.sumDbCnt+0 > 0 && item.level+0 == 2}">
, allowFileList_complete: true

View File

@ -1888,9 +1888,56 @@ for(int i=0; i<jusangdoCnt; i++){
String zipPath = fileCreatePathZip+projectCode;
String zipFile = projectCode+".zip";
CompressZip compressZip = new CompressZip();
try {
compressZip.compress(zipPath, fileCreatePathZip, zipFile);
out.println("압축 성공!");
} catch (IOException e) {
out.println("압축 실패 (IOException): " + e.getMessage());
e.printStackTrace(); // 콘솔 또는 로그에 에러 메시지 출력 (디버깅에 유용)
} catch (NullPointerException e) {
out.println("압축 실패 (NullPointerException): " + e.getMessage());
e.printStackTrace();
} catch (IllegalArgumentException e) {
out.println("압축 실패 (IllegalArgumentException): " + e.getMessage());
e.printStackTrace();
} catch (Exception e) { // 그 외의 예외
out.println("압축 실패 (기타 예외): " + e.getMessage());
e.printStackTrace();
}
String savePath = EgovProperties.getProperty("Geoinfo.FilePath").trim()+ "report\\service\\";
Folder = new File(savePath);
if (!Folder.exists()) {
try{
Folder.mkdirs(); //폴더 생성합니다.
}
catch(Exception e){
e.getStackTrace();
}
}else {
}
System.out.println("zipPath----------"+zipPath);
System.out.println("fileCreatePathZip+zipFilep----------"+fileCreatePathZip+zipFile);
System.out.println("savePath----------"+savePath);
try {
compressZip.compress(zipPath,savePath, zipFile);
out.println("압축 성공!");
} catch (IOException e) {
out.println("압축 실패 (IOException): " + e.getMessage());
e.printStackTrace(); // 콘솔 또는 로그에 에러 메시지 출력 (디버깅에 유용)
} catch (NullPointerException e) {
out.println("압축 실패 (NullPointerException): " + e.getMessage());
e.printStackTrace();
} catch (IllegalArgumentException e) {
out.println("압축 실패 (IllegalArgumentException): " + e.getMessage());
e.printStackTrace();
} catch (Exception e) { // 그 외의 예외
out.println("압축 실패 (기타 예외): " + e.getMessage());
e.printStackTrace();
}
//클라이언트로 파일을 내릴 때

View File

@ -175,7 +175,7 @@ body,
/* cbp-spmenu popup 끝 */
/* ====================================== */
.page-title {
.page-title {
position: relative;
padding: 40px 0px 25px 0px;
margin-bottom: 40px;

File diff suppressed because one or more lines are too long

View File

@ -200,9 +200,8 @@ body,
/* 컨텐츠 큰제목 시작 */
.dummy-css-01 {
}
.page-title {
position: relative;

View File

@ -78,6 +78,71 @@ function showSichuInfo() {
alert("시추공을 선택해주세요!!");
}
//정보보기 누를 때, 사업별 시추공 상세정보가 나타나도록 한다.
function showSichuInfoDetail() {
var sichuInfo = getSelectAreaInfo2();
if (sichuInfo == null || sichuInfo == undefined) {
var codes = getSelectHoleInfo();
if (codes != "") {
sichuInfo = "";
var values = codes.split(",");
for (var i = 0; i < values.length; i++) {
sichuInfo = sichuInfo + "" + values[i] + "";
if (i != values.length - 1) {
sichuInfo = sichuInfo + ","
}
}
const arrSichuInfoComma = String(sichuInfo).split(',');
const regex = /([a-zA-Z]+\d+).*/;
let foundProjectCode = null;
let isMultipleProject = false;
for(i = 0; i < arrSichuInfoComma.length; i++) {
const found = arrSichuInfoComma[i].match(regex);
if( found && found.length === 2 ) {
if( foundProjectCode != null && foundProjectCode !== found[1] ) {
isMultipleProject = true;
}
foundProjectCode = found[1];
}
}
if( popupDataOpen && foundProjectCode ) {
if( isMultipleProject ) {
alert('가장 마지막에 선택된 하나의 프로젝트만 조회됩니다.');
}
popupDataOpen(foundProjectCode);
}
return;
}
} else {
openWaitWin();
var selectHolde = HOLE_SELECT.addFeatures;
var featuresHole = "";
for(var i = 0; i<HOLE_SELECT.features.length; i++ ){
if(i == 0){
featuresHole = HOLE_SELECT.features[i].attributes.CODE;
}else{
featuresHole += ","+HOLE_SELECT.features[i].attributes.CODE;
}
}
var detailSichu = window.open("/map/detailSichuS.do?areaHcode="+featuresHole+"&"+sichuInfo, 'detailSichu', 'scrollbars=yes,titlebar=no,width=685,height=285,left=300,top=0', true);
detailSichu.focus();
return;
}
alert("시추공을 선택해주세요!!");
}
function onSearchJiban() {
var sichuInfo = getSelectAreaInfo();

View File

@ -13,7 +13,7 @@ function textEditor(container, options) {
}
// 입력 type number로 변경
function numericEditor(container, options) {
function numericEditor(container, options, isHyphenAllowed = false) {
/*kendoJQuery('<input name="' + options.field + '" id="numeric-min-max" class="numeric-max-width-200" min="0" max="9999" />')*/
kendoJQuery('<input name="' + options.field + '" id="numeric-min-max" />')
.appendTo(container)
@ -34,6 +34,21 @@ function numericEditor(container, options) {
//numericLengthControl();
}
//입력 type number로 변경 그러나 hyphen 입력 허용
function numericEditorAllowHyphen(container, options, isHyphenAllowed = false) {
kendoJQuery('<input type="text" name="' + options.field + '"/>')
.addClass('k-input k-textbox')
.appendTo(container)
.blur(function(e) {
if (e.originalEvent.target.value) {
options.model.set("result", 1);
} else {
options.model.set("result", null);
}
})
}
// NumericTextBox from 텍스트 길이 제한
function numericLengthControl() {
var ntb = kendoJQuery("#numeric-min-max").data("kendoNumericTextBox");
@ -310,6 +325,7 @@ function setEditedItemPositionKendoTo(colIndex, rowIndex , grid, dataGrid) {
//gridNotNull 파라미터에 false를 전달하면 kendo Grid에 null값을 넣어도 됨(예외처리)
function fn_saveNumberCheckKendo(type, gridRoot, dataGrid, grid, startIndex, item, rowInfoItem, gridNotNull , kind){
var rowCount = gridRoot._view.length; //가로(행) 갯수
var colCount = rowInfoItem.length; //세로(열) 갯수
var chkDupFrom = []; //From 값 중복 체크
@ -468,7 +484,10 @@ function fn_saveNumberCheckKendo(type, gridRoot, dataGrid, grid, startIndex, ite
}
}
if(fn_isNull(val) != "" && (is_float(val,Number(item[i+"_start_num"]),Number(item[i+"_end_num"])) == false || is_numberRange(val,Number(item[i+"_start_num"]),Number(item[i+"_end_num"])) == false )){
if(fn_isNull(val) != "" && val === "-") {
} else if(fn_isNull(val) != "" && (is_float(val,Number(item[i+"_start_num"]),Number(item[i+"_end_num"])) == false || is_numberRange(val,Number(item[i+"_start_num"]),Number(item[i+"_end_num"])) == false )){
alert(title + "값의 범위를 확인하시기 바랍니다. ([2]정수 : "+item[i+"_start_num"]+"자리, 소수점 이하 : "+ item[i+"_end_num"]+"자리)");
fn_progressbarHide(); //ProgressbarHide
setEditedItemPositionKendoFrom(i, r , grid, dataGrid);

Binary file not shown.