프로젝트 패키징 처리 수정(war -> jar)

main
이범준 2 months ago
parent 7539b5a6ab
commit 7c571dac87

@ -2,25 +2,12 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>xit-app</groupId>
<artifactId>fims</artifactId>
<groupId>cokr.xit.app</groupId>
<artifactId>fims-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>fims</name>
<description>과태료통합관리시스템</description>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>17</java.version>
</properties>
<name>fims-web</name>
<description>과태료통합관리시스템 웹리소스</description>
<packaging>jar</packaging>
<repositories>
<repository>
@ -44,79 +31,64 @@
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cokr.xit.app</groupId>
<artifactId>fims-java-all</artifactId>
<exclusions>
<exclusion>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.egovframe.rte</groupId>
<artifactId>org.egovframe.rte.fdl.crypto</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>3rd-party</groupId>
<artifactId>echelon</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>3rd-party</groupId>
<artifactId>dguard</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>cokr.xit.app</groupId>
<artifactId>fims-java-all</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cokr.xit.app</groupId>
<artifactId>app-support-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cokr.xit.app</groupId>
<artifactId>sgg-setting</artifactId>
<version>${sgg}</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/webapp/resources</directory>
<targetPath>META-INF/resources/webjars</targetPath>
</resource>
<resource>
<directory>${basedir}/src/main/webapp/WEB-INF/jsp</directory>
<targetPath>META-INF/resources/WEB-INF/jsp</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<includeEmptyDirs>true</includeEmptyDirs>
<includes>
<include>META-INF/resources/webjars/**</include>
<include>META-INF/resources/WEB-INF/jsp/**</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
<!-- Nexus deploy -->
<distributionManagement>
<snapshotRepository>
<id>maven-snapshot</id>
<url>https://nas.xit.co.kr:8888/repository/maven-snapshots/</url>
</snapshotRepository>
<repository>
<id>maven-release</id>
<url>https://nas.xit.co.kr:8888/repository/maven-releases/</url>
</repository>
</distributionManagement>
<!-- Nexus deploy -->
</project>

@ -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>

@ -118,7 +118,7 @@
</div>
<script>
LoadScript("crdn01010Script",wctx.url("/resources/js/fims/crdn/crdn01010.js?ver=${ver}"));
LoadScript("crdn01010Script",wctx.url("/webjars/js/fims/crdn/crdn01010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -245,7 +245,7 @@
</div>
<script>
LoadScript("crdn01020Script",wctx.url("/resources/js/fims/crdn/crdn01020.js?ver=${ver}"));
LoadScript("crdn01020Script",wctx.url("/webjars/js/fims/crdn/crdn01020.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");
pageObject["${pageName}"].provided = {};

@ -372,7 +372,7 @@
</div>
<script>
LoadScript("crdn02010Script",wctx.url("/resources/js/fims/crdn/crdn02010.js?ver=${ver}"));
LoadScript("crdn02010Script",wctx.url("/webjars/js/fims/crdn/crdn02010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -36,7 +36,7 @@
<!-- / 업무 버튼 표시 -->
<script>
LoadScript("crdn02050Script",wctx.url("/resources/js/fims/crdn/crdn02050.js?ver=${ver}"));
LoadScript("crdn02050Script",wctx.url("/webjars/js/fims/crdn/crdn02050.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -117,7 +117,7 @@
<script>
LoadScript("crdn03010Script",wctx.url("/resources/js/fims/crdn/crdn03010.js?ver=${ver}"));
LoadScript("crdn03010Script",wctx.url("/webjars/js/fims/crdn/crdn03010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -102,7 +102,7 @@
<div class="content-backdrop fade"></div>
</div>
<script>
LoadScript("crdn05010Script",wctx.url("/resources/js/fims/crdn/crdn05010.js?ver=${ver}"));
LoadScript("crdn05010Script",wctx.url("/webjars/js/fims/crdn/crdn05010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -156,7 +156,7 @@
<script>
LoadScript("crdn05020Script",wctx.url("/resources/js/fims/crdn/crdn05020.js?ver=${ver}"));
LoadScript("crdn05020Script",wctx.url("/webjars/js/fims/crdn/crdn05020.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");

@ -362,7 +362,7 @@
</div>
<script>
LoadScript("crdn05030Script",wctx.url("/resources/js/fims/crdn/crdn05030.js?ver=${ver}"));
LoadScript("crdn05030Script",wctx.url("/webjars/js/fims/crdn/crdn05030.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -280,7 +280,7 @@
</div>
<script>
LoadScript("crdn06010Script",wctx.url("/resources/js/fims/crdn/crdn06010.js?ver=${ver}"));
LoadScript("crdn06010Script",wctx.url("/webjars/js/fims/crdn/crdn06010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -215,7 +215,7 @@
<!-- / inner page html <div class="content-pop"> -->
<script>
LoadScript("crdn06020Script",wctx.url("/resources/js/fims/crdn/crdn06020.js?ver=${ver}"));
LoadScript("crdn06020Script",wctx.url("/webjars/js/fims/crdn/crdn06020.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -57,7 +57,7 @@
<!-- / inner page html <div class="content-pop"> -->
<script>
LoadScript("crdn06030Script",wctx.url("/resources/js/fims/crdn/crdn06030.js?ver=${ver}"));
LoadScript("crdn06030Script",wctx.url("/webjars/js/fims/crdn/crdn06030.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -236,7 +236,7 @@
</div>
<script>
LoadScript("crdn07010Script",wctx.url("/resources/js/fims/crdn/crdn07010.js?ver=${ver}"));
LoadScript("crdn07010Script",wctx.url("/webjars/js/fims/crdn/crdn07010.js?ver=${ver}"));
/**************************************************************************
* Global Variable
**************************************************************************/

