최초 커밋
commit
d4a18aef89
@ -0,0 +1,69 @@
|
||||
HELP.md
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### 로그 ###
|
||||
logs/
|
||||
|
||||
### 프로젝트 내 생성되는 파일 ###
|
||||
files/
|
||||
|
||||
### 시군구별 설정파일 ###
|
||||
src/main/resources/application.yml
|
||||
|
||||
src/main/resources/xit-crypto.conf
|
||||
src/main/resources/xit-syslog.conf
|
||||
|
||||
src/main/resources/intf-conf
|
||||
src/main/resources/intf-conf/disabled-parking.conf
|
||||
src/main/resources/intf-conf/file-job.conf
|
||||
src/main/resources/intf-conf/gpki.conf
|
||||
src/main/resources/intf-conf/lntris.conf
|
||||
src/main/resources/intf-conf/xit-lvis.properties
|
||||
|
||||
src/main/resources/template
|
||||
src/main/resources/template/disabled-parking-request.xml
|
||||
|
||||
src/main/resources/spring
|
||||
src/main/resources/spring/context-scheduler.xml
|
||||
|
||||
src/main/resources/ssl
|
||||
src/main/resources/ssl/fims.cer
|
||||
src/main/resources/ssl/fimskeystore.pkcs12
|
||||
src/main/resources/ssl/fimstrust.pkcs12
|
||||
src/main/resources/.keystore
|
||||
|
||||
src/main/resources/log4jdbc.log4j2.properties
|
||||
src/main/resources/logback-spring.xml
|
||||
|
||||
src/main/resources/sgg.txt
|
||||
Binary file not shown.
@ -0,0 +1,18 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip
|
||||
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
|
||||
@ -0,0 +1,11 @@
|
||||
# 과태료 통합 관리 시스템
|
||||
|
||||
### 시군구별 설정 파일
|
||||
|
||||
```text
|
||||
로컬에서 서버 기동시
|
||||
https://nas.xit.co.kr:5001(211.119.124.120)의 네트워크 드라이브에서
|
||||
"/03. 연구개발실/fims설정파일"에 시군구별 폴더가 있고 해당 시군구 폴더의 파일들을
|
||||
src/main/resources폴더로 복사 후 기동한다.
|
||||
|
||||
```
|
||||
@ -0,0 +1,316 @@
|
||||
#!/bin/sh
|
||||
# ----------------------------------------------------------------------------
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Maven Start Up Batch script
|
||||
#
|
||||
# Required ENV vars:
|
||||
# ------------------
|
||||
# JAVA_HOME - location of a JDK home dir
|
||||
#
|
||||
# Optional ENV vars
|
||||
# -----------------
|
||||
# M2_HOME - location of maven2's installed home dir
|
||||
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
# e.g. to debug Maven itself, use
|
||||
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
if [ -z "$MAVEN_SKIP_RC" ] ; then
|
||||
|
||||
if [ -f /usr/local/etc/mavenrc ] ; then
|
||||
. /usr/local/etc/mavenrc
|
||||
fi
|
||||
|
||||
if [ -f /etc/mavenrc ] ; then
|
||||
. /etc/mavenrc
|
||||
fi
|
||||
|
||||
if [ -f "$HOME/.mavenrc" ] ; then
|
||||
. "$HOME/.mavenrc"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# OS specific support. $var _must_ be set to either true or false.
|
||||
cygwin=false;
|
||||
darwin=false;
|
||||
mingw=false
|
||||
case "`uname`" in
|
||||
CYGWIN*) cygwin=true ;;
|
||||
MINGW*) mingw=true;;
|
||||
Darwin*) darwin=true
|
||||
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
|
||||
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
if [ -x "/usr/libexec/java_home" ]; then
|
||||
export JAVA_HOME="`/usr/libexec/java_home`"
|
||||
else
|
||||
export JAVA_HOME="/Library/Java/Home"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
if [ -r /etc/gentoo-release ] ; then
|
||||
JAVA_HOME=`java-config --jre-home`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$M2_HOME" ] ; then
|
||||
## resolve links - $0 may be a link to maven's home
|
||||
PRG="$0"
|
||||
|
||||
# need this for relative symlinks
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG="`dirname "$PRG"`/$link"
|
||||
fi
|
||||
done
|
||||
|
||||
saveddir=`pwd`
|
||||
|
||||
M2_HOME=`dirname "$PRG"`/..
|
||||
|
||||
# make it fully qualified
|
||||
M2_HOME=`cd "$M2_HOME" && pwd`
|
||||
|
||||
cd "$saveddir"
|
||||
# echo Using m2 at $M2_HOME
|
||||
fi
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched
|
||||
if $cygwin ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --unix "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
|
||||
fi
|
||||
|
||||
# For Mingw, ensure paths are in UNIX format before anything is touched
|
||||
if $mingw ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME="`(cd "$M2_HOME"; pwd)`"
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
javaExecutable="`which javac`"
|
||||
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
|
||||
# readlink(1) is not available as standard on Solaris 10.
|
||||
readLink=`which readlink`
|
||||
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
|
||||
if $darwin ; then
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
|
||||
else
|
||||
javaExecutable="`readlink -f \"$javaExecutable\"`"
|
||||
fi
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
|
||||
JAVA_HOME="$javaHome"
|
||||
export JAVA_HOME
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$JAVACMD" ] ; then
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
else
|
||||
JAVACMD="`\\unset -f command; \\command -v java`"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
echo "Error: JAVA_HOME is not defined correctly." >&2
|
||||
echo " We cannot execute $JAVACMD" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
echo "Warning: JAVA_HOME environment variable is not set."
|
||||
fi
|
||||
|
||||
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
|
||||
|
||||
# traverses directory structure from process work directory to filesystem root
|
||||
# first directory with .mvn subdirectory is considered project base directory
|
||||
find_maven_basedir() {
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo "Path not specified to find_maven_basedir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
basedir="$1"
|
||||
wdir="$1"
|
||||
while [ "$wdir" != '/' ] ; do
|
||||
if [ -d "$wdir"/.mvn ] ; then
|
||||
basedir=$wdir
|
||||
break
|
||||
fi
|
||||
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
|
||||
if [ -d "${wdir}" ]; then
|
||||
wdir=`cd "$wdir/.."; pwd`
|
||||
fi
|
||||
# end of workaround
|
||||
done
|
||||
echo "${basedir}"
|
||||
}
|
||||
|
||||
# concatenates all lines of a file
|
||||
concat_lines() {
|
||||
if [ -f "$1" ]; then
|
||||
echo "$(tr -s '\n' ' ' < "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
BASE_DIR=`find_maven_basedir "$(pwd)"`
|
||||
if [ -z "$BASE_DIR" ]; then
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
##########################################################################################
|
||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
##########################################################################################
|
||||
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||
fi
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
|
||||
fi
|
||||
if [ -n "$MVNW_REPOURL" ]; then
|
||||
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
else
|
||||
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
fi
|
||||
while IFS="=" read key value; do
|
||||
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
|
||||
esac
|
||||
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Downloading from: $jarUrl"
|
||||
fi
|
||||
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
|
||||
if $cygwin; then
|
||||
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
|
||||
fi
|
||||
|
||||
if command -v wget > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found wget ... using wget"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
else
|
||||
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
fi
|
||||
elif command -v curl > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found curl ... using curl"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
curl -o "$wrapperJarPath" "$jarUrl" -f
|
||||
else
|
||||
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
|
||||
fi
|
||||
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Falling back to using Java to download"
|
||||
fi
|
||||
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||
# For Cygwin, switch paths to Windows format before running javac
|
||||
if $cygwin; then
|
||||
javaClass=`cygpath --path --windows "$javaClass"`
|
||||
fi
|
||||
if [ -e "$javaClass" ]; then
|
||||
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Compiling MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
# Compiling the Java class
|
||||
("$JAVA_HOME/bin/javac" "$javaClass")
|
||||
fi
|
||||
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
# Running the downloader
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Running MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
##########################################################################################
|
||||
# End of extension
|
||||
##########################################################################################
|
||||
|
||||
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo $MAVEN_PROJECTBASEDIR
|
||||
fi
|
||||
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --path --windows "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
|
||||
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
|
||||
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
|
||||
fi
|
||||
|
||||
# Provide a "standardized" way to retrieve the CLI args that will
|
||||
# work with both Windows and non-Windows executions.
|
||||
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
|
||||
export MAVEN_CMD_LINE_ARGS
|
||||
|
||||
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
exec "$JAVACMD" \
|
||||
$MAVEN_OPTS \
|
||||
$MAVEN_DEBUG_OPTS \
|
||||
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||
"-Dmaven.home=${M2_HOME}" \
|
||||
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
||||
@ -0,0 +1,188 @@
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM https://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Maven Start Up Batch script
|
||||
@REM
|
||||
@REM Required ENV vars:
|
||||
@REM JAVA_HOME - location of a JDK home dir
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@REM M2_HOME - location of maven2's installed home dir
|
||||
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
|
||||
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
|
||||
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
@REM e.g. to debug Maven itself, use
|
||||
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
|
||||
@echo off
|
||||
@REM set title of command window
|
||||
title %0
|
||||
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
|
||||
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
|
||||
|
||||
@REM set %HOME% to equivalent of $HOME
|
||||
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
|
||||
|
||||
@REM Execute a user defined script before this one
|
||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
|
||||
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
|
||||
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
|
||||
:skipRcPre
|
||||
|
||||
@setlocal
|
||||
|
||||
set ERROR_CODE=0
|
||||
|
||||
@REM To isolate internal variables from possible post scripts, we use another setlocal
|
||||
@setlocal
|
||||
|
||||
@REM ==== START VALIDATION ====
|
||||
if not "%JAVA_HOME%" == "" goto OkJHome
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME not found in your environment. >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
:OkJHome
|
||||
if exist "%JAVA_HOME%\bin\java.exe" goto init
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME is set to an invalid directory. >&2
|
||||
echo JAVA_HOME = "%JAVA_HOME%" >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
@REM ==== END VALIDATION ====
|
||||
|
||||
:init
|
||||
|
||||
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
|
||||
@REM Fallback to current working directory if not found.
|
||||
|
||||
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
|
||||
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
|
||||
|
||||
set EXEC_DIR=%CD%
|
||||
set WDIR=%EXEC_DIR%
|
||||
:findBaseDir
|
||||
IF EXIST "%WDIR%"\.mvn goto baseDirFound
|
||||
cd ..
|
||||
IF "%WDIR%"=="%CD%" goto baseDirNotFound
|
||||
set WDIR=%CD%
|
||||
goto findBaseDir
|
||||
|
||||
:baseDirFound
|
||||
set MAVEN_PROJECTBASEDIR=%WDIR%
|
||||
cd "%EXEC_DIR%"
|
||||
goto endDetectBaseDir
|
||||
|
||||
:baseDirNotFound
|
||||
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
|
||||
cd "%EXEC_DIR%"
|
||||
|
||||
:endDetectBaseDir
|
||||
|
||||
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
|
||||
|
||||
@setlocal EnableExtensions EnableDelayedExpansion
|
||||
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
|
||||
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
|
||||
|
||||
:endReadAdditionalConfig
|
||||
|
||||
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
|
||||
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
|
||||
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
|
||||
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
|
||||
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
|
||||
)
|
||||
|
||||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
if exist %WRAPPER_JAR% (
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Found %WRAPPER_JAR%
|
||||
)
|
||||
) else (
|
||||
if not "%MVNW_REPOURL%" == "" (
|
||||
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
|
||||
)
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Couldn't find %WRAPPER_JAR%, downloading it ...
|
||||
echo Downloading from: %DOWNLOAD_URL%
|
||||
)
|
||||
|
||||
powershell -Command "&{"^
|
||||
"$webclient = new-object System.Net.WebClient;"^
|
||||
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
|
||||
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
|
||||
"}"^
|
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
|
||||
"}"
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Finished downloading %WRAPPER_JAR%
|
||||
)
|
||||
)
|
||||
@REM End of extension
|
||||
|
||||
@REM Provide a "standardized" way to retrieve the CLI args that will
|
||||
@REM work with both Windows and non-Windows executions.
|
||||
set MAVEN_CMD_LINE_ARGS=%*
|
||||
|
||||
%MAVEN_JAVA_EXE% ^
|
||||
%JVM_CONFIG_MAVEN_PROPS% ^
|
||||
%MAVEN_OPTS% ^
|
||||
%MAVEN_DEBUG_OPTS% ^
|
||||
-classpath %WRAPPER_JAR% ^
|
||||
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
|
||||
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
|
||||
if ERRORLEVEL 1 goto error
|
||||
goto end
|
||||
|
||||
:error
|
||||
set ERROR_CODE=1
|
||||
|
||||
:end
|
||||
@endlocal & set ERROR_CODE=%ERROR_CODE%
|
||||
|
||||
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
|
||||
@REM check for post script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
|
||||
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
|
||||
:skipRcPost
|
||||
|
||||
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
|
||||
if "%MAVEN_BATCH_PAUSE%"=="on" pause
|
||||
|
||||
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
|
||||
|
||||
cmd /C exit /B %ERROR_CODE%
|
||||
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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/>
|
||||
</parent>
|
||||
|
||||
<groupId>xit-app</groupId>
|
||||
<artifactId>fims-chongno</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<name>fims-chongno</name>
|
||||
<description>특별관리지역 통행제한 과태료 시스템</description>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>17</java.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>maven-public</id>
|
||||
<url>https://nas.xit.co.kr:8888/repository/maven-public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<id>maven-public</id>
|
||||
<url>https://nas.xit.co.kr:8888/repository/maven-public/</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
<dependencies>
|
||||
<!-- 1.fims-java-* -->
|
||||
<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>fims-web-all</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,57 @@
|
||||
package cokr.xit.fims.chongno;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
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.SpringBootApplicationBridge;
|
||||
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) {
|
||||
|
||||
allowRestrictedHeaders();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public static void allowRestrictedHeaders() {
|
||||
String allowRestrictedHeaders = System.getProperty("jdk.httpclient.allowRestrictedHeaders");
|
||||
if(allowRestrictedHeaders == null) {
|
||||
allowRestrictedHeaders = "";
|
||||
}
|
||||
List<String> allowRestrictedHeadersArr = Arrays.asList(allowRestrictedHeaders.split(","));
|
||||
|
||||
String[] items = {"connection","host","content-length","expect","upgrade"};
|
||||
|
||||
for(String item : items) {
|
||||
if(!allowRestrictedHeadersArr.contains(item)) {
|
||||
if(!allowRestrictedHeaders.equals("")) {
|
||||
allowRestrictedHeaders += ",";
|
||||
}
|
||||
allowRestrictedHeaders += item;
|
||||
}
|
||||
}
|
||||
System.setProperty("jdk.httpclient.allowRestrictedHeaders", allowRestrictedHeaders);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,838 @@
|
||||
<%@ 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",wctx.url("/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>
|
||||
@ -0,0 +1,22 @@
|
||||
<%@ 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 -->
|
||||
@ -0,0 +1,43 @@
|
||||
<%@ 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="/webjars/"/>"
|
||||
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="/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="/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" />
|
||||
<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="/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="/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"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/3rd-party/sneat/libs/dropzone/dropzone.css"/>" />
|
||||
</head>
|
||||
|
||||
@ -0,0 +1,102 @@
|
||||
<%@ 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>
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/dropzone/dropzone.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="/webjars/js/fims/cmmn/fims-base.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/fims/cmmn/customElements.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/fims/cmmn/fims-support.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/fims/cmmn/fims-componentization.js?${ver}"/>"></script>
|
||||
|
||||
<!-- 개발 편의성 유틸 -->
|
||||
<script src="<c:url value="/webjars/js/fims/cmmn/detect.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/js/fims/cmmn/objectInspector.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/webjars/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>
|
||||
@ -0,0 +1,578 @@
|
||||
<%@ 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>
|
||||
<span class="ms-auto">
|
||||
<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="/webjars/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="/webjars/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>
|
||||
</span>
|
||||
|
||||
</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("/webjars/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://81.223.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>
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
<%@ 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='/'/>webjars/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>
|
||||
@ -0,0 +1,459 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<jsp:include page="/WEB-INF/jsp/include/head.jsp" />
|
||||
<body>
|
||||
<div class="layout-wrapper layout-content-navbar layout-without-menu">
|
||||
<div class="layout-container">
|
||||
|
||||
<div class="layout-page">
|
||||
|
||||
<div class="content-wrapper mt-0">
|
||||
<jsp:include page="/WEB-INF/jsp/include/userMenus.jsp" />
|
||||
<div class="content-body menu-aware">
|
||||
<div class="sticky-wrapper">
|
||||
<div class="sticky-element">
|
||||
<jsp:include page="/WEB-INF/jsp/include/top.jsp" />
|
||||
<ul id="menu-tabs" class="nav nav-tabs mt-1" role="tablist"
|
||||
style="--bs-nav-link-padding-y: .125rem; background-image: linear-gradient(#8AB9DB, whitesmoke);">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<template id="main-tab">
|
||||
<li class="nav-item" role="presentation">
|
||||
<div class="nav-link border-bottom-0" data-bs-toggle="tab" data-bs-target="{tab-target}"
|
||||
role="tab" aria-controls="{index}" tabindex="-1">
|
||||
<span onclick="openMenu('{url}');" class="w-px-150 text-truncate">{name}</span>
|
||||
<span onclick="mainTabs.close('{url}')" class="ms-2">×</span>
|
||||
</div>
|
||||
</li>
|
||||
</template>
|
||||
<div id="main-tab-content" class="tab-content shadowed">
|
||||
<div id="dashboard" class="tab-pane fade" role="tabpanel">
|
||||
<jsp:include page="/WEB-INF/jsp/dashboard.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
<template id="tab-pane">
|
||||
<div id="{index}" class="tab-pane fade" role="tabpanel">{inner-content}</div>
|
||||
</template>
|
||||
<jsp:include page="/WEB-INF/jsp/include/bottom.jsp" />
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="selectTaskModal" class="modal fade h-auto" tabindex="-1" aria-hidden="true"
|
||||
data-bs-backdrop="static" data-bs-focus="false" data-bs-keyboard="false">
|
||||
<div class="modal-dialog modal-sm" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body modal-body-min">
|
||||
<div class="h3 fw-bold text-center">업무를 선택하세요.</div>
|
||||
<span id="selectTaskButtons" class="row g-3 d-flex flex-column">
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<jsp:include page="/WEB-INF/jsp/include/tail.jsp" />
|
||||
<!-- 자동 로그아웃 -->
|
||||
<script src="<c:url value="/webjars/3rd-party/sneat/libs/idletimer/idletimer.js"/>"></script>
|
||||
|
||||
<c:set var="onload">
|
||||
|
||||
</c:set>
|
||||
|
||||
<script>
|
||||
//단축키 등록
|
||||
FimsSupport.registShortcutKey();
|
||||
|
||||
let sticky = {id: -1, index: "dashboard", name: "대시보드", url: "/dashboard.do", parentID: null, description: "대시보드"};
|
||||
let mainTabs = new TabControl({
|
||||
sticky: sticky,
|
||||
getMenu: (url) => menuSupport.getMenu(url),
|
||||
onDatasetChange: tabs => {
|
||||
let template = document.getElementById("main-tab").innerHTML,
|
||||
toTab = (tmpl, item) => tmpl.replace(/{tab-target}/gi, "#" + "{index}"),
|
||||
tags = mainTabs.inStrings(template, toTab);
|
||||
document.getElementById("menu-tabs").innerHTML = tags.join("");
|
||||
|
||||
$("#menu-tabs .nav-item").eq(0).find("span.ms-2").remove();
|
||||
|
||||
},
|
||||
onCurrentChange: tab => {
|
||||
if (!tab || !tab.data) return;
|
||||
|
||||
let url = tab.data.url;
|
||||
menuSupport.setActive(url);
|
||||
document.querySelector("#menu-tabs li span[onclick=\"openMenu('" + url + "');\"]").click();
|
||||
|
||||
let currentPane = document.querySelector("#" + tab.data.index);
|
||||
if (!currentPane) {
|
||||
let template = document.getElementById("tab-pane").innerHTML,
|
||||
html = tab.inString(template);
|
||||
|
||||
if (tab.data.content) {
|
||||
html = html.replace(/{inner-content}/, tab.data.content);
|
||||
delete tab.data.content;
|
||||
$("#main-tab-content").append(html);
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll("#main-tab-content > div.tab-pane")
|
||||
.forEach(tabPane => {
|
||||
let current = tab.data.index == tabPane.getAttribute("id");
|
||||
if (current)
|
||||
tabPane.classList.add("show", "active");
|
||||
else
|
||||
tabPane.classList.remove("show", "active");
|
||||
});
|
||||
},
|
||||
onRemove: tabs => {
|
||||
let mainTab = document.querySelector("#main-tab-content");
|
||||
tabs.forEach(tab => {
|
||||
let tabPane = document.querySelector("#" + tab.data.index);
|
||||
if (!tabPane) return;
|
||||
|
||||
mainTab.removeChild(tabPane);
|
||||
delete tabPane;
|
||||
});
|
||||
mainTabs.onDatasetChange();
|
||||
}
|
||||
});
|
||||
|
||||
function openMenu(url) {
|
||||
mainTabs.open(url)
|
||||
}
|
||||
|
||||
$(".sticky-element").sticky({
|
||||
topSpacing: $(".nav-bar").height() + 1,
|
||||
width: "100%",
|
||||
zIndex: 9
|
||||
});
|
||||
|
||||
|
||||
|
||||
const FETCH_XXS = 10;
|
||||
const FETCH_XS = 30;
|
||||
const FETCH_SM = 50;
|
||||
const FETCH_MD = 100;
|
||||
const FETCH_LG = 300;
|
||||
const FETCH_XL = 500;
|
||||
const FETCH_XXL = 1000;
|
||||
|
||||
const DEFAULT_FETCH_SIZE = 30;
|
||||
|
||||
//자동 로그아웃
|
||||
const ONE_MINUTE = 60 * 1000;
|
||||
let sessionConfig = 30 * ONE_MINUTE;
|
||||
$.idleTimer(sessionConfig);
|
||||
$(document).bind("idle.idleTimer", function(){
|
||||
$.idleTimer('destroy');
|
||||
|
||||
ajax.post({
|
||||
url : wctx.url("/logout.do"),
|
||||
data : { "${_csrf.parameterName}" : "${_csrf.token}" },
|
||||
success : async function(){
|
||||
var ok = await alert2("세션이 종료되어 로그아웃되었습니다.");
|
||||
if(ok){
|
||||
location.href = wctx.url("/login.do");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
let fastSearch = false;
|
||||
|
||||
var pageObject = {};
|
||||
pageObject.help = function(){
|
||||
console.log("pageObject : 로드된 페이지이름(서버에서 반환하는 pageName변수 또는 jsp파일명)을 하위 키로 갖는 전역객체");
|
||||
};
|
||||
pageObject.childReq = [];
|
||||
pageObject.parentRes = [];
|
||||
pageObject.top = newDoctxFinder("top");
|
||||
|
||||
function LoadScript(scriptId, scriptPath){
|
||||
if(document.getElementById(scriptId) == null){
|
||||
$("body").append("<script id='"+scriptId+"' src='"+scriptPath+"' />");
|
||||
}
|
||||
}
|
||||
|
||||
async function LoadJson(path){
|
||||
let resp = await fetch(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 saeolMenuUrl = 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] == saeolMenuUrl){
|
||||
$(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>
|
||||
@ -0,0 +1,332 @@
|
||||
<%@ 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="/webjars/"/>"
|
||||
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="/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="/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" />
|
||||
<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="/webjars/css/fims.css?${ver}"/>" />
|
||||
|
||||
<link rel="stylesheet" href="<c:url value="/webjars/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='/'/>webjars/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='/'/>webjars/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>
|
||||
Loading…
Reference in New Issue