발주기관계정 관리 시추정보 메뉴 수정요청사항

- 기존 '관리시추정보 현황' 메뉴에는 등록완료인 시추정보 목록만 표시
 - 전체 시추정보 목록 표시는 '시추정보 관리' 메뉴 추가
main
유지인 2026-01-13 10:48:39 +09:00
parent 472d907fba
commit 5d1fd0efda
4 changed files with 458 additions and 0 deletions

View File

@ -47,6 +47,64 @@ public class DrillingInquiryController {
return "/drilling/inquiry/drilling_inquiry";
}
/**
*
* .
* @param map
* @param params
* @param model
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/drilling/mgmt-project.do")
public ModelAndView drillingMgmtProject(Map<String, Object> map, @RequestParam HashMap<String, Object> params, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView("/drilling/mgmt/project");
if(request.getSession().getAttribute("USERNAME") == null){
mv.setViewName("redirect:/index.do?cntyn=0");
return mv;
}
String userId = MyUtil.getStringFromObject( request.getSession().getAttribute("USERID") );
String cls = MyUtil.getStringFromObject( request.getSession().getAttribute("CLS") );
mv.addObject("userId", userId);
mv.addObject("cls", cls);
try {
HashMap<String, Object> spGetProjectMbrParams = drillingInquiryService.spGetProjectMbr( request, params, userId );
mv.addObject("mbr", spGetProjectMbrParams);
} catch (Exception e) {
// TODO Auto-generated catch block
String strTxt =
"---------- BUG REPORTING START ----------" + "\n" +
"에러 문구:[" + request.getRequestURI() + " " + "]" + "\n" +
"params:[\n" + params.toString() + "\n]\n" +
"e.getMessage():[\n" + e.getMessage() + "\n]\n" + "\n" +
"new Date().toString():[" + new Date().toString() + "]\n" + "\n" +
"---------- BUG REPORTING END ----------" + "\n" +
"";
System.out.println(strTxt);
}
return mv;
}
/**
*
* .
* @param map
* @param params
* @param model
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/drilling/inquiry-project.do")
public ModelAndView drillingInquiryProject(Map<String, Object> map, @RequestParam HashMap<String, Object> params, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {

View File

@ -459,6 +459,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
<div class="treeview-project-name">
<p class="project-title">건설현장 관리</p>
<p class="project-value"><a href="/drilling/inquiry-project.do">관리 시추정보 현황</a></p>
<p class="project-value"><a href="/drilling/mgmt-project.do">시추정보 관리</a></p>
<p class="project-value value-is-active">건설현장 조회</p>
<p class="project-value"><a href="/drilling/input.do">건설현장 입력</a></p>
</div>

View File

@ -68,6 +68,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
'&' +'constCompanyName='+ constCompanyName +
'&' +'constCompanyAdmin='+ constCompanyAdmin +
'&' +'constCompanyTel='+ constCompanyTel +
'&' +'projectStateCode=6' +
'&' +'nPage='+ nPage +
'&' +'nCount='+ nCount,
true);
@ -259,6 +260,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
<div class="treeview-project-name">
<p class="project-title">건설현장 관리</p>
<p class="project-value value-is-active">관리 시추정보 현황</p>
<p class="project-value"><a href="/drilling/mgmt-project.do">시추정보 관리</a></p>
<p class="project-value"><a href="/drilling/inquiry.do">건설현장 조회</a></p>
<p class="project-value"><a href="/drilling/input.do">건설현장 입력</a></p>
</div>

View File

@ -0,0 +1,397 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
if (request.getSession().getAttribute("USERID") == null) {
%>
<script>alert('로그인후 이용하실 수 있습니다.');window.location.href='/index.do';</script>
<%
return;
}
%>
<%
if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSession().getAttribute("CLS") ) == false ) {
%>
<script>alert('발주 기관 회원만 이용가능합니다.');window.location.href='/index.do';</script>
<%
return;
}
%>
<script src="../js/body/psboard/situTable.js"></script>
<%@ include file="/include/inc_head_2021_new.jsp" %>
<!-- header start-->
<c:import url="/drilling/common/includeTopMenu.do" charEncoding="UTF-8" />
<!-- header end-->
<style>
#const-state-code {
width: 180px;
margin-bottom: 0;
}
#project-state-code {
width: 160px;
margin-bottom: 0;
}
</style>
<!-- javascript start-->
<script type="text/javascript">
function onClickBtnSearch() {
const pagingEle = document.getElementById('paging');
const activeLinks = pagingEle.querySelectorAll('li.is-active a');
const constTag = trim( document.getElementById('const-tag').value );
const constName = trim( document.getElementById('const-name').value );
const constStartDate = trim( document.getElementById('const-start-date').value );
const constEndDate = trim( document.getElementById('const-end-date').value );
const constStateCode = trim( document.getElementById('const-state-code').value );
const projectStateCode = trim( document.getElementById('project-state-code').value );
const constCompanyName = trim( document.getElementById('company-dept').value );
const constCompanyAdmin = trim( document.getElementById('company-admin').value );
const constCompanyTel = trim( document.getElementById('company-tel').value );
const nCount = Number(pagingEle.getAttribute('data-ncount'));
const nPage = Number(pagingEle.getAttribute('data-npage'));
xhr.open('GET', '/drilling/inquiry/list.do?' +
'constTag='+ constTag +
'&' +'constName='+ constName +
'&' +'constStartDate='+ constStartDate +
'&' +'constEndDate='+ constEndDate +
'&' +'constStateCode='+ constStateCode +
'&' +'projectStateCode='+ projectStateCode +
'&' +'constCompanyName='+ constCompanyName +
'&' +'constCompanyAdmin='+ constCompanyAdmin +
'&' +'constCompanyTel='+ constCompanyTel +
'&' +'nPage='+ nPage +
'&' +'nCount='+ nCount,
true);
xhr.setRequestHeader('Content-type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// 요청 성공 시 처리
console.log('%o', xhr.responseText);
const obj = JSON.parse(xhr.responseText);
var dataListEle = document.getElementById('data-list');
dataListEle.innerHTML = '';
var content = '';
for( idx in obj.datas ) {
const constStartDate = obj.datas[idx].constStartDate == null ? '알 수 없음' : obj.datas[idx].constStartDate;
const constEndDate = obj.datas[idx].constEndDate == null ? '알 수 없음' : obj.datas[idx].constEndDate;
const masterCompanyDept = obj.datas[idx].masterCompanyDept == null ? '-' : obj.datas[idx].masterCompanyDept;
const masterCompanyAdmin = obj.datas[idx].masterCompanyAdmin == null ? '-' : obj.datas[idx].masterCompanyAdmin;
const masterCompanyTel = obj.datas[idx].masterCompanyTel == null ? '-' : obj.datas[idx].masterCompanyTel;
const coinstCompanyDept = obj.datas[idx].coinstCompanyDept == null ? '-' : obj.datas[idx].coinstCompanyDept;
const constCompanyAdmin = obj.datas[idx].constCompanyAdmin == null ? '-' : obj.datas[idx].constCompanyAdmin;
const constCompanyTel = obj.datas[idx].constCompanyTel == null ? '-' : obj.datas[idx].constCompanyTel;
content +=
`
<tr>
<td>` + (obj.count - idx - (nCount * (nPage - 1))) + `</td>
<td style="text-align: left; text-indent: 10px; cursor: pointer" data-project-code="` + obj.datas[idx].projectCode + `" onmousedown="handleMouseDown()" onmousemove="handleMouseMove()" onmouseup="handleRowClick('` + obj.datas[idx].projectCode + `')" >` + obj.datas[idx].constName + `</td>
<td>` + obj.datas[idx].projectStateCodeName + `</td>
<td>` + constStartDate + ` ~ ` + constEndDate + `</td>
<td>` + obj.datas[idx].constStateCodeName + `</td>
<td>` + masterCompanyDept + `</td>
<td>` + masterCompanyAdmin + `</td>
<td>` + masterCompanyTel + `</td>
<td>` + coinstCompanyDept + `</td>
<td>` + constCompanyAdmin + `</td>
<td>` + constCompanyTel + `</td>
</tr>
`;
}
dataListEle.innerHTML = content;
document.getElementById('count').innerHTML = obj.count;
let firstIndicator = (Math.floor((nPage - 1) / nCount) * nCount) + 1; // 현재 페이지의 첫번째 페이지인디케이터 번호
let lastIndicator = Math.ceil(nPage / nCount) * 10; // 현재 페이지의 마지막 페이지인디케이터 번호
let totalIndicator = Math.ceil(obj.count / nCount); // 총 페이지인디케이터 번호
let pagingEleHTML = "<ul>"
if (!(firstIndicator-1) < 1) {
pagingEleHTML += `<li data-npage="` + (firstIndicator-1) +`" class="page-button"><a href="javascript:void()"><img src="/com/img/common/icon/ico_chevron.svg" alt="Chevron-prev" class="page-prev"></a></li>
`;
}
for( let i = firstIndicator; i<lastIndicator+1; i++ ) {
if (i <= totalIndicator) {
if( i === nPage ) {
pagingEleHTML += `<li data-npage="` + i + `" class="page-button is-active"><a href="javascript:void()">` + i + `</a></li>`;
} else {
pagingEleHTML += `<li data-npage="` + i + `" class="page-button" ><a href="javascript:void()">` + i + `</a></li>`;
}
}
}
if (lastIndicator < totalIndicator) {
pagingEleHTML += `<li data-npage="` + (lastIndicator+1) +`" class="page-button"><a href="javascript:void()"><img src="/com/img/common/icon/ico_chevron.svg" alt="Chevron-next" class="page-next"></a></li>`;
}
pagingEleHTML += "</ul>";
pagingEle.innerHTML = pagingEleHTML;
// 모든 .page-button 요소 가져오기
const pageButtons = document.querySelectorAll('.page-button');
// 각 버튼에 클릭 이벤트 리스너 추가
pageButtons.forEach(button => {
button.addEventListener('click', () => {
// 클릭된 버튼의 내용 (페이지 번호 등) 가져오기
const pageNumber = button.getAttribute('data-npage');
// 페이지 이동 등 원하는 동작 수행
console.log(`페이지 ` + pageNumber + `로 이동합니다.`);
pagingEle.setAttribute('data-npage', pageNumber);
document.getElementById('btn-search').click();
});
});
departments();
} else if (xhr.readyState === 4) {
// 요청 실패 시 처리
console.error('요청 실패:', xhr.status);
}
};
xhr.send();
}
document.addEventListener('DOMContentLoaded', function() {
// 1. 현재 URL 가져오기
const currentUrl = window.location.href;
console.log("현재 URL:", currentUrl);
// 2. URL에서 쿼리 스트링 부분 파싱하기
const urlParams = new URLSearchParams(window.location.search);
// 3. 'query'라는 이름의 쿼리 스트링 값 읽기
const queryParamValue = urlParams.get('query');
if (queryParamValue !== null) {
document.getElementById('const-name').value = queryParamValue;
const searchWordEle = document.getElementById('search-word');
if( searchWordEle ) {
if( 0 < String(queryParamValue).trim().length ) {
searchWordEle.value = String(queryParamValue).trim();
initLabelBehavior();
}
}
}
document.getElementById('btn-search').addEventListener('click', function() {
onClickBtnSearch();
});
document.getElementById('btn-view-on-map').addEventListener('click', function() {
onClickBtnViewOnMap();
});
// 초기 테이블 추가 트리거
document.getElementById('btn-search').click();
document.getElementById('const-name').addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
event.preventDefault(); // 폼 제출 방지
document.getElementById('btn-search').click();
}
});
document.getElementById('company-dept').addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
event.preventDefault(); // 폼 제출 방지
document.getElementById('btn-search').click();
}
});
document.getElementById('company-admin').addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
event.preventDefault(); // 폼 제출 방지
document.getElementById('btn-search').click();
}
});
document.getElementById('company-tel').addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
event.preventDefault(); // 폼 제출 방지
document.getElementById('btn-search').click();
}
});
});
/**
* 발주기관 목록화면 tr 드래그 시 상세화면 이동 방지처리
* 드래그 이벤트와 클릭이벤트를 구분하여 감지한다.
*/
function handleRowClick(p_code) {
if (!isDragging) {
openMapLoc(p_code);
}
}
</script>
<!-- javascript end-->
<!-- 페이지 컨테이너 시작 -->
<section class="drilling-page-container">
<div class="page-content-wrapper drilling inquiry">
<!-- 서브메뉴 시작 -->
<div class="page-sidebar-wrapper">
<div class="page-sidebar">
<div class="treeview-project-name">
<p class="project-title">건설현장 관리</p>
<p class="project-value"><a href="/drilling/inquiry-project.do">관리 시추정보 현황</a></p>
<p class="project-value value-is-active">시추정보 관리</p>
<p class="project-value"><a href="/drilling/inquiry.do">건설현장 조회</a></p>
<p class="project-value"><a href="/drilling/input.do">건설현장 입력</a></p>
</div>
</div>
</div>
<!-- 서브메뉴 끝 -->
<!-- 콘텐츠 시작 -->
<div class="page-content">
<div class="page-content-inner">
<!-- 카테고리 시작 -->
<div class="category-wrapper">
<ul class="page-category">
<li class="category-item"></li>
<li class="category-item">시추정보 관리</li>
</ul>
<a href="javascript:void()" class="btn btn-help">도움말</a>
</div>
<!-- 카테고리 끝 -->
<h1 class="page-title-1depth">시추정보 관리</h1>
<!-- 내용 시작 -->
<div class="content-wrapper">
<div class="content1">
<div class="page-top-search">
<form class="form-inline">
<label class="input-label-display">검색</label>
<input type="hidden" id="const-tag" name="const-tag" value="P" >
<input type="search" id="const-name" name="const-name" class="input" placeholder="프로젝트명" title="" value="">
<input type="date" id="const-start-date" name="const-start-date" >
<span>~</span>
<input type="date" id="const-end-date" name="const-end-date" >
<!-- <input type="hidden" id="const-state-code" name="const-end-date"> -->
<select id="const-state-code" name="const-state-code">
<option value="" selected="selected">전체</option>
<option value="1">타당성조사 및 계획검토</option>
<option value="2">기본설계</option>
<option value="3">실시설계</option>
<option value="4">시공 중</option>
<option value="5">준공</option>
<option value="6">유지보수</option>
</select>
<select id="project-state-code" name="project-state-code">
<option value="" selected="selected">전체</option>
<option value="0">미입력</option>
<option value="1">입력 중</option>
<option value="2">검수 준비 대기중</option>
<option value="3">검수 중</option>
<option value="4">수정 요청</option>
<option value="5">검수 완료</option>
<option value="6">등록 완료</option>
</select>
</form>
</form>
<form class="form-inline-row">
<input type="text" id="company-dept" name="company-dept" class="input input-1" placeholder="담당부서,건설사명" title="" value="">
<input type="text" id="company-admin" name="company-admin" class="input input-2" placeholder="담당자" title="" value="">
<input type="text" id="company-tel" name="company-tel" class="input input-3" placeholder="담당 연락처" title="" value="">
<button type="button" id="btn-search" class="btn btn-search">
<span>조회하기</span>
</button>
<button type="button" id="btn-view-on-map" class="btn btn-view-on-map">
<span>지도보기</span>
</button>
</form>
</div>
<div class="table-info-group">Total: <span id="count">-</span>건</div>
<div class="table-wrap">
<table>
<colgroup>
<col style="width: 3%;">
<col style="width: 27%;">
<col style="width: 5%;">
<col style="width: 10%;">
<col style="width: 10%;">
<col style="width: 13%;">
<col style="width: 5%;">
<col style="width: 7%;">
<col style="width: 8%;">
<col style="width: 5%;">
<col style="width: 7%;">
</colgroup>
<thead>
<tr>
<th rowspan="2">연번</th>
<th rowspan="2">사업명</th>
<th rowspan="2">입력상태</th>
<th colspan="2">사업내용</th>
<th colspan="3">발주기관현황</th>
<th colspan="3">건설사현황</th>
</tr>
<tr>
<th>사업기간</th>
<th>사업단계 <br>(설계 시공 준공 유지관리)</th>
<th>담당부서</th>
<th>담당자</th>
<th>담당연락처</th>
<th>건설사명</th>
<th>담당자</th>
<th>담당연락처</th>
</tr>
</thead>
<tbody id="data-list">
</tbody>
</table>
</div>
<div id="paging" class="paging" data-npage="1" data-ncount="10">
</div>
</div>
</div>
<!-- 내용 끝 -->
</div>
</div>
<!-- 콘텐츠 끝 -->
</div>
</section>
<!-- 페이지 컨테이너 끝 -->
<div id="calenderDiv" class="trViewOff" style="position:absolute;"></div>
<%@ include file="/include/inc_footer_2021_new.jsp" %>