feat : 다이얼로그 작업.

1. 계도처리 다이얼로그 로직
2. 묶음자료 다이얼로그 추가
kurt/kurt
Kurt92 3 days ago
parent 1127980315
commit c765dc6fcc

@ -31,7 +31,7 @@
<div class="field-group">
<div class="lbl">처리일자</div>
<div class="fld">
<input type="text" id="desDate" name="desDate" class="input calender datepicker" />
<input type="text" id="itDate" name="cpInstruct" class="input calender datepicker" />
</div>
</div>
<div class="field-group empty"></div>
@ -39,7 +39,7 @@
</div>
</div>
<div class="disdoc-btn-area">
<button type="button" class="btn btn-light disdoc-btn" name="" id="guide">계도처리</button>
<button type="button" class="btn btn-light disdoc-btn" name="" id="guideSave">계도처리</button>
</div>
</div>
@ -63,12 +63,18 @@
},
updateGuide: () => {
const { cursor, mmCodes } = JSON.parse(localStorage.getItem("TOTAL_INFO_STATE"));
$.ajax({
url: "",
type: "post",
url: `/common/update/\${cursor}/83/state.ajax`,
type: "PUT",
data: JSON.stringify({
"itEtc" : $("#cpInstructAnswer").val() ,
"itDate": $("#itDate").val(),
}),
contentType: 'application/json',
success: function(response) {
alert("계도처리 성공")
//다이얼로그 하이드
@ -79,6 +85,11 @@
//로컬스토리지 mmCodes에 해당 mmCode 제거
//그리드는 어떻게 할꺼??
//1. 로우만 remove -> 페이징 괜찮나??
//2. 재조회 -> 하면 1페이지로 돌아감
},
error: function(xhr, status, error) {
@ -90,10 +101,26 @@
eventListener: () => {
$("#guide").on("click", () => {
// 처리사유 벨리데이션
$("#guideSave").on("click", () => {
//차적조회 확인
if(!CAR_INFO_STATE) {
alert("차량조회가 필요합니다.")
$("#guidance_dialog").dialog("close");
return false;
}
// 처리사유 확인
if($("#cpInstructAnswer").val() == null || $("#cpInstructAnswer").val() == '') {
alert("처리사유를 선택해주세요.")
return false;
}
// 날짜 벨리데이션
if (!validateDate("guideDate")) {
return false; // 여기서 클릭 핸들러 종료
}
// 업데이트
fnGuide.updateGuide();
})
@ -121,9 +148,9 @@
});
/* 오늘날짜 기본세팅 */
$('#desDate').datepicker('setDate', new Date());
$('#guideDate').datepicker('setDate', new Date());
fnGuide.eventListener();
});

@ -0,0 +1,201 @@
<%--
Created by IntelliJ IDEA.
User: kurt
Date: 2025. 12. 12.
Time: 오후 4:21
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div id="preNoticeWrap_dialog" style="display:none;">
<div class="left">
<div class="form-grid">
</div>
<div class="gs_booking">
<div class="row">
<div class="col-sm-12">
<div class="box_column">
<div class="containers">
<div id="grid"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="disdoc-btn-area">
<button type="button" class="btn btn-light disdoc-btn" name="" id="guideSave">묶음자료 생성</button>
</div>
</div>
<script type="text/javascript">
let PRE_NOTICE_WRAP_DIALOG_GRID = null;
let fnPreNoticeWrap = {
init: () => {
initGrid();
},
setCode: () => {
},
updateGuide: () => {
const { cursor, mmCodes } = JSON.parse(localStorage.getItem("TOTAL_INFO_STATE"));
$.ajax({
// url: `/common/update/\${cursor}/83/state.ajax`,
type: "PUT",
data: JSON.stringify({
"itEtc" : $("#cpInstructAnswer").val() ,
"itDate": $("#itDate").val(),
}),
contentType: 'application/json',
success: function(response) {
alert("계도처리 성공")
//다이얼로그 하이드
//네이게이팅 다음으로
//로컬스토리지 mmCodes에 해당 mmCode 제거
//그리드는 어떻게 할꺼??
//1. 로우만 remove -> 페이징 괜찮나??
//2. 재조회 -> 하면 1페이지로 돌아감
},
error: function(xhr, status, error) {
$("#result").text("서손처리 실패");
}
});
},
eventListener: () => {
}
}
/** tui-grid Set */
let preNoticeWrapInitGrid = () => {
const gridColumns = [
{header: '등록구분', name: 'mmDlgb', sortable: true, width: 100,},
{header: '목록번호', name: 'asBbsNo', sortable: true, width: 100,},
{header: '접수일', name: 'asJsdate', sortable: true, width: 100,},
{header: '신고자', name: 'mmSgnm', sortable: true, width: 100,},
{header: '담당자', name: 'mmSgtel', width: 100,},
{header: '위반내용', name: 'vlId', sortable: true, width: 100,},
{header: '위반일시', name: 'mmDate', sortable: true, width: 100,},
{header: '차량번호', name: 'mmCarno', sortable: true, width: 150,},
{header: '소유자', name: 'omName', width: 150,},
{header: '소유주구분', name: 'omNogb', width: 100,},
{header: '주민번호', name: 'omJno', width: 250,},
{header: '위반장소', name: 'mmSgpos', sortable: true, width: 150,},
{header: 'mmCode', name: 'mmCode', sortable: true, width: 150, align: 'center', hidden: true}
];
let gridDatasource = {
api: {
readData: {
url: '<c:url value="/post/preNotice/sendTarget/sendTargetList.ajax"/>',
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true
}
},
initialRequest: false, //초기화시 조회
serializer: function (params) {
setSearchCond();
SEARCH_COND.perPage = params.perPage;
SEARCH_COND.page = params.page;
return $.param(SEARCH_COND);
}
}
let gridOptions = {
el: 'grid',
rowHeaders: ['checkbox'],
columns: gridColumns,
noData: "조회된 사전통보 대상이 없습니다.",
pageOptions: {
useClient: true, // 클라이언트 페이징 여부(false: 서버 페이징)
perPage: perPage,
},
};
PRE_NOTICE_WRAP_DIALOG_GRID = TuiGrid.of(gridOptions, gridDatasource, (res) => {
GRID.on("dblclick", (e) => {
var popUrl = '/total/info.do';
var popTitle = "TotalPopup";
var popOption = "width=1400px, height=900px, resizable=yes, scrollbars=yes, location=no, top=100px, left=100px";
// 1) localStorage에 저장
console.log(e)
let cursor = e.instance.getValue(e.rowKey, 'mmCode');
let mmCodes = e.instance.getData().map(row => row.mmCode);
const state = { cursor, mmCodes, savedAt: Date.now() };
localStorage.setItem('TOTAL_INFO_STATE', JSON.stringify(state));
// 2) 팝업이 없거나 닫혀 있으면 새로 열기
if (!TOTAL_POPUP || TOTAL_POPUP.closed) {
TOTAL_POPUP = window.open(popUrl, popTitle, popOption);
} else {
// 이미 떠 있으면 새로 안 만들고, 그 창에 포커스만 줌
TOTAL_POPUP.focus();
TOTAL_POPUP.TOTAL_INFO_POPUP_API.search();
}
});
});
};
$(function () {
/* 다이얼로그 설정 */
$("#preNoticeWrap_dialog").dialog({
autoOpen: false,
modal: true,
resizable: true,
// width: "auto",
width: 500,
maxHeight: 800,
show: { effect: "drop", direction: "left", duration: 200 },
hide: { effect: "drop", direction: "left", duration: 200 },
title: "사전통보 묶음자료(대장) 생성",
open: function () {
fnPreNoticeWrap.init();
}
});
/* 오늘날짜 기본세팅 */
$('#guideDate').datepicker('setDate', new Date());
fnPreNoticeWrap.eventListener();
});
</script>

@ -55,6 +55,18 @@
</li>
</ul>
</div>
<div class="state-tab-wrap">
<ul class="state-tabs">
<%-- <li data-state="FIN_BU" value="6">답변완료(부과)</li>--%>
<%-- <li data-state="FIN_GE" value="7">답변완료(계도)</li>--%>
<%-- <li data-state="FIN_ME" value="8">답변완료(미부과)</li>--%>
<%-- <li data-state="FIN_ADD" value="9">답변완료(수기)</li>--%>
<%-- <li data-state="FAIL" value="5">답변실패</li>--%>
<%-- <li data-state="INCOMP" value="fail">답변미대상</li>--%>
</ul>
</div>
<div class="gs_booking">
<div class="row">
<div class="col-sm-12">
@ -72,8 +84,9 @@
<script type="text/javascript">
let GRID = null;
let INIT_POPUP = null;
let TOTAL_POPUP = null;
let SEARCH_COND = {};
@ -86,12 +99,15 @@
let searchUseYn = $.trim(nvl($("#searchUseYn").val(), ""));
let searchStartDt = $.trim(nvl($("#searchStartDt").val(), ""));
let searchEndDt = $.trim(nvl($("#searchEndDt").val(), ""));
let searchLawgb = $(".state-tabs li.on").attr("value");
SEARCH_COND.searchCondition = searchCondition;
SEARCH_COND.searchKeyword = searchKeyword;
SEARCH_COND.searchUseYn = searchUseYn;
SEARCH_COND.searchStartDt = searchStartDt;
SEARCH_COND.searchEndDt = searchEndDt;
SEARCH_COND.searchLawgb = searchLawgb;
};
@ -99,8 +115,28 @@
init: () => {
initGrid();
fnBiz.setCode();
},
setCode: () => {
$.ajax({
url: "/common/code/find.ajax",
type: "GET",
contentType: 'application/json',
success: function(response) {
response.cpViolation.forEach((item) => {
$(".state-tabs").append('<li value="' + item.vlCode + '">' + item.vlId + '</li>');
});
initGrid();
$(".state-tabs li").first().addClass("on").trigger("click");
},
error: function(xhr, status, error) {
$("#result").text("조회 실패");
}
});
},
@ -159,6 +195,19 @@
TuiGrid.instance.readData(1);
});
// 상태 탭 클릭
$(".state-tabs").on("click", "li", function () {
$(".state-tabs li").removeClass("on");
$(this).addClass("on");
// const state = $(this).data('state') || '';
// $('#tabState').val(state);
SEARCH_COND = {};
TuiGrid.instance.readData(1);
});
}
}
@ -167,31 +216,30 @@
/** tui-grid Set */
let initGrid = () => {
const gridColumns = [
{header: '등록구분', name: 'mmDlgb', sortable: true, width: 50,},
{header: '목록번호', name: 'asBbsNo', sortable: true, width: 70,},
{header: '등록구분', name: 'mmDlgb', sortable: true, width: 100,},
{header: '목록번호', name: 'asBbsNo', sortable: true, width: 100,},
{header: '접수일', name: 'asJsdate', sortable: true, width: 100,},
{header: '신고자', name: 'mmSgnm', sortable: true, width: 100,},
{header: '담당자', name: 'mmSgtel', sortable: true, width: 100,},
{header: '전화번호', name: 'asTel', width: 150,},
{header: '접수일자', name: 'asJsdate', sortable: true, width: 70,},
{header: '처리기한', name: 'asLimitDt', sortable: true, width: 70,},
{header: '위반일자', name: 'mmDate', sortable: true, width: 150,},
{header: '첨부', name: 'mmImagegb', width: 150,},
{header: '사진갯수', name: 'mmImagecnt', width: 50,},
{header: '위반내용', name: 'mmSgcont', width: 250,},
{header: '접수번호', name: 'asJsno', sortable: true, width: 150,},
{header: '담당자', name: 'mmSgtel', width: 100,},
{header: '위반내용', name: 'vlId', sortable: true, width: 100,},
{header: '위반일시', name: 'mmDate', sortable: true, width: 100,},
{header: '차량번호', name: 'mmCarno', sortable: true, width: 150,},
{header: '소유자', name: 'omName', width: 150,},
{header: '소유주구분', name: 'omNogb', width: 100,},
{header: '주민번호', name: 'omJno', width: 250,},
{header: '위반장소', name: 'mmSgpos', sortable: true, width: 150,},
{header: 'mmCode', name: 'mmCode', sortable: true, width: 150, align: 'center', hidden: true}
];
let gridDatasource = {
api: {
readData: {
url: '<c:url value="/minwon/init/list.ajax"/>',
url: '<c:url value="/post/guide/sendTarget/sendTargetList.ajax"/>',
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true
}
},
initialRequest: true, //초기화시 조회
initialRequest: false, //초기화시 조회
serializer: function (params) {
setSearchCond();
SEARCH_COND.perPage = params.perPage;
@ -204,7 +252,7 @@
el: 'grid',
rowHeaders: ['checkbox'],
columns: gridColumns,
noData: "처리 할 초기자료가 없습니다.",
noData: "조회된 사전통보 대상이 없습니다.",
pageOptions: {
useClient: true, // 클라이언트 페이징 여부(false: 서버 페이징)
perPage: perPage,
@ -214,8 +262,8 @@
GRID = TuiGrid.of(gridOptions, gridDatasource, (res) => {
GRID.on("dblclick", (e) => {
var popUrl = '/minwon/init/init_popup.do';
var popTitle = "initPopup";
var popUrl = '/total/info.do';
var popTitle = "TotalPopup";
var popOption = "width=1400px, height=900px, resizable=yes, scrollbars=yes, location=no, top=100px, left=100px";
// 1) localStorage에 저장
@ -227,12 +275,12 @@
localStorage.setItem('TOTAL_INFO_STATE', JSON.stringify(state));
// 2) 팝업이 없거나 닫혀 있으면 새로 열기
if (!INIT_POPUP || INIT_POPUP.closed) {
INIT_POPUP = window.open(popUrl, popTitle, popOption);
if (!TOTAL_POPUP || TOTAL_POPUP.closed) {
TOTAL_POPUP = window.open(popUrl, popTitle, popOption);
} else {
// 이미 떠 있으면 새로 안 만들고, 그 창에 포커스만 줌
INIT_POPUP.focus();
INIT_POPUP.INIT_POP_API.search();
TOTAL_POPUP.focus();
TOTAL_POPUP.TOTAL_INFO_POPUP_API.search();
}
});
});

@ -55,16 +55,20 @@
</li>
</ul>
</div>
<div class="state-tab-wrap">
<ul class="state-tabs">
<%-- <li data-state="FIN_BU" value="6">답변완료(부과)</li>--%>
<%-- <li data-state="FIN_GE" value="7">답변완료(계도)</li>--%>
<%-- <li data-state="FIN_ME" value="8">답변완료(미부과)</li>--%>
<%-- <li data-state="FIN_ADD" value="9">답변완료(수기)</li>--%>
<%-- <li data-state="FAIL" value="5">답변실패</li>--%>
<%-- <li data-state="INCOMP" value="fail">답변미대상</li>--%>
</ul>
<div class="div-flex-wrap-space-btw">
<div class="state-tab-wrap">
<ul class="state-tabs">
<%-- <li data-state="FIN_BU" value="6">답변완료(부과)</li>--%>
<%-- <li data-state="FIN_GE" value="7">답변완료(계도)</li>--%>
<%-- <li data-state="FIN_ME" value="8">답변완료(미부과)</li>--%>
<%-- <li data-state="FIN_ADD" value="9">답변완료(수기)</li>--%>
<%-- <li data-state="FAIL" value="5">답변실패</li>--%>
<%-- <li data-state="INCOMP" value="fail">답변미대상</li>--%>
</ul>
</div>
<div class="state-tab-wrap">
<button type="button" class="btn btn-light" id="wrap-pre-notice" value="">사전통보 묶음자료(대장) 생성</button>
</div>
</div>
<div class="gs_booking">
@ -80,6 +84,7 @@
</div>
</div>
</div>
<jsp:include page="/WEB-INF/views/biz/dialog/preNoticeWrap_dialog.jsp" />
<!-- /Main body -->
<script type="text/javascript">
@ -208,6 +213,10 @@
SEARCH_COND = {};
TuiGrid.instance.readData(1);
});
$("#wrap-pre-notice").on('click', ()=> {
$("#preNoticeWrap_dialog").dialog("open");
})
}
}

@ -168,24 +168,13 @@
let initGrid = () => {
const gridColumns = [
{header: '등록구분', name: 'mmDlgb', sortable: true, width: 50,},
{header: '목록번호', name: 'asBbsNo', sortable: true, width: 70,},
{header: '신고자', name: 'mmSgnm', sortable: true, width: 100,},
{header: '담당자', name: 'mmSgtel', sortable: true, width: 100,},
{header: '전화번호', name: 'asTel', width: 150,},
{header: '접수일자', name: 'asJsdate', sortable: true, width: 70,},
{header: '처리기한', name: 'asLimitDt', sortable: true, width: 70,},
{header: '위반일자', name: 'mmDate', sortable: true, width: 150,},
{header: '첨부', name: 'mmImagegb', width: 150,},
{header: '사진갯수', name: 'mmImagecnt', width: 50,},
{header: '위반내용', name: 'mmSgcont', width: 250,},
{header: '접수번호', name: 'asJsno', sortable: true, width: 150,},
{header: '차량번호', name: 'mmCarno', sortable: true, width: 150,},
{header: 'mmCode', name: 'mmCode', sortable: true, width: 150, align: 'center', hidden: true}
];
let gridDatasource = {
api: {
readData: {
url: '<c:url value="/minwon/init/list.ajax"/>',
url: '<c:url value=""/>',
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true

@ -41,6 +41,7 @@
<link rel="stylesheet" href="<c:url value='/css/style_new.css' />">
<link rel="stylesheet" href="<c:url value='/css/cc.css' />">
<link rel="stylesheet" href="<c:url value='/css/cc-dialog.css' />">
<link rel="stylesheet" href="<c:url value='/css/jquery-ui.css' />">
<%--================== Main Scripts ======================--%>
@ -49,6 +50,7 @@
<script type="text/javascript" src="<c:url value='/js/bootstrap.bundle.min.js' />"></script>
<script type="text/javascript" src="<c:url value='/js/popper/1.16.1/popper.min.js' />"></script>
<script type="text/javascript" src="<c:url value='/js/bootstrap-datepicker.min.js' />"></script>
<script type="text/javascript" src="<c:url value='/js/jquery-ui.min.js' />"></script>
<!-- Plugins -->
<%--<script type="text/javascript" src="<c:url value='/js/jquery.treeview.js' />"></script>--%>
<script type="text/javascript" src="<c:url value='/plugins/simplebar/simplebar.min.js' />"></script>

Loading…
Cancel
Save