@ -120,7 +120,7 @@
<script>
LoadScript("crdn08010Script",wctx.url("/resources/js/fims/crdn/crdn08010.js?ver=${ver}"));
LoadScript("crdn08010Script",wctx.url("/webjars/js/fims/crdn/crdn08010.js?ver=${ver}"));
/**************************************************************************
* Global Variable
@ -344,7 +344,7 @@ $(document).ready(function(){
$P.fnOpenDelRsnDialog = () => {
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
let dialogName = "inputDelRsnDialog";

@ -64,7 +64,7 @@
</div>
<script>
LoadScript("crdn08020Script",wctx.url("/resources/js/fims/crdn/crdn08020.js?ver=${ver}"));
LoadScript("crdn08020Script",wctx.url("/webjars/js/fims/crdn/crdn08020.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -62,7 +62,7 @@
</div>
</div>
<script>
LoadScript("crdn08030Script",wctx.url("/resources/js/fims/crdn/crdn08030.js?ver=${ver}"));
LoadScript("crdn08030Script",wctx.url("/webjars/js/fims/crdn/crdn08030.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");

@ -218,7 +218,7 @@
<script>
LoadScript("cvlc01010Script",wctx.url("/resources/js/fims/cvlc/cvlc01010.js?ver=${ver}"));
LoadScript("cvlc01010Script",wctx.url("/webjars/js/fims/cvlc/cvlc01010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -386,7 +386,7 @@
<script>
LoadScript("cvlc01020Script",wctx.url("/resources/js/fims/cvlc/cvlc01020.js?ver=${ver}"));
LoadScript("cvlc01020Script",wctx.url("/webjars/js/fims/cvlc/cvlc01020.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -90,7 +90,7 @@
</div>
</div>
<script>
LoadScript("cvlc01050Script",wctx.url("/resources/js/fims/cvlc/cvlc01050.js?ver=${ver}"));
LoadScript("cvlc01050Script",wctx.url("/webjars/js/fims/cvlc/cvlc01050.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");
pageObject["${pageName}"].provided = {};

@ -230,7 +230,7 @@
<script>
LoadScript("cvlc02010Script",wctx.url("/resources/js/fims/cvlc/cvlc02010.js?ver=${ver}"));
LoadScript("cvlc02010Script",wctx.url("/webjars/js/fims/cvlc/cvlc02010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -58,7 +58,7 @@
</div>
<script>
LoadScript("cvlc02060Script",wctx.url("/resources/js/fims/cvlc/cvlc02060.js?ver=${ver}"));
LoadScript("cvlc02060Script",wctx.url("/webjars/js/fims/cvlc/cvlc02060.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");
pageObject["${pageName}"].parentRes = {};

@ -214,7 +214,7 @@
<script>
LoadScript("cvlc03010Script",wctx.url("/resources/js/fims/cvlc/cvlc03010.js?ver=${ver}"));
LoadScript("cvlc03010Script",wctx.url("/webjars/js/fims/cvlc/cvlc03010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -154,7 +154,7 @@
</div>
<script>
LoadScript("cvlc04010Script",wctx.url("/resources/js/fims/cvlc/cvlc04010.js?ver=${ver}"));
LoadScript("cvlc04010Script",wctx.url("/webjars/js/fims/cvlc/cvlc04010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -297,7 +297,7 @@
</div>
<script>
LoadScript("cvlc05010Script","/resources/js/fims/cvlc/cvlc05010.js?ver=${ver}");
LoadScript("cvlc05010Script","/webjars/js/fims/cvlc/cvlc05010.js?ver=${ver}");
/**************************************************************************
* Global Variable
**************************************************************************/

