엑셀업로드하여 건설현장 입력
parent
87306a7636
commit
1a67d34ca9
|
|
@ -79,7 +79,9 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
|
||||||
</ul>
|
</ul>
|
||||||
<p class="check-title">기관명이 없을 시, 연락 바랍니다. 연락처: <span class="contact-tel">031-995-0934</span></p>
|
<p class="check-title">기관명이 없을 시, 연락 바랍니다. 연락처: <span class="contact-tel">031-995-0934</span></p>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn-green" type="button" id="excel-input-btn">엑셀자료입력</button>
|
<!-- 실제 파일 선택 input (숨김 처리) -->
|
||||||
|
<input type="file" id="excel-file-input" accept=".xls" style="display: none;">
|
||||||
|
<button class="btn-green" type="button" onclick="triggerExcelUpload()">엑셀자료입력</button>
|
||||||
<button class="btn-green btn-excel-download" type="button" id="excel-download-btn">엑셀 양식 다운로드</button>
|
<button class="btn-green btn-excel-download" type="button" id="excel-download-btn">엑셀 양식 다운로드</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="table-container">
|
<div id="table-container">
|
||||||
|
|
@ -106,6 +108,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
|
||||||
<div id="calenderDiv" class="trViewOff" style="position:absolute;"></div>
|
<div id="calenderDiv" class="trViewOff" style="position:absolute;"></div>
|
||||||
|
|
||||||
<!-- javascript start-->
|
<!-- javascript start-->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var tableId = 0;
|
var tableId = 0;
|
||||||
|
|
||||||
|
|
@ -314,52 +317,52 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
|
||||||
dataIndexValue = tableDataElements[i].getAttribute('data-index');
|
dataIndexValue = tableDataElements[i].getAttribute('data-index');
|
||||||
|
|
||||||
// 사업명
|
// 사업명
|
||||||
var constNameEle = document.getElementById('const-name-' + (i + 1));
|
var constNameEle = document.getElementById('const-name-' + dataIndexValue);
|
||||||
if (constNameEle) {
|
if (constNameEle) {
|
||||||
jsonItem.constName = constNameEle.value;
|
jsonItem.constName = constNameEle.value;
|
||||||
}
|
}
|
||||||
// 사업기간 - 시작
|
// 사업기간 - 시작
|
||||||
var constStartDateEle = document.getElementById('const-start-date-' + (i + 1));
|
var constStartDateEle = document.getElementById('const-start-date-' + dataIndexValue);
|
||||||
if (constStartDateEle) {
|
if (constStartDateEle) {
|
||||||
jsonItem.constStartDate = constStartDateEle.value;
|
jsonItem.constStartDate = constStartDateEle.value;
|
||||||
}
|
}
|
||||||
// 사업기간 - 종료
|
// 사업기간 - 종료
|
||||||
var constEndDateEle = document.getElementById('const-end-date-' + (i + 1));
|
var constEndDateEle = document.getElementById('const-end-date-' + dataIndexValue);
|
||||||
if (constEndDateEle) {
|
if (constEndDateEle) {
|
||||||
jsonItem.constEndDate = constEndDateEle.value;
|
jsonItem.constEndDate = constEndDateEle.value;
|
||||||
}
|
}
|
||||||
// 사업단계
|
// 사업단계
|
||||||
var constStateCodeEle = document.getElementById('const-state-code-' + (i + 1));
|
var constStateCodeEle = document.getElementById('const-state-code-' + dataIndexValue);
|
||||||
if (constStateCodeEle) {
|
if (constStateCodeEle) {
|
||||||
jsonItem.constStateCode = constStateCodeEle.value;
|
jsonItem.constStateCode = constStateCodeEle.value;
|
||||||
}
|
}
|
||||||
// 발주기관 - 담당부서
|
// 발주기관 - 담당부서
|
||||||
var masterCompanyDeptEle = document.getElementById('master-company-dept-' + (i + 1));
|
var masterCompanyDeptEle = document.getElementById('master-company-dept-' + dataIndexValue);
|
||||||
if (masterCompanyDeptEle) {
|
if (masterCompanyDeptEle) {
|
||||||
jsonItem.masterCompanyDept = masterCompanyDeptEle.value;
|
jsonItem.masterCompanyDept = masterCompanyDeptEle.value;
|
||||||
}
|
}
|
||||||
// 발주기관 - 담당자
|
// 발주기관 - 담당자
|
||||||
var masterCompanyAdminEle = document.getElementById('master-company-admin-' + (i + 1));
|
var masterCompanyAdminEle = document.getElementById('master-company-admin-' + dataIndexValue);
|
||||||
if (masterCompanyAdminEle) {
|
if (masterCompanyAdminEle) {
|
||||||
jsonItem.masterCompanyAdmin = masterCompanyAdminEle.value;
|
jsonItem.masterCompanyAdmin = masterCompanyAdminEle.value;
|
||||||
}
|
}
|
||||||
// 발주기관 - 담당자 연락처
|
// 발주기관 - 담당자 연락처
|
||||||
var masterCompanyTelEle = document.getElementById('master-company-tel-' + (i + 1));
|
var masterCompanyTelEle = document.getElementById('master-company-tel-' + dataIndexValue);
|
||||||
if (masterCompanyTelEle) {
|
if (masterCompanyTelEle) {
|
||||||
jsonItem.masterCompanyTel = masterCompanyTelEle.value;
|
jsonItem.masterCompanyTel = masterCompanyTelEle.value;
|
||||||
}
|
}
|
||||||
// 건설사 - 건설사명
|
// 건설사 - 건설사명
|
||||||
var constCompanyNameEle = document.getElementById('const-company-dept-' + (i + 1));
|
var constCompanyNameEle = document.getElementById('const-company-dept-' + dataIndexValue);
|
||||||
if (constCompanyNameEle) {
|
if (constCompanyNameEle) {
|
||||||
jsonItem.constCompanyName = constCompanyNameEle.value;
|
jsonItem.constCompanyName = constCompanyNameEle.value;
|
||||||
}
|
}
|
||||||
// 건설사 - 담당자
|
// 건설사 - 담당자
|
||||||
var constCompanyAdminEle = document.getElementById('const-company-admin-' + (i + 1));
|
var constCompanyAdminEle = document.getElementById('const-company-admin-' + dataIndexValue);
|
||||||
if (constCompanyAdminEle) {
|
if (constCompanyAdminEle) {
|
||||||
jsonItem.constCompanyAdmin = constCompanyAdminEle.value;
|
jsonItem.constCompanyAdmin = constCompanyAdminEle.value;
|
||||||
}
|
}
|
||||||
// 건설사 - 담당자 연락처
|
// 건설사 - 담당자 연락처
|
||||||
var constCompanyTelEle = document.getElementById('const-company-tel-' + (i + 1));
|
var constCompanyTelEle = document.getElementById('const-company-tel-' + dataIndexValue);
|
||||||
if (constCompanyTelEle) {
|
if (constCompanyTelEle) {
|
||||||
jsonItem.constCompanyTel = constCompanyTelEle.value;
|
jsonItem.constCompanyTel = constCompanyTelEle.value;
|
||||||
}
|
}
|
||||||
|
|
@ -368,7 +371,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
|
||||||
jsonItem.cid=cid;
|
jsonItem.cid=cid;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isValid(i + 1) == false ) {
|
if ( isValid(dataIndexValue) == false ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
jsonData.push(jsonItem);
|
jsonData.push(jsonItem);
|
||||||
|
|
@ -386,10 +389,13 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
|
||||||
xhr.onreadystatechange = function() {
|
xhr.onreadystatechange = function() {
|
||||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||||
// 요청 성공 시 처리
|
// 요청 성공 시 처리
|
||||||
|
let result = JSON.parse(xhr.response);
|
||||||
|
console.log(result.resultCode)
|
||||||
|
|
||||||
console.log(xhr.responseText);
|
console.log(xhr.responseText);
|
||||||
const obj = JSON.parse(xhr.responseText);
|
const obj = JSON.parse(xhr.responseText);
|
||||||
alert(obj.message);
|
alert(obj.message);
|
||||||
window.location.href='/drilling/inquiry.do';
|
// window.location.href='/drilling/inquiry.do';
|
||||||
} else if (xhr.readyState === 4) {
|
} else if (xhr.readyState === 4) {
|
||||||
// 요청 실패 시 처리
|
// 요청 실패 시 처리
|
||||||
console.error('요청 실패:', xhr.status);
|
console.error('요청 실패:', xhr.status);
|
||||||
|
|
@ -528,7 +534,156 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
|
||||||
};
|
};
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function triggerExcelUpload() {
|
||||||
|
// 숨겨진 파일 선택 input을 클릭시킴
|
||||||
|
document.getElementById('excel-file-input').click();
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('excel-file-input').addEventListener('change', function (event) {
|
||||||
|
const file = event.target.files[0];
|
||||||
|
if (file) {
|
||||||
|
handleExcelUpload(file);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function handleExcelUpload(file) {
|
||||||
|
document.getElementById("table-container").innerHTML = '';
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onload = function (e) {
|
||||||
|
const data = new Uint8Array(e.target.result);
|
||||||
|
const workbook = XLSX.read(data, { type: 'array', cellDates: true });
|
||||||
|
|
||||||
|
const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||||
|
const json = XLSX.utils.sheet_to_json(firstSheet, { header: 1, defval: "" });
|
||||||
|
|
||||||
|
populateFromExcel(json);
|
||||||
|
};
|
||||||
|
reader.readAsArrayBuffer(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
function populateFromExcel(rows) {
|
||||||
|
// rows[0] = 헤더, rows[1..] = 실제 데이터
|
||||||
|
for (let i = 2; i < rows.length; i++) {
|
||||||
|
const row = rows[i];
|
||||||
|
|
||||||
|
if (row[1] != "" || row[2] != "" || row[3] != "" || row[4] != "" || row[5] != "" || row[6] != "" || row[7] != "" || row[8] != "" || row[9] != "" || row[10] != "" || row[11]) {
|
||||||
|
const data = {
|
||||||
|
constName: row[1], // 사업명
|
||||||
|
constStartDate: row[2], // 사업기간 시작일
|
||||||
|
constEndDate: row[3], // 사업기간 종료일
|
||||||
|
constStateCode: row[4], // 사업단계
|
||||||
|
masterCompanyDept: row[5], // 발주기관 담당부서
|
||||||
|
masterCompanyAdmin: row[6], // 발주기관 담당자
|
||||||
|
masterCompanyTel: row[7], // 발주기관 담당자 연락처
|
||||||
|
constCompanyDept: row[8], // 건설사 건설사명
|
||||||
|
constCompanyAdmin: row[9], // 건설사 담당자
|
||||||
|
constCompanyTel: row[10], // 건설사 담당자 연락처
|
||||||
|
unselected: row[11] === '미지정' // 건설사 미지정
|
||||||
|
};
|
||||||
|
addItemWithData(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('excel-file-input').value = ''
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function addItemWithData(data) {
|
||||||
|
tableId += 1;
|
||||||
|
const today = getToday();
|
||||||
|
|
||||||
|
// 사업단계 코드가 문자열로 전달되면 숫자로 비교하도록 수정
|
||||||
|
const stateCode = [
|
||||||
|
{value:1, txt:"타당성조사 및 계획검토", selected:false},
|
||||||
|
{value:2, txt:"기본설계", selected:false},
|
||||||
|
{value:3, txt:"실시설계", selected:false},
|
||||||
|
{value:4, txt:"시공중", selected:false},
|
||||||
|
{value:5, txt:"준공", selected:false},
|
||||||
|
{value:6, txt:"유지보수", selected:false}
|
||||||
|
];
|
||||||
|
|
||||||
|
let const_name = data.constName == "" ? "" : data.constName;
|
||||||
|
let const_state_code = data.constStateCode == "" ? "타당성조사 및 계획검토" : data.constStateCode;
|
||||||
|
let const_start_date = data.constStartDate == "" ? "" : data.constStartDate.toISOString().split('T')[0];
|
||||||
|
let const_end_date = data.constEndDate == "" ? "" : data.constEndDate.toISOString().split('T')[0];
|
||||||
|
let master_company_dept = data.masterCompanyDept == "" ? "" : data.masterCompanyDept;
|
||||||
|
let master_company_name = data.masterCompanyAdmin == "" ? "" : data.masterCompanyAdmin;
|
||||||
|
let master_company_tel = data.masterCompanyTel == "" ? "" : data.masterCompanyTel;
|
||||||
|
let const_company_dept = data.constCompanyDept == "" ? "" : data.constCompanyDept;
|
||||||
|
let const_company_name = data.constCompanyAdmin == "" ? "" : data.constCompanyAdmin;
|
||||||
|
let const_company_tel = data.constCompanyTel == "" ? "" : data.constCompanyTel;
|
||||||
|
let fin_const_company = data.unselected ? 'checked' : '';
|
||||||
|
|
||||||
|
let stateOptions = '';
|
||||||
|
for (let i = 0; i < stateCode.length; i++) {
|
||||||
|
if (stateCode[i].txt === const_state_code) {
|
||||||
|
stateOptions += `<option value="` + stateCode[i].value + `" selected>` + stateCode[i].txt + `</option>`;
|
||||||
|
} else {
|
||||||
|
stateOptions += `<option value="` + stateCode[i].value + `">` + stateCode[i].txt + `</option>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const tableHtml = `
|
||||||
|
<div class="table-scrollable" data-index="`+ tableId +`" data-` + tableId + `>
|
||||||
|
<table class="table-bordered table-data" data-index="` + tableId + `">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 15%;">
|
||||||
|
<col style="width: 35%;">
|
||||||
|
<col style="width: 15%;">
|
||||||
|
<col style="width: 35%;">
|
||||||
|
</colgroup>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>사업명</th>
|
||||||
|
<td colspan="3">
|
||||||
|
<input type="text" value="`+ const_name +`" onfocusout="duplicateCheckProjectName(this)" class="input-box" id="const-name-` + tableId + `" placeholder="사업명">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>사업기간</th>
|
||||||
|
<td>
|
||||||
|
<input type="date" value="` + const_start_date + `" class="date" id="const-start-date-` + tableId + `">
|
||||||
|
<span>~</span>
|
||||||
|
<input type="date" value="` + const_end_date + `" class="date date-2" id="const-end-date-` + tableId + `">
|
||||||
|
</td>
|
||||||
|
<th>사업단계</th>
|
||||||
|
<td>
|
||||||
|
<select class="selectbox" id="const-state-code-` + tableId + `">
|
||||||
|
<option disabled>사업단계선택</option>
|
||||||
|
` +
|
||||||
|
stateOptions
|
||||||
|
+ `
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>발주기관</th>
|
||||||
|
<td colspan="3">
|
||||||
|
<input type="text" value="` + master_company_dept + `" class="input-box information1" id="master-company-dept-` + tableId + `" placeholder="담당부서">
|
||||||
|
<input type="text" value="` + master_company_name + `" class="input-box information2" id="master-company-admin-` + tableId + `" placeholder="담당자">
|
||||||
|
<input type="text" value="` + master_company_tel + `" class="input-box information3" id="master-company-tel-` + tableId + `" placeholder="담당자 연락처">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>건설사</th>
|
||||||
|
<td colspan="3">
|
||||||
|
<input type="text" value="` + const_company_dept + `" class="input-box information1" id="const-company-dept-` + tableId + `" placeholder="건설사명">
|
||||||
|
<input type="text" value="` + const_company_name + `" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자">
|
||||||
|
<input type="text" value="` + const_company_tel + `" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처">
|
||||||
|
<label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `" ` + fin_const_company + `>
|
||||||
|
<span class="unselected-constructor-label-text">건설사 미선정</span>
|
||||||
|
</label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>`
|
||||||
|
;
|
||||||
|
document.getElementById("table-container").insertAdjacentHTML("beforeend", tableHtml);
|
||||||
|
if (document.getElementsByClassName('table-scrollable').length < 1) {addItem()} // 엑셀로 받아오기 중 실패할 경우 삭제한 빈 양식 원복
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<!-- javascript end-->
|
<!-- javascript end-->
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue