건설현장 입력 여러사업 등록 처리, 사업명 중복 체크 보완

main
유지인 2025-07-14 15:15:23 +09:00
parent 8004401036
commit f310066eee
6 changed files with 171 additions and 101 deletions

View File

@ -92,7 +92,7 @@ public class ProjectListController {
jsonObject.put("resultCode", "The name already exists.");
jsonObject.put("message", "해당 사업명이 이미 있습니다. 다른 사업명으로 입력해 주세요. code 2");
}
} else if( false && 0 < arrConstNameByProjectNameFromTempConstructSiteInfo.size() ) {
} else if( 0 < arrConstNameByProjectNameFromTempConstructSiteInfo.size() ) {
jsonObject.put("result", "false");
jsonObject.put("resultCode", "The name already exists.");
jsonObject.put("message", "해당 사업명이 이미 있습니다. 다른 사업명으로 입력해 주세요. code 3");

View File

@ -312,110 +312,130 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
console.log(tableDataElements);
var dataIndexValue;
var jsonData = new Array();
for (var i = 0; i < tableDataElements.length; i++) {
let duplChkEle = document.querySelectorAll('.input-box[id*="const-name"]'); // 엑셀양식 로드시 사업명 중복 체크해야 하는 대상 엘리먼트
for (let i = 0 ; i < duplChkEle.length; i++) {
duplicateCheckProjectName(duplChkEle[i])
}
let duplChkEle = tableDataElements[i].querySelector('.input-box[id*="const-name"]') // 엑셀양식 로드시 사업명 중복 체크해야 하는 대상 엘리먼트
let result = projNmDuplChkResult(duplChkEle)
if (result.result == 'false') {
duplChkEle.focus();
shakeAndHighlight(duplChkEle, result.msg)
return;
} else {
// 중복체크 통과시 border 초기화
var jsonItem = {};
dataIndexValue = tableDataElements[i].getAttribute('data-index');
// 사업명
var constNameEle = document.getElementById('const-name-' + dataIndexValue);
if (constNameEle) {
jsonItem.constName = constNameEle.value;
}
// 사업기간 - 시작
var constStartDateEle = document.getElementById('const-start-date-' + dataIndexValue);
if (constStartDateEle) {
jsonItem.constStartDate = constStartDateEle.value;
}
// 사업기간 - 종료
var constEndDateEle = document.getElementById('const-end-date-' + dataIndexValue);
if (constEndDateEle) {
jsonItem.constEndDate = constEndDateEle.value;
}
// 사업단계
var constStateCodeEle = document.getElementById('const-state-code-' + dataIndexValue);
if (constStateCodeEle) {
jsonItem.constStateCode = constStateCodeEle.value;
}
// 발주기관 - 담당부서
var masterCompanyDeptEle = document.getElementById('master-company-dept-' + dataIndexValue);
if (masterCompanyDeptEle) {
jsonItem.masterCompanyDept = masterCompanyDeptEle.value;
}
// 발주기관 - 담당자
var masterCompanyAdminEle = document.getElementById('master-company-admin-' + dataIndexValue);
if (masterCompanyAdminEle) {
jsonItem.masterCompanyAdmin = masterCompanyAdminEle.value;
}
// 발주기관 - 담당자 연락처
var masterCompanyTelEle = document.getElementById('master-company-tel-' + dataIndexValue);
if (masterCompanyTelEle) {
jsonItem.masterCompanyTel = masterCompanyTelEle.value;
}
// 건설사 - 건설사명
var constCompanyNameEle = document.getElementById('const-company-dept-' + dataIndexValue);
if (constCompanyNameEle) {
jsonItem.constCompanyName = constCompanyNameEle.value;
}
// 건설사 - 담당자
var constCompanyAdminEle = document.getElementById('const-company-admin-' + dataIndexValue);
if (constCompanyAdminEle) {
jsonItem.constCompanyAdmin = constCompanyAdminEle.value;
}
// 건설사 - 담당자 연락처
var constCompanyTelEle = document.getElementById('const-company-tel-' + dataIndexValue);
if (constCompanyTelEle) {
jsonItem.constCompanyTel = constCompanyTelEle.value;
}
if (cid) {
jsonItem.cid=cid;
}
if ( isValid(dataIndexValue) == false ) {
return false;
}
jsonData.push(jsonItem);
}
// 사업명 중복 체크 통과시 등록처리호출
addDrillingInput(tableDataElements)
if (cid) {
xhr.open('POST', '/drilling/input/modify.do', true);
} else {
xhr.open('POST', '/drilling/input/add.do', true);
});
});
// 사업 등록 처리
function addDrillingInput(tableDataElements) {
const cid = getQueryString('CID');
var dataIndexValue;
var jsonData = new Array();
for (var i = 0; i < tableDataElements.length; i++) {
var jsonItem = {};
dataIndexValue = tableDataElements[i].getAttribute('data-index');
// 사업명
var constNameEle = document.getElementById('const-name-' + dataIndexValue);
if (constNameEle) {
jsonItem.constName = constNameEle.value;
}
// 사업기간 - 시작
var constStartDateEle = document.getElementById('const-start-date-' + dataIndexValue);
if (constStartDateEle) {
jsonItem.constStartDate = constStartDateEle.value;
}
// 사업기간 - 종료
var constEndDateEle = document.getElementById('const-end-date-' + dataIndexValue);
if (constEndDateEle) {
jsonItem.constEndDate = constEndDateEle.value;
}
// 사업단계
var constStateCodeEle = document.getElementById('const-state-code-' + dataIndexValue);
if (constStateCodeEle) {
jsonItem.constStateCode = constStateCodeEle.value;
}
// 발주기관 - 담당부서
var masterCompanyDeptEle = document.getElementById('master-company-dept-' + dataIndexValue);
if (masterCompanyDeptEle) {
jsonItem.masterCompanyDept = masterCompanyDeptEle.value;
}
// 발주기관 - 담당자
var masterCompanyAdminEle = document.getElementById('master-company-admin-' + dataIndexValue);
if (masterCompanyAdminEle) {
jsonItem.masterCompanyAdmin = masterCompanyAdminEle.value;
}
// 발주기관 - 담당자 연락처
var masterCompanyTelEle = document.getElementById('master-company-tel-' + dataIndexValue);
if (masterCompanyTelEle) {
jsonItem.masterCompanyTel = masterCompanyTelEle.value;
}
// 건설사 - 건설사명
var constCompanyNameEle = document.getElementById('const-company-dept-' + dataIndexValue);
if (constCompanyNameEle) {
jsonItem.constCompanyName = constCompanyNameEle.value;
}
// 건설사 - 담당자
var constCompanyAdminEle = document.getElementById('const-company-admin-' + dataIndexValue);
if (constCompanyAdminEle) {
jsonItem.constCompanyAdmin = constCompanyAdminEle.value;
}
// 건설사 - 담당자 연락처
var constCompanyTelEle = document.getElementById('const-company-tel-' + dataIndexValue);
if (constCompanyTelEle) {
jsonItem.constCompanyTel = constCompanyTelEle.value;
}
xhr.setRequestHeader('Content-type', 'application/json');
if (cid) {
jsonItem.cid=cid;
}
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// 요청 성공 시 처리
if ( isValid(dataIndexValue) == false ) {
return false;
}
jsonData.push(jsonItem);
}
if (cid) {
xhr.open('POST', '/drilling/input/modify.do', true);
} else {
xhr.open('POST', '/drilling/input/add.do', true);
}
xhr.setRequestHeader('Content-type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// 요청 성공 시 처리
let result = JSON.parse(xhr.response);
console.log(result.resultCode)
console.log(xhr.responseText);
const obj = JSON.parse(xhr.responseText);
alert(obj.message);
// window.location.href='/drilling/inquiry.do';
} else if (xhr.readyState === 4) {
// 요청 실패 시 처리
console.error('요청 실패:', xhr.status);
}
};
xhr.send(JSON.stringify(jsonData));
});
});
if (obj.resultCode == 100) {
if(confirm(obj.message)) {
window.location.href='/drilling/inquiry.do';
}
} else {
alert(obj.message);
}
} else if (xhr.readyState === 4) {
// 요청 실패 시 처리
console.error('요청 실패:', xhr.status);
}
};
xhr.send(JSON.stringify(jsonData));
}
function isValid(index) {
// 사업명

View File

@ -6832,6 +6832,9 @@ ul.faq-q > li textarea {
resize: none;
margin: 0;
}
.drilling .drilling .input-box.error {
border: 2px solid red;
}
.drilling .check-box {
padding-left: 0px;
cursor: pointer;

File diff suppressed because one or more lines are too long

View File

@ -5189,6 +5189,9 @@ ul.faq-q > li textarea {
resize: none;
margin: 0 ;
}
.drilling .input-box.error {
border: 2px solid red;
}
.check-box {
padding-left: 0px;
cursor: pointer;

View File

@ -1857,10 +1857,11 @@ function fn_openClipReport(table,project,hole,sample,etc1,etc2,gbn){
function shakeAndHighlight(targetEle, message) {
var originalStyle = targetEle.style.border; // 원래 스타일 저장
// var originalStyle = targetEle.style.border; // 원래 스타일 저장
// 빨간색 테두리 설정
targetEle.style.border = "2px solid red";
// targetEle.style.border = "2px solid red";
targetEle.classList.add("error");
// 흔들리는 애니메이션 추가
targetEle.classList.add("shake-animation");
@ -1882,7 +1883,9 @@ function shakeAndHighlight(targetEle, message) {
// 3초 후 원래 스타일로 복원
setTimeout(function() {
targetEle.style.border = originalStyle;
// targetEle.style.border = originalStyle;
targetEle.classList.remove("error");
targetEle.classList.remove("shake-animation");
//targetEle.focus();
showSnackbar();
@ -2035,3 +2038,44 @@ function duplicateCheckProjectName( projectNameInput, projectCode ) {
}
});
}
/**
* 프로젝트 중복 체크
* 동기처리
* 응답 받은 호출한 부분에서 처리
*/
function projNmDuplChkResult( projectNameInput, projectCode) {
if( typeof projectCode === 'undefined' || projectCode ==="null") {
projectCode = null;
}
projectName = projectNameInput.value;
let result = {result:"false", msg: ''};
$.ajax({
type : "GET",
data : {
projectName : projectName,
projectCode : projectCode,
isProjectNameChecking : "true"
},
url : "/project-duplicate-check.json",
dataType : "json",
async: false,
success : function( json ){
resultData = json.result;
if(resultData == "false"){
// shakeAndHighlight(projectNameInput, json.message);
result.result = "false";
result.msg= json.message;
} else {
result.result = "true";
}
},
error: function(xhr, option, error){
alert(xhr.status); // 오류코드
alert(error); // 오류내용
}
});
return result;
}