@ -118,7 +118,7 @@
</div>
<script>
LoadScript("cvlc06010Script",wctx.url("/resources/js/fims/cvlc/cvlc06010.js?ver=${ver}"));
LoadScript("cvlc06010Script",wctx.url("/webjars/js/fims/cvlc/cvlc06010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -712,7 +712,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.ctrl.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -870,7 +870,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.ctrl.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -314,7 +314,7 @@
// 주소 검색
$P.fnSearchAddr = async(btnTitle) => {
let resp = await fetch(wctx.url("/resources/html/searchAddr.html"));
let resp = await fetch(wctx.url("/webjars/html/searchAddr.html"));
let template = await resp.text();
dialog.open({

@ -620,7 +620,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -101,7 +101,7 @@
<script>
LoadScript("mngt01010Script",wctx.url("/resources/js/fims/mngt/mngt01010.js?ver=${ver}"));
LoadScript("mngt01010Script",wctx.url("/webjars/js/fims/mngt/mngt01010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -62,7 +62,7 @@
</div>
<script>
LoadScript("mngt01020Script",wctx.url("/resources/js/fims/mngt/mngt01020.js?ver=${ver}"));
LoadScript("mngt01020Script",wctx.url("/webjars/js/fims/mngt/mngt01020.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");
pageObject["${pageName}"].provided = {};

@ -16,7 +16,7 @@
<script>
LoadScript("fullCalendarScript","/webjars/3rd-party/sneat/libs/fullcalendar/fullcalendar.js");
LoadScript("mngt02010Script",wctx.url("/resources/js/fims/mngt/mngt02010.js?ver=${ver}"));
LoadScript("mngt02010Script",wctx.url("/webjars/js/fims/mngt/mngt02010.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");

@ -57,7 +57,7 @@
</div>
</div>
<script>
LoadScript("mngt02020Script",wctx.url("/resources/js/fims/mngt/mngt02020.js?ver=${ver}"));
LoadScript("mngt02020Script",wctx.url("/webjars/js/fims/mngt/mngt02020.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");
pageObject["${pageName}"].provided = {};

@ -231,7 +231,7 @@
</div>
<script>
LoadScript("ogdp01010Script",wctx.url("/resources/js/fims/ogdp/ogdp01010.js?ver=${ver}"));
LoadScript("ogdp01010Script",wctx.url("/webjars/js/fims/ogdp/ogdp01010.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");

@ -135,7 +135,7 @@
<script>
LoadScript("ogdp02010Script",wctx.url("/resources/js/fims/ogdp/ogdp02010.js?ver=${ver}"));
LoadScript("ogdp02010Script",wctx.url("/webjars/js/fims/ogdp/ogdp02010.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -256,7 +256,7 @@
</div>
<script>
LoadScript("ogdp02020Script",wctx.url("/resources/js/fims/ogdp/ogdp02020.js?ver=${ver}"));
LoadScript("ogdp02020Script",wctx.url("/webjars/js/fims/ogdp/ogdp02020.js?ver=${ver}"));
pageObject["${pageName}"] = newDoctxFinder("${pageName}");
pageObject["${pageName}"].provided = {};

@ -351,7 +351,7 @@
// 우편번호 검색
$P.fnZipCode = async() => {
let resp = await fetch(wctx.url("/resources/html/searchAddr.html"));
let resp = await fetch(wctx.url("/webjars/html/searchAddr.html"));
let template = await resp.text();
dialog.open({

@ -65,5 +65,5 @@
</template>
<script>
LoadScript("photoMainJspScript","/resources/js/fims/photo-main.js");
LoadScript("photoMainJspScript","/webjars/js/fims/photo-main.js");
</script>

@ -655,7 +655,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: async() => {
// 삭제 사유 입력
let resp = await fetch(wctx.url("/resources/html/inputRsnDialog.html"));
let resp = await fetch(wctx.url("/webjars/html/inputRsnDialog.html"));
let template = await resp.text();
dialog.open({

@ -634,7 +634,7 @@
content : "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK : async() => {
// 삭제 사유 입력
var resp = await fetch(wctx.url("/resources/html/inputRsnDialog.html"));
var resp = await fetch(wctx.url("/webjars/html/inputRsnDialog.html"));
var template = await resp.text();
dialog.open({

@ -176,7 +176,7 @@
**************************************************************************/
// 우편번호 검색
$P.fnZipCode = async() => {
let resp = await fetch(wctx.url("/resources/html/searchAddr.html"));
let resp = await fetch(wctx.url("/webjars/html/searchAddr.html"));
let template = await resp.text();
dialog.open({

@ -517,7 +517,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -520,7 +520,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -465,7 +465,7 @@
// validate 확인
if (!AppSupport.customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
let resp = await fetch(wctx.url("/resources/html/inputDateDialog.html"));
let resp = await fetch(wctx.url("/webjars/html/inputDateDialog.html"));
let template = await resp.text();
dialog.open({

@ -568,7 +568,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -535,7 +535,7 @@
let textDate = DateSupport.getAddDay(0).date + " ~ " + DateSupport.getAddDay(15) + " (15일간)";
// 문서번호, 제목, 공고기한 입력
let resp = await fetch(wctx.url("/resources/html/inputDocNoTtlDialog.html"));
let resp = await fetch(wctx.url("/webjars/html/inputDocNoTtlDialog.html"));
let template = await resp.text();
dialog.open({
@ -609,7 +609,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: async() => {
// 삭제 사유 입력
let resp = await fetch(wctx.url("/resources/html/inputRsnDialog.html"));
let resp = await fetch(wctx.url("/webjars/html/inputRsnDialog.html"));
let template = await resp.text();
dialog.open({

@ -412,7 +412,7 @@
let textDate = DateSupport.getAddDay(0).date + " ~ " + DateSupport.getAddDay(15) + " (15일간)";
// 문서번호, 제목, 공고기한 입력
let resp = await fetch(wctx.url("/resources/html/inputDocNoTtlDialog.html"));
let resp = await fetch(wctx.url("/webjars/html/inputDocNoTtlDialog.html"));
let template = await resp.text();
dialog.open({
@ -455,7 +455,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: async() => {
// 삭제 사유 입력
let resp = await fetch(wctx.url("/resources/html/inputRsnDialog.html"));
let resp = await fetch(wctx.url("/webjars/html/inputRsnDialog.html"));
let template = await resp.text();
dialog.open({

@ -24,7 +24,7 @@
</div>
<script>
LoadScript("sprt01010Script","/resources/js/fims/sprt/sprt01010.js?ver=${ver}");
LoadScript("sprt01010Script","/webjars/js/fims/sprt/sprt01010.js?ver=${ver}");
/**************************************************************************
* Global Variable

@ -769,7 +769,7 @@
content: "선택하신 " + $P.ctrlCrdnPayer.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -481,7 +481,7 @@
content: "선택하신 " + $P.ctrlOpnn.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -672,7 +672,7 @@
content: "선택하신 " + $P.ctrlRdct.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({
@ -781,7 +781,7 @@
content: "선택하신 " + $P.ctrlLevyExcl.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -480,7 +480,7 @@
+ "<br>" + "계속 진행하시겠습니까?"
, onOK: async() => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({
@ -527,7 +527,7 @@
content: "선택하신 " + $P.ctrlRcvmt.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: async() => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -313,7 +313,7 @@
content: "선택하신 " + $P.ctrlRcvmt.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: async() => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -6,7 +6,7 @@
class="light-style layout-navbar-fixed layout-menu-fixed"
dir="ltr"
data-theme="theme-default"
data-assets-path="<c:url value="/resources/"/>"
data-assets-path="<c:url value="/webjars/"/>"
data-template="vertical-menu-template-starter">
<head>
<meta charset="UTF-8">
@ -15,13 +15,13 @@
<!-- 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"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/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"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/fonts/bootstrap-icons.css"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/fonts/material-icons.css"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/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" />
@ -30,7 +30,7 @@
<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="/webjars/css/fims.css?${ver}"/>" />
<!-- Vendors CSS -->
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/perfect-scrollbar/perfect-scrollbar.css"/>" />

@ -6,7 +6,7 @@
class="light-style layout-navbar-fixed layout-menu-fixed"
dir="ltr"
data-theme="theme-default"
data-assets-path="<c:url value="/resources/"/>"
data-assets-path="<c:url value="/webjars/"/>"
data-template="vertical-menu-template-starter">
<head>
<meta charset="UTF-8">
@ -15,13 +15,13 @@
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="<c:url value="/webjars/img/favicon.ico"/>" />
<!-- Fonts -->
<link rel="stylesheet" href="<c:url value="/resources/fonts/notoSansKr/fontface.css"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/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"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/fonts/bootstrap-icons.css"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/fonts/material-icons.css"/>" />
<link rel="stylesheet" href="<c:url value="/webjars/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" />
@ -30,11 +30,11 @@
<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="/webjars/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="/resources/libs/fims/paintweb/style/style.css"/>?${ver}" />
<link rel="stylesheet" href="<c:url value="/webjars/libs/fims/paintweb/style/style.css"/>?${ver}" />
</head>
<body>
<c:set var="pageKorName" scope="request">사진 편집</c:set>
@ -56,15 +56,15 @@
<script src="<c:url value="/webjars/js/base/base.js"/>"></script>
<!-- json, xhtml -->
<script src="<c:url value="/resources/libs/fims/paintweb/korean.js?${ver}"/>"></script>
<script src="<c:url value="/resources/libs/fims/paintweb/paintweb-config.js?${ver}"/>"></script>
<script src="<c:url value="/resources/libs/fims/paintweb/layout.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/libs/fims/paintweb/korean.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/libs/fims/paintweb/paintweb-config.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/libs/fims/paintweb/layout.js?${ver}"/>"></script>
<!-- init -->
<script src="<c:url value="/resources/libs/fims/paintweb/pwlib.js?${ver}"/>"></script>
<script src="<c:url value="/resources/libs/fims/paintweb/guiScript.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/libs/fims/paintweb/pwlib.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/libs/fims/paintweb/guiScript.js?${ver}"/>"></script>
<script src="<c:url value="/resources/libs/fims/paintweb/paintweb.js?${ver}"/>"></script>
<script src="<c:url value="/resources/libs/fims/paintweb/html2canvas.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/libs/fims/paintweb/paintweb.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/libs/fims/paintweb/html2canvas.js?${ver}"/>"></script>

@ -521,7 +521,7 @@
content: "선택하신 " + selected.length + "건의 " + $P.control.prefixName + " 정보를 삭제하시겠습니까?"
, onOK: () => {
// 삭제 사유 입력
fetch(wctx.url("/resources/html/inputRsnDialog.html"))
fetch(wctx.url("/webjars/html/inputRsnDialog.html"))
.then(function(resp) { return resp.text(); })
.then(function(template) {
dialog.open({

@ -169,7 +169,7 @@
</div>
<script>
LoadScript("statMainScript",wctx.url("/resources/js/fims/stat/statMain.js?ver=${ver}"));
LoadScript("statMainScript",wctx.url("/webjars/js/fims/stat/statMain.js?ver=${ver}"));
/**************************************************************************
* Global Variable

@ -114,4 +114,4 @@
<jsp:include page="/WEB-INF/jsp/fims/stat/stat01011-info.jsp" />
</span>
<script src="<c:url value="/resources/js/fims/stat/sprtPreset.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/js/fims/stat/sprtPreset.js?${ver}"/>"></script>

@ -120,5 +120,5 @@
<jsp:include page="/WEB-INF/jsp/fims/stat/stat01021-info.jsp" />
</span>
<script src="<c:url value="/resources/js/fims/stat/crdnGroupSubset.js?${ver}"/>"></script>
<script src="<c:url value="/resources/js/fims/stat/crdnPreset.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/js/fims/stat/crdnGroupSubset.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/js/fims/stat/crdnPreset.js?${ver}"/>"></script>

@ -29,4 +29,4 @@
<jsp:include page="/WEB-INF/jsp/fims/stat/stat01041-info.jsp" />
</span>
<script src="<c:url value="/resources/js/fims/stat/sendPreset.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/js/fims/stat/sendPreset.js?${ver}"/>"></script>

@ -68,4 +68,4 @@
<jsp:include page="/WEB-INF/jsp/fims/stat/stat01051-info.jsp" />
</span>
<script src="<c:url value="/resources/js/fims/stat/rcvmPreset.js?${ver}"/>"></script>
<script src="<c:url value="/webjars/js/fims/stat/rcvmPreset.js?${ver}"/>"></script>

@ -9,12 +9,12 @@
<link rel="icon" type="image/x-icon" href="/webjars/image/favicon.ico" />
<!-- Fonts -->
<link rel="stylesheet" href="/resources/fonts/notoSansKr/fontface.css" />
<link rel="stylesheet" href="/webjars/fonts/notoSansKr/fontface.css" />
<!-- Icons. Uncomment required icon fonts -->
<link rel="stylesheet" href="/webjars/3rd-party/sneat/fonts/boxicons.css" />
<link rel="stylesheet" href="/webjars/3rd-party/sneat/fonts/fontawesome.css" />
<link rel="stylesheet" href="/resources/fonts/xit-icon.css" />
<link rel="stylesheet" href="/webjars/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" />
@ -23,7 +23,7 @@
<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="/webjars/css/fims.css?${ver}"/>" />
<!-- Vendors CSS -->
<link rel="stylesheet" href="/webjars/3rd-party/sneat/libs/perfect-scrollbar/perfect-scrollbar.css" />
@ -234,7 +234,7 @@
<script src="/webjars/js/base/dataset.js"></script>
<script src="/webjars/js/base/user.js"></script>
<script src="/resources/js/fims/cmmn/fims-base.js"></script>
<script src="/webjars/js/fims/cmmn/fims-base.js"></script>
<script>
var userFields = new FimsFormFields("#user-form");
var userCtrl = newUserControl();

@ -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">&times;</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…
Cancel
Save