프로젝트 패키징 처리 수정(war -> jar)
parent
7539b5a6ab
commit
7c571dac87
@ -1,32 +0,0 @@
|
||||
package cokr.xit.fims;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import cokr.xit.base.ServletCustomizer;
|
||||
import cokr.xit.fims.task.TaskMvcConfig;
|
||||
|
||||
@ImportAutoConfiguration({ServletCustomizer.class,TaskMvcConfig.class})
|
||||
@ComponentScan(basePackageClasses = cokr.xit.applib.HttpStatusCodeExceptionControllerAdvice.class)
|
||||
public class MainApplication extends SpringBootApplicationBridge {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
try {
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(new ClassPathResource("sgg.txt").getInputStream()));
|
||||
String sgg = in.readLine();
|
||||
System.setProperty("sgg", sgg);
|
||||
in.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
SpringApplication.run(MainApplication.class, args);
|
||||
}
|
||||
}
|
@ -1,838 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<div class="wrapper-dashboard">
|
||||
<div id="card1" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-cctv-fixed w-px-30 d-block" title="고정형CCTV"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-crackdown-road w-px-30 d-block" title="도보"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-3">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-cctv-drive w-px-30 d-block" title="주행형CCTV"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card1-4">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-crackdown-minwon w-px-30 d-block" title="민원"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
<a href="#" id="btnGoToCrdn">단속관리 바로가기 ></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="card2" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card2-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-target-lvy w-px-30 d-block" title="등록대상"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card2-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-target-transfer w-px-30 d-block" title="이첩대상"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="card3" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card3-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-sendstat-guide w-px-30 d-block" title="계도장 발송현황"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card3-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-sendstat-before w-px-30 d-block" title="사전통보 발송현황"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card3-3">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-sendstat-nop w-px-30 d-block" title="고지서 발송현황"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="card4" class="card dashboard-total">
|
||||
<div class="card-body row">
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card4-1">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-opn-rcp w-px-30 d-block" title="접수"></i>
|
||||
</div>
|
||||
<div class="col px-4 card-separator d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card4-2">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-opn-decision w-px-30 d-block" title="수용/미수용"></i>
|
||||
</div>
|
||||
<div class="col px-4 d-flex flex-column align-items-center">
|
||||
<p class="mb-1" id="card4-3">
|
||||
<span class="skeleton">?/?</span>
|
||||
</p>
|
||||
<i class="svg-opn-selfdrop w-px-30 d-block" title="자진취하"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
<a href="#" id="btnGoToOpnn">의견진술관리 바로가기 ></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wrapper-dashboard">
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">단속 자료 통계(유형별)</h5>
|
||||
<div>건수(최근 15일)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="lineChartCardBody">
|
||||
<canvas id="lineChart" class="chartjs mh-px-300" data-height="500"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">단속통계</h5>
|
||||
<div>처리유형별(일별)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="doughnutChart1CardBody">
|
||||
<canvas id="doughnutChart1" class="chartjs mh-px-300" data-height="350"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">발송통계</h5>
|
||||
<div>발송유형별(일별)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="doughnutChart2CardBody">
|
||||
<canvas id="doughnutChart2" class="chartjs mh-px-300" data-height="350"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card dashboard-chart">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title m-0 me-2">의견진술통계</h5>
|
||||
<div>처리유형별(일별)</div>
|
||||
</div>
|
||||
<div class="card-body d-flex justify-content-center" id="doughnutChart3CardBody">
|
||||
<canvas id="doughnutChart3" class="chartjs mh-px-300" data-height="350"></canvas>
|
||||
</div>
|
||||
<div class="card-footer ms-auto">
|
||||
통계현황 바로가기 >
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<c:set var="dashboardScript" scope="request">
|
||||
|
||||
LoadScript("chartScript","/webjars/3rd-party/sneat/libs/chartjs/chartjs.js");
|
||||
|
||||
|
||||
var falseLineChart = `<svg xmlns="http://www.w3.org/2000/svg" class="skeleton"
|
||||
height="250" viewBox="0 0 24 24">
|
||||
<path class="skeleton" d="M3 3v17a1 1 0 0 0 1 1h17v-2H5V3H3z"></path>
|
||||
<path class="skeleton" d="M15.293 14.707a.999.999 0 0 0 1.414 0l5-5-1.414-1.414L16 12.586l-2.293-2.293a.999.999 0 0 0-1.414 0l-5 5 1.414 1.414L13 12.414l2.293 2.293z"></path>
|
||||
</svg>`;
|
||||
|
||||
var falseDoughnutChart = `<svg xmlns="http://www.w3.org/2000/svg" class="skeleton"
|
||||
height="250" viewBox="0 0 24 24">
|
||||
<path class="skeleton" d="M13 6c2.507.423 4.577 2.493 5 5h4c-.471-4.717-4.283-8.529-9-9v4z"></path>
|
||||
<path class="skeleton" d="M18 13c-.478 2.833-2.982 4.949-5.949 4.949-3.309 0-6-2.691-6-6C6.051 8.982 8.167 6.478 11 6V2c-5.046.504-8.949 4.773-8.949 9.949 0 5.514 4.486 10 10 10 5.176 0 9.445-3.903 9.949-8.949h-4z"></path>
|
||||
</svg>`;
|
||||
|
||||
var statReqArr = [];
|
||||
|
||||
fnMakeSkeleton();
|
||||
AppSupport.sleep(3000).then(() => fnMakeStatReq($("#layout-navbar input[name='taskSeCd']:checked").val()));
|
||||
|
||||
|
||||
//데이터 로딩 전 이미지 표시
|
||||
function fnMakeSkeleton(){
|
||||
|
||||
$("#lineChart").hide();
|
||||
$("#doughnutChart1").hide();
|
||||
$("#doughnutChart2").hide();
|
||||
$("#doughnutChart3").hide();
|
||||
|
||||
$("#lineChartCardBody").append(falseLineChart);
|
||||
$("#doughnutChart1CardBody").append(falseDoughnutChart);
|
||||
$("#doughnutChart2CardBody").append(falseDoughnutChart);
|
||||
$("#doughnutChart3CardBody").append(falseDoughnutChart);
|
||||
}
|
||||
|
||||
|
||||
//통계 요청 데이터 생성(여러 건)
|
||||
function fnMakeStatReq(taskSeCd){
|
||||
var lastDay = TODAY().replaceAll("-","");
|
||||
var firstDay = DateSupport.getAddDay(-14).replaceAll("-","");
|
||||
|
||||
var defaultQuery = {};
|
||||
|
||||
|
||||
//단속구분별 전체/완료 건수
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "crdn",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "CRDN_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM002"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["08","09","10","11"],
|
||||
targetCode : "minwon",
|
||||
targetCodeVal : "민원"
|
||||
},
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["06","13"],
|
||||
targetCode : "dobo",
|
||||
targetCodeVal : "도보"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["01","02","minwon","dobo"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card1",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//초기자료처리별 전체/완료건수
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "crdn",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "등록대상이첩대상구분",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM999"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["등록대상","이첩대상"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card2",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//발송문서별 전체/완료 건수
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "sndb",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "SNDNG_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM047"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM047",
|
||||
sourceCodes : ["01","02"],
|
||||
targetCode : "satong",
|
||||
targetCodeVal : "사전통지서"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["satong", "03", "11"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card3",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//의견진술자료상태
|
||||
defaultQuery = {
|
||||
structureType : "dummy",
|
||||
statDomain : "excl",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "OPNN_SBMSN_STTS_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM031"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM031",
|
||||
sourceCodes : ["01","02"],
|
||||
targetCode : "acceptOrNonAccept",
|
||||
targetCodeVal : "수용/미수용"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["00", "acceptOrNonAccept", "03"],
|
||||
namedNumberValueSeperator : "completeAndTotal",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : lastDay
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "card4",
|
||||
statType : "progressAndTotal"
|
||||
});
|
||||
|
||||
//단속구분별 최근n일 건수
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "crdn",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "CRDN_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM002"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["08","09","10","11"],
|
||||
targetCode : "minwon",
|
||||
targetCodeVal : "민원"
|
||||
},
|
||||
{
|
||||
sourceGroup : "FIM002",
|
||||
sourceCodes : ["06","13"],
|
||||
targetCode : "dobo",
|
||||
targetCodeVal : "도보"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["01","02","dobo","minwon"],
|
||||
namedNumberValueSeperator : "lastFewDays",
|
||||
globalAggregate : "count",
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "CRDN_YMD",
|
||||
dayRange : 15
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "lineChart",
|
||||
statType : "line"
|
||||
});
|
||||
|
||||
//초기자료처리별 건수 차트
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "crdnSttsHstry",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "CRDN_STTS_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM010"
|
||||
}
|
||||
],
|
||||
numberValueInfoList : [
|
||||
{
|
||||
aggregateType : "count"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM010",
|
||||
sourceCodes : ["21"],
|
||||
targetCode : "dansokProcess",
|
||||
targetCodeVal : "단속"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["dansokProcess","81","83"],
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : firstDay
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "doughnutChart1",
|
||||
statType : "doughnut"
|
||||
});
|
||||
|
||||
//발송문서종류별 건수 차트
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "sndb",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "SNDNG_SE_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM047"
|
||||
}
|
||||
],
|
||||
numberValueInfoList : [
|
||||
{
|
||||
aggregateType : "count"
|
||||
}
|
||||
],
|
||||
codeSubsetInfoList : [
|
||||
{
|
||||
sourceGroup : "FIM047",
|
||||
sourceCodes : ["01","02"],
|
||||
targetCode : "satong",
|
||||
targetCodeVal : "사전통지서"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["satong", "03", "11"],
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "SNDNG_YMD",
|
||||
firstDay : firstDay,
|
||||
lastDay : firstDay
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "doughnutChart2",
|
||||
statType : "doughnut"
|
||||
});
|
||||
|
||||
//의견진술결과별 건수 차트
|
||||
defaultQuery = {
|
||||
structureType : "aggregate",
|
||||
statDomain : "excl",
|
||||
groupInfoList : [
|
||||
{
|
||||
refCol : "OPNN_SBMSN_STTS_CD",
|
||||
ctgrType : "code",
|
||||
dtlCtgr : "FIM031"
|
||||
}
|
||||
],
|
||||
numberValueInfoList : [
|
||||
{
|
||||
aggregateType : "count"
|
||||
}
|
||||
],
|
||||
fixedItemId : ["01", "02", "03"],
|
||||
taskSeCd : taskSeCd,
|
||||
dayColumn : "REG_DT",
|
||||
firstDay : firstDay,
|
||||
lastDay : firstDay
|
||||
};
|
||||
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "groupInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "numberValueInfoList");
|
||||
defaultQuery = FimsSupport.fnJsonToFormData(defaultQuery, "codeSubsetInfoList");
|
||||
|
||||
statReqArr.push({
|
||||
query : defaultQuery,
|
||||
cursor : "doughnutChart3",
|
||||
statType : "doughnut"
|
||||
});
|
||||
|
||||
fnLoadStatisticsData();
|
||||
}
|
||||
|
||||
//통계 데이터 조회
|
||||
function fnLoadStatisticsData(){
|
||||
var statArr = statReqArr.pop();
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/stat/stat01/010/info.do"),
|
||||
data : statArr.query,
|
||||
success : (resp) => {
|
||||
var statData = resp.stat;
|
||||
|
||||
if(statData != null && statData.statItems != null){
|
||||
fnRenderDashboardContents(statData, statArr.cursor , statArr.statType);
|
||||
}
|
||||
|
||||
if(statReqArr.length != 0){
|
||||
fnLoadStatisticsData();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//대시보드 콘텐츠 표시
|
||||
function fnRenderDashboardContents(returnData, cursor, statType){
|
||||
|
||||
if(statType == "progressAndTotal"){
|
||||
fnRenderProgressAndTotal(returnData, cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
if(statType == "line"){
|
||||
fnRenderLine(returnData, cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
if(statType == "doughnut"){
|
||||
fnRenderDoughnut(returnData, cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//진행건수,전체건수 표시
|
||||
function fnRenderProgressAndTotal(returnData, cursor){
|
||||
|
||||
for(var i=0; i < returnData.statItems.length; i++){
|
||||
var icon = $("#"+cursor).find("i[title='" + returnData.statItems[i].itemName[0] + "']");
|
||||
var p = icon.prev("p");
|
||||
p.html(returnData.statItems[i].numberValue[0] + "/" + returnData.statItems[i].numberValue[1]);
|
||||
}
|
||||
|
||||
if(cursor == "card1"){
|
||||
FimsSupport.mappingButtonAndMenu("btnGoToCrdn","단속 관리");
|
||||
return;
|
||||
}
|
||||
|
||||
if(cursor == "card2"){
|
||||
FimsSupport.mappingButtonAndMenu("btnGoToOpnn","의견제출 관리");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//라인차트 표시
|
||||
function fnRenderLine(returnData, cursor){
|
||||
var yellowColor = '#ffe800';
|
||||
var cyanColor = '#28dac6';
|
||||
var orangeLightColor = '#FDAC34';
|
||||
var redColor = '#FF3E1D';
|
||||
var indigoColor = '#696CFF';
|
||||
|
||||
var ctgrColorSet = [yellowColor,cyanColor,orangeLightColor,redColor,indigoColor];
|
||||
|
||||
var borderColor = '#f0f0f0';
|
||||
var gridColor = '#f0f0f0';
|
||||
var tickColor = 'rgba(0, 0, 0, 0.75)'; // x & y axis tick color
|
||||
|
||||
$("#"+cursor).siblings("svg").remove();
|
||||
|
||||
$("#"+cursor).show();
|
||||
|
||||
var maxOfStat = 0;
|
||||
var minOfStat = 0;
|
||||
|
||||
var datasets = [];
|
||||
for(var i=0; i < returnData.statItems.length; i++){
|
||||
var defaultObject = {
|
||||
tension: 0.5,
|
||||
pointStyle: 'circle',
|
||||
fill: false,
|
||||
pointRadius: 1,
|
||||
pointHoverRadius: 5,
|
||||
pointHoverBorderWidth: 5,
|
||||
pointBorderColor: 'transparent',
|
||||
pointHoverBorderColor: config.colors.cardColor
|
||||
};
|
||||
|
||||
defaultObject.label = returnData.statItems[i].itemName[0];
|
||||
|
||||
defaultObject.data = returnData.statItems[i].numberValue;
|
||||
|
||||
var maxOfStatItem = Math.max(defaultObject.data);
|
||||
var minOfStatItem = Math.min(defaultObject.data);
|
||||
|
||||
if(maxOfStatItem > maxOfStat){
|
||||
maxOfStat = maxOfStatItem;
|
||||
}
|
||||
if(minOfStatItem < minOfStat){
|
||||
minOfStat = minOfStatItem;
|
||||
}
|
||||
|
||||
defaultObject.backgroundColor = ctgrColorSet[i % ctgrColorSet.length];
|
||||
defaultObject.pointHoverBackgroundColor = ctgrColorSet[i % ctgrColorSet.length];
|
||||
defaultObject.borderColor = ctgrColorSet[i % ctgrColorSet.length];
|
||||
|
||||
datasets.push(defaultObject);
|
||||
}
|
||||
|
||||
var xAxisLabels = returnData.numberValueLabel;
|
||||
|
||||
var yAxisConf = initYAxis(maxOfStat, minOfStat);
|
||||
|
||||
var lineChart = document.getElementById(cursor);
|
||||
if (lineChart) {
|
||||
var lineChartVar = new Chart(lineChart, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: xAxisLabels,
|
||||
datasets: datasets
|
||||
},
|
||||
options: {
|
||||
lineTension : 0,
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
scales: {
|
||||
x: {
|
||||
grid: {
|
||||
color: borderColor,
|
||||
drawBorder: false,
|
||||
borderColor: borderColor
|
||||
},
|
||||
ticks: {
|
||||
color: "black"
|
||||
}
|
||||
},
|
||||
y: {
|
||||
scaleLabel: {
|
||||
display: true
|
||||
},
|
||||
min: yAxisConf.yAxisMin,
|
||||
max: yAxisConf.yAxisMax,
|
||||
ticks: {
|
||||
color: "black",
|
||||
stepSize: yAxisConf.yAxisStep
|
||||
},
|
||||
grid: {
|
||||
color: borderColor,
|
||||
drawBorder: false,
|
||||
borderColor: borderColor
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: {
|
||||
tooltip: {
|
||||
rtl: true,
|
||||
backgroundColor: config.colors.cardColor,
|
||||
titleColor: config.colors.headingColor,
|
||||
bodyColor: config.colors.bodyColor,
|
||||
borderWidth: 1,
|
||||
borderColor: borderColor
|
||||
},
|
||||
legend: {
|
||||
position: 'left',
|
||||
align: 'stretch',
|
||||
rtl: true,
|
||||
labels: {
|
||||
usePointStyle: true,
|
||||
padding: 6,
|
||||
boxWidth: 12,
|
||||
boxHeight: 30,
|
||||
color: "black"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
//도넛차트 표시
|
||||
function fnRenderDoughnut(returnData, cursor){
|
||||
var yellowColor = '#ffe800';
|
||||
var cyanColor = '#28dac6';
|
||||
var orangeLightColor = '#FDAC34';
|
||||
var redColor = '#FF3E1D';
|
||||
var indigoColor = '#696CFF';
|
||||
|
||||
var ctgrColorSet = [yellowColor,cyanColor,orangeLightColor,redColor,indigoColor];
|
||||
|
||||
var borderColor = '#f0f0f0';
|
||||
var gridColor = '#f0f0f0';
|
||||
var tickColor = 'rgba(0, 0, 0, 0.75)'; // x & y axis tick color
|
||||
|
||||
var cardColor = config.colors.cardColor;
|
||||
var headingColor = config.colors.headingColor;
|
||||
var labelColor = config.colors.textMuted;
|
||||
var legendColor = config.colors.bodyColor;
|
||||
|
||||
$("#"+cursor).siblings("svg").remove();
|
||||
$("#"+cursor).show();
|
||||
|
||||
|
||||
var lebels = [];
|
||||
var datas = [];
|
||||
var colors = [];
|
||||
for(var i=0; i < returnData.statItems.length; i++){
|
||||
lebels.push(returnData.statItems[i].itemName[0]);
|
||||
datas.push(returnData.statItems[i].numberValue[0]);
|
||||
|
||||
colors.push(ctgrColorSet[i % ctgrColorSet.length]);
|
||||
}
|
||||
|
||||
|
||||
var doughnutChart = document.getElementById(cursor);
|
||||
if (doughnutChart) {
|
||||
var doughnutChartVar = new Chart(doughnutChart, {
|
||||
type: 'doughnut',
|
||||
data: {
|
||||
labels: lebels,
|
||||
datasets: [
|
||||
{
|
||||
data: datas,
|
||||
backgroundColor: colors,
|
||||
borderWidth: 1,
|
||||
pointStyle: 'rectRounded'
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
animation: {
|
||||
duration: 500
|
||||
},
|
||||
cutout: '68%',
|
||||
plugins: {
|
||||
legend: {
|
||||
display: true,
|
||||
position : 'left'
|
||||
},
|
||||
tooltip: {
|
||||
callbacks: {
|
||||
label: function (context) {
|
||||
const label = context.label || '';
|
||||
const value = context.parsed;
|
||||
const output = ' ' + label + ' : ' + value + ' 건';
|
||||
return output;
|
||||
}
|
||||
},
|
||||
// Updated default tooltip UI
|
||||
rtl: true,
|
||||
backgroundColor: cardColor,
|
||||
titleColor: headingColor,
|
||||
bodyColor: legendColor,
|
||||
borderWidth: 1,
|
||||
borderColor: borderColor
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
//차트y축 표시최대값,표시최소값,간격 설정
|
||||
function initYAxis(max, min){
|
||||
|
||||
if(max <= 10){
|
||||
var yAxisConf = {
|
||||
yAxisMax : 10,
|
||||
yAxisMin : 0,
|
||||
yAxisStep : 2
|
||||
};
|
||||
|
||||
return yAxisConf;
|
||||
}
|
||||
|
||||
if(max <= 100){
|
||||
var yAxisConf = {
|
||||
yAxisMax : 100,
|
||||
yAxisMin : 0,
|
||||
yAxisStep : 20
|
||||
};
|
||||
|
||||
return yAxisConf;
|
||||
}
|
||||
|
||||
var yAxisMax = Math.ceil(max / 100) * 100
|
||||
var yAxisMin = Math.floor(min / 100) * 100;
|
||||
|
||||
if(yAxisMax - yAxisMin <= 100){
|
||||
yAxisMin = yAxisMax - 100;
|
||||
}
|
||||
|
||||
var yAxisStep = (yAxisMax - yAxisMin)/5;
|
||||
|
||||
var yAxisConf = {
|
||||
yAxisMax : yAxisMax,
|
||||
yAxisMin : yAxisMin,
|
||||
yAxisStep : yAxisStep
|
||||
};
|
||||
return yAxisConf;
|
||||
|
||||
}
|
||||
|
||||
|
||||
</c:set>
|
@ -1,22 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<!-- Footer -->
|
||||
<footer class="content-footer footer bg-footer-theme align-self-stretch" style="height:1.5rem">
|
||||
<div class="container-xxl d-flex flex-wrap justify-content-between py-0 flex-md-row flex-column">
|
||||
<div class="mb-2 mb-md-0 w-100">
|
||||
© <span id="footerYear"></span>, made with XIT Base by
|
||||
<script>
|
||||
document.getElementById("footerYear").innerText = new Date().getFullYear();
|
||||
</script>
|
||||
<a target="_blank" class="footer-link fw-bold"
|
||||
href="https://xit.co.kr">(주)엑스아이티
|
||||
</a>
|
||||
<span class="float-end">
|
||||
<a target="_blank" class="mx-2 footer-link fw-bold"
|
||||
href="https://www.enis.go.kr">세외수입시스템
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<!-- / Footer -->
|
@ -1,42 +0,0 @@
|
||||
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<!DOCTYPE html><c:set var="appName" scope="request">과태료통합관리시스템</c:set>
|
||||
<html
|
||||
lang="kr"
|
||||
class="light-style layout-menu-fixed "
|
||||
dir="ltr"
|
||||
data-theme="theme-default"
|
||||
data-assets-path="<c:url value="/resources/"/>"
|
||||
data-template="vertical-menu-template-starter">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>${appName}</title>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/x-icon" href="<c:url value="/webjars/image/favicon.ico"/>" />
|
||||
<!-- Fonts -->
|
||||
<link rel="stylesheet" href="<c:url value="/resources/fonts/notoSansKr/fontface.css"/>" />
|
||||
<!-- Icons. Uncomment required icon fonts -->
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/fonts/boxicons.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/fonts/fontawesome.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/fonts/bootstrap-icons.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/fonts/material-icons.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/fonts/xit-icon.css"/>" />
|
||||
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/css/rtl/core.css"/>" class="template-customizer-core-css" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/css/rtl/theme-default.css"/>" class="template-customizer-theme-css" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/css/styles.css"/>" />
|
||||
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/applib/css/overwrite.css?${ver}"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/applib/css/applib.css?${ver}"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/css/fims.css?${ver}"/>" />
|
||||
|
||||
<!-- Vendors CSS -->
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/perfect-scrollbar/perfect-scrollbar.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/jstree/jstree.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/bootstrap-datepicker/bootstrap-datepicker.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/fullcalendar/fullcalendar.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/bs-stepper/bs-stepper.css"/>" />
|
||||
</head>
|
||||
|
@ -1,4 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"
|
||||
%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
|
||||
%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
|
||||
%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
@ -1,102 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<div class="spinner-border spinner-border-lg text-primary wait" style="display:none;" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
|
||||
<!-- Core JS -->
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/popper/popper.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/js/bootstrap.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/jquery/jquery.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/jquery-ui/1.13.2/jquery-ui.js"/>"></script>
|
||||
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/js/config.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/perfect-scrollbar/perfect-scrollbar.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/js/helpers.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/js/menu.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/jstree/jstree.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/jstree/jstree-support.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/jquery-sticky/jquery-sticky.js" />"></script>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/bootstrap-datepicker/bootstrap-datepicker.js"/>"></script>
|
||||
<!-- 전체화면 비활성화 -->
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/block-ui/block-ui.js"/>"></script>
|
||||
|
||||
<!-- base -->
|
||||
<script src="<c:url value="/webjars/js/base/base.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/dataset.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/dataset-support.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/upload-support.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/code.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/code-support.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/menu.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/menu-support.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/actionGroup.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/user.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/sgg-dept.js"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/base/authority.js"/>"></script>
|
||||
<!-- base:사전정의요소 클립보드 저장 -->
|
||||
<script src="<c:url value="/webjars/js/support/toolPalette.js?${ver}"/>"></script>
|
||||
|
||||
<!-- 공통 유틸(applib) -->
|
||||
<script src="<c:url value="/webjars/applib/js/app-base.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/applib/js/string-support.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/applib/js/date-support.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/applib/js/app-support.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/applib/js/componentization.js?${ver}"/>"></script>
|
||||
|
||||
<script src="<c:url value="/resources/js/fims/cmmn/fims-base.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/js/fims/cmmn/customElements.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/js/fims/cmmn/fims-support.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/js/fims/cmmn/fims-componentization.js?${ver}"/>"></script>
|
||||
|
||||
<!-- 개발 편의성 유틸 -->
|
||||
<script src="<c:url value="/resources/js/fims/cmmn/detect.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/js/fims/cmmn/objectInspector.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/js/fims/cmmn/registByXml.js?${ver}"/>"></script>
|
||||
|
||||
<!-- endbuild -->
|
||||
<c:set var="functions" scope="request">
|
||||
wctx.path = "${pageContext.request.contextPath}";
|
||||
wctx.version = "${ver}";
|
||||
wctx.trace = ${!production};
|
||||
wctx.csrf = {
|
||||
header:"${_csrf.headerName}",
|
||||
token:"${_csrf.token}"
|
||||
};
|
||||
dialog.title = "과태료통합관리시스템";
|
||||
dialog.timeout = 0;
|
||||
|
||||
<c:if test="${currentUser.authenticated}">
|
||||
function logout() {
|
||||
dialog.alert({
|
||||
content:"로그아웃 하시겠습니까?",
|
||||
onOK:function(){
|
||||
var form = $("<form action=\"<c:url value='/logout.do'/>\", method=\"POST\">");
|
||||
$("<input name=\"${_csrf.parameterName}\" value=\"${_csrf.token}\" type=\"hidden\">").appendTo(form);
|
||||
form.appendTo("body").submit();
|
||||
}
|
||||
});
|
||||
}</c:if>
|
||||
|
||||
<c:if test="${currentUser.hasAuthorities('ROLE_ADMIN')}">
|
||||
async function selectURL(multiple) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
ajax.get({
|
||||
url:wctx.url("/urls.do"),
|
||||
data:{multiple:multiple},
|
||||
success: resp => {
|
||||
dialog.open({
|
||||
title:"URL 선택",
|
||||
content:resp,
|
||||
getData:() => getSelectedURL(),
|
||||
onOK:selected => {
|
||||
resolve(selected);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
</c:if>
|
||||
|
||||
</c:set>
|
@ -1,576 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<!-- Navbar -->
|
||||
<nav id="layout-navbar" data-doctx="top"
|
||||
class="layout-navbar navbar container-xxl navbar-expand-xl navbar-detached align-items-center mt-1 mx-0 flex-nowrap">
|
||||
<div class="layout-menu-toggle navbar-nav align-items-xl-center me-3 me-xl-0 d-xl-none">
|
||||
<a class="nav-item nav-link px-0 me-xl-4" href="javascript:void(0)">
|
||||
<i class="bx bx-menu bx-lg"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="navbar-nav-right d-flex align-items-center" id="navbar-collapse">
|
||||
|
||||
<!-- /Search -->
|
||||
<div class="ms-1 me-1 min-w-max-c">
|
||||
<select id="fastBy--top" class="form-select" title="검색구분">
|
||||
<option value="vhrno">차량번호</option>
|
||||
<option value="rtpyrNm">납부자명</option>
|
||||
<option value="rtpyrNo">납부자번호</option>
|
||||
<option value="cvlcptAplcntNm">신고인명</option>
|
||||
</select>
|
||||
<input type="text" id="fastTerm--top" class="form-control" title="검색어" />
|
||||
<button type="button" id="btnFastSearch--top" class="btn btn-outline-dark bg-orange" title="통합조회">
|
||||
<i class="bx bx-search"></i>통합조회
|
||||
</button>
|
||||
</div>
|
||||
<div class="me-1 min-w-max-c">
|
||||
<div class="form-check-inline custom-option custom-option-basic me-1 border-default bg-top-checkbox">
|
||||
<label for="securityMode--top" class="form-check-label custom-option-content d-flex justify-content-center pt-1 pb-1">
|
||||
<input type="checkbox" id="securityMode--top" name="securityMode"
|
||||
class="form-check-input me-1 align-self-center" value="Y" />
|
||||
<span class="text-center">
|
||||
보안모드<br/><kbd>F9</kbd>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check-inline custom-option custom-option-basic me-1 border-default bg-top-checkbox">
|
||||
<label for="photoMask--top" class="form-check-label custom-option-content d-flex justify-content-center pt-1 pb-1">
|
||||
<input type="checkbox" id="photoMask--top" name="photoMask"
|
||||
class="form-check-input me-1 align-self-center" value="Y" checked />
|
||||
<span class="text-center">
|
||||
단속사진 모자이크<br/><kbd>F10</kbd>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<button type="button" id="btnOpenTempFileUploadWindow" class="btn btn-outline-dark">
|
||||
외부자료 파일 처리
|
||||
</button>
|
||||
<button type="button" id="btnOpenSelectStngDialog" class="btn btn-outline-dark">
|
||||
특화설정
|
||||
</button>
|
||||
<button type="button" id="btnGoToCvlcptDscsn" class="btn btn-outline-dark">
|
||||
종합민원관리
|
||||
</button>
|
||||
<button type="button" id="btnGoToSchdl" class="btn btn-outline-dark">
|
||||
일정관리
|
||||
</button>
|
||||
<button type="button" id="btnGoToNtc" class="btn btn-outline-dark">
|
||||
공지사항
|
||||
</button>
|
||||
<button type="button" id="btnDownloadMenual--top" class="btn btn-primary"
|
||||
>사용자 메뉴얼
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<ul class="navbar-nav flex-row align-items-center">
|
||||
|
||||
<!-- Style Switcher -->
|
||||
<li class="nav-item me-2 me-xl-0">
|
||||
<a class="nav-link style-switcher-toggle hide-arrow" href="javascript:void(0);">
|
||||
<i class="bx bx-lg"></i>
|
||||
</a>
|
||||
</li>
|
||||
<!--/ Style Switcher -->
|
||||
|
||||
|
||||
<!-- User -->
|
||||
<li id="userNav--top" class="nav-item navbar-dropdown dropdown-user dropdown">
|
||||
<a href="javascript:void(0);" data-bs-toggle="dropdown"
|
||||
class="d-flex align-items-center nav-link dropdown-toggle hide-arrow">
|
||||
<div class="avatar d-flex">
|
||||
<img src="<c:url value="/resources/img/user-circle-solid-24.svg"/>" alt
|
||||
class="w-px-40 h-auto rounded-circle" />
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fw-semibold text-black">${currentUser.name}</span>
|
||||
<small class="text-black">${currentUser.account}</small>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<a class="dropdown-item" href="#">
|
||||
<div class="d-flex">
|
||||
<div class="flex-shrink-0 me-3">
|
||||
<div class="avatar avatar-online">
|
||||
<img src="<c:url value="/resources/img/user-circle-solid-24.svg"/>" alt
|
||||
class="w-px-40 h-auto rounded-circle" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<span class="fw-semibold d-block">${currentUser.name}</span>
|
||||
<small class="text-muted">${currentUser.account}</small>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li onclick="fnOpenMyInfo();">
|
||||
<a class="dropdown-item" href="javascript:void(0);">
|
||||
<i class="bx bx-user me-2"></i>
|
||||
<span class="align-middle">계정 정보 수정</span>
|
||||
</a>
|
||||
</li>
|
||||
<li onclick="fnOpenChangePassword();">
|
||||
<a class="dropdown-item" href="javascript:void(0);">
|
||||
<i class="bx bx-user me-2"></i>
|
||||
<span class="align-middle">비밀번호 변경</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<div id="taskSeCd--Top" class="d-flex flex-column align-items-center">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="#" onclick="showHelp();">
|
||||
<i class="bx bx-support me-2"></i>
|
||||
<span class="align-middle">Help</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a id="btnCancelAccount--Top" class="dropdown-item" href="#" onclick="fnCancelAccount();">
|
||||
<i class="bx bx-exit me-2"></i>
|
||||
<span class="align-middle">
|
||||
회원탈퇴
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li onclick="logout();">
|
||||
<a class="dropdown-item">
|
||||
<i class="bx bx-power-off me-2"></i>
|
||||
<span class="align-middle">로그아웃</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<!--/ User -->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
<template id="selectStngButtonsTemplate">
|
||||
<span class="row g-3 d-flex flex-column">
|
||||
<button type="button" class="btn btn-xl btn-primary" onclick="fnOpenEqmCrdnLayoutStngDialog();">수신단속파일(장비) 서식 설정</button>
|
||||
<button type="button" class="btn btn-xl btn-primary" onclick="fnOpenOtptStngDialog();">출력물 서식 설정</button>
|
||||
<button type="button" class="btn btn-xl btn-primary" onclick="fnOpenOutsourcingStngDialog();">고지서 외주요청파일 서식 설정</button>
|
||||
<button type="button" class="btn btn-xl btn-primary" onclick="fnOpenExtrStngDialog();">pdf 고지서 정보 추출 설정</button>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<c:set var="topScript" scope="request">
|
||||
async function fnOpenTempFileUploadWindow(){
|
||||
|
||||
var resp = await fetch(wctx.url("/resources/html/fileUpload.html"));
|
||||
var template = await resp.text();
|
||||
|
||||
dialog.open({
|
||||
id : "fileUploadDialog",
|
||||
title: "파일 업로드",
|
||||
size : "lg",
|
||||
content: template,
|
||||
init : () => {
|
||||
AppSupport.setDialogZindex();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/*--------------------- 설정 선택 다이얼로그 표시 ---------------------*/
|
||||
function fnOpenSelectStngDialog(){
|
||||
dialog.open({
|
||||
id : "selectStngDialog",
|
||||
title : "설정 선택",
|
||||
content : document.getElementById("selectStngButtonsTemplate").innerHTML,
|
||||
size : "md",
|
||||
init : () => {},
|
||||
onClose : () => {}
|
||||
});
|
||||
}
|
||||
|
||||
/*--------------------- 장비단속레이아웃 설정 메인 화면 표시 ---------------------*/
|
||||
function fnOpenEqmCrdnLayoutStngDialog(){
|
||||
dialog.close("selectStngDialog");
|
||||
|
||||
var url = wctx.url("/crdn/crdn01/010/main.do");
|
||||
|
||||
ajax.post({
|
||||
url : url,
|
||||
data : {},
|
||||
success : (resp) => {
|
||||
let dialogName = "eqmCrdnLayoutStngDialog";
|
||||
let dialogId = dialogName+"-"+uuid();
|
||||
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "장비단속 레이아웃 설정",
|
||||
size : "xxl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
$("#"+dialogId).attr("name", dialogName);
|
||||
$("#"+dialogId).attr("data-ref-doctx","top");
|
||||
let refDlgId = pageObject["top"].refDlgId(dialogName);
|
||||
|
||||
$("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd);
|
||||
|
||||
},
|
||||
onClose : () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*--------------------- 출력물 설정 메인 화면 표시 ---------------------*/
|
||||
function fnOpenOtptStngDialog(){
|
||||
|
||||
dialog.close("selectStngDialog");
|
||||
|
||||
var url = wctx.url("/stng/stng01/010/main.do");
|
||||
|
||||
ajax.post({
|
||||
url : url,
|
||||
data : {},
|
||||
success : (resp) => {
|
||||
|
||||
let dialogName = "otptStngDialog";
|
||||
let dialogId = dialogName+"-"+uuid();
|
||||
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "출력설정",
|
||||
size : "xxl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
$("#"+dialogId).attr("name", dialogName);
|
||||
$("#"+dialogId).attr("data-ref-doctx","top");
|
||||
let refDlgId = pageObject["top"].refDlgId(dialogName);
|
||||
|
||||
$("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd);
|
||||
|
||||
},
|
||||
onClose : () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/*--------------------- 고지서 외주요청파일 서식 설정 ---------------------*/
|
||||
function fnOpenOutsourcingStngDialog(){
|
||||
|
||||
dialog.close("selectStngDialog");
|
||||
|
||||
var url = wctx.url("/stng/stng01/030/main.do");
|
||||
|
||||
|
||||
ajax.post({
|
||||
url : url,
|
||||
data : {},
|
||||
success : (resp) => {
|
||||
|
||||
let dialogName = "outsourcingStngDialog";
|
||||
let dialogId = dialogName+"-"+uuid();
|
||||
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "외주요청파일 서식 설정",
|
||||
size : "xxl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
|
||||
$("#"+dialogId).attr("name", dialogName);
|
||||
$("#"+dialogId).attr("data-ref-doctx","top");
|
||||
let refDlgId = pageObject["top"].refDlgId(dialogName);
|
||||
|
||||
$("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd);
|
||||
|
||||
},
|
||||
onClose : () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*--------------------- PDF자료 추출 설정 메인 화면 표시 ---------------------*/
|
||||
function fnOpenExtrStngDialog(){
|
||||
dialog.close("selectStngDialog");
|
||||
|
||||
var url = wctx.url("/stng/stng01/020/main.do");
|
||||
|
||||
ajax.post({
|
||||
url : url,
|
||||
data : {},
|
||||
success : (resp) => {
|
||||
|
||||
let dialogName = "extrStngDialog";
|
||||
let dialogId = dialogName+"-"+uuid();
|
||||
|
||||
dialog.open({
|
||||
id : dialogId,
|
||||
title : "PDF자료 추출 설정",
|
||||
size : "xxl",
|
||||
content : resp,
|
||||
init : () => {
|
||||
$("#"+dialogId).attr("name", dialogName);
|
||||
$("#"+dialogId).attr("data-ref-doctx","top");
|
||||
let refDlgId = pageObject["top"].refDlgId(dialogName);
|
||||
|
||||
$("#"+refDlgId).find("form[name='frmSearch']").find("[name='sggCd']").val(MY_INFO.info.sggCd);
|
||||
|
||||
},
|
||||
onClose : () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function fnOpenMyInfo(){
|
||||
var popupWidth = 950;
|
||||
var popupHeight = 500;
|
||||
var popupX = (window.screen.width / 2) - (popupWidth / 2);
|
||||
var popupY= (window.screen.height / 2) - (popupHeight / 2);
|
||||
|
||||
var popup = window.open(
|
||||
wctx.url("/user/openMyInfo.do")
|
||||
,"changeMyInfo"
|
||||
,"width="+popupWidth+", height="+popupHeight+", left="+popupX+", top="+popupY
|
||||
);
|
||||
|
||||
popup.onload = () => {
|
||||
popup.addEventListener('beforeunload', function() {
|
||||
$.unblockUI();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function fnOpenChangePassword(){
|
||||
ajax.get({
|
||||
url : wctx.url("/user/changePassword.do"),
|
||||
data : { },
|
||||
success : (resp) => {
|
||||
dialog.open({
|
||||
id : "changePasswordDialog",
|
||||
title : "비밀번호 변경",
|
||||
content : resp,
|
||||
size : "md",
|
||||
init : () => {},
|
||||
onClose : () => {}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function fnCancelAccount(){
|
||||
let ok = await confirm2("탈퇴하시겠습니까?");
|
||||
if(ok){
|
||||
ajax.get({
|
||||
url : wctx.url("/user/cancelAccount.do"),
|
||||
data : { },
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
alert('탈퇴되었습니다.');
|
||||
var form = $("<form action=\"/logout.do\", method=\"POST\">");
|
||||
$("<input name=\"${_csrf.parameterName}\" value=\"${_csrf.token}\" type=\"hidden\">").appendTo(form);
|
||||
form.appendTo("body").submit();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function showHelp(){
|
||||
dialog.alert({
|
||||
content : "문의전화 : 070-4490-74XX"
|
||||
+"<br/>"
|
||||
+"<button type='button' class='btn btn-primary' onclick='remoteRequest();'>원격지원</button>",
|
||||
timeout : 0,
|
||||
init : function() {
|
||||
AppSupport.setDialogZindex();
|
||||
AppSupport.focusClose();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function remoteRequest(){
|
||||
window.open("https://www.xit.co.kr/xit-1.exe", '_blank');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 보안모드 토글 처리
|
||||
*/
|
||||
function fn_securityModeToggle(flag, elementId){
|
||||
|
||||
var executionArea;
|
||||
if(elementId){
|
||||
executionArea = $("#"+elementId);
|
||||
} else {
|
||||
executionArea = $(document);
|
||||
}
|
||||
|
||||
var targets = executionArea.find("input.privacy");
|
||||
for(let i=0; i< targets.length; i++){
|
||||
let originId = targets[i].id;
|
||||
let originValue= targets[i].value;
|
||||
let maskingValue = originValue.replaceAll(/./g, "*");
|
||||
document.getElementById("mask-"+originId).value = maskingValue;
|
||||
}
|
||||
|
||||
if(flag){ //개인정보 숨김
|
||||
|
||||
//입력상자
|
||||
$("input.privacy").attr("hidden","hidden");
|
||||
$("input.privacy-mask").removeAttr("hidden");
|
||||
|
||||
//그리드
|
||||
$("body").addClass("root-privacy-on");
|
||||
|
||||
} else { //개인정보 표시
|
||||
|
||||
//입력상자
|
||||
$("input.privacy").removeAttr("hidden");
|
||||
$("input.privacy-mask").attr("hidden","hidden");
|
||||
|
||||
//그리드
|
||||
$("body").removeClass("root-privacy-on");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* 단속사진 마스킹
|
||||
*/
|
||||
function fn_photoMask(flag, element){
|
||||
|
||||
var executionArea;
|
||||
var isImg = false;
|
||||
if(element){
|
||||
if(element.tagName == "IMG"){
|
||||
isImg = true;
|
||||
}
|
||||
executionArea = $(element);
|
||||
} else {
|
||||
executionArea = $(document);
|
||||
}
|
||||
|
||||
var targets;
|
||||
if(isImg){
|
||||
targets = executionArea.filter("[data-crdn-photo-id]");
|
||||
} else {
|
||||
targets = executionArea.find("[data-crdn-photo-id]");
|
||||
}
|
||||
|
||||
for(var i=0; i < targets.length; i++){
|
||||
var target = targets[i];
|
||||
var dataset = target.dataset;
|
||||
var targetId = dataset.crdnPhotoId;
|
||||
|
||||
$("div[data-ref='"+dataset.crdnPhotoId+"']").remove();
|
||||
|
||||
if(dataset.crdnPhotoId != null && dataset.crdnPhotoId != ""
|
||||
&& dataset.mosaic != null && dataset.mosaic != ""
|
||||
&& flag){
|
||||
|
||||
var mosaicInfoArr = dataset.mosaic.split("|");
|
||||
|
||||
var zoomX = target.width / target.naturalWidth;
|
||||
var zoomY = target.height / target.naturalHeight;
|
||||
|
||||
for(var j=0; j < mosaicInfoArr.length; j++){
|
||||
var mosaicInfo = mosaicInfoArr[j].split(",");
|
||||
var x2 = mosaicInfo[0] * zoomX
|
||||
var y2 = mosaicInfo[1] * zoomY
|
||||
var w2 = mosaicInfo[2] * zoomX
|
||||
var h2 = mosaicInfo[3] * zoomY
|
||||
|
||||
var mosaic = document.createElement("div");
|
||||
mosaic.style["position"] = "absolute";
|
||||
mosaic.style["top"] = y2 + "px";
|
||||
mosaic.style["left"] = x2 + "px";
|
||||
mosaic.style["width"] = w2 + "px";
|
||||
mosaic.style["height"] = h2 + "px";
|
||||
mosaic.style["background-color"] = "black";
|
||||
mosaic.setAttribute("data-ref", targetId);
|
||||
$(target).after(mosaic);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*--------------------- 통합조회 버튼 클릭 이벤트 ---------------------*/
|
||||
$("#btnFastSearch--top").on( "click", function() {
|
||||
fnGlobalFastSearch();
|
||||
});
|
||||
|
||||
$("#fastTerm--top").onEnterPress(fnGlobalFastSearch);
|
||||
|
||||
function fnGlobalFastSearch(){
|
||||
|
||||
var integrationSearchUrl = wctx.url("/sprt/sprt01/010/main.do");
|
||||
if(mainTabs.getDataset().find(i => i.url == integrationSearchUrl) != null){
|
||||
mainTabs.close(integrationSearchUrl);
|
||||
}
|
||||
|
||||
|
||||
if($("#fastTerm--top").val() != ""){
|
||||
fastSearch = true;
|
||||
}
|
||||
openMenu(integrationSearchUrl);
|
||||
|
||||
}
|
||||
|
||||
/*--------------------- 종합민원관리 클릭 이벤트 ---------------------*/
|
||||
FimsSupport.mappingButtonAndMenu("btnGoToCvlcptDscsn","민원상담");
|
||||
/*--------------------- 일정관리 클릭 이벤트 ---------------------*/
|
||||
FimsSupport.mappingButtonAndMenu("btnGoToNtc","공지사항");
|
||||
/*--------------------- 공지사항 클릭 이벤트 ---------------------*/
|
||||
FimsSupport.mappingButtonAndMenu("btnGoToSchdl","일정관리");
|
||||
|
||||
/*--------------------- 사용자 메뉴얼 클릭 이벤트 ---------------------*/
|
||||
$("#btnDownloadMenual--top").on( "click", function() {
|
||||
FimsSupport.fnMenualDownload();
|
||||
});
|
||||
|
||||
/*--------------------- 보안모드 체크박스 클릭 이벤트 ---------------------*/
|
||||
$("#securityMode--top").on( "click", function() {
|
||||
if($("#securityMode--top").is(":checked")){
|
||||
fn_securityModeToggle(true);
|
||||
} else {
|
||||
fn_securityModeToggle(false);
|
||||
}
|
||||
});
|
||||
|
||||
/*--------------------- 단속사진 모자이크 체크박스 클릭 이벤트 ---------------------*/
|
||||
$("#photoMask--top").on( "click", function() {
|
||||
if($("#photoMask--top").is(":checked")){
|
||||
fn_photoMask(true);
|
||||
} else {
|
||||
fn_photoMask(false);
|
||||
}
|
||||
});
|
||||
|
||||
/*--------------------- 외부자료 파일 처리 ---------------------*/
|
||||
$("#btnOpenTempFileUploadWindow").on( "click", function() {
|
||||
fnOpenTempFileUploadWindow();
|
||||
});
|
||||
/*--------------------- 특화 설정 ---------------------*/
|
||||
$("#btnOpenSelectStngDialog").on( "click", function() {
|
||||
fnOpenSelectStngDialog();
|
||||
});
|
||||
|
||||
</c:set>
|
||||
|
@ -1,41 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<!-- Menu -->
|
||||
<aside id="layout-menu" class="layout-menu menu-vertical menu bg-menu-theme">
|
||||
<div class="app-brand demo">
|
||||
<a href="javascript:fnHome();" class="app-brand-link">
|
||||
<span class="app-brand-logo demo">
|
||||
<img id="symbol--left"
|
||||
src="<c:url value='/'/>resources/img/login/mainLogo_01.png"
|
||||
width="36px" height="36px" alt="symbol" />
|
||||
</span>
|
||||
<span id="home" class="app-brand-text demo menu-text fw-bold ms-2 text-center">
|
||||
과태료통합관리시스템
|
||||
</span>
|
||||
</a>
|
||||
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large ms-auto">
|
||||
<i class="bx bx-chevron-left bx-lg align-middle"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-inner-shadow"></div>
|
||||
<ul id="menus" class="menu-inner py-1">
|
||||
|
||||
</ul>
|
||||
</aside>
|
||||
<!-- / Menu -->
|
||||
<c:set var="userMenus" scope="request">
|
||||
function fnHome(){
|
||||
top.location.href = wctx.url("/")+"?taskSeCd="+$("#layout-navbar input[name='taskSeCd']:checked").val();
|
||||
}
|
||||
|
||||
let userMenus = ${userMenus};
|
||||
let menuSupport = new MenuSupport("#layout-menu");
|
||||
function setUserMenus(menus) {
|
||||
menuSupport.setMenuInfo(menus).setActive(wctx.current());
|
||||
let currentMenu = menuSupport.getMenu(wctx.current());
|
||||
if (currentMenu)
|
||||
setPageTitle(currentMenu.name);
|
||||
}
|
||||
|
||||
setUserMenus(userMenus);
|
||||
</c:set>
|
@ -1,459 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<jsp:include page="/WEB-INF/jsp/include/head.jsp" />
|
||||
<body>
|
||||
<div class="layout-wrapper layout-content-navbar layout-without-menu">
|
||||
<div class="layout-container">
|
||||
|
||||
<div class="layout-page">
|
||||
|
||||
<div class="content-wrapper mt-0">
|
||||
<jsp:include page="/WEB-INF/jsp/include/userMenus.jsp" />
|
||||
<div class="content-body menu-aware">
|
||||
<div class="sticky-wrapper">
|
||||
<div class="sticky-element">
|
||||
<jsp:include page="/WEB-INF/jsp/include/top.jsp" />
|
||||
<ul id="menu-tabs" class="nav nav-tabs mt-1" role="tablist"
|
||||
style="--bs-nav-link-padding-y: .125rem; background-image: linear-gradient(#8AB9DB, whitesmoke);">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<template id="main-tab">
|
||||
<li class="nav-item" role="presentation">
|
||||
<div class="nav-link border-bottom-0" data-bs-toggle="tab" data-bs-target="{tab-target}"
|
||||
role="tab" aria-controls="{index}" tabindex="-1">
|
||||
<span onclick="openMenu('{url}');" class="w-px-150 text-truncate">{name}</span>
|
||||
<span onclick="mainTabs.close('{url}')" class="ms-2">×</span>
|
||||
</div>
|
||||
</li>
|
||||
</template>
|
||||
<div id="main-tab-content" class="tab-content shadowed">
|
||||
<div id="dashboard" class="tab-pane fade" role="tabpanel">
|
||||
<jsp:include page="/WEB-INF/jsp/dashboard.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
<template id="tab-pane">
|
||||
<div id="{index}" class="tab-pane fade" role="tabpanel">{inner-content}</div>
|
||||
</template>
|
||||
<jsp:include page="/WEB-INF/jsp/include/bottom.jsp" />
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="selectTaskModal" class="modal fade h-auto" tabindex="-1" aria-hidden="true"
|
||||
data-bs-backdrop="static" data-bs-focus="false" data-bs-keyboard="false">
|
||||
<div class="modal-dialog modal-sm" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body modal-body-min">
|
||||
<div class="h3 fw-bold text-center">업무를 선택하세요.</div>
|
||||
<span id="selectTaskButtons" class="row g-3 d-flex flex-column">
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<jsp:include page="/WEB-INF/jsp/include/tail.jsp" />
|
||||
<!-- 자동 로그아웃 -->
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/idletimer/idletimer.js"/>"></script>
|
||||
|
||||
<c:set var="onload">
|
||||
|
||||
</c:set>
|
||||
|
||||
<script>
|
||||
//단축키 등록
|
||||
FimsSupport.registShortcutKey();
|
||||
|
||||
let sticky = {id: -1, index: "dashboard", name: "대시보드", url: "/dashboard.do", parentID: null, description: "대시보드"};
|
||||
let mainTabs = new TabControl({
|
||||
sticky: sticky,
|
||||
getMenu: (url) => menuSupport.getMenu(url),
|
||||
onDatasetChange: tabs => {
|
||||
let template = document.getElementById("main-tab").innerHTML,
|
||||
toTab = (tmpl, item) => tmpl.replace(/{tab-target}/gi, "#" + "{index}"),
|
||||
tags = mainTabs.inStrings(template, toTab);
|
||||
document.getElementById("menu-tabs").innerHTML = tags.join("");
|
||||
|
||||
$("#menu-tabs .nav-item").eq(0).find("span.ms-2").remove();
|
||||
|
||||
},
|
||||
onCurrentChange: tab => {
|
||||
if (!tab || !tab.data) return;
|
||||
|
||||
let url = tab.data.url;
|
||||
menuSupport.setActive(url);
|
||||
document.querySelector("#menu-tabs li span[onclick=\"openMenu('" + url + "');\"]").click();
|
||||
|
||||
let currentPane = document.querySelector("#" + tab.data.index);
|
||||
if (!currentPane) {
|
||||
let template = document.getElementById("tab-pane").innerHTML,
|
||||
html = tab.inString(template);
|
||||
|
||||
if (tab.data.content) {
|
||||
html = html.replace(/{inner-content}/, tab.data.content);
|
||||
delete tab.data.content;
|
||||
$("#main-tab-content").append(html);
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll("#main-tab-content > div.tab-pane")
|
||||
.forEach(tabPane => {
|
||||
let current = tab.data.index == tabPane.getAttribute("id");
|
||||
if (current)
|
||||
tabPane.classList.add("show", "active");
|
||||
else
|
||||
tabPane.classList.remove("show", "active");
|
||||
});
|
||||
},
|
||||
onRemove: tabs => {
|
||||
let mainTab = document.querySelector("#main-tab-content");
|
||||
tabs.forEach(tab => {
|
||||
let tabPane = document.querySelector("#" + tab.data.index);
|
||||
if (!tabPane) return;
|
||||
|
||||
mainTab.removeChild(tabPane);
|
||||
delete tabPane;
|
||||
});
|
||||
mainTabs.onDatasetChange();
|
||||
}
|
||||
});
|
||||
|
||||
function openMenu(url) {
|
||||
mainTabs.open(url)
|
||||
}
|
||||
|
||||
$(".sticky-element").sticky({
|
||||
topSpacing: $(".nav-bar").height() + 1,
|
||||
width: "100%",
|
||||
zIndex: 9
|
||||
});
|
||||
|
||||
|
||||
|
||||
const FETCH_XXS = 10;
|
||||
const FETCH_XS = 30;
|
||||
const FETCH_SM = 50;
|
||||
const FETCH_MD = 100;
|
||||
const FETCH_LG = 300;
|
||||
const FETCH_XL = 500;
|
||||
const FETCH_XXL = 1000;
|
||||
|
||||
const DEFAULT_FETCH_SIZE = 30;
|
||||
|
||||
//자동 로그아웃
|
||||
const ONE_MINUTE = 60 * 1000;
|
||||
let sessionConfig = 30 * ONE_MINUTE;
|
||||
$.idleTimer(sessionConfig);
|
||||
$(document).bind("idle.idleTimer", function(){
|
||||
$.idleTimer('destroy');
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/logout.do"),
|
||||
data : { "${_csrf.parameterName}" : "${_csrf.token}" },
|
||||
success : async function(){
|
||||
var ok = await alert2("세션이 종료되어 로그아웃되었습니다.");
|
||||
if(ok){
|
||||
location.href = wctx.url("/login.do");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
let fastSearch = false;
|
||||
|
||||
var pageObject = {};
|
||||
pageObject.help = function(){
|
||||
console.log("pageObject : 로드된 페이지이름(서버에서 반환하는 pageName변수 또는 jsp파일명)을 하위 키로 갖는 전역객체");
|
||||
};
|
||||
pageObject.childReq = [];
|
||||
pageObject.parentRes = [];
|
||||
pageObject.top = newDoctxFinder("top");
|
||||
|
||||
function LoadScript(scriptId, scriptPath){
|
||||
if(document.getElementById(scriptId) == null){
|
||||
$("body").append("<script id='"+scriptId+"' src='"+"<c:url value='' />"+scriptPath+"' />");
|
||||
}
|
||||
}
|
||||
|
||||
async function LoadJson(path){
|
||||
let resp = await fetch("<c:url value='' />"+path);
|
||||
return await resp.json();
|
||||
}
|
||||
|
||||
function FindObject(objectName, pageName){
|
||||
if(pageName == undefined || pageName == null || pageName == ""){
|
||||
return window[objectName];
|
||||
} else {
|
||||
return pageObject[pageName][objectName];
|
||||
}
|
||||
}
|
||||
|
||||
function RegistObject(objectName, def, pageName){
|
||||
if(pageName == undefined || pageName == null || pageName == ""){
|
||||
window[objectName] = def;
|
||||
return window[objectName];
|
||||
} else {
|
||||
pageObject[pageName][objectName] = def;
|
||||
return pageObject[pageName][objectName];
|
||||
}
|
||||
}
|
||||
|
||||
var ALL_TASK = {};
|
||||
var MY_INFO = {};
|
||||
var SYS_LINK_INFO = {};
|
||||
var PARAM_TASK = "${param.taskSeCd}";
|
||||
|
||||
async function fnGetAllTask(){
|
||||
return new Promise((resolve, reject) => {
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: wctx.url("/code/getAllTaskSeCd.do"),
|
||||
data: {},
|
||||
dataType: 'json',
|
||||
success: function(resp, textStatus, jqXHR) {
|
||||
ALL_TASK = resp.allTask;
|
||||
resolve({resp, textStatus, jqXHR});
|
||||
},
|
||||
error: function(jqXHR, textStatus, error) {
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
async function fnCheckSggTask(){
|
||||
return new Promise((resolve, reject) => {
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: wctx.url("/code/sggHasTask.do"),
|
||||
data: {},
|
||||
dataType: 'json',
|
||||
success: function(resp, textStatus, jqXHR) {
|
||||
if(resp.sggHasTask == "Y" || "${currentUser.user.getCntnSeCd()}" == "02"){
|
||||
resolve({resp, textStatus, jqXHR});
|
||||
} else {
|
||||
reject("시군구 업무 설정이 없습니다.");
|
||||
}
|
||||
},
|
||||
error: function(jqXHR, textStatus, error) {
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function fnGetSysLinkInfo(){
|
||||
return new Promise((resolve, reject) => {
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: wctx.url("/user/sysLinkInfo.do"),
|
||||
data: {},
|
||||
dataType: 'json',
|
||||
success: function(resp, textStatus, jqXHR) {
|
||||
SYS_LINK_INFO = resp.sysLinkInfo;
|
||||
resolve({resp, textStatus, jqXHR});
|
||||
},
|
||||
error: function(jqXHR, textStatus, error) {
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
async function fnGetMyInfo(){
|
||||
return new Promise((resolve, reject) => {
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: wctx.url("/user/myInfo.do"),
|
||||
data: {},
|
||||
dataType: 'json',
|
||||
success: function(resp, textStatus, jqXHR) {
|
||||
MY_INFO = resp.myInfo;
|
||||
resolve({resp, textStatus, jqXHR});
|
||||
},
|
||||
error: function(jqXHR, textStatus, error) {
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function fnSelectDefaultTask(taskSeCd){
|
||||
ajax.get({
|
||||
url : wctx.url("/user/saveDefaultTask.do"),
|
||||
data : {
|
||||
"taskSeCd" : taskSeCd
|
||||
},
|
||||
success : (resp) => {
|
||||
if(resp.saved){
|
||||
$("#selectTaskModal").modal("hide");
|
||||
initIndexPage(true, PARAM_TASK, taskSeCd);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function initIndexPage(isPublicOfficer, paramTask, userDefaultTask){
|
||||
if(!isPublicOfficer){
|
||||
|
||||
$("#home").html("과태료통합관리시스템<br/>("+"임대기업사용자"+")");
|
||||
|
||||
$("#btnOpenTempFileUploadWindow").remove();
|
||||
$("#btnOpenSelectStngDialog").remove();
|
||||
$("#btnGoToCvlcptDscsn").remove();
|
||||
$("#btnGoToSchdl").remove();
|
||||
$("#btnDownloadMenual--top").remove();
|
||||
$("#btnGoToNtc").remove();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$("#btnCancelAccount--Top").remove();
|
||||
|
||||
if(paramTask != "" || $("#layout-navbar").find("input[name='taskSeCd'][value='"+paramTask+"']").length > 0){
|
||||
$("#layout-navbar input[name='taskSeCd'][value='"+paramTask+"']").prop("checked", true);
|
||||
} else if(userDefaultTask != "" || $("#layout-navbar").find("input[name='taskSeCd'][value='"+userDefaultTask+"']").length > 0){
|
||||
$("#layout-navbar input[name='taskSeCd'][value='"+userDefaultTask+"']").prop("checked", true);
|
||||
} else {
|
||||
$("#layout-navbar input[name='taskSeCd']").eq(0).prop("checked", true);
|
||||
}
|
||||
|
||||
//좌측상단제목, 최상단 배경색
|
||||
var checkedId = $("#layout-navbar input[name='taskSeCd']:checked")[0].id;
|
||||
var checkedText = $("label[for='"+checkedId+"']").text();
|
||||
$("#home").html("과태료통합관리시스템<br/>("+checkedText+")");
|
||||
|
||||
var taskTheme = "task-theme-" + $("#layout-navbar input[name='taskSeCd']:checked").val().toLowerCase();
|
||||
$("#layout-navbar").addClass(taskTheme);
|
||||
|
||||
//대시보드 로드
|
||||
${dashboardScript}
|
||||
}
|
||||
|
||||
${functions}
|
||||
|
||||
${topScript}
|
||||
|
||||
${userMenus}
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
|
||||
mainTabs.getTab(sticky.url);
|
||||
|
||||
fnGetAllTask()
|
||||
.then(() => { return fnCheckSggTask(); })
|
||||
.then(() => { return fnGetSysLinkInfo(); })
|
||||
.then(() => { return fnGetMyInfo(); })
|
||||
.then(() => {
|
||||
|
||||
var msg = "";
|
||||
var available = true;
|
||||
|
||||
if(MY_INFO.user.status == "A" || MY_INFO.user.status == "D" || MY_INFO.user.locked == "Y"){
|
||||
|
||||
if(MY_INFO.user.status == "A"){
|
||||
msg = "계정이 미승인 상태입니다.";
|
||||
} else if(MY_INFO.user.status == "D"){
|
||||
msg = "삭제된 계정입니다.";
|
||||
} else if(MY_INFO.user.locked == "Y"){
|
||||
msg = "잠금처리된 계정입니다.";
|
||||
}
|
||||
available = false;
|
||||
}
|
||||
|
||||
if(!(MY_INFO.info.isAdmin)){
|
||||
if(MY_INFO.info.isPublicOfficer){
|
||||
if(!(MY_INFO.info.hasTaskAuth)){
|
||||
msg = "계정에 부여된 업무권한이 없습니다.";
|
||||
available = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(msg != ""){
|
||||
alert(msg);
|
||||
}
|
||||
|
||||
//로그아웃
|
||||
if(!available){
|
||||
var form = $("<form action=\"/logout.do\", method=\"POST\">");
|
||||
$("<input name=\"${_csrf.parameterName}\" value=\"${_csrf.token}\" type=\"hidden\">").appendTo(form);
|
||||
form.appendTo("body").submit();
|
||||
return;
|
||||
}
|
||||
|
||||
//지자체 심볼
|
||||
if(MY_INFO.info.sggSymbolPath != ""){
|
||||
$("#symbol--left").attr("src", MY_INFO.info.sggSymbolPath);
|
||||
}
|
||||
|
||||
//사용하지 않는 연계와 관련된 메뉴 제거
|
||||
//새올민원 관련 메뉴 제거
|
||||
if(SYS_LINK_INFO == null || SYS_LINK_INFO.CVLCPT_LINK_SE_CD != '01'){
|
||||
var seallMenuUrl = wctx.url("/cvlc/cvlc04/010/main.do");
|
||||
$("ul[id='menus']").find("li[class='menu-item']").each(function(){
|
||||
if($(this).children("a[onclick]").length > 0){
|
||||
let oc = $(this).children("a[onclick]").attr("onclick").split("'");
|
||||
if(oc.length == 3 && oc[1] == seallMenuUrl){
|
||||
$(this).remove();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(MY_INFO.info.isPublicOfficer){
|
||||
//사용자별 선택가능한 업무 렌더링
|
||||
$("#selectTaskButtons").html("");
|
||||
for(var i=0; i < MY_INFO.info.taskForUser.length; i++){
|
||||
var taskCd = MY_INFO.info.taskForUser[i];
|
||||
var taskNm = ALL_TASK[taskCd];
|
||||
|
||||
var radio = "";
|
||||
radio += "<span>";
|
||||
radio += "<input type='radio' id='taskSeCd"+(i+1)+"--top' name='taskSeCd' value='"+taskCd+"' title='"+taskNm+"' />";
|
||||
radio += "<label for='taskSeCd"+(i+1)+"--top'>"+taskNm+"</label>";
|
||||
radio += "</span>";
|
||||
$("#taskSeCd--Top").append(radio);
|
||||
|
||||
var button = `<button type="button" class="btn btn-xl btn-primary" onclick="fnSelectDefaultTask('`
|
||||
+taskCd
|
||||
+`');">`
|
||||
+taskNm
|
||||
+`</button>`;
|
||||
$("#selectTaskButtons").append(button);
|
||||
}
|
||||
|
||||
$("#layout-navbar input[name='taskSeCd']").on("click", function(){
|
||||
$("#userNav--top").click();
|
||||
window.open(wctx.url("/")+"?taskSeCd="+this.value, "_blank", "");
|
||||
return false;
|
||||
});
|
||||
|
||||
//업무선택 모달 다이얼로그
|
||||
if(MY_INFO.info.defaultTask == null || MY_INFO.info.defaultTask == ""){
|
||||
$("#selectTaskModal").modal("show");
|
||||
return;
|
||||
} else {
|
||||
initIndexPage(true, PARAM_TASK, MY_INFO.info.defaultTask);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
initIndexPage(false, "", "");
|
||||
}
|
||||
|
||||
}).catch((msg) => {
|
||||
alert(msg);
|
||||
|
||||
var form = $("<form action=\"/logout.do\", method=\"POST\">");
|
||||
$("<input name=\"${_csrf.parameterName}\" value=\"${_csrf.token}\" type=\"hidden\">").appendTo(form);
|
||||
form.appendTo("body").submit();
|
||||
return;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -1,332 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<!DOCTYPE html>
|
||||
<html
|
||||
lang="kr"
|
||||
class="light-style layout-navbar-fixed layout-menu-fixed "
|
||||
dir="ltr"
|
||||
data-theme="theme-default"
|
||||
data-assets-path="<c:url value="/resources/"/>"
|
||||
data-template="vertical-menu-template-starter">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>과태료통합관리시스템</title>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/x-icon" href="<c:url value="/webjars/image/favicon.ico"/>" />
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="stylesheet" href="<c:url value="/resources/fonts/notoSansKr/fontface.css"/>" />
|
||||
|
||||
<!-- Icons. Uncomment required icon fonts -->
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/fonts/boxicons.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/fonts/fontawesome.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/fonts/xit-icon.css"/>" />
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/css/rtl/core.css"/>" class="template-customizer-core-css" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/css/rtl/theme-default.css"/>" class="template-customizer-theme-css" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/css/styles.css"/>" />
|
||||
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/applib/css/overwrite.css?${ver}"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/applib/css/applib.css?${ver}"/>" />
|
||||
|
||||
<link rel="stylesheet" href="<c:url value="/resources/css/fims.css?${ver}"/>" />
|
||||
|
||||
<link rel="stylesheet" href="<c:url value="/resources/css/fims-login.css?${ver}"/>" />
|
||||
<!-- Vendors CSS -->
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/perfect-scrollbar/perfect-scrollbar.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/bootstrap-datepicker/bootstrap-datepicker.css"/>" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="login_bg" hidden>
|
||||
<div class="header_wrap">
|
||||
<h1 class="logo">
|
||||
<img src="<c:url value='/'/>resources/img/login/mainLogo_02.png" alt="Logo Image" />
|
||||
<span id="userFor" hidden>(임대기업사용자)</span>
|
||||
<span class="float-end mt-4 me-5">
|
||||
<button id="btnDownMenual" type="button" onclick="FimsSupport.fnMenualDownload();" class="btn btn-primary" hidden>사용자 메뉴얼</button>
|
||||
</span>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="login_text">
|
||||
<p class="main_img"><img src="<c:url value='/'/>resources/img/login/loginDeco_02.png" alt=""></img></p>
|
||||
<form id="formAuthentication" method="post">
|
||||
<input type="hidden" id="cntnSeCd" name="cntnSeCd" />
|
||||
<div class="input_wrap">
|
||||
<div class="input-group" id="orgDiv">
|
||||
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<input type="text" id="userId" value="${cookie['userAccount'].getValue()}"
|
||||
required title="계정 입력" class="typeText required form-control inp-long" placeholder="계정" autofocus/>
|
||||
</div>
|
||||
<div class="input-group input-group-merge mt-2">
|
||||
<input type="password" id="password"
|
||||
required title="비밀번호 입력" class="typePassword required form-control inp-long" placeholder="비밀번호" autocomplete="false" />
|
||||
<span class="input-group-text cursor-pointer"><i class="bx bxs-lock"></i></span>
|
||||
</div>
|
||||
<div class="mt-3 form-chcek">
|
||||
<input id="remember" type="checkbox" class="form-check-input">
|
||||
<label class="form-check-label">로그인 정보 유지</label>
|
||||
</div>
|
||||
<div class="input_wrap2">
|
||||
<!--
|
||||
<a href="#" onclick="javascript:fn_FindId(); return false;">아이디 찾기</a>
|
||||
<a href="#" onclick="javascript:fn_FindPw(); return false;" class="line">비밀번호 찾기</a>
|
||||
-->
|
||||
<a href="#" onclick="javascript:fnOpenSignup_step1(); return false;" class="line">회원가입</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="message" value="${message}" />
|
||||
<input type="hidden" name="userSe" value="USR"/>
|
||||
<input name="j_username" type="hidden"/>
|
||||
</form>
|
||||
<div class="btn_wrap">
|
||||
<input type="button" onclick="login()" class="typeButton" title="로그인" value="로그인" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template id="pbofcLoginTemplate">
|
||||
<select id="orgID" name="orgID" required title="시군구명" class="form-select mb-2 h-px-40 no-max-w">
|
||||
<option value="">[기관 선택]</option>
|
||||
<option value="ADMIN">시스템관리</option>
|
||||
<c:forEach items="${sggList}" var="item">
|
||||
<option value="${item.SGG_CD}"
|
||||
<c:if test="${item.USER_USE_YN == 'N'}"> disabled </c:if>
|
||||
>${item.SGG_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</template>
|
||||
<template id="bzentLoginTemplate">
|
||||
<input type="hidden" id="orgID" name="orgID" required title="시군구명" value="${sysSggCd}" />
|
||||
</template>
|
||||
|
||||
<template id="selectOrgDialogTemplate">
|
||||
<select class="form-select form-control-sm" id="selectOrg">
|
||||
<option value="">선택</option>
|
||||
<c:forEach items="${sggList}" var="item">
|
||||
<option value="${item.SGG_CD}">${item.SGG_NM}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</template>
|
||||
|
||||
<jsp:include page="/WEB-INF/jsp/include/tail.jsp" />
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
${functions}
|
||||
|
||||
let sysSgg = "${sysSggCd}";
|
||||
let cookieOrg = "${cookie['userOrg'].getValue()}";
|
||||
let cookieUserId = "${cookie['userAccount'].getValue()}";
|
||||
|
||||
|
||||
function login() {
|
||||
if (!$("#formAuthentication input,select").validInputs()) return;
|
||||
|
||||
var params = {
|
||||
account: $("#userId").val().toUpperCase(),
|
||||
password:$("#password").val(),
|
||||
orgID: $("#orgID").val(),
|
||||
cntnSeCd: $("#cntnSeCd").val(),
|
||||
rememberCredentials: $("#remember").prop("checked")
|
||||
};
|
||||
|
||||
json.post({
|
||||
url:wctx.url("/login.do"),
|
||||
data:params,
|
||||
success:function(resp) {
|
||||
if (!(resp.authenticated)) {
|
||||
dialog.alert({
|
||||
content:resp.reason,
|
||||
init : function() {
|
||||
AppSupport.setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onClose:() => $("#userId").focus()
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if(resp.message){
|
||||
dialog.alert({
|
||||
content : resp.message,
|
||||
init : function() {
|
||||
AppSupport.setDialogZindex();
|
||||
focusClose();
|
||||
},
|
||||
onOK : function() {
|
||||
wctx.home();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
wctx.home();
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 회원가입 팝업
|
||||
*/
|
||||
function fnOpenSignup_step1(){
|
||||
if($("#cntnSeCd").val() == "01"){
|
||||
dialog.open({
|
||||
id : "selectOrgDialog",
|
||||
title : "기관 선택",
|
||||
content : document.getElementById("selectOrgDialogTemplate").innerHTML,
|
||||
size : "sm",
|
||||
init : () => {
|
||||
},
|
||||
onOK : () => {
|
||||
if($("#selectOrg").val() == ""){
|
||||
alert("기관을 선택하세요.");
|
||||
return;
|
||||
}
|
||||
dialog.close("selectOrgDialog");
|
||||
|
||||
fnOpenSignup_step2($("#selectOrg").val(),"01");
|
||||
},
|
||||
onClose : () => {}
|
||||
});
|
||||
} else if($("#cntnSeCd").val() == "02"){
|
||||
fnOpenSignup_step2("${sysSggCd}","02");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function fnOpenSignup_step2(sggCd,cntnSeCd){
|
||||
var popupWidth = 950;
|
||||
var popupHeight = 500;
|
||||
var popupX = (window.screen.width / 2) - (popupWidth / 2);
|
||||
var popupY= (window.screen.height / 2) - (popupHeight / 2);
|
||||
|
||||
var popup = window.open(wctx.url("/signupPage.do")+"?sggCd="+sggCd+"&cntnSeCd="+cntnSeCd,
|
||||
"regAccount",
|
||||
"width="+popupWidth+", height="+popupHeight+", left="+popupX+", top="+popupY);
|
||||
|
||||
$.blockUI({message : ""});
|
||||
popup.onload = () => {
|
||||
popup.addEventListener('beforeunload', function() {
|
||||
$.unblockUI();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 아이디 찾기 팝업
|
||||
*/
|
||||
function fn_FindId(){
|
||||
window.open(".do", "findId", {width: 500, height:300});
|
||||
}
|
||||
|
||||
/**
|
||||
* 비밀번호 찾기 팝업
|
||||
*/
|
||||
function fn_FindPw(){
|
||||
window.open(".do", "findPw", {width: 500, height:330});
|
||||
}
|
||||
|
||||
function fnIpInfo(flag){
|
||||
$("#cntnSeCd").val("");
|
||||
$("#orgDiv").html("");
|
||||
$("#userId").val("");
|
||||
$("#password").val("");
|
||||
$("#btnDownMenual").attr("hidden","hidden");
|
||||
$("#userFor").attr("hidden","hidden");
|
||||
$("#remember").prop("checked", false);
|
||||
|
||||
let data = {};
|
||||
if(flag != null){
|
||||
data.flag = flag;
|
||||
}
|
||||
ajax.get({
|
||||
url:wctx.url("/ipInfo.do"),
|
||||
data:data,
|
||||
success:function(resp) {
|
||||
if(resp.net == "intra"){
|
||||
PBOFC_login();
|
||||
} else if(resp.net == "inter"){
|
||||
BZENT_login();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//공무원 로그인
|
||||
function PBOFC_login(){
|
||||
|
||||
$(".login_bg").removeAttr("hidden");
|
||||
$("#btnDownMenual").removeAttr("hidden");
|
||||
|
||||
$("#cntnSeCd").val("01");
|
||||
$("#orgDiv").html(document.getElementById("pbofcLoginTemplate").innerHTML);
|
||||
|
||||
let hasCookie = (cookieOrg != "" && cookieUserId != "");
|
||||
|
||||
let selectValue = "";
|
||||
let isSelectable = false;
|
||||
|
||||
if(hasCookie){
|
||||
selectValue = cookieOrg;
|
||||
isSelectable = $("#orgID option[value='"+selectValue+"']").not("[disabled]").length;
|
||||
if(isSelectable){
|
||||
$("#orgID").val(cookieOrg);
|
||||
$("#userId").val(cookieUserId);
|
||||
$("#remember").prop("checked", true);
|
||||
$("#password").focus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
selectValue = sysSgg;
|
||||
isSelectable = $("#orgID option[value='"+selectValue+"']").not("[disabled]").length;
|
||||
if(isSelectable){
|
||||
$("#orgID").val(selectValue);
|
||||
$("#userId").focus();
|
||||
} else {
|
||||
$("#orgID").focus();
|
||||
}
|
||||
}
|
||||
|
||||
//업체 로그인
|
||||
function BZENT_login(){
|
||||
|
||||
$(".login_bg").removeAttr("hidden");
|
||||
$("#userFor").removeAttr("hidden");
|
||||
|
||||
$("#cntnSeCd").val("02");
|
||||
$("#orgDiv").html(document.getElementById("bzentLoginTemplate").innerHTML);
|
||||
|
||||
let hasCookie = (cookieUserId != "");
|
||||
if(hasCookie){
|
||||
$("#userId").val(cookieUserId);
|
||||
$("#remember").prop("checked", true);
|
||||
$("#password").focus();
|
||||
} else {
|
||||
$("#userId").focus();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$("#formAuthentication input").onEnterPress(login);
|
||||
|
||||
document.addEventListener('keydown', (event) => {
|
||||
if(event.key == "F5"){
|
||||
event.preventDefault();
|
||||
fnIpInfo('inter');
|
||||
}
|
||||
});
|
||||
|
||||
$(function(){
|
||||
fnIpInfo();
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -1,53 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<div id="_url-tree" class="main-left d-flex flex-column flex-grow-1">
|
||||
<div class="d-flex justify-content-between py-2 border-separator-y">
|
||||
<span>
|
||||
<button id="_urlToggler" onclick="_toggleURLs();" class="btn btn-primary"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div id="_urlTree" class="pt-3 ox-auto oy-auto h-px-500">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var _multiple = ${multiple},
|
||||
_urlSupport = treeSupport({
|
||||
selector:"#_urlTree",
|
||||
trace:wctx.trace,
|
||||
plugins: _multiple ? ["checkbox"] : [],
|
||||
core:{check_callback:true,
|
||||
multiple:_multiple
|
||||
// themes:{name:"proton"}
|
||||
},
|
||||
checkbox:{
|
||||
whole_node:false,
|
||||
tie_selection:false
|
||||
}
|
||||
});
|
||||
|
||||
function getSelectedURL() {
|
||||
var selected = _multiple ? _urlSupport.checkedNodes() : _urlSupport.selectedNodes();
|
||||
if (selected.length < 1)
|
||||
return dialog.alert("URL을 선택하십시오.");
|
||||
|
||||
if (_multiple)
|
||||
return selected;
|
||||
else
|
||||
return selected[0];
|
||||
}
|
||||
|
||||
function _toggleURLs() {
|
||||
$("#_urlToggler").text(_urlSupport.toggleFolding() == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
}
|
||||
|
||||
var urls = ${urls};
|
||||
|
||||
_urlSupport.setData(treeHtml(urls, {
|
||||
id:function(e){return e.url;},
|
||||
text:function(e){
|
||||
return e.name == e.url ? e.name : e.name + " (" + e.url + ")";
|
||||
}
|
||||
}));
|
||||
|
||||
$("#_urlToggler").text(_urlSupport._folding == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
</script>
|
Loading…
Reference in New Issue