init
parent
d0e026a5a6
commit
6df0525d32
@ -0,0 +1,41 @@
|
||||
# DGuard Java API Agent Configuration File
|
||||
isEncrypt=false
|
||||
daemon_number=5
|
||||
daemon_ip=211.119.124.9
|
||||
daemon_ip2=127.0.0.1
|
||||
daemon_ip3=127.0.0.1
|
||||
daemon_port=9999
|
||||
log_level=5
|
||||
cache=ON
|
||||
info_index=1
|
||||
certification=null
|
||||
private_key=null
|
||||
Query_Collection_Mode=3
|
||||
db_type=oracle
|
||||
token_file=3rd-party/dguard/token/xit_agent.token
|
||||
audit_path=3rd-party/dguard/logs/
|
||||
server_name=localhost
|
||||
audit_option=false
|
||||
prove_mode=false
|
||||
DBuser=oracle
|
||||
SecureId=
|
||||
SecurePwd=
|
||||
TokenPwd=
|
||||
Double_Enc_Flag=true
|
||||
Double_Enc_Error_Flag=false
|
||||
Random_Algorithm=SHA256DRBG
|
||||
log_server_use=false
|
||||
log_server_ip=127.0.0.1
|
||||
log_server_port=19999
|
||||
acc_flag=false
|
||||
Timeout=3000
|
||||
Policy_File_Flag=false
|
||||
Policy_File_Path=
|
||||
Trim_Flag=true
|
||||
Exception_Flag=true
|
||||
Encoding_Flag=false
|
||||
Encoding_Type=UTF-8
|
||||
BLOB_Decrypt_Size=976
|
||||
Hmac_Digest_Use=false
|
||||
Jar_HMAC_Checksum=cAKi10ktdv9T+G1BY+ax0eIHD4Y0WM8KFHB6BVupcx8=
|
||||
Config_HMAC_Checksum=nkNp7yruN6EJ5XLYkSdDZVrATe99sK7qBsz9Yw+2MBY=
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@
|
||||
7141df12354b9cc23474c858645b9859c349215e4c40bdc477840ae58164a751
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,36 @@
|
||||
import com.Ineb.Dguard.*;
|
||||
import com.Ineb.Exception.DguardLoginException;
|
||||
import com.Ineb.Exception.DguardNetworkException;
|
||||
import com.Ineb.Exception.DGuardPropertyException;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
public class APITest2 {
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
DguardManager dm = DguardManager.Init("db_agent", "Agent!1700", "Agent!1700", "./3rd-party/dguard/conf/dguard.conf");
|
||||
|
||||
String Table = "CRYPTO";
|
||||
String Column1 = "PWD";
|
||||
String Column2 = "ENC";
|
||||
String[] Data = {"1234", "000010000001", "9999999999999"};
|
||||
|
||||
String HashStr = dm.MsgDigest(Table, Column1, Data[0]);
|
||||
System.out.println("MsgDigest " + " : [" + HashStr + "]");
|
||||
|
||||
String EncStr;
|
||||
String DecStr;
|
||||
for (int i = 0; i < Data.length; i++) {
|
||||
EncStr = dm.Encrypt(Table, Column2, Data[i]);
|
||||
System.out.println("Encrypt " + i + " : [" + EncStr + "]");
|
||||
DecStr = dm.Decrypt(Table, Column2, EncStr);
|
||||
System.out.println("Decrypt " + i + " : [" + DecStr + "]");
|
||||
}
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
javac -classpath C:\Ineb\lib\SecureDriver.jar;C:\Ineb\lib\INICrypto_v4.0.4.jar;C:\Ineb\lib\INISAFEPKI_v1.1.0.jar;C:\Ineb\lib\tibero4-jdbc.jar APITest2.java
|
||||
|
@ -0,0 +1,2 @@
|
||||
javac -classpath ../lib/DguardAPI.jar:../lib/MagicJCrypto-v2.0.0.0.jar:../lib/log4j-1.2.17.jar APITest2.java
|
||||
|
Binary file not shown.
@ -0,0 +1,69 @@
|
||||
import com.Ineb.Dguard.*;
|
||||
import com.Ineb.Exception.DguardLoginException;
|
||||
import com.Ineb.Exception.DguardNetworkException;
|
||||
import com.Ineb.Exception.DGuardPropertyException;
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.*;
|
||||
|
||||
public class MySQLDec {
|
||||
|
||||
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
|
||||
static final String DB_URL = "jdbc:mysql://192.168.100.211:3306/testdb";
|
||||
|
||||
static final String USERNAME = "ineb";
|
||||
static final String PASSWORD = "ineb1234";
|
||||
|
||||
public static void main(String[] args) {
|
||||
DguardManager dm = null;
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rset=null;
|
||||
|
||||
try{
|
||||
dm = DguardManager.Init("bidfunding", "Agent!1700", "Agent!1700", "/home/dguard/javaapi/conf/dguard.conf");
|
||||
|
||||
Class.forName(JDBC_DRIVER);
|
||||
conn = DriverManager.getConnection(DB_URL,USERNAME,PASSWORD);
|
||||
conn.setAutoCommit(false);
|
||||
System.out.println("- MySQL Connection");
|
||||
|
||||
String selectSql = "SELECT seq, data FROM tbl01";
|
||||
pstmt = conn.prepareStatement(selectSql.toString());
|
||||
rset = pstmt.executeQuery();
|
||||
|
||||
while(rset.next()){
|
||||
int seq = rset.getInt("SEQ");
|
||||
String data01 = rset.getString("data");
|
||||
|
||||
String decdata01 = dm.Decrypt("TBL", "ENC", data01);
|
||||
|
||||
System.out.print("SEQ : " + seq + "\n");
|
||||
System.out.print("DATA : " + data01 + "\n");
|
||||
System.out.print("DEC : " + decdata01 + "\n");
|
||||
}
|
||||
|
||||
rset.close();
|
||||
pstmt.close();
|
||||
conn.close();
|
||||
}catch(SQLException se1){
|
||||
se1.printStackTrace();
|
||||
}catch(Exception ex){
|
||||
ex.printStackTrace();
|
||||
}finally{
|
||||
try{
|
||||
if(pstmt!=null)
|
||||
pstmt.close();
|
||||
}catch(SQLException se2){
|
||||
}
|
||||
try{
|
||||
if(conn!=null)
|
||||
conn.close();
|
||||
}catch(SQLException se){
|
||||
se.printStackTrace();
|
||||
}
|
||||
}
|
||||
System.out.println("- MySQL Connection Close");
|
||||
}
|
||||
}
|
Binary file not shown.
@ -0,0 +1,98 @@
|
||||
import com.Ineb.Dguard.*;
|
||||
import com.Ineb.Exception.DguardLoginException;
|
||||
import com.Ineb.Exception.DguardNetworkException;
|
||||
import com.Ineb.Exception.DGuardPropertyException;
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.*;
|
||||
|
||||
public class MySQLEnc {
|
||||
|
||||
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
|
||||
static final String DB_URL = "jdbc:mysql://192.168.100.211:3306/testdb";
|
||||
|
||||
static final String USERNAME = "ineb";
|
||||
static final String PASSWORD = "ineb1234";
|
||||
|
||||
public static void main(String[] args) {
|
||||
DguardManager dm = null;
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement pstmt = null;
|
||||
PreparedStatement updatePstmt = null;
|
||||
ResultSet rset=null;
|
||||
|
||||
try{
|
||||
dm = DguardManager.Init("bidfunding", "Agent!1700", "Agent!1700", "/home/dguard/javaapi/conf/dguard.conf");
|
||||
|
||||
Class.forName(JDBC_DRIVER);
|
||||
conn = DriverManager.getConnection(DB_URL,USERNAME,PASSWORD);
|
||||
conn.setAutoCommit(false);
|
||||
System.out.println("- MySQL Connection");
|
||||
|
||||
String selectSql = "SELECT seq, data FROM tbl01";
|
||||
pstmt = conn.prepareStatement(selectSql.toString());
|
||||
rset = pstmt.executeQuery();
|
||||
|
||||
String updateSql = "UPDATE tbl01 SET data = ? WHERE seq = ?";
|
||||
updatePstmt = conn.prepareStatement(updateSql.toString());
|
||||
|
||||
int commitCnt = 0;
|
||||
|
||||
while(rset.next()){
|
||||
int seq = rset.getInt("SEQ");
|
||||
String data01 = rset.getString("data");
|
||||
|
||||
String encdata01 = dm.Encrypt("TBL", "ENC", data01);
|
||||
|
||||
System.out.print("SEQ : " + seq + "\n");
|
||||
System.out.print("DATA : " + data01 + "\n");
|
||||
System.out.print("ENC : " + encdata01 + "\n");
|
||||
|
||||
updatePstmt.setString(1, encdata01);
|
||||
updatePstmt.setInt(2, seq);
|
||||
|
||||
updatePstmt.addBatch();
|
||||
updatePstmt.clearParameters();
|
||||
|
||||
if ( commitCnt > 0 && commitCnt % 1000 == 0 ) {
|
||||
updatePstmt.executeBatch();
|
||||
updatePstmt.clearBatch();
|
||||
conn.commit();
|
||||
|
||||
System.out.println(commitCnt + ", " + data01 + ", " + encdata01);
|
||||
}
|
||||
|
||||
commitCnt++;
|
||||
}
|
||||
|
||||
updatePstmt.executeBatch();
|
||||
conn.commit();
|
||||
conn.setAutoCommit(true);
|
||||
|
||||
System.out.println("Commit count : " + commitCnt);
|
||||
|
||||
rset.close();
|
||||
updatePstmt.close();
|
||||
pstmt.close();
|
||||
conn.close();
|
||||
}catch(SQLException se1){
|
||||
se1.printStackTrace();
|
||||
}catch(Exception ex){
|
||||
ex.printStackTrace();
|
||||
}finally{
|
||||
try{
|
||||
if(pstmt!=null)
|
||||
pstmt.close();
|
||||
}catch(SQLException se2){
|
||||
}
|
||||
try{
|
||||
if(conn!=null)
|
||||
conn.close();
|
||||
}catch(SQLException se){
|
||||
se.printStackTrace();
|
||||
}
|
||||
}
|
||||
System.out.println("- MySQL Connection Close");
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
javac -classpath ../../lib/DguardAPI.jar:../../lib/INICrypto_v4.1.1.jar:../../lib/INISAFEPKI_v1.1.21.jar:../../lib/log4j-1.2.17.jar MySQLDec.java
|
||||
|
@ -0,0 +1,2 @@
|
||||
javac -classpath ../../lib/DguardAPI.jar:../../lib/INICrypto_v4.1.1.jar:../../lib/INISAFEPKI_v1.1.21.jar:../../lib/log4j-1.2.17.jar MySQLEnc.java
|
||||
|
@ -0,0 +1,2 @@
|
||||
java -Xms64m -Xmx128m -classpath .:../../lib/DguardAPI.jar:../../lib/MagicJCrypto-v2.0.0.0.jar:../../lib/log4j-1.2.17.jar:../../lib/com.mysql.jdbc_5.1.5.jar MySQLDec
|
||||
|
@ -0,0 +1,2 @@
|
||||
java -Xms64m -Xmx128m -classpath .:../../lib/DguardAPI.jar:../../lib/MagicJCrypto-v2.0.0.0.jar:../../lib/log4j-1.2.17.jar:../../lib/com.mysql.jdbc_5.1.5.jar MySQLEnc
|
||||
|
Binary file not shown.
@ -0,0 +1,68 @@
|
||||
import com.Ineb.Dguard.*;
|
||||
import com.Ineb.Exception.DguardLoginException;
|
||||
import com.Ineb.Exception.DguardNetworkException;
|
||||
import com.Ineb.Exception.DGuardPropertyException;
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.*;
|
||||
|
||||
public class PGSQLDec {
|
||||
|
||||
static final String DB_URL = "jdbc:postgresql://10.22.170.25:5432/miracle";
|
||||
|
||||
static final String USERNAME = "miracle";
|
||||
static final String PASSWORD = "q!fvYOP^evn";
|
||||
|
||||
public static void main(String[] args) {
|
||||
DguardManager dm = null;
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rset=null;
|
||||
|
||||
try{
|
||||
dm = DguardManager.Init("miraclefunding", "Agent!1700", "Agent!1700", "/home/inebsoft/javaapi/conf/dguard.conf");
|
||||
|
||||
conn = DriverManager.getConnection(DB_URL,USERNAME,PASSWORD);
|
||||
conn.setAutoCommit(false);
|
||||
System.out.println("- PostgreeSQL Connection");
|
||||
|
||||
String selectSql = "SELECT id, seyfert_guid FROM admin_model";
|
||||
pstmt = conn.prepareStatement(selectSql.toString());
|
||||
rset = pstmt.executeQuery();
|
||||
|
||||
while(rset.next()){
|
||||
int id = rset.getInt("id");
|
||||
String data01 = rset.getString("seyfert_guid");
|
||||
|
||||
System.out.print("ID : " + id + "\n");
|
||||
System.out.print("DATA : " + data01 + "\n");
|
||||
|
||||
String decdata01 = dm.Decrypt("TBL", "ENC", data01);
|
||||
|
||||
System.out.print("DEC : " + decdata01 + "\n");
|
||||
}
|
||||
|
||||
rset.close();
|
||||
pstmt.close();
|
||||
conn.close();
|
||||
}catch(SQLException se1){
|
||||
se1.printStackTrace();
|
||||
}catch(Exception ex){
|
||||
ex.printStackTrace();
|
||||
}finally{
|
||||
try{
|
||||
if(pstmt!=null)
|
||||
pstmt.close();
|
||||
}catch(SQLException se2){
|
||||
}
|
||||
try{
|
||||
if(conn!=null)
|
||||
conn.close();
|
||||
}catch(SQLException se){
|
||||
se.printStackTrace();
|
||||
}
|
||||
}
|
||||
System.out.println("- PostgreeSQL Connection Close");
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
import com.Ineb.Dguard.*;
|
||||
import com.Ineb.Exception.DguardLoginException;
|
||||
import com.Ineb.Exception.DguardNetworkException;
|
||||
import com.Ineb.Exception.DGuardPropertyException;
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.*;
|
||||
|
||||
public class PGSQLEnc {
|
||||
|
||||
static final String DB_URL = "jdbc:postgressql://127.0.0.1:5432/miracle";
|
||||
|
||||
static final String USERNAME = "miracle";
|
||||
static final String PASSWORD = "q!fvYOP^evn";
|
||||
|
||||
public static void main(String[] args) {
|
||||
DguardManager dm = null;
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement pstmt = null;
|
||||
PreparedStatement updatePstmt = null;
|
||||
ResultSet rset=null;
|
||||
|
||||
try{
|
||||
dm = DguardManager.Init("miraclefunding", "Agent!1700", "Agent!1700", "/home/inebsoft/javaapi/conf/dguard.conf");
|
||||
|
||||
conn = DriverManager.getConnection(DB_URL,USERNAME,PASSWORD);
|
||||
conn.setAutoCommit(false);
|
||||
System.out.println("- PostgreeSQL Connection");
|
||||
|
||||
String selectSql = "SELECT seq, data FROM tbl01";
|
||||
pstmt = conn.prepareStatement(selectSql.toString());
|
||||
rset = pstmt.executeQuery();
|
||||
|
||||
String updateSql = "UPDATE tbl01 SET data = ? WHERE seq = ?";
|
||||
updatePstmt = conn.prepareStatement(updateSql.toString());
|
||||
|
||||
int commitCnt = 0;
|
||||
|
||||
while(rset.next()){
|
||||
int seq = rset.getInt("SEQ");
|
||||
String data01 = rset.getString("data");
|
||||
|
||||
String encdata01 = dm.Encrypt("TBL", "ENC", data01);
|
||||
|
||||
System.out.print("SEQ : " + seq + "\n");
|
||||
System.out.print("DATA : " + data01 + "\n");
|
||||
System.out.print("ENC : " + encdata01 + "\n");
|
||||
|
||||
updatePstmt.setString(1, encdata01);
|
||||
updatePstmt.setInt(2, seq);
|
||||
|
||||
updatePstmt.addBatch();
|
||||
updatePstmt.clearParameters();
|
||||
|
||||
if ( commitCnt > 0 && commitCnt % 1000 == 0 ) {
|
||||
updatePstmt.executeBatch();
|
||||
updatePstmt.clearBatch();
|
||||
conn.commit();
|
||||
|
||||
System.out.println(commitCnt + ", " + data01 + ", " + encdata01);
|
||||
}
|
||||
|
||||
commitCnt++;
|
||||
}
|
||||
|
||||
updatePstmt.executeBatch();
|
||||
conn.commit();
|
||||
conn.setAutoCommit(true);
|
||||
|
||||
System.out.println("Commit count : " + commitCnt);
|
||||
|
||||
rset.close();
|
||||
updatePstmt.close();
|
||||
pstmt.close();
|
||||
conn.close();
|
||||
}catch(SQLException se1){
|
||||
se1.printStackTrace();
|
||||
}catch(Exception ex){
|
||||
ex.printStackTrace();
|
||||
}finally{
|
||||
try{
|
||||
if(pstmt!=null)
|
||||
pstmt.close();
|
||||
}catch(SQLException se2){
|
||||
}
|
||||
try{
|
||||
if(conn!=null)
|
||||
conn.close();
|
||||
}catch(SQLException se){
|
||||
se.printStackTrace();
|
||||
}
|
||||
}
|
||||
System.out.println("- PostgreeSQL Connection Close");
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
javac -classpath ../../lib/DguardAPI.jar:../../lib/INICrypto_v4.1.1.jar:../../lib/INISAFEPKI_v1.1.21.jar:../../lib/log4j-1.2.17.jar PGSQLDec.java
|
||||
|
@ -0,0 +1,2 @@
|
||||
javac -classpath ../../lib/DguardAPI.jar:../../lib/INICrypto_v4.1.1.jar:../../lib/INISAFEPKI_v1.1.21.jar:../../lib/log4j-1.2.17.jar PGSQLEnc.java
|
||||
|
@ -0,0 +1,2 @@
|
||||
java -Xms64m -Xmx128m -classpath .:../../lib/DguardAPI.jar:../../lib/MagicJCrypto-v2.0.0.0.jar:../../lib/log4j-1.2.17.jar:../../lib/postgresql-9.3-1100.jdbc4.jar PGSQLDec
|
||||
|
@ -0,0 +1,2 @@
|
||||
java -Xms64m -Xmx128m -classpath .:../../lib/DguardAPI.jar:../../lib/MagicJCrypto-v2.0.0.0.jar:../../lib/log4j-1.2.17.jar:../../lib/postgresql-9.3-1100.jdbc4.jar PGSQLEnc
|
||||
|
@ -0,0 +1,2 @@
|
||||
java -classpath .;..\lib\SecureDriver.jar;..\lib\INICrypto_v4.0.4.jar;..\lib\INISAFEPKI_v1.1.0.jar;..\lib\tibero4-jdbc.jar APITest2
|
||||
|
@ -0,0 +1,2 @@
|
||||
java -Xms64m -Xmx128m -classpath .:../lib/DguardAPI.jar:../lib/MagicJCrypto-v2.0.0.0.jar:../lib/log4j-1.2.17.jar: APITest2
|
||||
|
@ -0,0 +1 @@
|
||||
dFP7QMHS2p+NoG/K/NqCbe4D/wBDg6QZNWbkHZwrsu2TB9J5YJn/IXWInHxpux3OafVU0WUmbs4BH+Np7FVQnfyI1w71J7WlKh3XsZkxXVIbkkRGyFHhIFmvIi9kSvs1uIJO7HTL2/JQDn3/hRtZCbuJBfxy/pRA+sm1Y+KDBPXky8pauyP0ABSXivx44ol/ETGj5Qc5/yiElpdtu2i14tMoUgkfYLXRlNkz74oHFsCC5oRWxajcLK9WNFe9+iv5YYEJngdBush+X8rrQJc0M1gaqAEBagv06RTZrfd/Cfm9BSBVDVuaHiHM4BunUzsidjRoZADwbJxnbl+rA2Tf+fUQbTZakwToaPYH9sSOamlkfuqF68J+pNZkYRtVmWNk9qDoWRwz8i77foo6lmWGiQVr2tq3O2vrfq21QicL1ope3xiIA5Xp4ZW44WFiNZ+7BDZHzNGX8PaS7vOBWkmM2rpByNi19LXnij2gp+Rfo5mMSEgxj3bx/SGcOQ7KWZ7nfa8Gqmk2b5fiUrFgHHlNQoX8/0vXcYAp93yjiZKiVnyg0TLAD2DAOGvBWUZXyGtqV85zcb8r+vRFUgrIu1IQCR1EC7+MOiyuDKj/SD5hqWm/0IxizCIPGsZAFw6Cn+6rXUJ4U5r2U74yQmYLPnguDmDiGbQpY0kv/0fgTaNmBJjmeJqYCOWDUtnEoLrqDqliiH+L/o21KgZNv2nZi9a+Ryq/UoSU6sm8a5gvLewhGk9LZ+lQUfmlDAOwe/qnapQGQWPFkHlJUUL5xDWuUjUsLrR3Txuy6gqrmZnaBK/SEme2zBSOxT4dsjY+C2Zl5NF7y3pLkklmFD7djm8IVxt2vDIl/vMmKF2K3/+K4hocWK/XqZ2ewdE4g8XZUkEEicgf+KQ5ZDnHGFR2tqotMkgOy9hHxZWlrnmBfmU4ZdZorL9+mjd7ecj3MOhn2SREnkfmwqtSElc3eClNbUP3XLUT/2hy0O1Y8aFq1V2w3rMn1zg6E/08ofGXDbQiTcby1sVuygrxe/S1h/uHuls0sho7HBP2Q1bOU/9y0kl9Mgjdy8MnR0XxuumIdyX0HEoy3ZDd+ncot3W2B/h0Tg0txXdGjdUVWZEICq7r6ZYN0j8HKf18Wc8+Eosok8B/IMNleMkWC97AR1Hv3hkNVVFYD+YL/hQ6yphJt3YE++s4uGoUstQHiaPcHtqUj9qVZ6ds22J0RNenAp6ZIUerWvM+p/UuAaTpddSswP/rEEGLfp3e+3BsTKVvWSfiAfVmxtkQa6Sh5lNTPXJ31pWXsbEVCYUX5YqezM13X7C7AYH146kmajC8Mm2a7s1x6uIBkjqNKa9R0jWMxy6HRiQ+36Zx09pq0/8BK82dXBpLGtFnsIPMMgy4LKEqhRNqhGlE6sLGCJHyJu5u1LmQCdnIzeDKc80H7kqE20pK9vtwdvQmWGaIAze4HOHTWW4XB26Esk1bD+2Qs085o+n1XXJ6VC7sV8EYjISR4Z8yDf1nSfHsX06ee+mj65g5JkrP6QU2RHxnhdcYhC+fTskRi/x/hf18gdWWb1105/5pPG0FA79qY5khli0qMwf8qsCtGxeufVMPnW1RKldg8JuNZCa/4RkJ5j35HAN39YnWmIFV54nL1I2OBRLQeh1ok4CKY5vsd7i4z/TCTJdRaV0XZxQLWNTfuzXZX3ZC5ErCm/tZd4ARLRzRtQgqXFVChEyIumt77ZbpZOBBlMdnOCyoqJwVlKfWpmRIbDMiR6OHt5oQlJZFhq7q/8RS5cXvSEpQ5XUrhZ2xM5VenD/bZCJAAr6smsv/TqYuPEu/k8tdSES2MnGuqVBVH23CE1m156pAYSSSt/SuF1gcsFOH1DCuChYy1ZXhjmD6hJMsigYqE1Gk1FWcIegvDHF9lNJQtXmG6mIV0uCa6oCZKCRDKhTqqvJMxLtEBxPq2tOvlXOZ4Rduwnc25OBMHnHNwIvTp//D5kDH+bT6P4HTfcJxJ6w9jEMs2iiV7sV2/P4dNFv9hHjAdo7LNPswXmRLbWGFTgQLgCq7kk0JU08oCT35gtCGocd7TUbf3C0Ymr13sP+tF+6MtMpFPcbv4in4mY2WR3dKZaOrG8ZUCaZWW8MKX7O/f32qJRjlC0TFcaF7ZD6kgtyqM+pDpLjE+h+/bRGvgnVvwpmYornxpGlQ730MspQ3Ok/eur8ndTk0/y1GwZdQghtG0Kd7B0+qzTs72cCzfyZA1R2ecgIMWzz/DBF0yeWcE8Kpz9u4tJ5fIFfMWb3XnbLCdZm/PPT8aleywAujKuDZMWJwBCK78JMV/GZ9u5AhLh/a+8SXqR/4KWZR+jTea/XmczBUa9z3hRlUwkmB+lFR22Cg//YVa1MVFAMXiiu+pWHo5EKAFC7h7HpWxcvQwZrZW63oNeEp8ESb2Gkzy80wmLTGXkpfuqKfly7P2rY+8sbJJmn6I9g6Tu6i4qjEdTAWPTBSnuhZ0MjdPkrvHyNYWxdHkXFDYDYJN6OVKaLhQavsnrC+4Cm3xvLdY+UkHcgb+ZPtGQwmuklfb45XZaKZ0Mvpj9J58JaGqAWVoSc4sI7UJQ3AvB+8F1Jx+OVCKLX/H85iSPOwbe7gKSmuV/5K9j8MJvAWwkABa7FxaVQxcPVcAm3azPjwe7XwRqPJW77eAWb032b/e1yKemrrb+61wJ9rka0csaWnboAqODMZ+AkrKK81RIYNUHpl0wiGbl8D6Ix5IoTKLGXu/ZAHFeaM7gi4w8lmCqPFdoQe7IONN+NxwE6BDWsrH0BwF7ICGcynoCKydXRXwlE07j6wo9PWxUlnayDAKCKoBW36kLcXJzj1zNIMGYFo7rLQfwFd3lNJnjdDb0PbjRPu6+VYXTKIgDoD5GbLgtWHrPVLalfWc/0PM6Tg/fcs+0a+BryK2usIVWIwi+WmOTryQCzWVd39IgiE76opfqTRg27kAfGcBl/p+bOWHWTdBQRaOFlEKQzupcRPpp9dBtmu9zuQsf9ntXUcdpD2XanqxU2FUoqM54lbmb9AggNm4ud9QKksYWrTcA7T0rMdlyWDpiz3/tTNFfwtJlUOZNilyF7j2uN9xPlxsMu1r3MZqUtVqF+mlmMXzaP6B/NETk6ObtERwfJ05p+nv93M9+Vil09xvtmxqWAY7I1UW5no8FW2nlBoy5cKGtLilfCywpC55vYybfnoV4qgdKxiF/AokWPP3zPP6d/8WSdoCAAB4lpZtmcQfQI31tI9EbQUev79PVLPBScJePeOkCLExM11ghrtuUgCaAk8VWTenqWEixZU19w+qnWpFlg6jsvZSjgIiQfjMsZb01EH2+eheaKHSEGUFzPvvkng0UTQBcxhnOGusyPzVKYgNStpO1rzd4UGnNv04yJOf32/6HIgWxsH
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,114 @@
|
||||
<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>adds-fo</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>adds-fo</name>
|
||||
<description>project template for xit-base-starter</description>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>maven-public</id>
|
||||
<url>https://nas.xit.co.kr:8888/repository/maven-public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cokr.xit.boot</groupId>
|
||||
<artifactId>xit-base-starter</artifactId>
|
||||
<version>23.04.01-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 시스템로그 -->
|
||||
<dependency>
|
||||
<groupId>cokr.xit.base</groupId>
|
||||
<artifactId>xit-syslog</artifactId>
|
||||
<version>23.04.01-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 암복호화 -->
|
||||
<dependency>
|
||||
<groupId>org.egovframe.rte</groupId>
|
||||
<artifactId>org.egovframe.rte.fdl.crypto</artifactId>
|
||||
<version>4.1.0</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-slf4j-impl</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cokr.xit.base</groupId>
|
||||
<artifactId>xit-crypto</artifactId>
|
||||
<version>23.04.01-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 마리아DB -->
|
||||
<dependency>
|
||||
<groupId>org.mariadb.jdbc</groupId>
|
||||
<artifactId>mariadb-java-client</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<directory>${basedir}/target</directory>
|
||||
<finalName>${project.artifactId}-${project.version}</finalName>
|
||||
|
||||
<resources>
|
||||
<resource><directory>${basedir}/src/main/resources</directory></resource>
|
||||
</resources>
|
||||
|
||||
<testResources>
|
||||
<testResource><directory>${basedir}/src/test/resources</directory></testResource>
|
||||
<testResource><directory>${basedir}/src/main/resources</directory></testResource>
|
||||
</testResources>
|
||||
|
||||
<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>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -0,0 +1,26 @@
|
||||
package cokr.xit.adds;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import cokr.xit.base.syslog.ServiceLog;
|
||||
import cokr.xit.base.syslog.service.bean.LogFilter;
|
||||
|
||||
/**서비스 로그 필터
|
||||
* @author mjkhan
|
||||
*/
|
||||
@Component("logFilter")
|
||||
public class AppLogFilter extends LogFilter {
|
||||
@Override
|
||||
protected boolean customFilter(ServiceLog log) {
|
||||
switch (log.getType()) {
|
||||
case ServiceLog.LOG_INOUT:
|
||||
case ServiceLog.DOWNLOAD: return true;
|
||||
case ServiceLog.WEB:
|
||||
String url = log.getUrl();
|
||||
return !url.contains("login.do")
|
||||
&& !url.contains("logout.do")
|
||||
&& !url.contains("/error/");
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package cokr.xit.adds;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
|
||||
import cokr.xit.foundation.data.DataObject;
|
||||
import cokr.xit.foundation.web.AbstractController;
|
||||
import cokr.xit.foundation.web.RequestHandlerReader;
|
||||
|
||||
@Controller
|
||||
public class MainController extends AbstractController {
|
||||
@Autowired
|
||||
private RequestMappingHandlerMapping requestHandlers;
|
||||
|
||||
@GetMapping(name="로그인", value="/login.do")
|
||||
public String loginPage() {
|
||||
return "login";
|
||||
}
|
||||
|
||||
@GetMapping(name="홈", value={"/", "/index.do"})
|
||||
public ModelAndView mainPage() {
|
||||
ModelAndView mav = dashboard();
|
||||
mav.setViewName("index");
|
||||
return mav;
|
||||
}
|
||||
|
||||
@GetMapping(name="대시보드", value={"/dashboard.do"})
|
||||
public ModelAndView dashboard() {
|
||||
return new ModelAndView("dashboard");
|
||||
}
|
||||
|
||||
@RequestMapping(name="기능 URL 선택", value="/urls.do")
|
||||
public ModelAndView getURLs(boolean multiple) {
|
||||
List<DataObject> urls = new RequestHandlerReader().read(requestHandlers);
|
||||
return new ModelAndView("select-url")
|
||||
.addObject("multiple", multiple)
|
||||
.addObject("urls", toJson(urls));
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package cokr.xit.adds;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
|
||||
import cokr.xit.base.boot.XitBaseApplication;
|
||||
|
||||
public class XitBootApplication extends XitBaseApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(XitBootApplication.class, args);
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
package cokr.xit.base;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@Controller
|
||||
public class ActionGroupController extends cokr.xit.base.security.access.web.ActionGroupController {}
|
@ -0,0 +1,15 @@
|
||||
package cokr.xit.base;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import cokr.xit.base.security.SecuredUserInfo;
|
||||
import cokr.xit.base.security.UserDetailLoader;
|
||||
import cokr.xit.foundation.AbstractComponent;
|
||||
|
||||
@Component
|
||||
public class AppUserInfo extends AbstractComponent implements UserDetailLoader {
|
||||
@Override
|
||||
public void setInfo(SecuredUserInfo userInfo) {
|
||||
log().debug("Setting extra user info");
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
package cokr.xit.base;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@Controller
|
||||
public class AuthorityController extends cokr.xit.base.security.access.web.AuthorityController {}
|
@ -0,0 +1,6 @@
|
||||
package cokr.xit.base;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@Controller
|
||||
public class CodeController extends cokr.xit.base.code.web.CodeController {}
|
@ -0,0 +1,6 @@
|
||||
package cokr.xit.base;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@Controller
|
||||
public class FileController extends cokr.xit.base.file.web.FileController {}
|
@ -0,0 +1,6 @@
|
||||
package cokr.xit.base;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@Controller
|
||||
public class MenuController extends cokr.xit.base.menu.web.MenuController {}
|
@ -0,0 +1,8 @@
|
||||
package cokr.xit.base;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
import cokr.xit.base.user.ManagedUser;
|
||||
|
||||
@Controller
|
||||
public class UserController extends cokr.xit.base.user.web.UserController<ManagedUser> {}
|
@ -0,0 +1,54 @@
|
||||
server:
|
||||
port: 8080
|
||||
|
||||
servlet:
|
||||
context-path: /
|
||||
|
||||
ssl:
|
||||
enabled: false
|
||||
key-store: classpath:ssl/.keystore
|
||||
key-store-type: PKCS12
|
||||
key-store-password: 5811807
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: adds-fo
|
||||
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
sql:
|
||||
init:
|
||||
platform: mariadb
|
||||
|
||||
datasource:
|
||||
hikari:
|
||||
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||
jdbc-url: jdbc:log4jdbc:mariadb://211.119.124.9:4407/adds?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&useSSL=false
|
||||
username: addsweb
|
||||
password: addsweb1234
|
||||
auto-commit: false
|
||||
|
||||
mvc:
|
||||
static-path-pattern: /resources/**,/files/**
|
||||
web:
|
||||
resources:
|
||||
static-locations: /resources/,file:files/
|
||||
|
||||
messageSource:
|
||||
basenames:
|
||||
- classpath:message/message-common
|
||||
- classpath:message/authentication-message
|
||||
- classpath:org/egovframe/rte/fdl/property/messages/properties
|
||||
|
||||
propertyService:
|
||||
properties:
|
||||
- tempDir: C:\temp
|
||||
- pageUnit: 10
|
||||
- pageSize: 10
|
||||
- permitAccess: /intf/**/*
|
||||
# extFileName:
|
||||
# - encoding: UTF-8
|
||||
# filename: classpath*:properties/your-file-01.properties
|
||||
# - encoding: UTF-8
|
||||
# filename: classpath*:properties/your-file-02.properties
|
@ -0,0 +1,4 @@
|
||||
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
|
||||
|
||||
log4jdbc.dump.sql.maxlinelength=0
|
||||
log4jdbc.drivers=org.mariadb.jdbc.Driver
|
@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- 60초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
|
||||
<configuration scan="true" scanPeriod="60 seconds">
|
||||
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
|
||||
<property name="LOG_PATH" value="logs"/>
|
||||
<property name="LOG_FILE_NAME" value="${applicationName}"/>
|
||||
<property name="ERR_LOG_FILE_NAME" value="${LOG_FILE_NAME}-error"/>
|
||||
<property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} %-5level [%logger{0}:%line] - %msg%n"/>
|
||||
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>${LOG_PATTERN}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>${LOG_PATTERN}</pattern>
|
||||
</encoder>
|
||||
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
|
||||
<fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
|
||||
<maxHistory>30</maxHistory><!-- 로그파일 보관주기(일)-->
|
||||
<!--<MinIndex>1</MinIndex>
|
||||
<MaxIndex>10</MaxIndex>-->
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<appender name="Error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>error</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
|
||||
<file>${LOG_PATH}/${ERR_LOG_FILE_NAME}.log</file>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>${LOG_PATTERN}</pattern>
|
||||
</encoder>
|
||||
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
|
||||
<fileNamePattern>${LOG_PATH}/${ERR_LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<!-- 파일당 최고 용량 kb, mb, gb -->
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<root level="DEBUG" additivity="false">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="FILE"/>
|
||||
<appender-ref ref="Error"/>
|
||||
</root>
|
||||
|
||||
<logger name="jdbc" level="OFF"/>
|
||||
<logger name="org.apache.commons" level="OFF" additivity="false"/>
|
||||
<logger name="org.mariadb" level="OFF" additivity="false"/>
|
||||
<logger name="jdbc.connection" level="OFF" additivity="false"/>
|
||||
<logger name="jdbc.sqlonly" level="OFF" additivity="false"/>
|
||||
<logger name="jdbc.resultset" level="OFF" additivity="false"/>
|
||||
<logger name="jdbc.resultsettable" level="OFF" additivity="false"/>
|
||||
<logger name="jdbc.audit" level="OFF" additivity="false"/>
|
||||
<logger name="com.zaxxer" level="OFF" additivity="false"/>
|
||||
<logger name="jdbc.sqltiming" level="DEBUG" />
|
||||
<logger name="org.quartz" level="Error" additivity="false"/>
|
||||
|
||||
<!-- 특정패키지 로깅레벨 설정 -->
|
||||
<logger name="cokr.xit" level="DEBUG" additivity="false">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="FILE"/>
|
||||
<appender-ref ref="Error"/>
|
||||
</logger>
|
||||
|
||||
</configuration>
|
@ -0,0 +1,5 @@
|
||||
authenticationFailure.usernameNotFound=\uc0ac\uc6a9\uc790\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
|
||||
authenticationFailure.badCredentials=\uc0ac\uc6a9\uc790 \uc544\uc774\ub514\ub098 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub410\uc2b5\ub2c8\ub2e4.
|
||||
authenticationFailure.credentialsExpired=\ube44\ubc00\ubc88\ud638\uac00 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4.
|
||||
authenticationFailure.authenticationFailed=\uc0ac\uc6a9\uc790\ub97c \uc778\uc99d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
|
||||
authenticationFailure.policyViolated=\ub85c\uadf8\uc778 \uc815\ucc45\uc5d0 \ub530\ub77c \uc811\uadfc\uc774 \ucc28\ub2e8\ub410\uc2b5\ub2c8\ub2e4.
|
@ -0,0 +1,385 @@
|
||||
valueRequired={0}\uac00 \uc124\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
pageNotFound=\uc694\uccad\ud558\uc2e0 \ud398\uc774\uc9c0\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
|
||||
sessionExpired=\ub300\uae30 \uc2dc\uac04\uc774 \uc624\ub798\ub418\uc5b4 \uc138\uc158\uc774 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4.
|
||||
invalidSession=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc138\uc158\uc73c\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4.
|
||||
accessDenied=\uc694\uccad\ud558\uc2e0 \uc791\uc5c5\uc5d0 \ub300\ud55c \uad8c\ud55c\uc774 \uc5c6\uc5b4\uc11c \uc811\uadfc\uc774 \uac70\ubd80\ub410\uc2b5\ub2c8\ub2e4.<br />\uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758 \ubc14\ub78d\ub2c8\ub2e4.
|
||||
serverError=\uc694\uccad\ud558\uc2e0 \uc791\uc5c5\uc744 \uc218\ud589 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.<br />\uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758 \ubc14\ub78d\ub2c8\ub2e4.
|
||||
|
||||
duplicate.object=\uc774\ubbf8 \ub4f1\ub85d\ub41c {0}\uc785\ub2c8\ub2e4.
|
||||
|
||||
fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
|
||||
fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1}
|
||||
info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#UI Common resource#
|
||||
table.num=\ubc88\ud638
|
||||
table.regdate=\ub4f1\ub85d\uc77c
|
||||
table.reger=\ub4f1\ub85d\uc790
|
||||
table.select=\uc120\ud0dd
|
||||
title.html=egovframe common component
|
||||
title.detail=\uc0c1\uc138\uc870\ud68c
|
||||
title.inquire=\uc870\ud68c
|
||||
title.update=\uc218\uc815
|
||||
title.create=\ub4f1\ub85d
|
||||
title.delete=\uc0ad\uc81c
|
||||
title.save=\uc800\uc7a5
|
||||
title.list=\ubaa9\ub85d
|
||||
title.searchCondition=\uac80\uc0c9\uc870\uac74
|
||||
title.search=\uac80\uc0c9\uc5b4
|
||||
title.reply=\ub2f5\uae00
|
||||
title.scrap=\uc2a4\ud06c\ub7a9
|
||||
title.comment=\ub313\uae00
|
||||
title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd
|
||||
title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c
|
||||
title.link=\ub9c1\ud06c
|
||||
title.management=\uad00\ub9ac
|
||||
title.all=\uc804\uccb4
|
||||
|
||||
input.select=\uc120\ud0dd\ud558\uc138\uc694
|
||||
input.cSelect=\uc120\ud0dd
|
||||
input.input=\uc785\ub825
|
||||
input.button=\ubc84\ud2bc
|
||||
input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4
|
||||
input.yes=\uc608
|
||||
input.no=\uc544\ub2c8\uc624
|
||||
|
||||
select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd
|
||||
|
||||
button.select=\uc120\ud0dd
|
||||
button.search=\uac80\uc0c9
|
||||
button.use=\uc0ac\uc6a9
|
||||
button.notUsed=\uc0ac\uc6a9\uc911\uc9c0
|
||||
button.inquire=\uc870\ud68c
|
||||
button.update=\uc218\uc815
|
||||
button.create=\ub4f1\ub85d
|
||||
button.delete=\uc0ad\uc81c
|
||||
button.deleteDatabase=\uc644\uc804\uc0ad\uc81c
|
||||
button.close=\ub2eb\uae30
|
||||
button.save=\uc800\uc7a5
|
||||
button.list=\ubaa9\ub85d
|
||||
button.reset=\ucde8\uc18c
|
||||
button.passwordUpdate=\uc554\ud638\ubcc0\uacbd
|
||||
button.subscribe=\uac00\uc785\uc2e0\uccad
|
||||
button.realname=\uc2e4\uba85\ud655\uc778
|
||||
button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
|
||||
button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
|
||||
button.agree=\ub3d9\uc758
|
||||
button.disagree=\ube44\ub3d9\uc758
|
||||
button.possible=\uac00\ub2a5
|
||||
button.impossible=\ubd88\uac00\ub2a5
|
||||
button.qnaregist=Q&A\ub4f1\ub85d
|
||||
button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d
|
||||
button.preview=\ubbf8\ub9ac\ubcf4\uae30
|
||||
button.next=\ub2e4\uc74c
|
||||
button.add=\ubc14\ub85c\ucd94\uac00
|
||||
button.confirm=\ud655\uc778
|
||||
button.back = \ub4a4\ub85c
|
||||
button.yes = \uc608
|
||||
button.no = \uc544\ub2c8\uc624
|
||||
button.home = \ud648
|
||||
button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0
|
||||
button.cop = \ud611\uc5c5
|
||||
button.wrkstart = \ucd9c\uadfc
|
||||
button.wrkend = \ud1f4\uadfc
|
||||
button.reply = \ub2f5\uae00
|
||||
button.scrap = \uc2a4\ud06c\ub7a9
|
||||
button.comment = \ub313\uae00
|
||||
button.excel = \uc5d1\uc140
|
||||
button.init=\ucd08\uae30\ud654
|
||||
button.acknowledgment=\uc2b9\uc778
|
||||
button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c
|
||||
button.bulkUpload=\uc77c\uad04\ub4f1\ub85d
|
||||
button.log = \ub85c\uadf8
|
||||
button.set = \uc124\uc815
|
||||
button.move = \uc774\ub3d9
|
||||
|
||||
|
||||
#UI Common Message#
|
||||
common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
|
||||
common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4.
|
||||
common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4.
|
||||
common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
|
||||
|
||||
common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694
|
||||
common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4.
|
||||
common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4.
|
||||
common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4.
|
||||
|
||||
fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4!
|
||||
fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558)
|
||||
fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#UI User Message#
|
||||
fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
|
||||
success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
|
||||
fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328)
|
||||
info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
|
||||
success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
|
||||
fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
|
||||
#UI Cop Message#
|
||||
cop.extrlUser = \uc678\ubd80\uc0ac\uc6a9\uc790
|
||||
cop.intrlUser = \ub0b4\ubd80\uc0ac\uc6a9\uc790
|
||||
cop.private = \ube44\uacf5\uac1c
|
||||
cop.public = \uacf5\uac1c
|
||||
|
||||
cop.adbkNm = \uc8fc\uc18c\ub85d\uba85
|
||||
cop.othbcScope = \uacf5\uac1c\ubc94\uc704
|
||||
cop.company = \ud68c\uc0ac
|
||||
cop.part = \ubd80\uc11c
|
||||
cop.man = \uac1c\uc778
|
||||
cop.adbkUser = \uad6c\uc131\uc6d0
|
||||
cop.bbsNm = \uac8c\uc2dc\ud310\uba85
|
||||
cop.bbsIntrcn = \uac8c\uc2dc\ud310\uc18c\uac1c
|
||||
cop.bbsTyCode = \uac8c\uc2dc\ud310 \uc720\ud615
|
||||
cop.bbsAttrbCode = \uac8c\uc2dc\ud310 \uc18d\uc131
|
||||
cop.replyPosblAt = \ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80
|
||||
cop.fileAtchPosblAt = \ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80
|
||||
cop.posblAtchFileNumber = \ucca8\ubd80\uac00\ub2a5\ud30c\uc77c \uc22b\uc790
|
||||
cop.tmplatId = \ud15c\ud50c\ub9bf \uc815\ubcf4
|
||||
cop.guestList.subject = \ubc29\uba85\ub85d \uac8c\uc2dc\uae00\uc785\ub2c8\ub2e4.
|
||||
cop.nttSj = \uc81c\ubaa9
|
||||
cop.nttCn = \uae00\ub0b4\uc6a9
|
||||
cop.ntceBgnde = \uac8c\uc2dc\uc2dc\uc791\uc77c
|
||||
cop.ntceEndde = \uac8c\uc2dc\uc885\ub8cc\uc77c
|
||||
cop.ntcrNm = \uc791\uc131\uc790
|
||||
cop.password = \ud328\uc2a4\uc6cc\ub4dc
|
||||
cop.atchFile = \ud30c\uc77c\ucca8\ubd80
|
||||
cop.guestList = \ubc29\uba85\ub85d
|
||||
cop.guestListCn = \ubc29\uba85\ub85d \ub0b4\uc6a9
|
||||
cop.noticeTerm = \uac8c\uc2dc\uae30\uac04
|
||||
cop.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d
|
||||
cop.cmmntyNm = \ucee4\ubba4\ub2c8\ud2f0\uba85
|
||||
cop.cmmntyIntrcn = \ucee4\ubba4\ub2c8\ud2f0 \uc18c\uac1c
|
||||
cop.cmmntyMngr = \ucee4\ubba4\ub2c8\ud2f0 \uad00\ub9ac\uc790
|
||||
cop.clbOprtr = \ub3d9\ud638\ud68c \uc6b4\uc601\uc790
|
||||
cop.clbIntrcn = \ub3d9\ud638\ud68c \uc18c\uac1c
|
||||
cop.clbNm = \ub3d9\ud638\ud68c \uba85
|
||||
cop.tmplatNm = \ud15c\ud50c\ub9bf\uba85
|
||||
cop.tmplatSeCode = \ud15c\ud50c\ub9bf \uad6c\ubd84
|
||||
cop.tmplatCours = \ud15c\ud50c\ub9bf\uacbd\ub85c
|
||||
cop.useAt = \uc0ac\uc6a9\uc5ec\ubd80
|
||||
cop.ncrdNm = \uc774\ub984
|
||||
cop.cmpnyNm = \ud68c\uc0ac\uba85
|
||||
cop.deptNm = \ubd80\uc11c\uba85
|
||||
cop.ofcpsNm = \uc9c1\uc704
|
||||
cop.clsfNm = \uc9c1\uae09
|
||||
cop.emailAdres = \uc774\uba54\uc77c\uc8fc\uc18c
|
||||
cop.telNo = \uc804\ud654\ubc88\ud638
|
||||
cop.mbtlNum = \ud734\ub300\ud3f0\ubc88\ud638
|
||||
cop.adres = \uc8fc\uc18c
|
||||
cop.extrlUserAt = \uc678\ubd80\uc0ac\uc6a9\uc790\uc5ec\ubd80
|
||||
cop.publicAt = \uacf5\uac1c\uc5ec\ubd80
|
||||
cop.remark = \ube44\uace0
|
||||
cop.trgetNm = \ucee4\ubba4\ub2c8\ud2f0/\ub3d9\ud638\ud68c \uc815\ubcf4
|
||||
cop.preview = \ubbf8\ub9ac\ubcf4\uae30
|
||||
|
||||
cop.withdraw.msg=\ud0c8\ud1f4\ucc98\ub9ac \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.reregist.msg=\uc7ac\uac00\uc785 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.registmanager.msg=\uc6b4\uc601\uc9c4\uc73c\ub85c \ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.use.msg=\uc0ac\uc6a9 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.unuse.msg=\uc0ac\uc6a9\uc911\uc9c0 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.delete.confirm.msg=\uc0ac\uc6a9\uc911\uc9c0\ub97c \uc120\ud0dd\ud558\uc2e4 \uacbd\uc6b0 \ub2e4\uc2dc \uc0ac\uc6a9\uc73c\ub85c \ubcc0\uacbd\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.
|
||||
cop.ing.msg=\uc2b9\uc778\uc694\uccad \uc911\uc785\ub2c8\ub2e4.
|
||||
cop.request.msg=\uac00\uc785\uc2e0\uccad\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc694\uccad\ub418\uc5c8\uc2b5\ub2c8\ub2e4
|
||||
cop.password.msg=\ud328\uc2a4\uc6cc\ub4dc\ub97c \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
cop.password.not.same.msg=\ud328\uc2a4\uc6cc\ub4dc\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
cop.comment.wrterNm = \uc791\uc131\uc790
|
||||
cop.comment.commentCn = \ub0b4\uc6a9
|
||||
cop.comment.commentPassword = \ud328\uc2a4\uc6cc\ub4dc
|
||||
|
||||
cop.satisfaction.wrterNm = \uc791\uc131\uc790
|
||||
cop.satisfaction.stsfdgCn = \ub0b4\uc6a9
|
||||
cop.satisfaction.stsfdg = \ub9cc\uc871\ub3c4
|
||||
cop.satisfaction.stsfdgPassword = \ud328\uc2a4\uc6cc\ub4dc
|
||||
|
||||
cop.scrap.scrapNm = \uc2a4\ud06c\ub7a9\uba85
|
||||
|
||||
#UI USS Message#
|
||||
uss.ion.noi.ntfcSj=\uc81c\ubaa9
|
||||
uss.ion.noi.ntfcCn=\ub0b4\uc6a9
|
||||
uss.ion.noi.ntfcDate=\uc54c\ub9bc\uc77c\uc790
|
||||
uss.ion.noi.ntfcTime=\uc54c\ub9bc\uc2dc\uac04
|
||||
uss.ion.noi.ntfcHH=\uc54c\ub9bc\uc2dc\uac04
|
||||
uss.ion.noi.ntfcMM=\uc54c\ub9bc\ubd84
|
||||
uss.ion.noi.bhNtfcIntrvl=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9
|
||||
uss.ion.noi.bhNtfcIntrvl.msg=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.
|
||||
uss.ion.noi.alertNtfcTime=\uc54c\ub9bc\uc77c\uc790 \ubc0f \uc2dc\uac04\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#UI COP Message#
|
||||
cop.sms.trnsmitTelno=\ubc1c\uc2e0\uc804\ud654\ubc88\ud638
|
||||
cop.sms.trnsmitCn=\uc804\uc1a1\ub0b4\uc6a9
|
||||
cop.sms.recptnTelno=\uc218\uc2e0\uc804\ud654\ubc88\ud638
|
||||
cop.sms.send=\uc804\uc1a1
|
||||
cop.sms.addRecptn=\ucd94\uac00
|
||||
cop.sms.recptnTelno.msg=\uc218\uc2e0\uc804\ud654\ubc88\ud638 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.
|
||||
|
||||
#UI sym.log Message#
|
||||
sym.log.histSeCode = \uc774\ub825\uad6c\ubd84
|
||||
sym.log.sysNm = \uc2dc\uc2a4\ud15c\uba85
|
||||
sym.log.histCn = \uc774\ub825\ub0b4\uc6a9
|
||||
sym.log.atchFile = \ucca8\ubd80\ud30c\uc77c
|
||||
sym.log.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d
|
||||
sym.ems.receiver = \ubc1b\ub294\uc0ac\ub78c
|
||||
sym.ems.title = \uc81c\ubaa9
|
||||
sym.ems.content = \ubc1c\uc2e0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors#
|
||||
errors.prefix=<div class="error">
|
||||
errors.suffix=</div><br/>
|
||||
|
||||
errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4.
|
||||
errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4.
|
||||
errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.integer={0}\uc740(\ub294) \uc815\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.float={0}\uc740(\ub294) \uc2e4\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
|
||||
errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
|
||||
errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4.
|
||||
errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4.
|
||||
|
||||
errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4.
|
||||
errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4.
|
||||
|
||||
errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
error.security.runtime.error = error
|
||||
|
||||
#Xss Errors#
|
||||
errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#File Upload / Download
|
||||
errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
|
||||
errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
|
||||
success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#Vlidator Errors- wordDicaryVO#
|
||||
wordDicaryVO.wordNm=\uc6a9\uc5b4\uba85
|
||||
wordDicaryVO.engNm=\uc601\ubb38\uba85
|
||||
wordDicaryVO.wordDc=\uc6a9\uc5b4\uc124\uba85
|
||||
wordDicaryVO.synonm=\ub3d9\uc758\uc5b4
|
||||
|
||||
#Vlidator Errors- cnsltManageVO#
|
||||
cnsltManageVO.cnsltSj=\uc0c1\ub2f4\uc81c\ubaa9
|
||||
cnsltManageVO.cnsltCn=\uc0c1\ub2f4\ub0b4\uc6a9
|
||||
cnsltManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638
|
||||
cnsltManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638
|
||||
cnsltManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638
|
||||
cnsltManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638
|
||||
cnsltManageVO.wrterNm=\uc791\uc131\uc790\uba85
|
||||
cnsltManageVO.managtCn=\ub2f5\ubcc0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- siteManageVO#
|
||||
siteManageVO.siteNm=\uc0ac\uc774\ud2b8\uba85
|
||||
siteManageVO.siteUrl=\uc0ac\uc774\ud2b8 URL
|
||||
siteManageVO.siteDc=\uc0ac\uc774\ud2b8\uc124\uba85
|
||||
siteManageVO.siteThemaClCode=\uc0ac\uc774\ud2b8\uc8fc\uc81c\ubd84\ub958
|
||||
siteManageVO.actvtyAt=\ud65c\uc131\uc5ec\ubd80
|
||||
siteManageVO.useAt=\uc0ac\uc6a9\uc5ec\ubd80
|
||||
|
||||
#Vlidator Errors- recomendSiteManageVO#
|
||||
recomendSiteManageVO.recomendSiteNm=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uba85
|
||||
recomendSiteManageVO.recomendSiteUrl=\ucd94\ucc9c\uc0ac\uc774\ud2b8 URL
|
||||
recomendSiteManageVO.recomendSiteDc=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc124\uba85
|
||||
recomendSiteManageVO.recomendResnCn=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc2b9\uc778\uc0ac\uc720
|
||||
recomendSiteManageVO.confmDe=\uc2b9\uc778\uc77c\uc790
|
||||
|
||||
#Vlidator Errors- hpcmManageVO#
|
||||
hpcmManageVO.hpcmSeCode=\ub3c4\uc6c0\ub9d0\uad6c\ubd84
|
||||
hpcmManageVO.hpcmDf=\ub3c4\uc6c0\ub9d0\uc815\uc758
|
||||
hpcmManageVO.hpcmDc=\ub3c4\uc6c0\ub9d0\uc124\uba85
|
||||
|
||||
#Vlidator Errors- newsManageVO#
|
||||
newsManageVO.newsSj=\ub274\uc2a4\uc81c\ubaa9
|
||||
newsManageVO.newsCn=\ub274\uc2a4\ub0b4\uc6a9
|
||||
newsManageVO.ntceDe=\uac8c\uc2dc\uc77c\uc790
|
||||
|
||||
#Vlidator Errors- faqManageVO#
|
||||
faqManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9
|
||||
faqManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9
|
||||
faqManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- stplatManageVO#
|
||||
stplatManageVO.useStplatNm=\uc774\uc6a9\uc57d\uad00\uba85
|
||||
stplatManageVO.useStplatCn=\uc774\uc6a9\uc57d\uad00\ub0b4\uc6a9
|
||||
stplatManageVO.infoProvdAgreCn=\uc815\ubcf4\uc81c\uacf5\ub3d9\uc758\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- cpyrhtPrtcPolicyVO#
|
||||
cpyrhtPrtcPolicyVO.cpyrhtPrtcPolicyCn=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- qnaManageVO#
|
||||
qnaManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9
|
||||
qnaManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9
|
||||
qnaManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638
|
||||
qnaManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638
|
||||
qnaManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638
|
||||
qnaManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638
|
||||
qnaManageVO.wrterNm=\uc791\uc131\uc790\uba85
|
||||
qnaManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- ReprtStatsVO#
|
||||
sts.reprtId = \ubcf4\uace0\uc11cID
|
||||
sts.title = \ubcf4\uace0\uc11c\uba85
|
||||
sts.category = \ubcf4\uace0\uc11c\uc720\ud615
|
||||
sts.status = \uc9c4\ud589\uc0c1\ud0dc
|
||||
sts.regDate = \ub4f1\ub85d\uc77c\uc2dc
|
||||
|
||||
#Rest day messages#
|
||||
sym.cal.restDay = \ud734\uc77c\uc77c\uc790
|
||||
sym.cal.restName = \ud734\uc77c\uba85
|
||||
sym.cal.restDetail = \ud734\uc77c\uc124\uba85
|
||||
sym.cal.restCategory = \ud734\uc77c\uad6c\ubd84
|
||||
|
||||
image.errorBg = \uc624\ub958\uc774\ubbf8\uc9c0
|
||||
|
||||
|
||||
#Custom message#
|
||||
custom.fail.access=\uc815\uc0c1\uc801\uc778 \uc811\uadfc\uc774 \uc544\ub2d9\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ud6c4 \uc774\uc6a9\ud558\uc138\uc694.
|
||||
custom.fail.accessDenied=\uc694\uccad\uc5d0 \ub300\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
custom.isNotExist.msg=\ucc98\ub9ac\uc5d0 \ud544\uc694\ud55c \uc790\ub8cc\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
@ -0,0 +1,287 @@
|
||||
valueRequired={0} is required.
|
||||
|
||||
pageNotFound=The requested page is not found.
|
||||
sessionExpired=The session is expired due to excessive idle time.
|
||||
invalidSession=You attempted to access the system via an invalid session.
|
||||
accessDenied=You do not have the permission for the operation.<br />Please contact the administrator.
|
||||
serverError=An error has occurred while performing the requested operation.<br />Please contact the administrator.
|
||||
|
||||
duplicate.object=\uc774\ubbf8 \ub4f1\ub85d\ub41c {0}\uc785\ub2c8\ub2e4.
|
||||
|
||||
fail.common.msg=error ocurred!
|
||||
fail.common.sql=sql error ocurred! error code: {0}, error msg: {1}
|
||||
info.nodata.msg=no data found.
|
||||
|
||||
#UI Common resource#
|
||||
table.num=num.
|
||||
table.regdate=reg.date
|
||||
table.reger=registrant
|
||||
table.select=select
|
||||
title.html=egovframe common component
|
||||
title.detail=Detail Inquiry
|
||||
title.inquire=Inquire
|
||||
title.update=Modify
|
||||
title.create=Create
|
||||
title.delete=Delete
|
||||
title.save=Save
|
||||
title.list=List
|
||||
title.searchCondition=search condition
|
||||
title.search=keyword
|
||||
title.reply=reply
|
||||
title.scrap=scrap
|
||||
title.comment=comment
|
||||
title.attachedFileSelect=attached file
|
||||
title.attachedFileDelete=attached file delete
|
||||
title.link=link
|
||||
title.management=Management
|
||||
title.all=All
|
||||
|
||||
input.select=Select
|
||||
input.cSelect=Select
|
||||
input.input=input
|
||||
input.button=button
|
||||
input.selectAll.title=Checkbox select all
|
||||
input.yes=Yes
|
||||
input.no=No
|
||||
|
||||
select.searchCondition=select condition select
|
||||
|
||||
button.select=select
|
||||
button.search=Search
|
||||
button.use=use
|
||||
button.notUsed=Not used
|
||||
button.inquire=inquire
|
||||
button.update=update
|
||||
button.create=create
|
||||
button.delete=delete
|
||||
button.deleteDatabase=Wiping
|
||||
button.close=close
|
||||
button.save=save
|
||||
button.list=list
|
||||
button.reset=reset
|
||||
button.passwordUpdate=password update
|
||||
button.subscribe=subscribe
|
||||
button.realname=realname confirm
|
||||
button.moveToGpin=move to gpin confirm
|
||||
button.moveToIhidnum=move to ihidnum confirm
|
||||
button.agree=agree
|
||||
button.disagree=disagree
|
||||
button.possible=possible
|
||||
button.impossible=impossible
|
||||
button.qnaregist=Q&A create
|
||||
button.cnsltregist=Counsel create
|
||||
button.preview=preview
|
||||
button.next=nexut
|
||||
button.add=add it now
|
||||
button.confirm=confirm
|
||||
button.back =back
|
||||
button.yes =yes
|
||||
button.no =no
|
||||
button.home =home
|
||||
button.user =user support
|
||||
button.cop =cooperation
|
||||
button.wrkstart = work start
|
||||
button.wrkend = work end
|
||||
button.reply = reply
|
||||
button.scrap = scrap
|
||||
button.comment = comment
|
||||
button.excel = excel
|
||||
button.init=init
|
||||
button.acknowledgment=acknowledgment
|
||||
button.cancelAcknowledgment=cancel acknowledgment
|
||||
button.bulkUpload=bulk upload
|
||||
button.log = log
|
||||
button.set = set
|
||||
button.move = move
|
||||
|
||||
|
||||
#UI Common Message#
|
||||
common.noScriptTitle.msg=I can't use all functions in browser JavaScript is not supported.
|
||||
common.searchCondition.msg=This layout is a lower information searches made up of information.
|
||||
|
||||
common.summary.list={0} A list of the details of the output.
|
||||
common.summary.regist={0} Registered by typing the possible contents of registers by clicking the button.
|
||||
common.summary.update={0} Registered by typing the possible content of modification by clicking the button.
|
||||
common.summary.inqire={0} Full inquiry details about the details of the output.
|
||||
|
||||
common.save.msg=confirm save?
|
||||
common.regist.msg=confirm regist?
|
||||
common.delete.msg=confirm delete?
|
||||
common.update.msg=confirm update?
|
||||
common.nodata.msg=There is no data. please choose another seach keyword
|
||||
common.required.msg=is required field
|
||||
common.acknowledgement.msg=confirm acknowledgement?
|
||||
common.acknowledgementcancel.msg=confirm acknowledgement cancel?
|
||||
common.nocomment.msg=There is no comment.
|
||||
common.noguest.msg=There is no guest notice.
|
||||
|
||||
success.request.msg=you're request successfully done
|
||||
success.common.select=successfully selected
|
||||
success.common.insert=successfully inserted
|
||||
success.common.update=successfully updated
|
||||
success.common.delete=successfully deleted
|
||||
|
||||
common.imposbl.fileupload = cannot upload files
|
||||
common.isConfmDe.msg=Please check the approval date box
|
||||
common.isExist.msg = already exist
|
||||
|
||||
fail.common.insert = fail to insert.
|
||||
fail.common.update = fail to update
|
||||
fail.common.delete = fail to delete
|
||||
fail.common.delete.upperMenuExist = fail to delete[upperMenuId foreign key error]
|
||||
fail.common.select = fail to select
|
||||
fail.common.login = login information is not correct
|
||||
fail.common.loginIncorrect = login in more than {0} account will be locked!
|
||||
fail.common.login.password = password information is not correct(password digit should be 8 to 20)
|
||||
fail.common.idsearch = can not find id
|
||||
fail.common.pwsearch = can not find password
|
||||
fail.request.msg = Failed to handle the request
|
||||
fail.common.login.ip = Login is refused because it is not a registered IP.
|
||||
|
||||
|
||||
#UI User Message#
|
||||
fail.user.passwordUpdate1=current password is not correct
|
||||
fail.user.passwordUpdate2=password confirm is not correct
|
||||
info.user.rlnmCnfirm=realname confirm ready
|
||||
success.user.rlnmCnfirm=it is realname
|
||||
fail.user.rlnmCnfirm=it is not realname
|
||||
fail.user.connectFail=connection fail
|
||||
|
||||
#UI Cop Message#
|
||||
cop.extrlUser = External User
|
||||
cop.intrlUser = Internal User
|
||||
cop.private = private
|
||||
cop.public = public
|
||||
|
||||
cop.bbsNm = BBS Name
|
||||
cop.bbsIntrcn = BBS Introduction
|
||||
cop.bbsTyCode = BBS Type
|
||||
cop.bbsAttrbCode = BBS Attribute
|
||||
cop.replyPosblAt = Reply Possible Alternative
|
||||
cop.fileAtchPosblAt = File Attach Possible Alternative
|
||||
cop.posblAtchFileNumber = Possible Attach File Number
|
||||
cop.tmplatId = Template Information
|
||||
cop.guestList.subject = This article registered by Guest List
|
||||
cop.nttSj = Notice Subject
|
||||
cop.nttCn = Notice Contents
|
||||
cop.ntceBgnde = Notice Start Date
|
||||
cop.ntceEndde = Notice End Date
|
||||
cop.ntcrNm = Noticer Name
|
||||
cop.password = PassWord
|
||||
cop.atchFile = Attach Files
|
||||
cop.guestList = Guest List
|
||||
cop.guestListCn = Guest List Contents
|
||||
cop.noticeTerm = Notice term
|
||||
cop.atchFileList = Attached File List
|
||||
cop.cmmntyNm = Community Name
|
||||
cop.cmmntyIntrcn = Community Introduction
|
||||
cop.cmmntyMngr = Community Manager
|
||||
cop.clbOprtr = Club Operator
|
||||
cop.clbIntrcn = Club Introduction
|
||||
cop.clbNm = Club Name
|
||||
cop.tmplatNm = Template Name
|
||||
cop.tmplatSeCode = Template Se Code
|
||||
cop.tmplatCours = Template Cours
|
||||
cop.useAt = Use Alternative
|
||||
cop.ncrdNm = NameCard user name
|
||||
cop.cmpnyNm = Company name
|
||||
cop.deptNm = Department name
|
||||
cop.ofcpsNm = OFCPS name
|
||||
cop.clsfNm = Class Name
|
||||
cop.emailAdres = E-mail
|
||||
cop.telNo = Tel No.
|
||||
cop.mbtlNum = Mobile
|
||||
cop.adres = Address
|
||||
cop.extrlUserAt = External User alternative
|
||||
cop.publicAt = Public open alternative
|
||||
cop.remark = Remark
|
||||
cop.trgetNm = Company/Club Information
|
||||
cop.preview = preview
|
||||
|
||||
cop.withdraw.msg=confirm withdrawal memebership?
|
||||
cop.reregist.msg=confirm re-registration?
|
||||
cop.registmanager.msg=confirm registration of manager?
|
||||
cop.use.msg=confirm use?
|
||||
cop.unuse.msg=confirm stop using?
|
||||
cop.delete.confirm.msg=If you choose to disable the re-use change is impossible.
|
||||
cop.ing.msg=Approval is being requested.
|
||||
cop.request.msg=Signup is normally requested.
|
||||
cop.password.msg=Please enter your password.
|
||||
cop.password.not.same.msg=Password do not match.
|
||||
|
||||
cop.comment.wrterNm = Writer Name
|
||||
cop.comment.commentCn = Comment
|
||||
cop.comment.commentPassword = Password
|
||||
|
||||
cop.satisfaction.wrterNm = Writer Name
|
||||
cop.satisfaction.stsfdgCn = Satisfaction
|
||||
cop.satisfaction.stsfdg = Satisfaction Degree
|
||||
cop.satisfaction.stsfdgPassword = Password
|
||||
|
||||
cop.scrap.scrapNm = Scrap Name
|
||||
|
||||
#UI USS Message#
|
||||
uss.ion.noi.ntfcSj=Subject
|
||||
uss.ion.noi.ntfcCn=Contents
|
||||
uss.ion.noi.ntfcDate=Notification Date
|
||||
uss.ion.noi.ntfcTime=Notification Time
|
||||
uss.ion.noi.ntfcHH=Notification Hour
|
||||
uss.ion.noi.ntfcMM=Notification Minute
|
||||
uss.ion.noi.bhNtfcIntrvl=Beforehand Interval
|
||||
uss.ion.noi.bhNtfcIntrvl.msg=Beforehand Interval is required.
|
||||
uss.ion.noi.alertNtfcTime=Date and time of notification is not valid.
|
||||
|
||||
#UI COP Message#
|
||||
cop.sms.trnsmitTelno=Sender
|
||||
cop.sms.trnsmitCn=Contents
|
||||
cop.sms.recptnTelno=Receiver(s)
|
||||
cop.sms.send=Send
|
||||
cop.sms.addRecptn=Add
|
||||
cop.sms.recptnTelno.msg=The phone number of receiver is required.
|
||||
|
||||
#UI sym.log Message#
|
||||
sym.log.histSeCode = History Code
|
||||
sym.log.sysNm = System Name
|
||||
sym.log.histCn = History Contents
|
||||
sym.log.atchFile = Attached File
|
||||
sym.log.atchFileList = Attached File List
|
||||
sym.ems.receiver = Receiver
|
||||
sym.ems.title = Title
|
||||
sym.ems.content = Content
|
||||
|
||||
#Vlidator Errors#
|
||||
errors.required={0} is required.
|
||||
errors.minlength={0} can not be less than {1} characters.
|
||||
errors.maxlength={0} can not be greater than {1} characters.
|
||||
errors.invalid={0} is invalid.
|
||||
|
||||
errors.byte={0} must be a byte.
|
||||
errors.short={0} must be a short.
|
||||
errors.integer={0} must be an integer.
|
||||
errors.long={0} must be a long.
|
||||
errors.float={0} must be a float.
|
||||
errors.double={0} must be a double.
|
||||
|
||||
errors.date={0} is not a date.
|
||||
errors.range={0} is not in the range {1} through {2}.
|
||||
errors.creditcard={0} is an invalid credit card number.
|
||||
errors.email={0} is an invalid e-mail address.
|
||||
|
||||
#Vlidator Errors- ReprtStatsVO#
|
||||
sts.reprtId = Report ID
|
||||
sts.title = Report Title
|
||||
sts.category = Report Category
|
||||
sts.status = Report Status
|
||||
sts.regDate = Registration Date
|
||||
|
||||
#Rest day messages#
|
||||
sym.cal.restDay = Holiday Date
|
||||
sym.cal.restName = Holiday Name
|
||||
sym.cal.restDetail = Holiday Detail
|
||||
sym.cal.restCategory = Holiday Category
|
||||
|
||||
|
||||
#Custom message#
|
||||
custom.fail.access=It's not a normal approach. Log in and use it.
|
||||
custom.fail.accessDenied=You do not have permission to request.
|
||||
custom.isNotExist.msg=Data required for processing does not exist.
|
@ -0,0 +1,385 @@
|
||||
valueRequired={0}\uac00 \uc124\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
pageNotFound=\uc694\uccad\ud558\uc2e0 \ud398\uc774\uc9c0\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
|
||||
sessionExpired=\ub300\uae30 \uc2dc\uac04\uc774 \uc624\ub798\ub418\uc5b4 \uc138\uc158\uc774 \ub9cc\ub8cc\ub410\uc2b5\ub2c8\ub2e4.
|
||||
invalidSession=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc138\uc158\uc73c\ub85c \uc811\uadfc\ud588\uc2b5\ub2c8\ub2e4.
|
||||
accessDenied=\uc694\uccad\ud558\uc2e0 \uc791\uc5c5\uc5d0 \ub300\ud55c \uad8c\ud55c\uc774 \uc5c6\uc5b4\uc11c \uc811\uadfc\uc774 \uac70\ubd80\ub410\uc2b5\ub2c8\ub2e4.<br />\uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758 \ubc14\ub78d\ub2c8\ub2e4.
|
||||
serverError=\uc694\uccad\ud558\uc2e0 \uc791\uc5c5\uc744 \uc218\ud589 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.<br />\uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758 \ubc14\ub78d\ub2c8\ub2e4.
|
||||
|
||||
duplicate.object=\uc774\ubbf8 \ub4f1\ub85d\ub41c {0}\uc785\ub2c8\ub2e4.
|
||||
|
||||
fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
|
||||
fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1}
|
||||
info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#UI Common resource#
|
||||
table.num=\ubc88\ud638
|
||||
table.regdate=\ub4f1\ub85d\uc77c
|
||||
table.reger=\ub4f1\ub85d\uc790
|
||||
table.select=\uc120\ud0dd
|
||||
title.html=egovframe common component
|
||||
title.detail=\uc0c1\uc138\uc870\ud68c
|
||||
title.inquire=\uc870\ud68c
|
||||
title.update=\uc218\uc815
|
||||
title.create=\ub4f1\ub85d
|
||||
title.delete=\uc0ad\uc81c
|
||||
title.save=\uc800\uc7a5
|
||||
title.list=\ubaa9\ub85d
|
||||
title.searchCondition=\uac80\uc0c9\uc870\uac74
|
||||
title.search=\uac80\uc0c9\uc5b4
|
||||
title.reply=\ub2f5\uae00
|
||||
title.scrap=\uc2a4\ud06c\ub7a9
|
||||
title.comment=\ub313\uae00
|
||||
title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd
|
||||
title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c
|
||||
title.link=\ub9c1\ud06c
|
||||
title.management=\uad00\ub9ac
|
||||
title.all=\uc804\uccb4
|
||||
|
||||
input.select=\uc120\ud0dd\ud558\uc138\uc694
|
||||
input.cSelect=\uc120\ud0dd
|
||||
input.input=\uc785\ub825
|
||||
input.button=\ubc84\ud2bc
|
||||
input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4
|
||||
input.yes=\uc608
|
||||
input.no=\uc544\ub2c8\uc624
|
||||
|
||||
select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd
|
||||
|
||||
button.select=\uc120\ud0dd
|
||||
button.search=\uac80\uc0c9
|
||||
button.use=\uc0ac\uc6a9
|
||||
button.notUsed=\uc0ac\uc6a9\uc911\uc9c0
|
||||
button.inquire=\uc870\ud68c
|
||||
button.update=\uc218\uc815
|
||||
button.create=\ub4f1\ub85d
|
||||
button.delete=\uc0ad\uc81c
|
||||
button.deleteDatabase=\uc644\uc804\uc0ad\uc81c
|
||||
button.close=\ub2eb\uae30
|
||||
button.save=\uc800\uc7a5
|
||||
button.list=\ubaa9\ub85d
|
||||
button.reset=\ucde8\uc18c
|
||||
button.passwordUpdate=\uc554\ud638\ubcc0\uacbd
|
||||
button.subscribe=\uac00\uc785\uc2e0\uccad
|
||||
button.realname=\uc2e4\uba85\ud655\uc778
|
||||
button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
|
||||
button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
|
||||
button.agree=\ub3d9\uc758
|
||||
button.disagree=\ube44\ub3d9\uc758
|
||||
button.possible=\uac00\ub2a5
|
||||
button.impossible=\ubd88\uac00\ub2a5
|
||||
button.qnaregist=Q&A\ub4f1\ub85d
|
||||
button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d
|
||||
button.preview=\ubbf8\ub9ac\ubcf4\uae30
|
||||
button.next=\ub2e4\uc74c
|
||||
button.add=\ubc14\ub85c\ucd94\uac00
|
||||
button.confirm=\ud655\uc778
|
||||
button.back = \ub4a4\ub85c
|
||||
button.yes = \uc608
|
||||
button.no = \uc544\ub2c8\uc624
|
||||
button.home = \ud648
|
||||
button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0
|
||||
button.cop = \ud611\uc5c5
|
||||
button.wrkstart = \ucd9c\uadfc
|
||||
button.wrkend = \ud1f4\uadfc
|
||||
button.reply = \ub2f5\uae00
|
||||
button.scrap = \uc2a4\ud06c\ub7a9
|
||||
button.comment = \ub313\uae00
|
||||
button.excel = \uc5d1\uc140
|
||||
button.init=\ucd08\uae30\ud654
|
||||
button.acknowledgment=\uc2b9\uc778
|
||||
button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c
|
||||
button.bulkUpload=\uc77c\uad04\ub4f1\ub85d
|
||||
button.log = \ub85c\uadf8
|
||||
button.set = \uc124\uc815
|
||||
button.move = \uc774\ub3d9
|
||||
|
||||
|
||||
#UI Common Message#
|
||||
common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
|
||||
common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4.
|
||||
common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4.
|
||||
common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
|
||||
|
||||
common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694
|
||||
common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4.
|
||||
common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4.
|
||||
common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4.
|
||||
|
||||
fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4!
|
||||
fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558)
|
||||
fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
|
||||
fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#UI User Message#
|
||||
fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
|
||||
success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
|
||||
fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328)
|
||||
info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
|
||||
success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
|
||||
fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
|
||||
#UI Cop Message#
|
||||
cop.extrlUser = \uc678\ubd80\uc0ac\uc6a9\uc790
|
||||
cop.intrlUser = \ub0b4\ubd80\uc0ac\uc6a9\uc790
|
||||
cop.private = \ube44\uacf5\uac1c
|
||||
cop.public = \uacf5\uac1c
|
||||
|
||||
cop.adbkNm = \uc8fc\uc18c\ub85d\uba85
|
||||
cop.othbcScope = \uacf5\uac1c\ubc94\uc704
|
||||
cop.company = \ud68c\uc0ac
|
||||
cop.part = \ubd80\uc11c
|
||||
cop.man = \uac1c\uc778
|
||||
cop.adbkUser = \uad6c\uc131\uc6d0
|
||||
cop.bbsNm = \uac8c\uc2dc\ud310\uba85
|
||||
cop.bbsIntrcn = \uac8c\uc2dc\ud310\uc18c\uac1c
|
||||
cop.bbsTyCode = \uac8c\uc2dc\ud310 \uc720\ud615
|
||||
cop.bbsAttrbCode = \uac8c\uc2dc\ud310 \uc18d\uc131
|
||||
cop.replyPosblAt = \ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80
|
||||
cop.fileAtchPosblAt = \ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80
|
||||
cop.posblAtchFileNumber = \ucca8\ubd80\uac00\ub2a5\ud30c\uc77c \uc22b\uc790
|
||||
cop.tmplatId = \ud15c\ud50c\ub9bf \uc815\ubcf4
|
||||
cop.guestList.subject = \ubc29\uba85\ub85d \uac8c\uc2dc\uae00\uc785\ub2c8\ub2e4.
|
||||
cop.nttSj = \uc81c\ubaa9
|
||||
cop.nttCn = \uae00\ub0b4\uc6a9
|
||||
cop.ntceBgnde = \uac8c\uc2dc\uc2dc\uc791\uc77c
|
||||
cop.ntceEndde = \uac8c\uc2dc\uc885\ub8cc\uc77c
|
||||
cop.ntcrNm = \uc791\uc131\uc790
|
||||
cop.password = \ud328\uc2a4\uc6cc\ub4dc
|
||||
cop.atchFile = \ud30c\uc77c\ucca8\ubd80
|
||||
cop.guestList = \ubc29\uba85\ub85d
|
||||
cop.guestListCn = \ubc29\uba85\ub85d \ub0b4\uc6a9
|
||||
cop.noticeTerm = \uac8c\uc2dc\uae30\uac04
|
||||
cop.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d
|
||||
cop.cmmntyNm = \ucee4\ubba4\ub2c8\ud2f0\uba85
|
||||
cop.cmmntyIntrcn = \ucee4\ubba4\ub2c8\ud2f0 \uc18c\uac1c
|
||||
cop.cmmntyMngr = \ucee4\ubba4\ub2c8\ud2f0 \uad00\ub9ac\uc790
|
||||
cop.clbOprtr = \ub3d9\ud638\ud68c \uc6b4\uc601\uc790
|
||||
cop.clbIntrcn = \ub3d9\ud638\ud68c \uc18c\uac1c
|
||||
cop.clbNm = \ub3d9\ud638\ud68c \uba85
|
||||
cop.tmplatNm = \ud15c\ud50c\ub9bf\uba85
|
||||
cop.tmplatSeCode = \ud15c\ud50c\ub9bf \uad6c\ubd84
|
||||
cop.tmplatCours = \ud15c\ud50c\ub9bf\uacbd\ub85c
|
||||
cop.useAt = \uc0ac\uc6a9\uc5ec\ubd80
|
||||
cop.ncrdNm = \uc774\ub984
|
||||
cop.cmpnyNm = \ud68c\uc0ac\uba85
|
||||
cop.deptNm = \ubd80\uc11c\uba85
|
||||
cop.ofcpsNm = \uc9c1\uc704
|
||||
cop.clsfNm = \uc9c1\uae09
|
||||
cop.emailAdres = \uc774\uba54\uc77c\uc8fc\uc18c
|
||||
cop.telNo = \uc804\ud654\ubc88\ud638
|
||||
cop.mbtlNum = \ud734\ub300\ud3f0\ubc88\ud638
|
||||
cop.adres = \uc8fc\uc18c
|
||||
cop.extrlUserAt = \uc678\ubd80\uc0ac\uc6a9\uc790\uc5ec\ubd80
|
||||
cop.publicAt = \uacf5\uac1c\uc5ec\ubd80
|
||||
cop.remark = \ube44\uace0
|
||||
cop.trgetNm = \ucee4\ubba4\ub2c8\ud2f0/\ub3d9\ud638\ud68c \uc815\ubcf4
|
||||
cop.preview = \ubbf8\ub9ac\ubcf4\uae30
|
||||
|
||||
cop.withdraw.msg=\ud0c8\ud1f4\ucc98\ub9ac \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.reregist.msg=\uc7ac\uac00\uc785 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.registmanager.msg=\uc6b4\uc601\uc9c4\uc73c\ub85c \ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.use.msg=\uc0ac\uc6a9 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.unuse.msg=\uc0ac\uc6a9\uc911\uc9c0 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
cop.delete.confirm.msg=\uc0ac\uc6a9\uc911\uc9c0\ub97c \uc120\ud0dd\ud558\uc2e4 \uacbd\uc6b0 \ub2e4\uc2dc \uc0ac\uc6a9\uc73c\ub85c \ubcc0\uacbd\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.
|
||||
cop.ing.msg=\uc2b9\uc778\uc694\uccad \uc911\uc785\ub2c8\ub2e4.
|
||||
cop.request.msg=\uac00\uc785\uc2e0\uccad\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc694\uccad\ub418\uc5c8\uc2b5\ub2c8\ub2e4
|
||||
cop.password.msg=\ud328\uc2a4\uc6cc\ub4dc\ub97c \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
cop.password.not.same.msg=\ud328\uc2a4\uc6cc\ub4dc\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
cop.comment.wrterNm = \uc791\uc131\uc790
|
||||
cop.comment.commentCn = \ub0b4\uc6a9
|
||||
cop.comment.commentPassword = \ud328\uc2a4\uc6cc\ub4dc
|
||||
|
||||
cop.satisfaction.wrterNm = \uc791\uc131\uc790
|
||||
cop.satisfaction.stsfdgCn = \ub0b4\uc6a9
|
||||
cop.satisfaction.stsfdg = \ub9cc\uc871\ub3c4
|
||||
cop.satisfaction.stsfdgPassword = \ud328\uc2a4\uc6cc\ub4dc
|
||||
|
||||
cop.scrap.scrapNm = \uc2a4\ud06c\ub7a9\uba85
|
||||
|
||||
#UI USS Message#
|
||||
uss.ion.noi.ntfcSj=\uc81c\ubaa9
|
||||
uss.ion.noi.ntfcCn=\ub0b4\uc6a9
|
||||
uss.ion.noi.ntfcDate=\uc54c\ub9bc\uc77c\uc790
|
||||
uss.ion.noi.ntfcTime=\uc54c\ub9bc\uc2dc\uac04
|
||||
uss.ion.noi.ntfcHH=\uc54c\ub9bc\uc2dc\uac04
|
||||
uss.ion.noi.ntfcMM=\uc54c\ub9bc\ubd84
|
||||
uss.ion.noi.bhNtfcIntrvl=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9
|
||||
uss.ion.noi.bhNtfcIntrvl.msg=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.
|
||||
uss.ion.noi.alertNtfcTime=\uc54c\ub9bc\uc77c\uc790 \ubc0f \uc2dc\uac04\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#UI COP Message#
|
||||
cop.sms.trnsmitTelno=\ubc1c\uc2e0\uc804\ud654\ubc88\ud638
|
||||
cop.sms.trnsmitCn=\uc804\uc1a1\ub0b4\uc6a9
|
||||
cop.sms.recptnTelno=\uc218\uc2e0\uc804\ud654\ubc88\ud638
|
||||
cop.sms.send=\uc804\uc1a1
|
||||
cop.sms.addRecptn=\ucd94\uac00
|
||||
cop.sms.recptnTelno.msg=\uc218\uc2e0\uc804\ud654\ubc88\ud638 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.
|
||||
|
||||
#UI sym.log Message#
|
||||
sym.log.histSeCode = \uc774\ub825\uad6c\ubd84
|
||||
sym.log.sysNm = \uc2dc\uc2a4\ud15c\uba85
|
||||
sym.log.histCn = \uc774\ub825\ub0b4\uc6a9
|
||||
sym.log.atchFile = \ucca8\ubd80\ud30c\uc77c
|
||||
sym.log.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d
|
||||
sym.ems.receiver = \ubc1b\ub294\uc0ac\ub78c
|
||||
sym.ems.title = \uc81c\ubaa9
|
||||
sym.ems.content = \ubc1c\uc2e0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors#
|
||||
errors.prefix=<div class="error">
|
||||
errors.suffix=</div><br/>
|
||||
|
||||
errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4.
|
||||
errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4.
|
||||
errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.integer={0}\uc740(\ub294) \uc815\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.float={0}\uc740(\ub294) \uc2e4\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
|
||||
errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
|
||||
errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4.
|
||||
errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4.
|
||||
|
||||
errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4.
|
||||
errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4.
|
||||
|
||||
errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
|
||||
errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
||||
errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
error.security.runtime.error = error
|
||||
|
||||
#Xss Errors#
|
||||
errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#File Upload / Download
|
||||
errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
|
||||
errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
|
||||
success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
||||
|
||||
#Vlidator Errors- wordDicaryVO#
|
||||
wordDicaryVO.wordNm=\uc6a9\uc5b4\uba85
|
||||
wordDicaryVO.engNm=\uc601\ubb38\uba85
|
||||
wordDicaryVO.wordDc=\uc6a9\uc5b4\uc124\uba85
|
||||
wordDicaryVO.synonm=\ub3d9\uc758\uc5b4
|
||||
|
||||
#Vlidator Errors- cnsltManageVO#
|
||||
cnsltManageVO.cnsltSj=\uc0c1\ub2f4\uc81c\ubaa9
|
||||
cnsltManageVO.cnsltCn=\uc0c1\ub2f4\ub0b4\uc6a9
|
||||
cnsltManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638
|
||||
cnsltManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638
|
||||
cnsltManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638
|
||||
cnsltManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638
|
||||
cnsltManageVO.wrterNm=\uc791\uc131\uc790\uba85
|
||||
cnsltManageVO.managtCn=\ub2f5\ubcc0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- siteManageVO#
|
||||
siteManageVO.siteNm=\uc0ac\uc774\ud2b8\uba85
|
||||
siteManageVO.siteUrl=\uc0ac\uc774\ud2b8 URL
|
||||
siteManageVO.siteDc=\uc0ac\uc774\ud2b8\uc124\uba85
|
||||
siteManageVO.siteThemaClCode=\uc0ac\uc774\ud2b8\uc8fc\uc81c\ubd84\ub958
|
||||
siteManageVO.actvtyAt=\ud65c\uc131\uc5ec\ubd80
|
||||
siteManageVO.useAt=\uc0ac\uc6a9\uc5ec\ubd80
|
||||
|
||||
#Vlidator Errors- recomendSiteManageVO#
|
||||
recomendSiteManageVO.recomendSiteNm=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uba85
|
||||
recomendSiteManageVO.recomendSiteUrl=\ucd94\ucc9c\uc0ac\uc774\ud2b8 URL
|
||||
recomendSiteManageVO.recomendSiteDc=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc124\uba85
|
||||
recomendSiteManageVO.recomendResnCn=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc2b9\uc778\uc0ac\uc720
|
||||
recomendSiteManageVO.confmDe=\uc2b9\uc778\uc77c\uc790
|
||||
|
||||
#Vlidator Errors- hpcmManageVO#
|
||||
hpcmManageVO.hpcmSeCode=\ub3c4\uc6c0\ub9d0\uad6c\ubd84
|
||||
hpcmManageVO.hpcmDf=\ub3c4\uc6c0\ub9d0\uc815\uc758
|
||||
hpcmManageVO.hpcmDc=\ub3c4\uc6c0\ub9d0\uc124\uba85
|
||||
|
||||
#Vlidator Errors- newsManageVO#
|
||||
newsManageVO.newsSj=\ub274\uc2a4\uc81c\ubaa9
|
||||
newsManageVO.newsCn=\ub274\uc2a4\ub0b4\uc6a9
|
||||
newsManageVO.ntceDe=\uac8c\uc2dc\uc77c\uc790
|
||||
|
||||
#Vlidator Errors- faqManageVO#
|
||||
faqManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9
|
||||
faqManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9
|
||||
faqManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- stplatManageVO#
|
||||
stplatManageVO.useStplatNm=\uc774\uc6a9\uc57d\uad00\uba85
|
||||
stplatManageVO.useStplatCn=\uc774\uc6a9\uc57d\uad00\ub0b4\uc6a9
|
||||
stplatManageVO.infoProvdAgreCn=\uc815\ubcf4\uc81c\uacf5\ub3d9\uc758\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- cpyrhtPrtcPolicyVO#
|
||||
cpyrhtPrtcPolicyVO.cpyrhtPrtcPolicyCn=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- qnaManageVO#
|
||||
qnaManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9
|
||||
qnaManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9
|
||||
qnaManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638
|
||||
qnaManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638
|
||||
qnaManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638
|
||||
qnaManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638
|
||||
qnaManageVO.wrterNm=\uc791\uc131\uc790\uba85
|
||||
qnaManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9
|
||||
|
||||
#Vlidator Errors- ReprtStatsVO#
|
||||
sts.reprtId = \ubcf4\uace0\uc11cID
|
||||
sts.title = \ubcf4\uace0\uc11c\uba85
|
||||
sts.category = \ubcf4\uace0\uc11c\uc720\ud615
|
||||
sts.status = \uc9c4\ud589\uc0c1\ud0dc
|
||||
sts.regDate = \ub4f1\ub85d\uc77c\uc2dc
|
||||
|
||||
#Rest day messages#
|
||||
sym.cal.restDay = \ud734\uc77c\uc77c\uc790
|
||||
sym.cal.restName = \ud734\uc77c\uba85
|
||||
sym.cal.restDetail = \ud734\uc77c\uc124\uba85
|
||||
sym.cal.restCategory = \ud734\uc77c\uad6c\ubd84
|
||||
|
||||
image.errorBg = \uc624\ub958\uc774\ubbf8\uc9c0
|
||||
|
||||
|
||||
#Custom message#
|
||||
custom.fail.access=\uc815\uc0c1\uc801\uc778 \uc811\uadfc\uc774 \uc544\ub2d9\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ud6c4 \uc774\uc6a9\ud558\uc138\uc694.
|
||||
custom.fail.accessDenied=\uc694\uccad\uc5d0 \ub300\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
custom.isNotExist.msg=\ucc98\ub9ac\uc5d0 \ud544\uc694\ud55c \uc790\ub8cc\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
|
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.base.security.access.dao.ActionGroupMapper">
|
||||
|
||||
<resultMap id="groupRow" type="cokr.xit.base.security.access.ActionGroup">
|
||||
<result property="id" column="GRP_ID"/>
|
||||
<result property="name" column="GRP_NM"/>
|
||||
<result property="description" column="DSCRP"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectGroups"><include refid="utility.paging-prefix" />
|
||||
SELECT A.*
|
||||
FROM TB_ACTION_GRP A
|
||||
<where>
|
||||
<if test="groupIDs != null">AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
<if test="by != null and term != null">AND ${by} LIKE CONCAT('%', #{term}, '%')</if>
|
||||
</where>
|
||||
<include refid="utility.paging-suffix" /></sql>
|
||||
|
||||
<select id="getGroupList" parameterType="map" resultType="dataobject">/* 기능그룹 목록 조회(actionGroupMapper.getGroupList) */
|
||||
<include refid="selectGroups" /></select>
|
||||
|
||||
<select id="getGroups" parameterType="map" resultMap="groupRow">/* 기능그룹 가져오기(actionGroupMapper.getGroups) */
|
||||
<include refid="selectGroups" /></select>
|
||||
|
||||
<insert id="insertGroup" parameterType="cokr.xit.base.security.access.ActionGroup">/* 기능그룹 등록(actionGroupMapper.insertGroup) */
|
||||
INSERT INTO TB_ACTION_GRP (
|
||||
GRP_ID
|
||||
, GRP_NM
|
||||
, DSCRP
|
||||
, REG_DT
|
||||
) VALUES (
|
||||
#{id}
|
||||
, #{name}
|
||||
, #{description}
|
||||
,<include refid="utility.now" />
|
||||
)</insert>
|
||||
|
||||
<update id="updateGroup" parameterType="cokr.xit.base.security.access.ActionGroup">/* 기능그룹 수정(actionGroupMapper.updateGroup) */
|
||||
UPDATE TB_ACTION_GRP SET
|
||||
GRP_NM = #{name}
|
||||
, DSCRP = #{description}
|
||||
WHERE GRP_ID = #{id}</update>
|
||||
|
||||
<delete id="removeGroups" parameterType="map">/* 기능그룹 삭제(actionGroupMapper.removeGroups) */
|
||||
DELETE FROM TB_ACTION_GRP
|
||||
WHERE GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</delete>
|
||||
|
||||
<select id="getActionList" parameterType="map" resultType="dataobject">/* 그룹별 기능 가져오기(actionGroupMapper.getActionList) */
|
||||
SELECT *
|
||||
FROM TB_GRP_ACTION
|
||||
<if test="groupIDs != null">WHERE GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
ORDER BY GRP_ID, ACTION
|
||||
</select>
|
||||
|
||||
<insert id="addActions" parameterType="map">/* 그룹별 기능 추가(actionGroupMapper.addActions) */
|
||||
INSERT INTO TB_GRP_ACTION (GRP_ID, ACTION, REG_DT, RGTR)
|
||||
SELECT GRP_ID, ACTION,<include refid="utility.now" />, #{currentUser.id}
|
||||
FROM (<foreach collection="actions" item="action" separator="UNION">
|
||||
SELECT #{groupID} GRP_ID, #{action} ACTION FROM DUAL</foreach>
|
||||
) A
|
||||
WHERE NOT EXISTS (
|
||||
SELECT GRP_ID, ACTION
|
||||
FROM TB_GRP_ACTION B
|
||||
WHERE B.GRP_ID = A.GRP_ID
|
||||
AND B.ACTION = A.ACTION
|
||||
)</insert>
|
||||
|
||||
<delete id="removeActions" parameterType="map">/* 그룹별 기능 삭제(actionGroupMapper.removeActions) */
|
||||
DELETE FROM TB_GRP_ACTION
|
||||
<where>
|
||||
<if test="groupIDs != null">AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
<if test="actions != null">AND ACTION IN (<foreach collection="actions" item="action" separator=",">#{action}</foreach>)</if>
|
||||
</where>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.base.security.access.dao.AuthorityMapper">
|
||||
|
||||
<resultMap id="authRow" type="cokr.xit.base.security.Authority">
|
||||
<result property="type" column="AUTH_TYPE"/>
|
||||
<result property="id" column="AUTH_ID"/>
|
||||
<result property="name" column="AUTH_NM"/>
|
||||
<result property="infoScope" column="INF_SCP"/>
|
||||
<result property="userInfoScope" column="USER_INF_SCP"/>
|
||||
<result property="description" column="DSCRP"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectAuthorities"><include refid="utility.paging-prefix" />
|
||||
SELECT * FROM (
|
||||
SELECT 0 AUTH_TYPE, 'ROLE_ADMIN' AUTH_ID, '시스템 관리자' AUTH_NM, '시스템 관리자' DSCRP, 'all' INF_SCP, 'all' USER_INF_SCP,<include refid="utility.now"/>REG_DT FROM DUAL UNION
|
||||
SELECT 1 AUTH_TYPE, 'ROLE_ANONYMOUS' AUTH_ID, '익명 사용자' AUTH_NM, '모든 사용자' DSCRP, 'none' INF_SCP, 'none' USER_INF_SCP,<include refid="utility.now"/>REG_DT FROM DUAL UNION
|
||||
SELECT 1 AUTH_TYPE, 'ROLE_USER' AUTH_ID, '시스템 사용자' AUTH_NM, '로그인한 사용자' DSCRP, 'self' INF_SCP, 'self' USER_INF_SCP,<include refid="utility.now"/>REG_DT FROM DUAL UNION
|
||||
SELECT 2 AUTH_TYPE, AUTH_ID, AUTH_NM, DSCRP, INF_SCP, USER_INF_SCP, REG_DT
|
||||
FROM TB_AUTHORITY
|
||||
) A
|
||||
<where>
|
||||
<if test="authIDs != null">AND AUTH_ID IN (<foreach collection="authIDs" item="authID" separator=",">#{authID}</foreach>)</if>
|
||||
<if test="by != null and term != null">AND ${by} LIKE CONCAT('%', #{term}, '%')</if>
|
||||
</where>
|
||||
<include refid="utility.orderBy"/>
|
||||
<include refid="utility.paging-suffix" /></sql>
|
||||
|
||||
<select id="getAuthorityList" parameterType="map" resultType="dataobject">/* 권한 목록 조회(authorityMapper.getAuthorityList) */
|
||||
<include refid="selectAuthorities" /></select>
|
||||
|
||||
<select id="getAuthorities" parameterType="map" resultMap="authRow">/* 권한 가져오기(authorityMapper.getAuthorities) */
|
||||
<include refid="selectAuthorities" /></select>
|
||||
|
||||
<insert id="insertAuthority" parameterType="cokr.xit.base.security.Authority">/* 권한 등록(authorityMapper.insertAuthority) */
|
||||
INSERT INTO TB_AUTHORITY (
|
||||
AUTH_ID
|
||||
, AUTH_NM
|
||||
, DSCRP
|
||||
, INF_SCP
|
||||
, USER_INF_SCP
|
||||
, REG_DT
|
||||
) VALUES (
|
||||
#{id}
|
||||
, #{name}
|
||||
, #{description}
|
||||
, #{infoScope}
|
||||
, #{userInfoScope}
|
||||
,<include refid="utility.now" />
|
||||
)</insert>
|
||||
|
||||
<update id="updateAuthority" parameterType="cokr.xit.base.security.Authority">/* 권한 수정(authorityMapper.updateAuthority) */
|
||||
UPDATE TB_AUTHORITY SET
|
||||
AUTH_NM = #{name}
|
||||
, DSCRP = #{description}
|
||||
, INF_SCP = #{infoScope}
|
||||
, USER_INF_SCP = #{userInfoScope}
|
||||
WHERE AUTH_ID = #{id}</update>
|
||||
|
||||
<delete id="removeAuthorities" parameterType="map">/* 권한 삭제(authorityMapper.removeAuthorities) */
|
||||
DELETE FROM TB_AUTHORITY
|
||||
WHERE AUTH_ID IN (<foreach collection="authIDs" item="authID" separator=",">#{authID}</foreach>)</delete>
|
||||
|
||||
<select id="getActionGroupList" parameterType="map" resultType="dataobject">/* 권한-기능그룹 가져오기(authorityMapper.getActionGroups) */
|
||||
<include refid="utility.paging-prefix" />
|
||||
SELECT *
|
||||
FROM TB_AUTH_ACTION
|
||||
<if test="authIDs != null">WHERE AUTH_ID IN (<foreach collection="authIDs" item="authID" separator=",">#{authID}</foreach>)</if>
|
||||
ORDER BY AUTH_ID, GRP_ID
|
||||
<include refid="utility.paging-suffix" /></select>
|
||||
|
||||
<insert id="addActionGroups" parameterType="map">/* 권한-기능그룹 추가(authorityMapper.addActionGroups) */
|
||||
INSERT INTO TB_AUTH_ACTION (AUTH_ID, GRP_ID, REG_DT)
|
||||
SELECT AUTH_ID, GRP_ID,<include refid="utility.now" />
|
||||
FROM (<foreach collection="groupIDs" item="groupID" separator=" UNION">
|
||||
SELECT #{authID} AUTH_ID, #{groupID} GRP_ID FROM DUAL</foreach>
|
||||
) A
|
||||
WHERE NOT EXISTS (
|
||||
SELECT AUTH_ID, GRP_ID
|
||||
FROM TB_AUTH_ACTION B
|
||||
WHERE B.AUTH_ID = A.AUTH_ID
|
||||
AND B.GRP_ID = A.GRP_ID
|
||||
)</insert>
|
||||
|
||||
<delete id="removeActionGroups" parameterType="map">/* 권한-기능그룹 삭제(authorityMapper.removeActionGroups) */
|
||||
DELETE FROM TB_AUTH_ACTION
|
||||
<where>
|
||||
<if test="authIDs != null">AND AUTH_ID IN (<foreach collection="authIDs" item="authID" separator=",">#{authID}</foreach>)</if>
|
||||
<if test="groupIDs != null">AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
</where>
|
||||
</delete>
|
||||
|
||||
<select id="getActionList" resultType="dataobject">/* 권한-기능 가져오기(authorityMapper.getActionList) */
|
||||
SELECT A.AUTH_ID
|
||||
, A.GRP_ID
|
||||
, C.ACTION
|
||||
FROM TB_AUTH_ACTION A
|
||||
, TB_ACTION_GRP B
|
||||
, TB_GRP_ACTION C
|
||||
WHERE A.GRP_ID = B.GRP_ID
|
||||
AND B.GRP_ID = C.GRP_ID
|
||||
ORDER BY A.AUTH_ID, A.GRP_ID, C.ACTION</select>
|
||||
|
||||
<sql id="selectAuthUser">
|
||||
<include refid="utility.paging-prefix" />
|
||||
SELECT A.*, USER_ACNT
|
||||
FROM TB_AUTH_USER A
|
||||
, TB_USER B
|
||||
<where>
|
||||
<if test="authIDs != null">AND AUTH_ID IN (<foreach collection="authIDs" item="authID" separator=",">#{authID}</foreach>)</if>
|
||||
<if test="userIDs != null">AND A.USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)</if>
|
||||
AND A.USER_ID = B.USER_ID
|
||||
</where>
|
||||
<include refid="utility.orderBy"/>
|
||||
<include refid="utility.paging-suffix" /></sql>
|
||||
|
||||
<select id="getUserList" parameterType="map" resultType="dataobject">/* 권한-사용자 가져오기(authorityMapper.getUserList) */
|
||||
<include refid="selectAuthUser" /></select>
|
||||
|
||||
<select id="getUserAuths" parameterType="map" resultType="dataobject">/* 사용자-권한 가져오기(authorityMapper.getUserAuths) */
|
||||
<include refid="selectAuthUser" /></select>
|
||||
|
||||
<insert id="addUsers" parameterType="map">/* 권한-사용자 추가(authorityMapper.addUsers) */
|
||||
INSERT INTO TB_AUTH_USER (AUTH_ID, USER_ID, REG_DT)
|
||||
SELECT AUTH_ID, USER_ID,<include refid="utility.now" />
|
||||
FROM (<foreach collection="userIDs" item="userID" separator="UNION">
|
||||
SELECT #{authID} AUTH_ID, #{userID} USER_ID FROM DUAL</foreach>
|
||||
) A
|
||||
WHERE NOT EXISTS (
|
||||
SELECT AUTH_ID, USER_ID
|
||||
FROM TB_AUTH_USER B
|
||||
WHERE B.AUTH_ID = A.AUTH_ID
|
||||
AND B.USER_ID = A.USER_ID
|
||||
)</insert>
|
||||
|
||||
<delete id="removeUsers" parameterType="map">/* 권한-사용자 삭제(authorityMapper.removeUsers) */
|
||||
DELETE FROM TB_AUTH_USER
|
||||
<where>
|
||||
<if test="authIDs != null">AND AUTH_ID IN (<foreach collection="authIDs" item="authID" separator=",">#{authID}</foreach>)</if>
|
||||
<if test="userIDs != null">AND USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)</if>
|
||||
</where>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,230 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.base.code.dao.CodeMapper">
|
||||
|
||||
<resultMap id="categoryRow" type="cokr.xit.base.code.CodeCategory">
|
||||
<result property="id" column="CTGR_ID"/>
|
||||
<result property="name" column="CTGR_NM"/>
|
||||
<result property="description" column="DSCRP"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
<result property="createdBy" column="RGTR"/>
|
||||
<result property="lastModified" column="MDFCN_DT"/>
|
||||
<result property="modifiedBy" column="MDFR"/>
|
||||
<result property="useYN" column="USE_YN"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="groupRow" type="cokr.xit.base.code.CodeGroup">
|
||||
<result property="id" column="GRP_ID"/>
|
||||
<result property="name" column="GRP_NM"/>
|
||||
<result property="categoryID" column="CTGR_ID"/>
|
||||
<result property="description" column="DSCRP"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
<result property="createdBy" column="RGTR"/>
|
||||
<result property="lastModified" column="MDFCN_DT"/>
|
||||
<result property="modifiedBy" column="MDFR"/>
|
||||
<result property="useYN" column="USE_YN"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="codeRow" type="cokr.xit.base.code.CommonCode">
|
||||
<result property="groupID" column="GRP_ID"/>
|
||||
<result property="code" column="CODE"/>
|
||||
<result property="value" column="CODE_VAL"/>
|
||||
<result property="description" column="DSCRP"/>
|
||||
<result property="etc1" column="ETC_1"/>
|
||||
<result property="etc2" column="ETC_2"/>
|
||||
<result property="etc3" column="ETC_3"/>
|
||||
<result property="sortOrder" column="SRT_ORD"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
<result property="createdBy" column="RGTR"/>
|
||||
<result property="lastModified" column="MDFCN_DT"/>
|
||||
<result property="modifiedBy" column="MDFR"/>
|
||||
<result property="useYN" column="USE_YN"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectCategories"><include refid="utility.paging-prefix" />
|
||||
SELECT *
|
||||
FROM TB_CODE_CTGR
|
||||
WHERE USE_YN = 'Y'
|
||||
<if test="categoryIDs != null"> AND CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if>
|
||||
<include refid="utility.orderBy" />
|
||||
<include refid="utility.paging-suffix" /></sql>
|
||||
|
||||
<select id="getCategoryList" parameterType="map" resultType="dataobject">/* 코드 카테고리 목록 조회(codeMapper.getCategoryList) */
|
||||
<include refid="selectCategories" /></select>
|
||||
|
||||
<select id="getCategories" parameterType="map" resultMap="categoryRow">/*코드 카테고리 가져오기(codeMapper.getCategories)*/
|
||||
<include refid="selectCategories" /></select>
|
||||
|
||||
<insert id="insertCategory" parameterType="map">/* 코드 카테고리 등록(codeMapper.insertCategory) */
|
||||
INSERT INTO TB_CODE_CTGR (
|
||||
CTGR_ID
|
||||
, CTGR_NM
|
||||
, DSCRP
|
||||
, REG_DT
|
||||
, RGTR
|
||||
, MDFCN_DT
|
||||
, MDFR
|
||||
, USE_YN
|
||||
) VALUES (
|
||||
#{category.id}
|
||||
, #{category.name}
|
||||
, #{category.description}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
, 'Y'
|
||||
)</insert>
|
||||
|
||||
<update id="updateCategory" parameterType="map">/* 코드 카테고리 수정(codeMapper.updateCategory) */
|
||||
UPDATE TB_CODE_CTGR SET
|
||||
CTGR_NM = #{category.name}
|
||||
, DSCRP = #{category.description}
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
WHERE CTGR_ID = #{category.id}</update>
|
||||
|
||||
<delete id="removeCategories" parameterType="map">/* 코드 카테고리 제거(codeMapper.removeCategories) */
|
||||
UPDATE TB_CODE_CTGR SET
|
||||
MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
, USE_YN = 'N'
|
||||
<if test='categoryIDs != null'>WHERE CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if></delete>
|
||||
|
||||
<sql id="selectGroups"><include refid="utility.paging-prefix" />
|
||||
SELECT *
|
||||
FROM TB_CODE_GRP
|
||||
WHERE USE_YN = 'Y'
|
||||
<if test="categoryIDs != null">AND CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if>
|
||||
<if test="groupIDs != null">AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
<include refid="utility.orderBy" />
|
||||
<include refid="utility.paging-suffix" /></sql>
|
||||
|
||||
<select id="getGroupList" parameterType="dataobject" resultType="dataobject">/* 코드그룹 목록 조회(codeMapper.getGroupList) */
|
||||
<include refid="selectGroups" /></select>
|
||||
|
||||
<select id="getGroups" parameterType="map" resultMap="groupRow">/* 코드그룹 가져오기(codeMapper.getGroups) */
|
||||
<include refid="selectGroups" /></select>
|
||||
|
||||
<insert id="insertGroup" parameterType="map">/* 코드그룹 등록(codeMapper.insertGroup) */
|
||||
INSERT INTO TB_CODE_GRP (
|
||||
GRP_ID
|
||||
, GRP_NM
|
||||
, CTGR_ID
|
||||
, DSCRP
|
||||
, REG_DT
|
||||
, RGTR
|
||||
, MDFCN_DT
|
||||
, MDFR
|
||||
, USE_YN
|
||||
) VALUES (
|
||||
#{group.id}
|
||||
, #{group.name}
|
||||
, #{group.categoryID}
|
||||
, #{group.description}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
, 'Y'
|
||||
)</insert>
|
||||
|
||||
<update id="updateGroup" parameterType="map">/* 코드그룹 수정(codeMapper.updateGroup) */
|
||||
UPDATE TB_CODE_GRP SET
|
||||
GRP_NM = #{group.name}
|
||||
, CTGR_ID = #{group.categoryID}
|
||||
, DSCRP = #{group.description}
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
WHERE GRP_ID = #{group.id}</update>
|
||||
|
||||
<update id="removeGroups" parameterType="map">/*코드그룹 제거(codeMapper.removeGroups) */
|
||||
UPDATE TB_CODE_GRP SET
|
||||
USE_YN = 'N'
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
<where>
|
||||
<if test="categoryIDs != null">CTGR_ID IN (<foreach collection="categoryIDs" item="categoryID" separator=",">#{categoryID}</foreach>)</if>
|
||||
<if test="groupIDs != null">GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
</where></update>
|
||||
|
||||
<sql id="selectCodes"><include refid="utility.paging-prefix" />
|
||||
SELECT *
|
||||
FROM TB_CMN_CODE
|
||||
WHERE USE_YN = 'Y'
|
||||
<if test='groupIDs != null'>AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
<if test='codes != null'>AND CODE IN (<foreach collection="codes" item="code" separator=",">#{code}</foreach>)</if>
|
||||
<include refid="utility.orderBy" />
|
||||
<include refid="utility.paging-suffix" /></sql>
|
||||
|
||||
<select id="getCodeList" parameterType="map" resultType="dataobject">/* 그룹별 코드 가져오기(codeMapper.getCodeList) */
|
||||
<include refid="selectCodes" /></select>
|
||||
|
||||
<select id="getCodes" parameterType="map" resultMap="codeRow">/* 코드 가져오기(codeMapper.getCodes) */
|
||||
<include refid="selectCodes" /></select>
|
||||
|
||||
<insert id="insertCode" parameterType="map">/* 코드 등록(codeMapper.insertCode) */
|
||||
INSERT INTO TB_CMN_CODE (
|
||||
GRP_ID
|
||||
, CODE
|
||||
, CODE_VAL
|
||||
, DSCRP
|
||||
, ETC_1
|
||||
, ETC_2
|
||||
, ETC_3
|
||||
, SRT_ORD
|
||||
, REG_DT
|
||||
, RGTR
|
||||
, MDFCN_DT
|
||||
, MDFR
|
||||
, USE_YN
|
||||
) VALUES (
|
||||
#{code.groupID}
|
||||
, #{code.code}
|
||||
, #{code.value}
|
||||
, #{code.description}
|
||||
, #{code.etc1}
|
||||
, #{code.etc2}
|
||||
, #{code.etc3}
|
||||
, #{code.sortOrder}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
, 'Y'
|
||||
)</insert>
|
||||
|
||||
<update id="updateCode" parameterType="map">/* 코드 수정(codeMapper.updateCode) */
|
||||
UPDATE TB_CMN_CODE SET
|
||||
CODE_VAL = #{code.value}
|
||||
, DSCRP = #{code.description}
|
||||
, ETC_1 = #{code.etc1}
|
||||
, ETC_2 = #{code.etc2}
|
||||
, ETC_3 = #{code.etc3}
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
WHERE GRP_ID = #{code.groupID}
|
||||
AND CODE = #{code.code}</update>
|
||||
|
||||
<update id="reorderCodes" parameterType="map">/* 코드 정렬순서 변경(codeMapper.reorderCodes) */
|
||||
UPDATE TB_CMN_CODE SET
|
||||
SRT_ORD = CASE CODE<foreach collection="codes" item="code" index="index" separator=" ">
|
||||
WHEN #{code} THEN #{index}</foreach>
|
||||
ELSE SRT_ORD
|
||||
END
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
WHERE GRP_ID = #{groupID}
|
||||
AND CODE IN (<foreach collection="codes" item="code" separator=",">#{code}</foreach>)</update>
|
||||
|
||||
<update id="removeCodes" parameterType="map">/* 코드 제거(codeMapper.removeCodes) */
|
||||
UPDATE TB_CMN_CODE SET
|
||||
MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
, USE_YN = 'N'
|
||||
<where>
|
||||
<if test="groupIDs != null">AND GRP_ID IN (<foreach collection="groupIDs" item="groupID" separator=",">#{groupID}</foreach>)</if>
|
||||
<if test="codes != null">AND CODE IN (<foreach collection="codes" item="code" separator=",">#{code}</foreach>) </if>
|
||||
</where></update>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.base.file.dao.FileMapper">
|
||||
|
||||
<resultMap id="fileRow" type="cokr.xit.base.file.FileInfo">
|
||||
<result property="id" column="FILE_ID"/>
|
||||
<result property="infoType" column="INF_TYPE"/>
|
||||
<result property="infoKey" column="INF_KEY"/>
|
||||
<result property="subType" column="SUB_TYPE"/>
|
||||
<result property="name" column="FILE_NM"/>
|
||||
<result property="path" column="FILE_PATH"/>
|
||||
<result property="url" column="URL"/>
|
||||
<result property="mimeType" column="MIME_TYPE"/>
|
||||
<result property="size" column="FILE_SIZE"/>
|
||||
<result property="downloadCount" column="DNLD_CNT"/>
|
||||
<result property="sortOrder" column="SRT_ORD"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
<result property="createdBy" column="RGTR"/>
|
||||
<result property="useYN" column="USE_YN"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="fileDirs">SELECT INF_TYPE
|
||||
, CONCAT('C://workspace/xit/base/files/', DIR, DATE_FORMAT(CURRENT_DATE, '%Y/%m/%d/')) DIR
|
||||
FROM (
|
||||
SELECT '00' INF_TYPE, 'attachment/' DIR FROM DUAL UNION
|
||||
SELECT '01' INF_TYPE, 'document/' DIR FROM DUAL UNION
|
||||
SELECT '02' INF_TYPE, 'article/' DIR FROM DUAL
|
||||
) FILE_DIRS</sql>
|
||||
|
||||
<sql id="selectFiles">
|
||||
<if test="fileIDs != null">
|
||||
SELECT A.*, REPLACE(FILE_PATH, 'C://workspace/xit/base', '') URL
|
||||
FROM TB_FILE A
|
||||
WHERE FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)
|
||||
ORDER BY FILE_ID</if>
|
||||
<if test="fileIDs == null"><include refid="utility.paging-prefix" />
|
||||
SELECT A.*, REPLACE(FILE_PATH, 'C://workspace/xit/base', '') URL
|
||||
FROM TB_FILE A
|
||||
<where>
|
||||
<if test="infoType != null"> AND A.INF_TYPE = #{infoType}</if>
|
||||
<if test="infoKeys != null"> AND INF_KEY IN (<foreach collection="infoKeys" item="infoKey" separator=",">#{infoKey}</foreach>)</if>
|
||||
AND USE_YN = 'Y'
|
||||
</where>
|
||||
<include refid="utility.orderBy" />
|
||||
<include refid="utility.paging-suffix" /></if></sql>
|
||||
|
||||
<select id="getFileList" parameterType="map" resultType="dataobject">/* 파일 목록 조회(fileMapper.getFileList) */
|
||||
<include refid="selectFiles" /></select>
|
||||
|
||||
<select id="getFilesOf" parameterType="map" resultMap="fileRow">/* 파일 가져오기(fileMapper.getFilesOf) */
|
||||
<include refid="selectFiles" /></select>
|
||||
|
||||
<select id="getFiles" parameterType="map" resultMap="fileRow">/* 파일 가져오기(fileMapper.getFiles) */
|
||||
<include refid="selectFiles" /></select>
|
||||
|
||||
<insert id="insertFile" parameterType="map">/* 파일 등록(fileMapper.insertFile) */
|
||||
<selectKey keyProperty="file.id,file.path" keyColumn="NEW_ID,PATH" resultType="map" order="BEFORE">
|
||||
SELECT NEW_ID, CONCAT(DIR, NEW_ID, '.', #{file.extension}) PATH
|
||||
FROM (
|
||||
SELECT NVL(MAX(FILE_ID) + 1, CONCAT(THIS_DAY, '00001')) NEW_ID
|
||||
FROM TB_FILE A, (<include refid="utility.selectThisDay" />) B
|
||||
WHERE FILE_ID LIKE CONCAT(THIS_DAY, '%')
|
||||
) T1, (
|
||||
<include refid="fileDirs" />
|
||||
WHERE INF_TYPE = #{file.infoType}
|
||||
) T2</selectKey>
|
||||
INSERT INTO TB_FILE (
|
||||
FILE_ID
|
||||
, INF_TYPE
|
||||
, INF_KEY
|
||||
, SUB_TYPE
|
||||
, FILE_NM
|
||||
, FILE_PATH
|
||||
, MIME_TYPE
|
||||
, FILE_SIZE
|
||||
, DNLD_CNT
|
||||
, SRT_ORD
|
||||
, RGTR
|
||||
, REG_DT
|
||||
, USE_YN
|
||||
) VALUES (
|
||||
#{file.id}
|
||||
, #{file.infoType}
|
||||
, #{file.infoKey}
|
||||
, #{file.subType}
|
||||
, #{file.name}
|
||||
, #{file.path}
|
||||
, #{file.mimeType}
|
||||
, #{file.size}
|
||||
, #{file.downloadCount}
|
||||
, #{file.sortOrder}
|
||||
, #{currentUser.id}
|
||||
,<include refid="utility.now" />
|
||||
, 'Y'
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="reorder" parameterType="map">/* 파일 순서 변경(fileMapper.reorder) */
|
||||
UPDATE TB_FILE SET
|
||||
SRT_ORD = CASE FILE_ID
|
||||
<foreach collection="fileIDs" item="fileID" index="index" separator=" ">WHEN #{fileID} THEN #{index}
|
||||
</foreach>
|
||||
ELSE SRT_ORD END
|
||||
WHERE FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</update>
|
||||
|
||||
<update id="updateDownloadCount" parameterType="map">/* 다운로드 횟수 증가(fileMapper.updateDownloadCount) */
|
||||
UPDATE TB_FILE SET
|
||||
DNLD_CNT = DNLD_CNT + 1
|
||||
WHERE USE_YN = 'Y'
|
||||
AND FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</update>
|
||||
|
||||
<update id="removeFiles" parameterType="map">/* 파일 제거(fileMapper.removeFiles) */
|
||||
UPDATE TB_FILE SET
|
||||
USE_YN = 'N'
|
||||
WHERE USE_YN = 'Y'
|
||||
<if test="fileIDs != null"> AND FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</if>
|
||||
<if test="infoKeys != null">
|
||||
AND INF_TYPE = #{infoType}
|
||||
AND INF_KEY IN (<foreach collection="infoKeys" item="infoKey" separator=",">#{infoKey}</foreach>)</if></update>
|
||||
|
||||
<delete id="deleteFiles" parameterType="map">/* 파일 삭제(fileMapper.deleteFiles) */
|
||||
DELETE FROM TB_FILE
|
||||
<if test="fileIDs != null">WHERE FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</if>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.base.menu.dao.MenuMapper">
|
||||
|
||||
<resultMap id="menuRow" type="cokr.xit.base.menu.Menu">
|
||||
<result property="id" column="MENU_NO"/>
|
||||
<result property="name" column="MENU_NM"/>
|
||||
<result property="programFilename" column="PGRM_FILE_NM"/>
|
||||
<result property="action" column="ACTION"/>
|
||||
<result property="description" column="DSCRP"/>
|
||||
<result property="parentID" column="PRNT_NO"/>
|
||||
<result property="imageName" column="IMG_NM"/>
|
||||
<result property="imageConf" column="IMG_CNF"/>
|
||||
<result property="sortOrder" column="SRT_ORD"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
<result property="createdBy" column="RGTR"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectMenus">
|
||||
SELECT A.*
|
||||
FROM TB_MENU A
|
||||
<if test='menuID != null'>WHERE MENU_NO = #{menuID}</if>
|
||||
ORDER BY PRNT_NO, SRT_ORD, MENU_NO</sql>
|
||||
|
||||
<select id="getMenus" parameterType="map" resultMap="menuRow">/* 메뉴 정보 조회(menuMapper.getMenus) */
|
||||
<include refid="selectMenus" /></select>
|
||||
|
||||
<select id="getMenu" parameterType="int" resultMap="menuRow">/* 메뉴 가져오기(menuMapper.getMenu) */
|
||||
<include refid="selectMenus" /></select>
|
||||
|
||||
<insert id="insertMenu" parameterType="map">/* 메뉴 등록(menuMapper.insertMenu) */
|
||||
<selectKey order="BEFORE" resultType="map" keyColumn="NEW_NO,NEW_ORD" keyProperty="menu.id,menu.sortOrder">
|
||||
SELECT NEW_NO, NEW_ORD
|
||||
FROM (SELECT NVL(MAX(MENU_NO) + 1, 0) NEW_NO FROM TB_MENU) A,
|
||||
(<include refid="newSortOrder" />) B</selectKey>
|
||||
INSERT INTO TB_MENU (
|
||||
MENU_NO
|
||||
, MENU_NM
|
||||
, PRNT_NO
|
||||
, PGRM_FILE_NM
|
||||
, ACTION
|
||||
, DSCRP
|
||||
, IMG_NM
|
||||
, IMG_CNF
|
||||
, SRT_ORD
|
||||
, REG_DT
|
||||
, RGTR
|
||||
) VALUES (
|
||||
#{menu.id}
|
||||
, #{menu.name}
|
||||
, #{menu.parentID}
|
||||
, #{menu.programFilename}
|
||||
, #{menu.action}
|
||||
, #{menu.description}
|
||||
, #{menu.imageName}
|
||||
, #{menu.imageConf}
|
||||
, #{menu.sortOrder}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
)</insert>
|
||||
|
||||
<update id="updateMenu" parameterType="map">/* 메뉴 수정(menuMapper.updateMenu) */
|
||||
UPDATE TB_MENU SET
|
||||
MENU_NM = #{menu.name}
|
||||
, PGRM_FILE_NM = #{menu.programFilename}
|
||||
, ACTION = #{menu.action}
|
||||
, DSCRP = #{menu.description}
|
||||
, IMG_NM = #{menu.imageName}
|
||||
, IMG_CNF = #{menu.imageConf}
|
||||
WHERE MENU_NO = #{menu.id}</update>
|
||||
|
||||
<sql id="newSortOrder">SELECT NVL(MAX(SRT_ORD) + 1, 0) NEW_ORD FROM TB_MENU WHERE PRNT_NO = NVL(#{parentID}, NVL(#{menu.parentID}, 0))</sql>
|
||||
|
||||
<update id="moveMenus" parameterType="map">/* 메뉴 이동(menuMapper.moveMenus) */
|
||||
UPDATE TB_MENU SET
|
||||
PRNT_NO = #{parentID}
|
||||
, SRT_ORD = SRT_ORD + (<include refid="newSortOrder" />)
|
||||
WHERE MENU_NO IN (<foreach collection="menuIDs" item="menuID" separator=",">#{menuID}</foreach>)
|
||||
</update>
|
||||
|
||||
<update id="reorderMenus" parameterType="map">/* 메뉴 순서 변경(menuMapper.reorderMenus) */
|
||||
UPDATE TB_MENU SET
|
||||
SRT_ORD = CASE MENU_NO
|
||||
<foreach collection="menuIDs" item="menuID" index="index">WHEN #{menuID} THEN #{index}
|
||||
</foreach>
|
||||
ELSE MENU_NO END
|
||||
WHERE MENU_NO IN (<foreach collection="menuIDs" item="menuID" separator=",">#{menuID}</foreach>)</update>
|
||||
|
||||
<delete id="removeMenus" parameterType="map">/* 메뉴 제거(menuMapper.removeMenus) */
|
||||
DELETE FROM TB_MENU
|
||||
WHERE MENU_NO IN (<foreach collection="menuIDs" item="menuID" separator=",">#{menuID}</foreach>)
|
||||
</delete>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.base.security.authentication.dao.PolicyMapper">
|
||||
|
||||
<resultMap id="policyRow" type="cokr.xit.base.security.authentication.AuthenticationPolicy">
|
||||
<result property="userID" column="USER_ID"/>
|
||||
<result property="ipAddress" column="IP_ADRS"/>
|
||||
<result property="duplicateYN" column="DPLCT_YN"/>
|
||||
<result property="limitYN" column="LIMIT_YN"/>
|
||||
<result property="createdBy" column="RGTR"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
<result property="modifiedBy" column="MDFR"/>
|
||||
<result property="lastModified" column="MDFCN_DT"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="getPolicyList" parameterType="map" resultType="dataobject">/* 로그인 정책 목록 조회(policyMapper.getPolicyList) */
|
||||
<include refid="utility.paging-prefix"/>
|
||||
SELECT A.USER_ID
|
||||
, USER_NM
|
||||
, IP_ADRS
|
||||
, DPLCT_YN
|
||||
, LIMIT_YN
|
||||
, MDFR
|
||||
, MDFCN_DT
|
||||
FROM TB_USER A LEFT OUTER JOIN TB_LOGIN_POLICY B ON A.USER_ID = B.USER_ID
|
||||
<if test="term != null">WHERE A.${by} LIKE CONCAT('%', #{term}, '%')</if>
|
||||
<include refid="utility.orderBy" />
|
||||
<include refid="utility.paging-suffix"/></select>
|
||||
|
||||
<select id="getPolicies" parameterType="map" resultMap="policyRow">/* 로그인 정책 가져오기(policyMapper.getPolicies) */
|
||||
SELECT *
|
||||
FROM TB_LOGIN_POLICY
|
||||
<if test="userIDs != null">WHERE USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)</if>
|
||||
ORDER BY USER_ID</select>
|
||||
|
||||
<insert id="insertPolicy" parameterType="map">/* 로그인 정책 등록(policyMapper.insertPolicy) */
|
||||
INSERT INTO TB_LOGIN_POLICY (
|
||||
USER_ID
|
||||
, IP_ADRS
|
||||
, DPLCT_YN
|
||||
, LIMIT_YN
|
||||
, REG_DT
|
||||
, RGTR
|
||||
, MDFCN_DT
|
||||
, MDFR
|
||||
) VALUES (
|
||||
#{policy.userID}
|
||||
, #{policy.ipAddress}
|
||||
, #{policy.duplicateYN}
|
||||
, #{policy.limitYN}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
,<include refid="utility.now" />
|
||||
, #{currentUser.id}
|
||||
)</insert>
|
||||
|
||||
<update id="updatePolicy" parameterType="map">/* 로그인 정책 수정(policyMapper.updatePolicy) */
|
||||
UPDATE TB_LOGIN_POLICY SET
|
||||
IP_ADRS = #{policy.ipAddress}
|
||||
, DPLCT_YN = #{policy.duplicateYN}
|
||||
, LIMIT_YN = #{policy.limitYN}
|
||||
, MDFR = #{currentUser.id}
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
WHERE USER_ID = #{policy.userID}</update>
|
||||
|
||||
<delete id="removePolicy" parameterType="map">/* 로그인 정책 삭제(policyMapper.removePolicy) */
|
||||
DELETE FROM TB_LOGIN_POLICY
|
||||
WHERE USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)</delete>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="program">
|
||||
|
||||
<resultMap id="programRow" type="cokr.xit.base.menu.Program">
|
||||
<result property="filename" column="PGRM_FILE_NM"/>
|
||||
<result property="location" column="PGRM_FILE_PATH"/>
|
||||
<result property="name" column="PGRM_NM"/>
|
||||
<result property="description" column="DSCRP"/>
|
||||
<result property="url" column="URL"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="reqRow" type="cokr.xit.base.menu.ChangeRequest">
|
||||
<result property="filename" column="PGRM_FILE_NM"/>
|
||||
<result property="id" column="REQ_ID"/>
|
||||
<result property="subject" column="SUBJECT"/>
|
||||
<result property="requestorID" column="REQ_USER"/>
|
||||
<result property="requestDate" column="REQ_DT"/>
|
||||
<result property="requestDetail" column="REQ_CNTNT"/>
|
||||
<result property="processorID" column="PRSC_USER"/>
|
||||
<result property="processDate" column="PRCS_DT"/>
|
||||
<result property="processDetail" column="PRCS_CNTNT"/>
|
||||
<result property="status" column="PRCS_STATUS"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectPrograms">
|
||||
<include refid="utility.paging-prefix"/>
|
||||
SELECT A.*
|
||||
FROM TB_PROGRAM A
|
||||
<where>
|
||||
<if test="by != null and term != null">${by} LIKE CONCAT('%', #{term}, '%')</if>
|
||||
<if test='filenames != null'>PGRM_FILE_NM IN (<foreach collection="filenames" item="filename" separator=",">#{filename}</foreach>)</if>
|
||||
</where>
|
||||
ORDER BY<if test='by != null'>${by}</if><if test='by == null'>PGRM_FILE_NM</if>
|
||||
<include refid="utility.paging-suffix"/></sql>
|
||||
|
||||
<select id="getProgramList" parameterType="map" resultType="dataobject">/* 프로그램 목록 조회(program.getProgramList) */
|
||||
<include refid="selectPrograms"/></select>
|
||||
|
||||
<select id="getPrograms" parameterType="map" resultMap="programRow">/* 프로그램 가져오기(program.getPrograms) */
|
||||
<include refid="selectPrograms"/></select>
|
||||
|
||||
<insert id="insertProgram" parameterType="cokr.xit.base.menu.Program">/* 프로그램 등록(program.insertProgram) */
|
||||
INSERT INTO TB_PROGRAM (
|
||||
PGRM_FILE_NM
|
||||
, PGRM_FILE_PATH
|
||||
, PGRM_NM
|
||||
, DSCRP
|
||||
, URL
|
||||
) VALUES (
|
||||
#{filename}
|
||||
, #{location}
|
||||
, #{name}
|
||||
, #{description}
|
||||
, #{url}
|
||||
)</insert>
|
||||
|
||||
<update id="updateProgram" parameterType="cokr.xit.base.menu.Program">/* 프로그램 수정(program.updateProgram) */
|
||||
UPDATE TB_PROGRAM SET
|
||||
PGRM_FILE_PATH = #{location}
|
||||
, PGRM_NM = #{name}
|
||||
, DSCRP = #{description}
|
||||
, URL = #{url}
|
||||
WHERE PGRM_FILE_NM = #{filename}</update>
|
||||
|
||||
<delete id="removePrograms" parameterType="map">/* 프로그램 삭제(program.removePrograms) */
|
||||
DELETE FROM TB_PROGRAM
|
||||
WHERE PGRM_FILE_NM IN (<foreach collection="filenames" item="filename" separator=",">#{filename}</foreach>)</delete>
|
||||
|
||||
<delete id="clearPrograms" parameterType="map">/* 프로그램 비우기(program.clearPrograms) */
|
||||
DELETE FROM TB_PROGRAM
|
||||
WHERE PGRM_FILE_NM NOT IN (SELECT PGRM_FILE_NM FROM TB_MENU)</delete>
|
||||
|
||||
<sql id="selectRequests">
|
||||
SELECT A.*
|
||||
FROM TB_PGRM_CHNG_REQ A
|
||||
<where>
|
||||
<if test='fromReqDate != null'>REQ_DT >= #{fromReqDate}</if>
|
||||
<if test='toReqDate != null'>REQ_DT <= #{toReqDate}</if>
|
||||
<if test="by != null and term != null">${by} LIKE CONCAT('%', #{term}, '%')</if>
|
||||
<if test='filenames != null'>PGRM_FILE_NAME IN (<foreach collection="filenames" item="filename" separator=",">#{filename}</foreach>)</if>
|
||||
<if test='reqIDs != null'>REQ_ID IN (<foreach collection="reqIDs" item="reqID" separator=",">#{reqID}</foreach>)</if>
|
||||
</where>
|
||||
ORDER BY PGRM_FILE_NM,<if test='by != null'>${by}</if><if test='by == null'>REQ_ID DESC</if></sql>
|
||||
|
||||
<select id="getRequestList" parameterType="map" resultType="dataobject">/* 변경요청 목록 조회(program.getRequestList) */
|
||||
<include refid="selectRequests" /></select>
|
||||
|
||||
<select id="getRequests" parameterType="map" resultType="dataobject">/* 프로그램별 변경요청 목록 조회(program.getRequests) */
|
||||
<include refid="selectRequests" /></select>
|
||||
|
||||
<insert id="insertRequest" parameterType="cokr.xit.base.menu.ChangeRequest">/* 프로그램 변경요청 등록(program.insertRequest) */
|
||||
INSERT INTO TB_PGRM_CHNG_REQ (
|
||||
PGRM_FILE_NM
|
||||
, REQ_ID
|
||||
, SUBJECT
|
||||
, REQ_USER
|
||||
, REQ_DT
|
||||
, REQ_CNTNT
|
||||
, PRSC_USER
|
||||
, PRCS_DT
|
||||
, PRCS_CNTNT
|
||||
, PRCS_STATUS
|
||||
) VALUES (
|
||||
#{filename}
|
||||
, #{id}
|
||||
, #{subject}
|
||||
, #{requestorID}
|
||||
, #{requestDate}
|
||||
, #{requestDetail}
|
||||
, #{processorID}
|
||||
, #{processDate}
|
||||
, #{processDetail}
|
||||
, #{status}
|
||||
)</insert>
|
||||
|
||||
<update id="updateRequest" parameterType="cokr.xit.base.menu.ChangeRequest">/* 프로그램 변경요청 수정(program.updateRequest) */
|
||||
UPDATE TB_PGRM_CHNG_REQ SET
|
||||
SUBJECT = #{subject}
|
||||
, REQ_USER = #{requestorID}
|
||||
, REQ_DT = #{requestDate}
|
||||
, REQ_CNTNT = #{requestDetail}
|
||||
, PRSC_USER = #{processorID}
|
||||
, PRCS_DT = #{processDate}
|
||||
, PRCS_CNTNT = #{processDetail}
|
||||
WHERE PGRM_FILE_NM = #{filename}
|
||||
AND REQ_ID = #{id}</update>
|
||||
|
||||
<update id="setRequestStatus" parameterType="map">/* 프로그램 변경요청 상태 변경(program.setRequestStatus) */
|
||||
UPDATE TB_PGRM_CHNG_REQ SET
|
||||
PRCS_STATUS = #{status}
|
||||
WHERE PGRM_FILE_NM = #{filename}
|
||||
AND REQ_ID = #{id}</update>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.base.syslog.dao.LoggingMapper">
|
||||
|
||||
<resultMap id="logRow" type="cokr.xit.base.syslog.ServiceLog">
|
||||
<result property="id" column="LOG_ID"/> <!-- 로그 ID -->
|
||||
<result property="type" column="LOG_TYPE"/> <!-- 로그 유형 -->
|
||||
<result property="url" column="URL"/> <!-- URL -->
|
||||
<result property="className" column="CLS_NM"/> <!-- 클래스 이름 -->
|
||||
<result property="methodName" column="MTD_NM"/> <!-- 메소드 이름 -->
|
||||
<result property="fileName" column="FILE_NM"/> <!-- 파일 이름 -->
|
||||
<result property="dataCount" column="DATA_CNT"/> <!-- 데이터 수 -->
|
||||
<result property="fieldNames" column="DATA_NM"/> <!-- 데이터 이름 -->
|
||||
<result property="personalInfo" column="PSNL_INFO"/> <!-- 개인 정보 -->
|
||||
<result property="userId" column="USER_ID"/> <!-- 사용자 ID -->
|
||||
<result property="ipAddress" column="IP_ADDR"/> <!-- 등록 일시 -->
|
||||
</resultMap>
|
||||
|
||||
<insert id="insertLog" parameterType="cokr.xit.base.syslog.ServiceLog">/* 시스템 로그 등록(loggingMapper.insertLog) */
|
||||
<selectKey keyProperty="id" keyColumn="NEW_ID" resultType="string" order="BEFORE">
|
||||
SELECT CONCAT(TODAY, LPAD(NVL(SUBSTR(MAX(LOG_ID), 9) + 1, 1), 16, '0')) NEW_ID
|
||||
FROM TB_SYS_LOG A, (<include refid="utility.selectToday" />) B
|
||||
WHERE LOG_ID LIKE CONCAT(TODAY, '%')</selectKey>
|
||||
INSERT INTO TB_SYS_LOG (
|
||||
LOG_ID <!-- 로그 ID -->
|
||||
, LOG_TYPE <!-- 로그 유형 -->
|
||||
, URL <!-- URL -->
|
||||
, CLS_NM <!-- 클래스 이름 -->
|
||||
, MTD_NM <!-- 메소드 이름 -->
|
||||
, FILE_NM <!-- 파일 이름 -->
|
||||
, DATA_CNT <!-- 데이터 수 -->
|
||||
, DATA_NM <!-- 데이터 이름 -->
|
||||
, PSNL_INFO <!-- 개인 정보 -->
|
||||
, USER_ID <!-- 사용자 ID -->
|
||||
, IP_ADDR <!-- IP 주소 -->
|
||||
, REG_DT <!-- 등록 일시 -->
|
||||
) VALUES (
|
||||
#{id} <!-- 로그 ID -->
|
||||
, #{type} <!-- 로그 유형 -->
|
||||
, #{url} <!-- URL -->
|
||||
, #{className} <!-- 클래스 이름 -->
|
||||
, #{methodName} <!-- 메소드 이름 -->
|
||||
, #{fileName} <!-- 파일 이름 -->
|
||||
, #{dataCount} <!-- 데이터 수 -->
|
||||
, #{fieldNames} <!-- 데이터 이름 -->
|
||||
, #{personalInfo} <!-- 개인 정보 -->
|
||||
, #{userId} <!-- 사용자 ID -->
|
||||
, #{ipAddress} <!-- IP 주소 -->
|
||||
,<include refid="utility.now" />
|
||||
)</insert>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.foundation.test.TestMapper">
|
||||
|
||||
<insert id="insert" parameterType="map">${sql}</insert>
|
||||
|
||||
<update id="update" parameterType="map">${sql}</update>
|
||||
|
||||
<delete id="delete" parameterType="map">${sql}</delete>
|
||||
|
||||
<update id="commit">COMMIT</update>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,221 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<!-- 업무 사용자 -->
|
||||
<mapper namespace="cokr.xit.base.user.dao.UserMapper">
|
||||
|
||||
<resultMap id="userRow" type="cokr.xit.base.user.ManagedUser">
|
||||
<result property="id" column="USER_ID"/>
|
||||
<result property="account" column="USER_ACNT"/>
|
||||
<result property="name" column="USER_NM"/>
|
||||
<result property="password" column="PASSWD"/>
|
||||
<result property="passwordHint" column="PASSWD_HINT"/>
|
||||
<result property="passwordHintAnswer" column="PASSWD_NSR"/>
|
||||
<result property="empNo" column="EMP_NO"/>
|
||||
<result property="residentRegNo" column="RSDNT_NO"/>
|
||||
<result property="gender" column="GENDER"/>
|
||||
<result property="birthday" column="BRDT"/>
|
||||
<result property="areaNo" column="AREA_NO"/>
|
||||
<result property="zipCode" column="ZIP"/>
|
||||
<result property="address" column="ADDR"/>
|
||||
<result property="addressDetail" column="DADDR"/>
|
||||
<result property="phoneNo" column="TELNO"/>
|
||||
<result property="mobilePhoneNo" column="MBL_TELNO"/>
|
||||
<result property="faxNo" column="FXNO"/>
|
||||
<result property="emailAddress" column="EML_ADRS"/>
|
||||
<result property="positionName" column="POS_NM"/>
|
||||
<result property="groupID" column="GRP_ID"/>
|
||||
<result property="orgID" column="ORG_ID"/>
|
||||
<result property="deptCode" column="DEPT_CD"/>
|
||||
<result property="institute" column="NSTT_CD"/>
|
||||
<result property="certificateDn" column="CRTFC_DN"/>
|
||||
<result property="locked" column="LOCK_YN"/>
|
||||
<result property="lockCount" column="LOCK_CNT"/>
|
||||
<result property="lockedDate" column="LOCK_DT"/>
|
||||
<result property="createdAt" column="REG_DT"/>
|
||||
<result property="createdBy" column="RGTR"/>
|
||||
<result property="lastModified" column="MDFCN_DT"/>
|
||||
<result property="modifiedBy" column="MDFR"/>
|
||||
<result property="useYN" column="USE_YN"/>
|
||||
<result property="status" column="STTS"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectUsers"><include refid="utility.paging-prefix" />
|
||||
SELECT USER_ID
|
||||
, USER_ACNT
|
||||
, USER_NM
|
||||
, PASSWD_HINT
|
||||
, PASSWD_NSR
|
||||
, EMP_NO
|
||||
, RSDNT_NO
|
||||
, GENDER
|
||||
, BRDT
|
||||
, AREA_NO
|
||||
, ZIP
|
||||
, ADDR
|
||||
, DADDR
|
||||
, TELNO
|
||||
, MBL_TELNO
|
||||
, FXNO
|
||||
, EML_ADRS
|
||||
, POS_NM
|
||||
, GRP_ID
|
||||
, ORG_ID
|
||||
, DEPT_CD
|
||||
, NSTT_CD
|
||||
, CRTFC_DN
|
||||
, LOCK_YN
|
||||
, LOCK_CNT
|
||||
, LOCK_DT
|
||||
, REG_DT
|
||||
, STTS
|
||||
FROM TB_USER
|
||||
<where><if test="by != null and term != null">AND ${by} LIKE CONCAT('%', #{term}, '%')</if>
|
||||
<if test="userIDs != null">USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)</if>
|
||||
<if test="status == null and userIDs == null">AND STTS != 'D'</if>
|
||||
<if test="status != null">AND STTS = #{status}</if></where>
|
||||
<include refid="utility.orderBy" />
|
||||
<include refid="utility.paging-suffix" /></sql>
|
||||
|
||||
<select id="getUserList" parameterType="map" resultType="dataobject">/* 사용자 목록 조회(userMapper.getUserList) */
|
||||
<include refid="selectUsers"/></select>
|
||||
|
||||
<select id="getUsers" parameterType="map" resultMap="userRow">/* 사용자 가져오기(userMapper.getUsers) */
|
||||
<include refid="selectUsers"/></select>
|
||||
|
||||
<select id="getUser" parameterType="map" resultMap="userRow">/* 사용자 계정 가져오기(userMapper.getUser) */
|
||||
SELECT *
|
||||
FROM TB_USER
|
||||
WHERE USER_ACNT = #{account}
|
||||
AND NSTT_CD = #{institute}</select>
|
||||
|
||||
<insert id="insertUser" parameterType="cokr.xit.base.user.ManagedUser">
|
||||
<selectKey resultType="string" keyProperty="id" keyColumn="NEW_ID" order="BEFORE">SELECT LPAD(NVL(MAX(USER_ID) + 1, 1), 10, '0') NEW_ID FROM TB_USER</selectKey>
|
||||
/* 사용자 정보 등록(userMapper.insertUser) */
|
||||
INSERT INTO TB_USER (
|
||||
USER_ID
|
||||
, USER_ACNT
|
||||
, USER_NM
|
||||
, PASSWD
|
||||
, PASSWD_HINT
|
||||
, PASSWD_NSR
|
||||
, EMP_NO
|
||||
, RSDNT_NO
|
||||
, GENDER
|
||||
, BRDT
|
||||
, AREA_NO
|
||||
, ZIP
|
||||
, ADDR
|
||||
, DADDR
|
||||
, TELNO
|
||||
, MBL_TELNO
|
||||
, FXNO
|
||||
, EML_ADRS
|
||||
, POS_NM
|
||||
, GRP_ID
|
||||
, ORG_ID
|
||||
, NSTT_CD
|
||||
, CRTFC_DN
|
||||
, LOCK_YN
|
||||
, LOCK_CNT
|
||||
, LOCK_DT
|
||||
, REG_DT
|
||||
, RGTR
|
||||
, MDFCN_DT
|
||||
, MDFR
|
||||
, USE_YN
|
||||
, STTS
|
||||
) VALUES (
|
||||
#{id}
|
||||
, #{account}
|
||||
, #{name}
|
||||
, #{password}
|
||||
, #{passwordHint}
|
||||
, #{passwordHintAnswer}
|
||||
, #{empNo}
|
||||
, #{residentRegNo}
|
||||
, #{gender}
|
||||
, #{birthday}
|
||||
, #{areaNo}
|
||||
, #{zipCode}
|
||||
, #{address}
|
||||
, #{addressDetail}
|
||||
, #{phoneNo}
|
||||
, #{mobilePhoneNo}
|
||||
, #{faxNo}
|
||||
, #{emailAddress}
|
||||
, #{positionName}
|
||||
, #{groupID}
|
||||
, #{orgID}
|
||||
, #{institute}
|
||||
, #{certificateDn}
|
||||
, 'N'
|
||||
, 0
|
||||
, NULL
|
||||
,<include refid="utility.now" />
|
||||
, #{createdBy}
|
||||
,<include refid="utility.now" />
|
||||
, #{createdBy}
|
||||
, 'Y'
|
||||
, #{status}
|
||||
)</insert>
|
||||
|
||||
<update id="updateUser" parameterType="cokr.xit.base.user.ManagedUser">/* 사용자 정보 수정(userMapper.updateUser) */
|
||||
UPDATE TB_USER SET
|
||||
USER_NM = #{name}
|
||||
, PASSWD_HINT = #{passwordHint}
|
||||
, PASSWD_NSR = #{passwordHintAnswer}
|
||||
, EMP_NO = #{empNo}
|
||||
, RSDNT_NO = #{residentRegNo}
|
||||
, GENDER = #{gender}
|
||||
, BRDT = #{birthday}
|
||||
, AREA_NO = #{areaNo}
|
||||
, ZIP = #{zipCode}
|
||||
, ADDR = #{address}
|
||||
, DADDR = #{addressDetail}
|
||||
, TELNO = #{phoneNo}
|
||||
, MBL_TELNO = #{mobilePhoneNo}
|
||||
, FXNO = #{faxNo}
|
||||
, EML_ADRS = #{emailAddress}
|
||||
, POS_NM = #{positionName}
|
||||
, GRP_ID = #{groupID}
|
||||
, ORG_ID = #{orgID}
|
||||
, NSTT_CD = #{institute}
|
||||
, CRTFC_DN = #{certificateDn}
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{modifiedBy}
|
||||
WHERE USER_ID = #{id}</update>
|
||||
|
||||
<update id="changePassword" parameterType="map">/* 비밀번호 변경(userMapper.changePassword) */
|
||||
UPDATE TB_USER SET
|
||||
PASSWD = CASE USER_ID<foreach collection="userPasswords" item="userPassword" separator=" ">
|
||||
WHEN #{userPassword.userID} THEN #{userPassword.password}</foreach>
|
||||
ELSE PASSWD END
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
WHERE USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)
|
||||
</update>
|
||||
|
||||
<update id="lockUsers" parameterType="map">/* 사용자 잠김 해제(userMapper.lockUsers) */
|
||||
UPDATE TB_USER SET
|
||||
<if test='lock == true'> LOCK_YN = 'Y'
|
||||
, LOCK_CNT = LOCK_CNT + 1
|
||||
, LOCK_DT =<include refid="utility.now" /></if>
|
||||
<if test='lock == false'> LOCK_YN = 'N'
|
||||
, LOCK_CNT = 0
|
||||
, LOCK_DT = NULL</if>
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
WHERE USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)
|
||||
</update>
|
||||
|
||||
<update id="setStatus" parameterType="map">/* 사용자 상태 변경(userMapper.setStatus) */
|
||||
UPDATE TB_USER SET
|
||||
STTS = #{status}
|
||||
<if test='"D" == status'>, USE_YN = 'N'</if>
|
||||
, MDFCN_DT =<include refid="utility.now" />
|
||||
, MDFR = #{currentUser.id}
|
||||
WHERE USER_ID IN (<foreach collection="userIDs" item="userID" separator=",">#{userID}</foreach>)
|
||||
AND STTS != #{status}
|
||||
</update>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="utility">
|
||||
|
||||
<!-- For Maria DB -->
|
||||
<sql id="paging-prefix"><if test="fetchSize != null and fetchSize > 0">
|
||||
SELECT QROWS.* FROM (
|
||||
SELECT ROW_NUMBER() OVER(<include refid="utility.sortBy" />) ROW_NUM
|
||||
, COUNT(*) OVER() TOT_CNT, QBODY.*
|
||||
FROM (</if></sql>
|
||||
|
||||
<sql id="paging-suffix"><if test="fetchSize != null and fetchSize > 0"> ) QBODY
|
||||
) QROWS
|
||||
WHERE ROW_NUM BETWEEN ((#{pageNum} - 1) * #{fetchSize}) + 1 AND (#{pageNum} * #{fetchSize})</if></sql>
|
||||
|
||||
<select id="foundRows" resultType="dataobject">/* 전체 결과수 가져오기(utility.foundRows) */
|
||||
SELECT FOUND_ROWS() TOT_CNT</select>
|
||||
|
||||
<sql id="sortBy"><if test="orderBy != null and orderBy != ''">ORDER BY ${orderBy}</if></sql>
|
||||
|
||||
<sql id="orderBy"><if test="fetchSize == null or fetchSize < 1"><include refid="utility.sortBy" /></if></sql>
|
||||
|
||||
<sql id="now"><if test="_databaseId == 'mariadb'">DATE_FORMAT(CURRENT_TIMESTAMP, '%Y%m%d%H%i%s')</if>
|
||||
<if test="_databaseId == 'oracle'">TO_CHAR(CURRENT_TIMESTAMP, 'YYYYMMDDHH24MISS')</if></sql>
|
||||
|
||||
<sql id="selectNow">SELECT<include refid="utility.now" />NOW FROM DUAL</sql>
|
||||
|
||||
<sql id="today"><if test="_databaseId == 'mariadb'">DATE_FORMAT(CURRENT_DATE, '%Y%m%d')</if>
|
||||
<if test="_databaseId == 'oracle'">TO_CHAR(CURRENT_DATE, 'YYYYMMDD')</if></sql>
|
||||
|
||||
<sql id="selectToday">SELECT<include refid="utility.today" />TODAY FROM DUAL</sql>
|
||||
|
||||
<sql id="thisDay">NVL(#{thisDay},<include refid="utility.today" />)</sql>
|
||||
|
||||
<sql id="selectThisDay">SELECT<include refid="utility.thisDay" />THIS_DAY FROM DUAL</sql>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
|
||||
<configuration>
|
||||
|
||||
<settings>
|
||||
<setting name="mapUnderscoreToCamelCase" value="false"/>
|
||||
<setting name="cacheEnabled" value="false" />
|
||||
<setting name="jdbcTypeForNull" value="NULL" />
|
||||
<setting name="callSettersOnNulls" value="true"/>
|
||||
</settings>
|
||||
|
||||
<typeAliases>
|
||||
<typeAlias alias="egovMap" type="org.egovframe.rte.psl.dataaccess.util.EgovMap"/>
|
||||
<typeAlias alias="dataobject" type="cokr.xit.foundation.data.DataObject"/>
|
||||
</typeAliases>
|
||||
|
||||
<typeHandlers>
|
||||
<typeHandler handler="cokr.xit.foundation.data.RowValueHandler" javaType="java.lang.Object"/>
|
||||
</typeHandlers>
|
||||
|
||||
</configuration>
|
Binary file not shown.
@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDDjCCAfYCCQDbO1z91FnwgjANBgkqhkiG9w0BAQUFADBJMQswCQYDVQQGEwJL
|
||||
UjEQMA4GA1UECgwHWElUIENvLjEaMBgGA1UECwwRVGVjaCBTdXBwb3J0IFRlYW0x
|
||||
DDAKBgNVBAMMA1hJVDAeFw0yMzEyMjYwMDI2MzRaFw0zMzEyMjMwMDI2MzRaMEkx
|
||||
CzAJBgNVBAYTAktSMRAwDgYDVQQKDAdYSVQgQ28uMRowGAYDVQQLDBFUZWNoIFN1
|
||||
cHBvcnQgVGVhbTEMMAoGA1UEAwwDWElUMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
||||
MIIBCgKCAQEArwLzC41G7AiVuTckixC2KMUQAgCY9hq0Zhl08E2TG00iuOYXGeph
|
||||
cNUWV2aWbpMa3tLlQUoNh9Fe1Yv4Ik4VaZWztkERU0KSTN4ChBXv/Yu4F8jZQDzF
|
||||
GsjyktSyWtq0lr+nm6paQ5jRnY4/KkDZpDTq14fNsn9h5UbmCr0yI+hCQPhw0x6J
|
||||
Mu2XmiYvfdEJgjV5etXQZUG6+M72uV50YK07E89sf+CaMZfP76IKnNI5aeIuSrtg
|
||||
8pc91z7bf18SCt78k53JQCTCAwSd/Ll4Wpuyt/u2FR5z/sBSqk3AgmXF4Vn9wQdE
|
||||
jgYf8Fz13W1rixwYqzO1HxsNugJRTRANvwIDAQABMA0GCSqGSIb3DQEBBQUAA4IB
|
||||
AQAvYXx7WYzfU3Py2+2+WY9uwfxOvae9GmMV6TCTcCO5ZTAf4hn0lhD2OvYHDZKV
|
||||
/zybEeGssAKwPgItV2q0g3NC3RoF9TW979m+8QM71oYNilJ7Mt96VRPh9qmywckZ
|
||||
EOJ4HXLJTGZ7QijYW6oNWOimpRW6pd/PrZMktpyJZRppCT6blUVUvcyRRdjsO3lT
|
||||
FNBxy7/SeN0b50DbDBPZs+lrr59kHtj+n19DoTXEsfFNJrpzBRIFLuziVzi49MaQ
|
||||
HMKzEToERrBfWtkFJq4N4SSLy0Q4nqzk5BgfqJP/2hRkBgEY+Ep7NefU7BXIgsEe
|
||||
rRmPf4yzVyQ/8MVYhEMzQdua
|
||||
-----END CERTIFICATE-----
|
@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIIDATCCAekCAQAwWDELMAkGA1UEBhMCS1IxEDAOBgNVBAoMB1hJVCBDby4xGjAY
|
||||
BgNVBAsMEVRlY2ggU3VwcG9ydCBUZWFtMRswGQYDVQQDDBJ3d3cueGl0LW50cmku
|
||||
Y28ua3IwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvAvMLjUbsCJW5
|
||||
NySLELYoxRACAJj2GrRmGXTwTZMbTSK45hcZ6mFw1RZXZpZukxre0uVBSg2H0V7V
|
||||
i/giThVplbO2QRFTQpJM3gKEFe/9i7gXyNlAPMUayPKS1LJa2rSWv6ebqlpDmNGd
|
||||
jj8qQNmkNOrXh82yf2HlRuYKvTIj6EJA+HDTHoky7ZeaJi990QmCNXl61dBlQbr4
|
||||
zva5XnRgrTsTz2x/4Joxl8/vogqc0jlp4i5Ku2Dylz3XPtt/XxIK3vyTnclAJMID
|
||||
BJ38uXham7K3+7YVHnP+wFKqTcCCZcXhWf3BB0SOBh/wXPXdbWuLHBirM7UfGw26
|
||||
AlFNEA2/AgMBAAGgZDBiBgkqhkiG9w0BCQ4xVTBTMBIGA1UdEwEB/wQIMAYBAf8C
|
||||
AQAwHQYDVR0OBBYEFOXXDxH05CRh8HUv+fiMPyuOb4eHMAsGA1UdDwQEAwIBBjAR
|
||||
BglghkgBhvhCAQEEBAMCAAcwDQYJKoZIhvcNAQEFBQADggEBAJQG7pJoYj6oliX3
|
||||
1662TX1cNYP6IPJsT6BYsGt8n+OP3SIGbqZVZ4yPQJVBTgSApZcnRu+vHqjs9IVw
|
||||
DafhXIqIYjWxyWkvttUqCHgG/n4o5jT5gQf6KFEY/SdtYtN1AjDc6kt4OUeXJqbH
|
||||
3jm7rWOIvCF+E9cyk/zaCN+gT3bQHm6ku6D8iSKJgpqdKfvbRepUphYsrCv7oVoh
|
||||
/IQoumabOq/2fKKIiPSxBW8BLPGb5jpjdae5rxNIk5GKxgsaz9hr2unaypJAcWGe
|
||||
p/Q+l6SZBmSF7SMKgMkuq7Ov0Y13q6dylN+8lVsURveUEL/56bLm85gPtcOYqfZR
|
||||
OXXPNEU=
|
||||
-----END CERTIFICATE REQUEST-----
|
@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEArwLzC41G7AiVuTckixC2KMUQAgCY9hq0Zhl08E2TG00iuOYX
|
||||
GephcNUWV2aWbpMa3tLlQUoNh9Fe1Yv4Ik4VaZWztkERU0KSTN4ChBXv/Yu4F8jZ
|
||||
QDzFGsjyktSyWtq0lr+nm6paQ5jRnY4/KkDZpDTq14fNsn9h5UbmCr0yI+hCQPhw
|
||||
0x6JMu2XmiYvfdEJgjV5etXQZUG6+M72uV50YK07E89sf+CaMZfP76IKnNI5aeIu
|
||||
Srtg8pc91z7bf18SCt78k53JQCTCAwSd/Ll4Wpuyt/u2FR5z/sBSqk3AgmXF4Vn9
|
||||
wQdEjgYf8Fz13W1rixwYqzO1HxsNugJRTRANvwIDAQABAoIBAGGpp6+emyFEeSju
|
||||
mLnyDXUa4x/67WEI7fq74gHniFwH44SDAgk4PkAU6W7ElNYHyUrnLYANrxdHw0Av
|
||||
57xdDp3pKGxgSybHU5UJnyXOiCpZOdYsAvBR+TxFPvipMQ56VaR6NzIrEkv+j5r4
|
||||
sk8F+W4lCZhU9HjTlPG5as47Xiuil9RlfkxWrd9rNtxSnIIhwIvTd8PkRgjiG+MH
|
||||
TxZX6jYGRRYioPIosw3EKzJ03u2nC1LrdDaY2y0gPoNPiD1NFeRoadQrch/3oRVO
|
||||
VCISN2WhOI7vOs3Q/oJ27w61ZFCx+tXYbct/y8Re6Ze4cxJPbv6Kg3ZuyHlfSaav
|
||||
YJylzwECgYEA4+CUk1xN6TmR+z02Nm9qCR6OH5x3lipgMruJ0HMHorm5VdjmFmfa
|
||||
FxPxEKI1TSOGm9N5p0XpJfI4YG12sZcNDWJsT0cwrJwwAp952PpkHK+aTh8y+dh1
|
||||
tjbm1tJ0zw4vG/XohZt9g9GElSAtD6u4so/nlChiwKVbMz55dTt2Mp8CgYEAxJwo
|
||||
72Yl+ubmBlEOJozjeAU2CiiJ5K7pAK98Z+ToW1cmjYhcOZW0NoUPJqFlHVOfRXy2
|
||||
mKTqTDUR3l5JqjIXB10Ol0JA4m739dA9kJApqyG/THXJQU/Bmkfv/Bj/0DtbvQts
|
||||
hBMv73dpj5Utf+uiLYBqoHKsOipYJmAk0nb4cOECgYEA2Uk9AuKCHABcNX+hoPhN
|
||||
2JI9HOFammKfxeBTQeNdhYmosrYWd4jhSR4nwB+byYk1goJ8vsaH0ToNDc1y31XU
|
||||
CU4vTszoGb74fJfKXN4s9blv3kwblGcVnwDszixxWzoAK54o8LVaUoZG8Nd0gDvS
|
||||
6tkTDZAQ0fcaZluM/v8K7qsCgYA5WoyeeZ/ut1i20wJbwJHCu1JuWDERouyZpJeX
|
||||
/zDBJIU8mGC+86rklKA81qwWiARYUu85TDKFFJ4nzj2TBpWtMjpFabBf3Zs7/AlZ
|
||||
mJRvNaMGfP2+rbN+fCnH0ssdRZOXbDO1u5sqMh17Iztoq6Zdu65fK9SOCzg3yag0
|
||||
NTx4QQKBgD0bwiXYxdbyuha4MhYHfomUW6SKA9YhYzWbaqC91tiPu8cz6Bxe9Xf+
|
||||
LAbG0iroGU94pTSKV9CFqzYn5SiV3U49Xpjg9iHNa+tRV7IDngclws3wJn/v4Moq
|
||||
Wq0TRjMwbH9ERurqU3akv8O6rbMPqvG9IlIZlI0YAcZcmOm96qpj
|
||||
-----END RSA PRIVATE KEY-----
|
@ -0,0 +1,42 @@
|
||||
{ "enabled": true,
|
||||
"cryptoDefs": [ /* 암복호화 지원 클래스별 설정. 사용하지 않는 설정은 제거할 것. */
|
||||
{ "name": "aria",
|
||||
"class": "cokr.xit.base.crypto.bean.ARIA",
|
||||
"settings": {
|
||||
"key": "Copyright (c) 2015 - (주)엑스아이티",
|
||||
// "hashedPassword": "", // 지정하지 않으면 key로 생성
|
||||
"algorithm": "SHA-256",
|
||||
"blockSize": 1024
|
||||
}
|
||||
}
|
||||
/*
|
||||
{ "name": "echelon",
|
||||
"class": "cokr.xit.base.crypto.bean.Echelon",
|
||||
"settings": {
|
||||
"module": "3rd-party/echelon", // echelon 라이브러리 파일 디렉토리 경로
|
||||
"agentIP": "211.119.124.117",
|
||||
"agentPort": 29995
|
||||
}
|
||||
},
|
||||
{ "name": "dguard",
|
||||
"class": "cokr.xit.base.crypto.bean.DGuard",
|
||||
"settings": {
|
||||
"secureID": "xit_agent",
|
||||
"securePWD": "Agent!@#$5",
|
||||
"securePIN": "Agent!@#$5",
|
||||
"propertyPath": "3rd-party/dguard/conf/dguard.conf", // dguard 설정파일 경로
|
||||
"tableName": "TB_PAYER",
|
||||
"columnName": "RTPYR_NO"
|
||||
}
|
||||
}
|
||||
*/
|
||||
],
|
||||
|
||||
"targetValues": [ /* 암복호화 대상데이터 설정 */
|
||||
{ "name": "주민등록번호",
|
||||
"mapKeys": ["RTPYR_NO", "rtpyrNo"],
|
||||
"objectProperties": ["rtpyrNo"],
|
||||
"cryptoDefs": ["aria"] // 암복호화 지원 클래스 설정 이름
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
{
|
||||
"exclude": {
|
||||
"classes": [],
|
||||
"methods": []
|
||||
},
|
||||
|
||||
"personalFields": [
|
||||
{ "name": "주민등록번호",
|
||||
"code": "",
|
||||
"mapKeys": ["RTPYR_NO"],
|
||||
"objectProperties": []
|
||||
},
|
||||
{ "name": "계좌번호",
|
||||
"code": "",
|
||||
"mapKeys": [],
|
||||
"objectProperties": []
|
||||
},
|
||||
{ "name": "주소",
|
||||
"code": "",
|
||||
"mapKeys": [],
|
||||
"objectProperties": []
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="actioninfoPrefix-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" required data-map="GRP_ID" maxlength="50" class="form-control" placeholder="prefixName 아이디" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required data-map="GRP_NM" maxlength="60" class="form-control" placeholder="prefixName 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control dob-picker" placeholder="prefixName 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12" style="text-align:right;">
|
||||
<button onclick="saveinfoPrefix();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var actioninfoPrefixFields = new FormFields("#actioninfoPrefix-form");
|
||||
|
||||
actioninfoPrefixControl.groups.setInfo = obj => {
|
||||
actioninfoPrefixFields.set(actioninfoPrefixControl, obj);
|
||||
let create = isEmpty(obj.data.GRP_ID);
|
||||
$("input[name='id']").prop("readonly", !create);
|
||||
$("#actioninfoPrefix-form input").onEnterPress(saveinfoPrefix);
|
||||
|
||||
document.querySelector("input[name='" + (create ? "id" : "name") + "']").focus();
|
||||
}
|
||||
|
||||
actioninfoPrefixControl.groups.onModify = (changed) => {
|
||||
if (["GRP_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderactioninfoPrefixList();
|
||||
actioninfoPrefixControl.groups.dataset.setState();
|
||||
}
|
||||
|
||||
function saveinfoPrefix() {
|
||||
if (!$("#actioninfoPrefix-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 prefixName 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
actioninfoPrefixControl.groups.save(actioninfoPrefixFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=actionGroup-info.jsp
|
||||
</script>
|
@ -0,0 +1,221 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">기능 그룹</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">기능 그룹</h5>
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="by" onchange="document.getElementById('term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}ID">아이디</option>
|
||||
</select>
|
||||
<input id="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="searchaction${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
<button onclick="action${infoPrefix}Control.groups.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveaction${infoPrefix}s" onclick="removeaction${infoPrefix}s();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="action${infoPrefix}Control.groups.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" style="">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="action${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="action${infoPrefix}Row">
|
||||
<tr data-key="{GRP_ID}">
|
||||
<td style="text-align:center;"><input value="{GRP_ID}" onchange="action${infoPrefix}Control.groups.select('{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="action${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="action${infoPrefix}Control.groups.getInfo({})">{GRP_ID}</td>
|
||||
<td onclick="action${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="action${infoPrefix}Control.groups.getInfo({})">{GRP_NM}</td>
|
||||
<td onclick="action${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="action${infoPrefix}Control.groups.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="action${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="action${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="action${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">기능 URL</h5>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddActions" onclick="action${infoPrefix}Control.addActions();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveActions" onclick="removeActions();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="actionToggler" onchange="action${infoPrefix}Control.actions.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">기능 URL</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="actionList">
|
||||
</tbody>
|
||||
<template id="actionRow">
|
||||
<tr data-key="{GRP_ID}-{ACTION}">
|
||||
<td style="text-align:center;"><input value="{GRP_ID}-{ACTION}" onchange="action${infoPrefix}Control.actions.select('{GRP_ID}-{ACTION}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="action${infoPrefix}Control.actions.setCurrent('{GRP_ID}-{ACTION}')">{ACTION}</td>
|
||||
<td onclick="action${infoPrefix}Control.actions.setCurrent('{GRP_ID}-{ACTION}">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="actionNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">기능 URL 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="actionPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="actionPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var action${infoPrefix}Control = new ActionGroupControl();
|
||||
|
||||
function searchaction${infoPrefix}s() {
|
||||
action${infoPrefix}Control.groups.query = {
|
||||
by:$("#by").val(),
|
||||
term:$("#term").val()
|
||||
};
|
||||
action${infoPrefix}Control.groups.load(1);
|
||||
}
|
||||
|
||||
function removeaction${infoPrefix}s() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
action${infoPrefix}Control.groups.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function removeActions() {
|
||||
dialog.alert({
|
||||
content:"선택한 기능 URL을 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
action${infoPrefix}Control.removeActions();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderaction${infoPrefix}List() {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.groups.dataset;
|
||||
let empty = action${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("action${infoPrefix}NotFound").innerHTML] : <%-- from template#action${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("action${infoPrefix}Row").innerHTML); <%-- from template#action${infoPrefix}Row --%>
|
||||
$("#action${infoPrefix}List").html(trs.join());
|
||||
$("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
action${infoPrefix}Control.onGroupListChange = obj => {
|
||||
renderaction${infoPrefix}List();
|
||||
|
||||
$("#action${infoPrefix}Paging").setPaging({
|
||||
list:action${infoPrefix}Control.groups.dataset,
|
||||
prefix:action${infoPrefix}Control.groups.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"action${infoPrefix}Control.groups.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onCurrentGroupChange = item => {
|
||||
$("#btnAddActions").prop("disabled", !item);
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.GRP_ID;
|
||||
$("#action${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onGroupSelect = selected => {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.groups.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#action${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveaction${infoPrefix}s").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
|
||||
action${infoPrefix}Control.onActionListChange = obj => {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.actions.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("actionNotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("actionRow").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#actionList").html(trs.join());
|
||||
$("#actionToggler").prop("checked", false);
|
||||
|
||||
$("#actionPaging").setPaging({
|
||||
list:action${infoPrefix}Control.actions.dataset,
|
||||
prefix:action${infoPrefix}Control.actions.prefix,
|
||||
start:obj.actionStart,
|
||||
totalSize:obj.actionTotal,
|
||||
fetchSize:obj.actionFetch,
|
||||
func:"action${infoPrefix}Control.actions.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onCurrentActionChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.GRP_ID + "-" + data.ACTION;
|
||||
$("#actionList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
action${infoPrefix}Control.onActionSelect = selected => {
|
||||
let ${infoPrefix}List = action${infoPrefix}Control.actions.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#actionList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveActions").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
$("#term").onEnterPress(searchaction${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
action${infoPrefix}Control.groups.setData({
|
||||
${infoPrefix}List:${groupList},
|
||||
${infoPrefix}Start:${groupStart},
|
||||
${infoPrefix}Fetch:${groupFetch},
|
||||
${infoPrefix}Total:${groupTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=actionGroup-main.jsp
|
||||
</script>
|
@ -0,0 +1,121 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">기능 그룹</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="_actionGroupBy" onchange="document.getElementById('_actionGroupTerm').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}ID">아이디</option>
|
||||
</select>
|
||||
<input id="_actionGroupTerm" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="_search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="${infoPrefix}Control.groups.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" style="">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="_action${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="_action${infoPrefix}Row">
|
||||
<tr data-key="{GRP_ID}">
|
||||
<td style="text-align:center;"><input value="{GRP_ID}" onchange="${infoPrefix}Control.groups.select('{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="${infoPrefix}Control.groups.getInfo({})">{GRP_ID}</td>
|
||||
<td onclick="${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="${infoPrefix}Control.groups.getInfo({})">{GRP_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.groups.setCurrent('{GRP_ID}')" ondblclick="${infoPrefix}Control.groups.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="_action${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="_action${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="_action${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new ActionGroupControl(false);
|
||||
|
||||
function getSelectedActionGroup() {
|
||||
let selected = ${infoPrefix}Control.groups.dataset.getKeys("selected");
|
||||
if (selected.length < 1)
|
||||
return dialog.alert("기능그룹을 선택하십시오.");
|
||||
else
|
||||
return selected;
|
||||
}
|
||||
|
||||
function _search${infoPrefix}s() {
|
||||
${infoPrefix}Control.groups.query = {
|
||||
by:$("#_actionGroupBy").val(),
|
||||
term:$("#_actionGroupTerm").val()
|
||||
};
|
||||
${infoPrefix}Control.groups.load(1);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onGroupListChange = obj => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.groups.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("_action${infoPrefix}NotFound").innerHTML] : <%-- from template#_action${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("_action${infoPrefix}Row").innerHTML); <%-- from template#_action${infoPrefix}Row --%>
|
||||
$("#_action${infoPrefix}List").html(trs.join());
|
||||
$("th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
$("#_action${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.groups.dataset,
|
||||
prefix:${infoPrefix}Control.groups.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.groups.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentGroupChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.GRP_ID;
|
||||
$("#_action${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onGroupSelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.groups.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#_action${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
};
|
||||
|
||||
$("#_actionGroupTerm").onEnterPress(_search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.groups.setData({
|
||||
${infoPrefix}List:${groupList},
|
||||
${infoPrefix}Start:${groupStart},
|
||||
${infoPrefix}Fetch:${groupFetch},
|
||||
${infoPrefix}Total:${groupTotal}
|
||||
});
|
||||
});
|
||||
</script>
|
@ -0,0 +1,91 @@
|
||||
<%@ 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="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddAuthActions" onclick="${infoPrefix}Control.addActions();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveAuthActions" onclick="removeAuthActions();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="authActionToggler" onchange="${infoPrefix}Control.actions.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">기능 그룹</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="authActionList">
|
||||
</tbody>
|
||||
<template id="authActionRow">
|
||||
<tr data-key="{AUTH_ID}-{GRP_ID}">
|
||||
<td style="text-align:center;"><input value="{AUTH_ID}-{GRP_ID}" onchange="${infoPrefix}Control.actions.select('{AUTH_ID}-{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.actions.setCurrent('{AUTH_ID}-{GRP_ID}')">{GRP_ID}</td>
|
||||
<td onclick="${infoPrefix}Control.actions.setCurrent('{AUTH_ID}-{GRP_ID}">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="authActionNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">기능 그룹 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="adminActions">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">{authority}는 모든 기능을 사용할 수 있습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="authActionPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="authActionPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<c:set var="actionGroupFunc" scope="request">function removeAuthActions() {
|
||||
dialog.alert({
|
||||
content:"선택한 기능그룹을 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.removeActions();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onActionListChange = obj => {
|
||||
let authority = ${infoPrefix}Control.authorities.getCurrent();
|
||||
authority = authority ? authority.AUTH_NM : "";
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.actions.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs =
|
||||
${infoPrefix}Control.authorities.isAdmin() ? [document.getElementById("adminActions").innerHTML.replace(/{authority}/, authority)] :
|
||||
empty ?
|
||||
[document.getElementById("authActionNotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("authActionRow").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#authActionList").html(trs.join());
|
||||
$("#authActionToggler").prop("checked", false);
|
||||
|
||||
$("#authActionPaging").setPaging({
|
||||
list:${infoPrefix}Control.actions.dataset,
|
||||
prefix:${infoPrefix}Control.actions.prefix,
|
||||
start:obj.actionStart,
|
||||
totalSize:obj.actionTotal,
|
||||
fetchSize:obj.actionFetch,
|
||||
func:"${infoPrefix}Control.actions.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentActionChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.AUTH_ID + "-" + data.GRP_ID;
|
||||
$("#authActionList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onActionSelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.actions.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#authActionList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveAuthActions").prop("disabled", keys.length < 1);
|
||||
};</c:set>
|
@ -0,0 +1,75 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="infoPrefix-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" required data-map="AUTH_ID" maxlength="50" class="form-control" placeholder="prefixName 아이디" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required data-map="AUTH_NM" maxlength="60" class="form-control" placeholder="prefixName 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control dob-picker" placeholder="prefixName 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12" style="text-align:right;">
|
||||
<button id="btnSaveAuth" onclick="saveinfoPrefix();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var infoPrefixFields = new FormFields("#infoPrefix-form");
|
||||
|
||||
infoPrefixControl.authorities.setInfo = obj => {
|
||||
infoPrefixFields.set(infoPrefixControl, obj);
|
||||
let info = obj.data;
|
||||
let create = isEmpty(info.AUTH_ID);
|
||||
$("input[name='id']").prop("readonly", !create);
|
||||
$("#infoPrefix-form input").onEnterPress(saveinfoPrefix);
|
||||
|
||||
$("input[name='" + (create ? "id" : "name") + "']").focus();
|
||||
$("#btnSaveAuth").prop("disabled", infoPrefixControl.authorities.isBuiltIn(info));
|
||||
}
|
||||
|
||||
infoPrefixControl.authorities.onModify = (changed) => {
|
||||
if (["AUTH_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderinfoPrefixList();
|
||||
infoPrefixControl.authorities.dataset.setState();
|
||||
}
|
||||
|
||||
function saveinfoPrefix() {
|
||||
if (!$("#infoPrefix-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 prefixName 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
infoPrefixControl.authorities.save(infoPrefixFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=actionGroup-info.jsp
|
||||
</script>
|
@ -0,0 +1,162 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">권한</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">권한</h5>
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="by" onchange="document.getElementById('term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="authName">이름</option>
|
||||
<option value="authID">아이디</option>
|
||||
</select>
|
||||
<input id="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
<button onclick="${infoPrefix}Control.authorities.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemove${infoPrefix}s" onclick="remove${infoPrefix}s();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="${infoPrefix}Control.authorities.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" style="">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row">
|
||||
<tr data-key="{AUTH_ID}">
|
||||
<td style="text-align:center;"><input value="{AUTH_ID}" onchange="${infoPrefix}Control.authorities.select('{AUTH_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.authorities.setCurrent('{AUTH_ID}')" ondblclick="${infoPrefix}Control.authorities.getInfo({})">{AUTH_ID}</td>
|
||||
<td onclick="${infoPrefix}Control.authorities.setCurrent('{AUTH_ID}')" ondblclick="${infoPrefix}Control.authorities.getInfo({})">{AUTH_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.authorities.setCurrent('{AUTH_ID}')" ondblclick="${infoPrefix}Control.authorities.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%; padding-top:.25em;">
|
||||
<div class="nav-align-top">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item">
|
||||
<button type="button" onClick="${infoPrefix}Control.getLinkedList('users');" class="nav-link active" role="tab" data-bs-toggle="tab" data-bs-target="#navs-top-users" aria-controls="navs-top-users" aria-selected="true">사용자</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button type="button" onClick="${infoPrefix}Control.getLinkedList('actions');" class="nav-link" role="tab" data-bs-toggle="tab" data-bs-target="#navs-top-actions" aria-controls="navs-top-actions" aria-selected="false">기능그룹</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content" style="padding:.6em 0;">
|
||||
<div class="tab-pane fade show active" id="navs-top-users" role="tabpanel">
|
||||
<jsp:include page="user-list.jsp" />
|
||||
</div>
|
||||
<div class="tab-pane fade" id="navs-top-actions" role="tabpanel">
|
||||
<jsp:include page="actionGroup-list.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new AuthorityControl();
|
||||
|
||||
function search${infoPrefix}s() {
|
||||
${infoPrefix}Control.authorities.query = {
|
||||
by:$("#by").val(),
|
||||
term:$("#term").val()
|
||||
};
|
||||
${infoPrefix}Control.authorities.load(1);
|
||||
}
|
||||
|
||||
function remove${infoPrefix}s() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.removeAuthorities();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function render${infoPrefix}List() {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.authorities.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("${infoPrefix}Row").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#${infoPrefix}List").html(trs.join());
|
||||
$("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onAuthorityListChange = obj => {
|
||||
render${infoPrefix}List();
|
||||
|
||||
$("#${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.authorities.dataset,
|
||||
prefix:${infoPrefix}Control.authorities.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.authorities.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentAuthorityChange = item => {
|
||||
$("#btnAddActions").prop("disabled", !item || ${infoPrefix}Control.authorities.isAdmin(item.data));
|
||||
$("#btnAddUsers").prop("disabled", !item || ${infoPrefix}Control.authorities.isImplicit(item.data));
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.AUTH_ID;
|
||||
$("#${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onAuthoritySelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.authorities.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
let builtIn = selected.filter(info => ${infoPrefix}Control.authorities.isBuiltIn(info)).length > 0;
|
||||
|
||||
$("#btnRemove${infoPrefix}s").prop("disabled", keys.length < 1 || builtIn);
|
||||
};
|
||||
|
||||
${userFunc}
|
||||
${actionGroupFunc}
|
||||
|
||||
$("#term").onEnterPress(search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.authorities.setData({
|
||||
${infoPrefix}List:${authorityList},
|
||||
${infoPrefix}Start:${authorityStart},
|
||||
${infoPrefix}Fetch:${authorityFetch},
|
||||
${infoPrefix}Total:${authorityTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=authority-main.jsp
|
||||
</script>
|
@ -0,0 +1,91 @@
|
||||
<%@ 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="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddAuthUsers" onclick="${infoPrefix}Control.addUsers();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveAuthUsers" onclick="removeAuthUsers();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="authUserToggler" onchange="${infoPrefix}Control.users.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">사용자</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="authUserList">
|
||||
</tbody>
|
||||
<template id="authUserRow">
|
||||
<tr data-key="{AUTH_ID}-{USER_ID}">
|
||||
<td style="text-align:center;"><input value="{AUTH_ID}-{USER_ID}" onchange="${infoPrefix}Control.users.select('{AUTH_ID}-{USER_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}')">{USER_ACNT}</td>
|
||||
<td onclick="${infoPrefix}Control.users.setCurrent('{AUTH_ID}-{USER_ID}">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="authUserNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">사용자 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="implicitActions">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">{authority}는 사용자를 지정하지 않습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="authUserPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="authUserPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
<c:set var="userFunc" scope="request">
|
||||
function removeAuthUsers() {
|
||||
dialog.alert({
|
||||
content:"선택한 사용자를 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.removeUsers();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onUserListChange = obj => {
|
||||
let authority = ${infoPrefix}Control.authorities.getCurrent();
|
||||
authority = authority ? authority.AUTH_NM : "";
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.users.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs =
|
||||
${infoPrefix}Control.authorities.isImplicit() ? [document.getElementById("implicitActions").innerHTML.replace(/{authority}/, authority)] :
|
||||
empty ? [document.getElementById("authUserNotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("authUserRow").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#authUserList").html(trs.join());
|
||||
$("#authUserToggler").prop("checked", false);
|
||||
|
||||
$("#authUserPaging").setPaging({
|
||||
list:${infoPrefix}Control.users.dataset,
|
||||
prefix:${infoPrefix}Control.users.prefix,
|
||||
start:obj.userStart,
|
||||
totalSize:obj.userTotal,
|
||||
fetchSize:obj.userFetch,
|
||||
func:"${infoPrefix}Control.users.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentUserChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.AUTH_ID + "-" + data.USER_ID;
|
||||
$("#authUserList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onUserSelect = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.users.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#authUserList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveAuthUsers").prop("disabled", keys.length < 1);
|
||||
};</c:set>
|
@ -0,0 +1,135 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="code-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="code"
|
||||
>코드</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="code" type="text" required data-map="CODE" maxlength="15" class="form-control" placeholder="코드" />
|
||||
<input name="groupID" type="hidden" data-map="GRP_ID" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="value"
|
||||
>코드값</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="value" type="text" required data-map="CODE_VAL" maxlength="60" class="form-control" placeholder="코드값" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control" placeholder="코드 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="etc1"
|
||||
>기타값 1</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="etc1" type="text" data-map="ETC1" maxlength="200" class="form-control" placeholder="기타값 1"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="etc2"
|
||||
>기타값2</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="etc2" type="text" data-map="ETC2" maxlength="200" class="form-control" placeholder="기타값 2"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="etc3"
|
||||
>기타값3</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="etc3" type="text" data-map="ET3" maxlength="200" class="form-control" placeholder="기타값 3"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="createdBy"
|
||||
>등록자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="RGTR" readonly class="form-control" placeholder="등록자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>등록일자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="REG_DT" readonly class="form-control" placeholder="등록일자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>사용여부</label
|
||||
>
|
||||
<div class="col-sm-10" style="padding:.5em .7em;">
|
||||
<span id="codeInUse"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12" style="text-align:right;">
|
||||
<button onclick="saveCode();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var codeFields = new FormFields("#code-form");
|
||||
|
||||
codeControl.codes.setInfo = obj => {
|
||||
let info = obj.data;
|
||||
codeFields.set(codeControl, obj);
|
||||
let create = isEmpty(info.CODE);
|
||||
$("input[name='code']").prop("readonly", !create);
|
||||
$("#code-form input").onEnterPress(saveCode);
|
||||
$("#codeInUse").html("Y" == info.USE_YN ? "사용 중" : "사용하지 않음");
|
||||
document.querySelector("input[name='" + (create ? "code" : "value") + "']").focus();
|
||||
}
|
||||
|
||||
codeControl.codes.onModify = (changed) => {
|
||||
if (["CODE", "CODE_VAL"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderCodeList();
|
||||
codeControl.codes.dataset.setState();
|
||||
}
|
||||
|
||||
function saveCode() {
|
||||
if (!$("#code-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 코드 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.codes.save(codeFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=code-info.jsp
|
||||
</script>
|
@ -0,0 +1,226 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">코드 그룹</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">${prefixName}</h5>
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<%--div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="by" onchange="document.getElementById('term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="groupName">이름</option>
|
||||
<option value="groupID">아이디</option>
|
||||
</select>
|
||||
<input id="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div--%>
|
||||
<div>
|
||||
<%--button onclick="searchGroups();" class="btn btn-primary">찾기</button--%>
|
||||
<button onclick="codeControl.groups.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveGroups" onclick="removeGroups();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="codeControl.groups.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending">아이디</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="groupList">
|
||||
</tbody>
|
||||
<template id="groupRow">
|
||||
<tr data-key="{GRP_ID}">
|
||||
<td style="text-align:center;"><input value="{GRP_ID}" onchange="codeControl.groups.select('{GRP_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="codeControl.groups.setCurrent('{GRP_ID}')" ondblclick="codeControl.groups.getInfo({})">{GRP_ID}</td>
|
||||
<td onclick="codeControl.groups.setCurrent('{GRP_ID}')" ondblclick="codeControl.groups.getInfo({})">{GRP_NM}</td>
|
||||
<td onclick="codeControl.groups.setCurrent('{GRP_ID}')" ondblclick="codeControl.groups.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="groupNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="groupPagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="groupPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">공통 코드</h5>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnAddCode" onclick="codeControl.newCode();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemoveCodes" onclick="removeCodes();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input id="codeToggler" onchange="codeControl.codes.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending">코드</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending">코드값</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="codeList">
|
||||
</tbody>
|
||||
<template id="codeRow">
|
||||
<tr data-key="{CODE}">
|
||||
<td style="text-align:center;"><input value="{CODE}" onchange="codeControl.codes.select('{CODE}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="codeControl.codes.setCurrent('{CODE}')" ondblclick="codeControl.codes.getInfo({})">{CODE}</td>
|
||||
<td onclick="codeControl.codes.setCurrent('{CODE}')" ondblclick="codeControl.codes.getInfo({})">{CODE_VAL}</td>
|
||||
<td onclick="codeControl.codes.setCurrent('{CODE}')" ondblclick="codeControl.codes.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="codeNotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">코드 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="codePagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="codePaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var codeControl = new CodeControl();
|
||||
|
||||
function searchGroups() {
|
||||
codeControl.groups.query = {
|
||||
by:$("#by").val(),
|
||||
term:$("#term").val()
|
||||
};
|
||||
codeControl.groups.load(1);
|
||||
}
|
||||
|
||||
function removeGroups() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.groups.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function removeCodes() {
|
||||
dialog.alert({
|
||||
content:"선택한 코드를 삭제하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.codes.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderGroupList() {
|
||||
let groupList = codeControl.groups.dataset;
|
||||
let empty = groupList.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("groupNotFound").innerHTML] : <%-- from template#groupNotFound --%>
|
||||
groupList.inStrings(document.getElementById("groupRow").innerHTML); <%-- from template#groupRow --%>
|
||||
$("#groupList").html(trs.join());
|
||||
$("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
codeControl.onGroupListChange = obj => {
|
||||
renderGroupList();
|
||||
|
||||
$("#groupPaging").setPaging({
|
||||
list:codeControl.groups.dataset,
|
||||
prefix:codeControl.groups.prefix,
|
||||
start:obj.groupStart,
|
||||
totalSize:obj.groupTotal,
|
||||
fetchSize:obj.groupFetch,
|
||||
func:"codeControl.groups.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
codeControl.onCurrentGroupChange = item => {
|
||||
$("#btnAddCode").prop("disabled", !item);
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.GRP_ID;
|
||||
$("#groupList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
codeControl.onGroupSelect = selected => {
|
||||
let groupList = codeControl.groups.dataset;
|
||||
let keys = selected.map(e => groupList.getKey(e));
|
||||
$("#groupList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveGroups").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
function renderCodeList() {
|
||||
let codeList = codeControl.codes.dataset;
|
||||
let empty = codeList.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("codeNotFound").innerHTML] : <%-- from template#groupNotFound --%>
|
||||
codeList.inStrings(document.getElementById("codeRow").innerHTML); <%-- from template#groupRow --%>
|
||||
$("#codeList").html(trs.join());
|
||||
$("#codeToggler").prop("checked", false);
|
||||
}
|
||||
|
||||
codeControl.onCodeListChange = obj => {
|
||||
renderCodeList();
|
||||
|
||||
$("#codePaging").setPaging({
|
||||
list:codeControl.codes.dataset,
|
||||
prefix:codeControl.codes.prefix,
|
||||
start:obj ? obj.codeStart : -1,
|
||||
totalSize:obj ? obj.codeTotal : 0,
|
||||
fetchSize:obj ? obj.codeFetch : 10,
|
||||
func:"codeControl.codes.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
codeControl.onCurrentCodeChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let data = item.data;
|
||||
let key = data.CODE;
|
||||
$("#codeList").setCurrentRow(key);
|
||||
};
|
||||
|
||||
codeControl.onCodeSelect = selected => {
|
||||
let codeList = codeControl.codes.dataset;
|
||||
let keys = selected.map(e => codeList.getKey(e));
|
||||
$("#codeList input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemoveCodes").prop("disabled", selected.length < 1);
|
||||
};
|
||||
|
||||
$("#term").onEnterPress(searchGroups);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
codeControl.groups.setData({
|
||||
groupList:${groupList},
|
||||
groupStart:${groupStart},
|
||||
groupFetch:${groupFetch},
|
||||
groupTotal:${groupTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=code-main.jsp
|
||||
</script>
|
@ -0,0 +1,105 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="group-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" required data-map="GRP_ID" maxlength="50" class="form-control" placeholder="그룹 아이디" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required data-map="GRP_NM" maxlength="60" class="form-control" placeholder="그룹 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" data-map="DSCRP" maxlength="200" class="form-control" placeholder="그룹 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="createdBy"
|
||||
>등록자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="RGTR" readonly class="form-control" placeholder="등록자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>등록일자</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" data-map="REG_DT" readonly class="form-control" placeholder="등록일자"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>사용여부</label
|
||||
>
|
||||
<div class="col-sm-10" style="padding:.5em .7em;">
|
||||
<span id="groupInUse"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12" style="text-align:right;">
|
||||
<button onclick="saveGroup();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var groupFields = new FormFields("#group-form");
|
||||
|
||||
codeControl.groups.setInfo = obj => {
|
||||
let info = obj.data;
|
||||
groupFields.set(codeControl, obj);
|
||||
let create = isEmpty(info.GRP_ID);
|
||||
$("input[name='id']").prop("readonly", !create);
|
||||
$("#group-form input").onEnterPress(saveGroup);
|
||||
$("#groupInUse").html(create ? "" : info.USE_YN == "Y" ? "사용 중" : "사용하지 않음");
|
||||
|
||||
document.querySelector("input[name='" + (create ? "id" : "name") + "']").focus();
|
||||
}
|
||||
|
||||
codeControl.groups.onModify = (changed) => {
|
||||
if (["GRP_NM"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderGroupList();
|
||||
codeControl.groups.dataset.setState();
|
||||
}
|
||||
|
||||
function saveGroup() {
|
||||
if (!$("#group-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 그룹 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
codeControl.groups.save(groupFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=group-info.jsp
|
||||
</script>
|
@ -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"%>
|
||||
<form id="menu-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="id"
|
||||
>아이디</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="id" type="text" readonly maxlength="50" class="form-control" placeholder="저장하시면 시스템이 부여합니다." />
|
||||
<input name="parentID" type="hidden" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="name" type="text" required maxlength="60" class="form-control" placeholder="메뉴 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="action"
|
||||
>URL</label
|
||||
>
|
||||
<div class="col-sm-10 input-group" style="width:83.3%;">
|
||||
<span id="btnSelectURL" onClick="setURL();" class="input-group-text"><i class="bx bx-search"></i></span>
|
||||
<input name="action" type="text" maxlength="60" class="form-control" placeholder="URL" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="description"
|
||||
>설명</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="description" type="text" maxlength="200" class="form-control" placeholder="메뉴 설명"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="imageName"
|
||||
>이미지 이름</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="imageName" type="text" maxlength="200" class="form-control" placeholder="이미지 이름"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<label class="col-sm-2 col-form-label text-sm-end" for="imageConf"
|
||||
>이미지 설정</label
|
||||
>
|
||||
<div class="col-sm-10">
|
||||
<input name="imageConf" type="text" maxlength="200" class="form-control" placeholder="이미지 설정"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-sm-12" style="text-align:right;">
|
||||
<button id="btnSaveAuth" onclick="saveMenu();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<c:set var="menuFunc" scope="request">
|
||||
var menuFields = new FormFields("#menu-form");
|
||||
|
||||
menuControl.setInfo = obj => {
|
||||
menuFields.set(menuControl, obj);
|
||||
$("input[name='name']").focus();
|
||||
}
|
||||
|
||||
menuControl.onModify = (changed) => {
|
||||
if (["name", "url"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
}
|
||||
|
||||
async function setURL() {
|
||||
let url = await selectURL(false);
|
||||
$("input[name='action']").val(url).change();
|
||||
}
|
||||
|
||||
function saveMenu() {
|
||||
if (!$("#menu-form input").validInputs()) return;
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 메뉴 정보를 저장하시겠습니까?",
|
||||
onOK:() => menuControl.save(menuFields.get())
|
||||
});
|
||||
}
|
||||
|
||||
$("#menu-form input")
|
||||
.onEnterPress(() => saveMenu());
|
||||
</c:set>
|
@ -0,0 +1,134 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/jstree/jstree.css"/>" /--%>
|
||||
<c:set var="prefixName" scope="request">메뉴</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-evenly">
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">레이아웃</h5>
|
||||
<div id="menu-tree" class="main-left d-flex flex-column flex-grow-1">
|
||||
<div class="d-flex justify-content-between" style="padding-top:.5em; padding-bottom:.5em; border-top:1px solid #dfdfdf; border-bottom:1px solid #dfdfdf;">
|
||||
<span>
|
||||
<button id="menuToggler" onclick="toggleMenus();" class="btn btn-primary"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div id="menuTree" style="padding-top:1em; min-height:26em; overflow:auto;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:49%;">
|
||||
<h5 class="mt-3">등록 정보</h5>
|
||||
<div class="d-flex flex-row justify-content-end p-3">
|
||||
<div>
|
||||
<button id="btnRemoveMenus" onclick="removeMenus();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<jsp:include page="menu-info.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var menuBranches = treeSupport({
|
||||
selector:"#menuTree",
|
||||
trace:wctx.trace,
|
||||
plugins: ["checkbox", "contextmenu", "dnd"] ,
|
||||
core:{check_callback:true,
|
||||
multiple:false
|
||||
},
|
||||
checkbox:{
|
||||
whole_node:false,
|
||||
tie_selection:false
|
||||
},
|
||||
contextmenu:{items:{
|
||||
newMenu:{label:"메뉴 추가", action:function(obj){
|
||||
var current = menuControl.getCurrent(),
|
||||
parentID = current.parentID;
|
||||
menuControl.newInfo({parentID:parentID});
|
||||
$("input[name='parentID']").val(parentID);
|
||||
}},
|
||||
newChildMenu:{label:"하위메뉴 추가", action:function(obj){
|
||||
var current = menuControl.getCurrent(),
|
||||
parentID = current.id;
|
||||
menuControl.newInfo({parentID:parentID});
|
||||
$("input[name='parentID']").val(parentID);
|
||||
log("current", menuControl.getCurrent());
|
||||
}},
|
||||
}},
|
||||
onNodeSelect:function(obj) {
|
||||
var key = obj[0];
|
||||
menuControl.setCurrent(key);
|
||||
},
|
||||
onNodeMove:function(obj) {
|
||||
var parentID = obj.parent,
|
||||
menuID = obj.node.id;
|
||||
if (parentID == "#")
|
||||
parentID = null;
|
||||
menuControl.move(parentID, menuID);
|
||||
},
|
||||
onNodeReorder:function(obj) {
|
||||
var parentID = obj.parent,
|
||||
menuID = obj.node.id,
|
||||
menuIDs = menuBranches.getChildIDs(parentID);
|
||||
menuControl.reorder(menuIDs);
|
||||
},
|
||||
onNodeCheck:function(obj) {
|
||||
var checked = obj.checked,
|
||||
menuID = obj.node.id;
|
||||
menuControl.select(menuID, checked);
|
||||
}
|
||||
});
|
||||
|
||||
function toggleMenus() {
|
||||
$("#menuToggler").text(menuBranches.toggleFolding() == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
}
|
||||
|
||||
var menuControl = new MenuControl();
|
||||
|
||||
menuControl.onDatasetChange = obj => {
|
||||
menuBranches.setData(treeHtml(menuControl.menus, {
|
||||
id:function(e){return e.id;},
|
||||
text:function(e){
|
||||
return e.name == e.url ? e.name : e.name + (e.url ? " (" + e.url + ")" : "");
|
||||
}
|
||||
}));
|
||||
$("#btnSelectURL").prop("disabled", menuControl.dataset.empty);
|
||||
}
|
||||
|
||||
menuControl.onCurrentChange = item => {
|
||||
menuControl.setInfo(item.data);
|
||||
menuBranches.selectNode(item.data.id);
|
||||
}
|
||||
|
||||
menuControl.onSelectionChange = selected => {
|
||||
$("#btnRemoveMenus").prop("disabled", selected.length < 1);
|
||||
}
|
||||
|
||||
menuControl.onMenusChanged = () => loadUserMenus();
|
||||
|
||||
${menuFunc}
|
||||
|
||||
async function loadUserMenus() {
|
||||
let userMenus = await menuControl.getUserMenus();
|
||||
setUserMenus(userMenus);
|
||||
}
|
||||
|
||||
function removeMenus() {
|
||||
dialog.alert({
|
||||
content:"선택한 메뉴 정보를 삭제하시겠습니까?",
|
||||
onOK:() => menuControl.remove()
|
||||
});
|
||||
}
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
$("#menuToggler").text(menuBranches._folding == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
menuControl.setData(${menus});
|
||||
menuBranches.open();
|
||||
});
|
||||
//# sourceURL=menu-main.jsp
|
||||
</script>
|
@ -0,0 +1,122 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">사용자</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="_userBy" onchange="document.getElementById('_userTerm').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}Account">계정</option>
|
||||
</select>
|
||||
<input id="_userTerm" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" style="text-align:center;"><input onchange="${infoPrefix}Control.dataset.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Full name: activate to sort column descending" style="">계정</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Email: activate to sort column ascending" style="">이름</th>
|
||||
<th class="sorting" tabindex="0" aria-controls="DataTables_Table_0" rowspan="1" colspan="1" aria-label="Start date: activate to sort column ascending" style="">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="_${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="_${infoPrefix}Row">
|
||||
<tr data-key="{USER_ID}">
|
||||
<td style="text-align:center;"><input value="{USER_ID}" onchange="${infoPrefix}Control.dataset.select('{USER_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{USER_ACNT}</td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{USER_NM}</td>
|
||||
<td onclick="${infoPrefix}Control.setCurrent('{USER_ID}')" ondblclick="${infoPrefix}Control.getInfo({})">{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="_${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="4" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="_${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="_${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new UserControl();
|
||||
|
||||
function getSelectedUser() {
|
||||
let selected = ${infoPrefix}Control.dataset.getKeys("selected");
|
||||
if (selected.length < 1)
|
||||
return dialog.alert("사용자를 선택하십시오.");
|
||||
else
|
||||
return selected;
|
||||
}
|
||||
|
||||
function search${infoPrefix}s() {
|
||||
${infoPrefix}Control.query = {
|
||||
by:$("#_userBy").val(),
|
||||
term:$("#_userTerm").val()
|
||||
};
|
||||
${infoPrefix}Control.load(1);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onDatasetChange = obj => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("_${infoPrefix}NotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(document.getElementById("_${infoPrefix}Row").innerHTML); <%-- from template#${infoPrefix}Row --%>
|
||||
$("#_${infoPrefix}List").html(trs.join());
|
||||
$("th input[type='checkbox']").prop("checked", false);
|
||||
|
||||
$("#_${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.dataset,
|
||||
prefix:${infoPrefix}Control.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.USER_ID;
|
||||
$("#_${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onSelectionChange = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#_${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
};
|
||||
|
||||
$("#_userTerm").onEnterPress(search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.setData({
|
||||
${infoPrefix}List:${userList},
|
||||
${infoPrefix}Start:${userStart},
|
||||
${infoPrefix}Fetch:${userFetch},
|
||||
${infoPrefix}Total:${userTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=select-user.jsp
|
||||
</script>
|
@ -0,0 +1,194 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<form id="infoPrefix-form">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="account"
|
||||
>계정</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="id" type="hidden" data-map="USER_ID" />
|
||||
<input name="institute" type="hidden" data-map="NSTT_CD" />
|
||||
<input name="account" type="text" required data-map="USER_ACNT" class="form-control" placeholder="prefixName 계정" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="name"
|
||||
>이름</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="name" type="text" required data-map="USER_NM" class="form-control" placeholder="prefixName 이름" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="password"
|
||||
>비밀번호</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="password" type="password" required class="form-control" placeholder="비밀번호" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 hidden">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="confirmPassword"
|
||||
>비밀번호 확인</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="confirmPassword" type="password" required class="form-control" placeholder="비밀번호 확인" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="birthday"
|
||||
>생년월일</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="birthday" type="text" data-map="BRDT" class="form-control dob-picker" placeholder="YYYY-MM-DD"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="gender"
|
||||
>성별</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<div class="form-check form-check-inline mt-3">
|
||||
<input name="gender" value="M" type="radio" data-map="GENDER" class="form-check-input"/>
|
||||
<label class="form-check-label" for="male">남자</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input name="gender" value="F" type="radio" data-map="GENDER" class="form-check-input"/>
|
||||
<label class="form-check-label" for="female">여자</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="emailAddress"
|
||||
>이메일 주소</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="emailAddress" type="email" required data-map="EML_ADRS" class="form-control" placeholder="이메일 주소" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 select2-primary">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="mobilePhoneNo"
|
||||
>전화번호(무선)</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="mobilePhoneNo" type="text" data-map="MBL_TELNO" class="form-control phone-mask" placeholder="010-0000-0000" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 select2-primary">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="phoneNo"
|
||||
>전화번호(유선)</label
|
||||
>
|
||||
<div class="col-sm-9">
|
||||
<input name="phoneNo" type="text" data-map="TELNO" class="form-control phone-mask" placeholder="000-0000-0000" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="faxNo">팩스</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="faxNo" type="text" data-map="FXNO" class="form-control phone-mask" placeholder="000-0000-0000"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for=positionName>직위</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="positionName" type="text" data-map="POS_NM" class="form-control" placeholder="직위"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label text-sm-end" for="status">상태</label>
|
||||
<div class="col-sm-9">
|
||||
<input name="status" type="text" data-map="STTS" class="form-control" placeholder="상태"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-4 justify-content-end">
|
||||
<div class="col-md-6">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-sm-3">
|
||||
<button onclick="saveinfoPrefix();" type="button" class="btn btn-primary">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
|
||||
var infoPrefixFields = new FormFields("#infoPrefix-form");
|
||||
|
||||
infoPrefixControl.setInfo = obj => {
|
||||
infoPrefixFields.set(infoPrefixControl, obj);
|
||||
let create = isEmpty(obj.data.USER_ACNT);
|
||||
$("input[name='account']").prop("readonly", !create);
|
||||
$("input[type='password']").each(function(){
|
||||
let password = $(this).prop("required", create);
|
||||
let div = password.parent().parent().parent();
|
||||
if (create) {
|
||||
$("input[name='institute']").val("default");
|
||||
div.show();
|
||||
} else
|
||||
div.hide();
|
||||
});
|
||||
|
||||
$("#infoPrefix-form input").onEnterPress(saveinfoPrefix);
|
||||
|
||||
document.querySelector("input[name='" + (create ? "account" : "name") + "']").focus();
|
||||
}
|
||||
|
||||
infoPrefixControl.onModify = (changed) => {
|
||||
if (["USER_NM", "EML_ADRS", "MBL_TELNO"].filter(e => changed.includes(e)).length < 1)
|
||||
return;
|
||||
|
||||
renderinfoPrefixList();
|
||||
infoPrefixControl.dataset.setState();
|
||||
}
|
||||
|
||||
function saveinfoPrefix() {
|
||||
if (!$("#infoPrefix-form input").validInputs()) return;
|
||||
|
||||
let match = Array.from(document.querySelectorAll("input[type='password']"))
|
||||
.map(input => input.value)
|
||||
.reduce((total, current) => total == current);
|
||||
if (!match) {
|
||||
dialog.alert({
|
||||
content:"비밀번호와 비밀번호 확인이 다릅니다.",
|
||||
onClose:function(){
|
||||
document.querySelector("input[name='confirmPassword']").focus();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.alert({
|
||||
content:"현재 prefixName 정보를 저장하시겠습니까?",
|
||||
onOK:() => {
|
||||
infoPrefixControl.save(infoPrefixFields.get());
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceURL=user-info.jsp
|
||||
</script>
|
@ -0,0 +1,149 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<c:set var="prefixName" scope="request">사용자</c:set>
|
||||
<!-- Page Body -->
|
||||
<div class="d-flex flex-column flex-grow-1">
|
||||
<div id="DataTables_Table_0_wrapper" class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
|
||||
<div class="d-flex flex-row justify-content-between p-3">
|
||||
<div>
|
||||
<div class="input-group" id="DataTables_Table_0_length">
|
||||
<select id="by" onchange="document.getElementById('term').focus();" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="${infoPrefix}Name">이름</option>
|
||||
<option value="${infoPrefix}Account">계정</option>
|
||||
</select>
|
||||
<input id="term" autofocus type="text" placeholder="조회 조건을 입력하십시오." class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="search${infoPrefix}s();" class="btn btn-primary">찾기</button>
|
||||
<button onclick="${infoPrefix}Control.newInfo();" class="btn btn-primary">+ 추가</button>
|
||||
<button id="btnRemove${infoPrefix}s" onclick="remove${infoPrefix}s();" class="btn btn-primary">- 제거</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="datatables-ajax table table-bordered dataTable no-footer" id="DataTables_Table_0" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th tabindex="0" style="width: 158.828px; text-align:center;"><input onchange="${infoPrefix}Control.select(this.checked);" type="checkbox" class="form-check-input"></th>
|
||||
<th class="sorting sorting_asc" aria-sort="ascending" style="width: 223.719px;">계정</th>
|
||||
<th class="sorting" style="width: 146.156px;">이름</th>
|
||||
<th class="sorting" style="width: 195.688px;">이메일</th>
|
||||
<th class="sorting" style="width: 160.141px;">전화번호(무선)</th>
|
||||
<th class="sorting" style="width: 230.469px;">등록일자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="${infoPrefix}List">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row">
|
||||
<tr data-key="{USER_ID}">
|
||||
<td style="text-align:center;"><input value="{USER_ID}" onchange="${infoPrefix}Control.select('{USER_ID}', this.checked);" type="checkbox" class="form-check-input"></td>
|
||||
<td {onclick} {ondblclick}>{USER_ACNT}</td>
|
||||
<td {onclick} {ondblclick}>{USER_NM}</td>
|
||||
<td {onclick} {ondblclick}>{EML_ADRS}</td>
|
||||
<td {onclick} {ondblclick}>{MBL_TELNO}</td>
|
||||
<td {onclick} {ondblclick}>{REG_DT}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="6" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-flex flex-row p-3 justify-content-between">
|
||||
<label id="${infoPrefix}PagingInfo" class="dataTables_info" role="status" aria-live="polite"></label>
|
||||
<ul id="${infoPrefix}Paging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ Page Body -->
|
||||
<script >
|
||||
var ${infoPrefix}Control = new UserControl();
|
||||
|
||||
function search${infoPrefix}s() {
|
||||
${infoPrefix}Control.query = {
|
||||
by:$("#by").val(),
|
||||
term:$("#term").val()
|
||||
};
|
||||
${infoPrefix}Control.load(1);
|
||||
}
|
||||
|
||||
function remove${infoPrefix}s() {
|
||||
dialog.alert({
|
||||
content:"선택한 ${prefixName} 정보를 제거하시겠습니까?",
|
||||
onOK:() => {
|
||||
${infoPrefix}Control.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function render${infoPrefix}List() {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
let trs = empty ?
|
||||
[document.getElementById("${infoPrefix}NotFound").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
|
||||
${infoPrefix}List.inStrings(
|
||||
document.getElementById("${infoPrefix}Row").innerHTML, <%-- from template#${infoPrefix}Row --%>
|
||||
(str, dataItem) => str
|
||||
.replace(/{onclick}=""/gi, 'onclick="userControl.setCurrent(\'' + dataItem.getValue("USER_ID") + '\');"')
|
||||
.replace(/{ondblclick}=""/gi, 'ondblclick="userControl.getInfo(\'' + dataItem.getValue("USER_ID") + '\')"')
|
||||
<%-- OR
|
||||
(str, dataItem) => {
|
||||
let userID = dataItem.getValue("USER_ID");
|
||||
return str
|
||||
.replace(/{onclick}=""/gi, 'onclick="userControl.setCurrent(\'' + userID + '\');"')
|
||||
.replace(/{ondblclick}=""/gi, 'ondblclick="userControl.getInfo(\'' + userID + '\')"')
|
||||
}
|
||||
--%>
|
||||
);
|
||||
$("#${infoPrefix}List").html(trs.join());
|
||||
$("th input[type='checkbox']").prop("checked", false);
|
||||
}
|
||||
|
||||
${infoPrefix}Control.onDatasetChange = obj => {
|
||||
render${infoPrefix}List();
|
||||
|
||||
$("#${infoPrefix}Paging").setPaging({
|
||||
list:${infoPrefix}Control.dataset,
|
||||
prefix:${infoPrefix}Control.prefix,
|
||||
start:obj.${infoPrefix}Start,
|
||||
totalSize:obj.${infoPrefix}Total,
|
||||
fetchSize:obj.${infoPrefix}Fetch,
|
||||
func:"${infoPrefix}Control.load({index})"
|
||||
});
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let key = item.data.USER_ID;
|
||||
$("#${infoPrefix}List").setCurrentRow(key);
|
||||
};
|
||||
|
||||
${infoPrefix}Control.onSelectionChange = selected => {
|
||||
let ${infoPrefix}List = ${infoPrefix}Control.dataset;
|
||||
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
|
||||
$("#${infoPrefix}List input[type='checkbox']").each(function() {
|
||||
let checkbox = $(this);
|
||||
checkbox.prop("checked", keys.includes(checkbox.val()));
|
||||
});
|
||||
|
||||
$("#btnRemove${infoPrefix}s").prop("disabled", keys.length < 1);
|
||||
};
|
||||
|
||||
$("#term").onEnterPress(search${infoPrefix}s);
|
||||
|
||||
$(function(){
|
||||
${onload}
|
||||
${infoPrefix}Control.setData({
|
||||
${infoPrefix}List:${userList},
|
||||
${infoPrefix}Start:${userStart},
|
||||
${infoPrefix}Fetch:${userFetch},
|
||||
${infoPrefix}Total:${userTotal}
|
||||
});
|
||||
});
|
||||
//# sourceURL=user-main.jsp
|
||||
</script>
|
@ -0,0 +1,3 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
대시보드
|
@ -0,0 +1,82 @@
|
||||
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<%@ page import="java.util.HashMap, javax.servlet.http.HttpServletRequest, cokr.xit.foundation.data.Convert" %>
|
||||
<%! private static final HashMap<String, String> titles = new HashMap<>();
|
||||
|
||||
static {
|
||||
titles.put("404", "Page Not Found");
|
||||
titles.put("sessionExpired", "Session Expired");
|
||||
titles.put("invalidSession", "Invalid Session");
|
||||
titles.put("accessDenied", "Access Denied");
|
||||
titles.put("500", "Server Error");
|
||||
}
|
||||
|
||||
private static void setTitle(HttpServletRequest hreq) {
|
||||
String status = Convert.toString(hreq.getAttribute("status"));
|
||||
if (status == "")
|
||||
status = "500";
|
||||
String title = titles.get(status);
|
||||
if (title == null)
|
||||
title = titles.get("500");
|
||||
hreq.setAttribute("title", title);
|
||||
}
|
||||
%>
|
||||
<% setTitle(request); %>
|
||||
<c:if test="${json}"><%
|
||||
response.setContentType("application/json; charset=UTF-8");
|
||||
String stacktrace = (String)request.getAttribute("stacktrace");
|
||||
request.setAttribute("stacktrace", Convert.rntq(stacktrace));
|
||||
%>{
|
||||
"path": "${path}",
|
||||
"failed": true,
|
||||
"status": "${status}",
|
||||
"title": "${title}",
|
||||
"message": "${message}",
|
||||
"description": "${description}",
|
||||
"stacktrace": "${stacktrace}"
|
||||
}</c:if>
|
||||
<c:if test="${!json}"><%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<jsp:include page="/WEB-INF/jsp/include/head.jsp" />
|
||||
<style>
|
||||
.misc-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: calc(100vh - (1.625rem * 2));
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<!-- Content -->
|
||||
|
||||
<!-- Error -->
|
||||
<div class="container-xxl container-p-y">
|
||||
<div class="misc-wrapper">
|
||||
<h2 class="mb-2 mx-2">${title} :(</h2>
|
||||
<p class="mb-4 mx-2">죄송합니다. 😖</p>
|
||||
<p class="mb-4 mx-2">${message}</p>
|
||||
<a onclick="wctx.home();" class="btn btn-primary" href="javascript:void(0);">처음으로 돌아가기</a>
|
||||
<a onclick="history.back();" class="btn btn-primary mt-2" href="javascript:void(0);" autofocus>이전으로 돌아가기</a>
|
||||
<div class="mt-3">
|
||||
<img
|
||||
src="<c:url value="/resources/img/illustrations/page-misc-error-light.png"/>"
|
||||
alt="page-misc-error-light"
|
||||
width="500"
|
||||
class="img-fluid"
|
||||
data-app-dark-img="illustrations/page-misc-error-dark.png"
|
||||
data-app-light-img="illustrations/page-misc-error-light.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Error -->
|
||||
|
||||
<!-- / Content -->
|
||||
|
||||
<jsp:include page="/WEB-INF/jsp/include/tail.jsp" />
|
||||
<script>
|
||||
${functions}
|
||||
</script>
|
||||
</body>
|
||||
</html></c:if>
|
@ -0,0 +1,34 @@
|
||||
<%@ 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">
|
||||
<div class="container-xxl d-flex flex-wrap justify-content-between py-2 flex-md-row flex-column">
|
||||
<div class="mb-2 mb-md-0">
|
||||
©
|
||||
<script>
|
||||
document.write(new Date().getFullYear());
|
||||
</script>
|
||||
, made with XIT Base by
|
||||
<a href="http://xit.co.kr" target="_blank" class="footer-link fw-bolder">(주)엑스아이티</a>
|
||||
</div>
|
||||
<%--div>
|
||||
<a href="https://themeselection.com/license/" class="footer-link me-4" target="_blank">License</a>
|
||||
<a href="https://themeselection.com/" target="_blank" class="footer-link me-4">More Themes</a>
|
||||
|
||||
<a
|
||||
href="https://demos.themeselection.com/sneat-bootstrap-html-admin-template/documentation/"
|
||||
target="_blank"
|
||||
class="footer-link me-4"
|
||||
>Documentation</a
|
||||
>
|
||||
|
||||
<a
|
||||
href="https://themeselection.com/support/"
|
||||
target="_blank"
|
||||
class="footer-link d-none d-sm-inline-block"
|
||||
>Support</a
|
||||
>
|
||||
</div--%>
|
||||
</div>
|
||||
</footer>
|
||||
<!-- / Footer -->
|
@ -0,0 +1,44 @@
|
||||
<%@ 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><c:set var="appName" scope="request">App Starter</c:set>
|
||||
<html
|
||||
lang="kr"
|
||||
class="light-style layout-navbar-fixed layout-menu-fixed "
|
||||
dir="ltr"
|
||||
data-theme="theme-default"
|
||||
data-assets-path="<c:url value="/resources/"/>"
|
||||
data-template="vertical-menu-template-starter">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"/>
|
||||
<title>${appName}</title>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/x-icon" href="<c:url value="/resources/image/favicon.ico"/>" />
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- Icons. Uncomment required icon fonts -->
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/fonts/boxicons.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/fonts/fontawesome.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/fonts/flag-icons.css"/>" />
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/css/rtl/core.css"/>" class="template-customizer-core-css" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/css/rtl/theme-default.css"/>" class="template-customizer-theme-css" />
|
||||
<%--link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/css/demo.css" /--%>
|
||||
<!-- Vendors CSS -->
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/perfect-scrollbar/perfect-scrollbar.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/bootstrap-datepicker/bootstrap-datepicker.css"/>" />
|
||||
|
||||
<%--link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/typeahead-js/typeahead.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/datatables-bs5/datatables.bootstrap5.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/datatables-responsive-bs5/responsive.bootstrap5.css"/>" />
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/flatpickr/flatpickr.css"/>" /--%>
|
||||
|
||||
<link rel="stylesheet" href="<c:url value="/resources/css/styles.css"/>" />
|
||||
|
||||
</head>
|
@ -0,0 +1,4 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"
|
||||
%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
|
||||
%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
|
||||
%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
@ -0,0 +1,86 @@
|
||||
<%@ 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" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
<!-- Helpers -->
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/js/helpers.js"/>"></script>
|
||||
<%--
|
||||
<!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section -->
|
||||
<!--? Template customizer: To hide customizer set displayCustomizer value false in config.js.
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/js/template-customizer.js"/>"></script> -->
|
||||
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
|
||||
<script src="../../assets/js/config.js"></script> --%>
|
||||
|
||||
<!-- Core JS -->
|
||||
<!-- build:js assets/vendor/js/core.js -->
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/libs/jquery/jquery.js"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/jquery-ui/1.13.2/jquery-ui.js"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/libs/popper/popper.js"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/js/bootstrap.js"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/libs/perfect-scrollbar/perfect-scrollbar.js"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/libs/hammer/hammer.js"/>"></script>
|
||||
<script src="<c:url value='/resources/3rd-party/sneat/js/helpers.js' />"></script>
|
||||
<script src="<c:url value='/resources/3rd-party/sneat/js/config.js' />"></script>
|
||||
<script src="<c:url value='/resources/3rd-party/sneat/js/menu.js' />"></script>
|
||||
<script src="<c:url value='/resources/3rd-party/sneat/libs/jquery-sticky/jquery-sticky.js' />"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/libs/bootstrap-datepicker/bootstrap-datepicker.js"/>"></script>
|
||||
|
||||
<script src="<c:url value="/resources/js/base/base.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/js/base/dataset.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/js/base/menu-support.js?${ver}"/>"></script>
|
||||
|
||||
<script src="<c:url value="/resources/js/base/code.js"/>?${ver}"></script>
|
||||
<script src="<c:url value="/resources/js/base/user.js?${ver}"/>"></script>
|
||||
|
||||
<script src="<c:url value="/resources/js/base/actionGroup.js"/>" type="text/javascript"></script>
|
||||
<script src="<c:url value="/resources/js/base/authority.js?${ver}"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/libs/jstree/jstree.js"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/jstree/jstree-support.js"/>"></script>
|
||||
<script src="<c:url value="/resources/js/base/menu.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 = "${appName}";
|
||||
|
||||
<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>
|
||||
|
||||
${functions}</c:set>
|
@ -0,0 +1,48 @@
|
||||
<%@ 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" class="layout-navbar navbar navbar-expand-xl bg-navbar-theme bg-primary justify-content-between">
|
||||
<div class="navbar-nav">
|
||||
<a onclick="wctx.home();" style="font-weight: bold; font-size: 1.2rem;"><b>${appName}</b></a>
|
||||
</div>
|
||||
<div class="navbar-nav navbar-dropdown dropdown-user dropdown">
|
||||
<div class="avatar d-flex flex-row" data-bs-toggle="dropdown">
|
||||
<img src="<c:url value='/resources/img/avatars/1.png' />" class="w-px-40 h-auto rounded-circle" style="border: 2px solid white;">
|
||||
<a class="nav-link dropdown-toggle hide-arrow show">${currentUser.name}</a>
|
||||
</div>
|
||||
<ul class="dropdown-menu dropdown-menu-end" data-bs-popper="static">
|
||||
<li><a class="dropdown-item" href="pages-account-settings-account.html">
|
||||
<div class="d-flex">
|
||||
<div class="flex-shrink-0 me-3">
|
||||
<div class="avatar">
|
||||
<img src="<c:url value='/resources/img/avatars/1.png' />" 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><a class="dropdown-item" href="pages-account-settings-account.html">
|
||||
<i class="bx bx-cog me-2"></i>
|
||||
<span class="align-middle">설정</span>
|
||||
</a>
|
||||
</li>
|
||||
<li><div class="dropdown-divider"></div></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>
|
||||
</div>
|
||||
</nav>
|
||||
<%--/ Navbar --%>
|
||||
<c:set var="functions" scope="request">${functions}
|
||||
function setPageTitle(pageTitle) {
|
||||
$("#pageTitle").html(pageTitle);
|
||||
}</c:set>
|
@ -0,0 +1,25 @@
|
||||
<%@ 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="menu-divider mt-0 app-brand">
|
||||
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large ms-auto">
|
||||
<i class="bx bx-chevron-left bx-sm align-middle"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu-inner-shadow"></div>
|
||||
<ul id="menus" class="menu-inner py-1 ps--active-y">
|
||||
</ul>
|
||||
</aside>
|
||||
<%--/ Menu --%>
|
||||
<c:set var="userMenus" scope="request">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,142 @@
|
||||
<%@ 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>
|
||||
<%-- Layout wrapper --%>
|
||||
<div class="layout-wrapper layout-navbar-full layout-horizontal layout-without-menu">
|
||||
<%-- Layout container --%>
|
||||
<div class="layout-container">
|
||||
<jsp:include page="/WEB-INF/jsp/include/top.jsp" />
|
||||
<%-- Layout page --%>
|
||||
<div class="layout-page">
|
||||
<%-- Content wrapper --%>
|
||||
<div class="content-wrapper">
|
||||
<jsp:include page="/WEB-INF/jsp/include/userMenus.jsp" />
|
||||
<%-- Content --%>
|
||||
<div class="content-body menu-aware">
|
||||
<div class="sticky-wrapper">
|
||||
<ul id="menu-tabs" class="nav nav-tabs sticky-element" role="tablist" style="--bs-nav-link-padding-y: .125rem; background-image: linear-gradient(#8AB9DB, whitesmoke);"></ul>
|
||||
</div>
|
||||
<template id="main-tab"><li class="nav-item" role="presentation">
|
||||
<div class="nav-link" role="tab" data-bs-toggle="tab" data-bs-target="{tab-target}" aria-controls="{index}" tabindex="-1">
|
||||
<span onclick="openMenu('{url}');">{name}</span>
|
||||
<span onclick="mainTabs.close('{url}')" class="ms-2" style="display: none;">×</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>
|
||||
</div>
|
||||
<%--/ Content --%>
|
||||
<%-- Footer --%>
|
||||
<footer class="content-footer footer bg-footer-theme menu-aware">
|
||||
<div>(주)엑스아이티</div>
|
||||
<div>Copyright © 2024 All rights reserved.</div>
|
||||
</footer>
|
||||
<%--/ Footer --%>
|
||||
<%-- Content area backdrop --%>
|
||||
<div class="content-backdrop fade"></div>
|
||||
</div>
|
||||
<%--/ Content wrapper --%>
|
||||
</div>
|
||||
<%--/ Layout page --%>
|
||||
</div>
|
||||
<%--/ Layout container --%>
|
||||
<%-- Overlay --%>
|
||||
<div class="layout-overlay layout-menu-toggle"></div>
|
||||
<%-- Drag Target Area To SlideIn Menu On Small Screens --%>
|
||||
<div class="drag-target"></div>
|
||||
</div>
|
||||
<%--/ Layout wrapper --%>
|
||||
<div class="spinner-border spinner-border-lg text-primary wait" role="status">
|
||||
<span class="visually-hidden">Please, wait...</span>
|
||||
</div>
|
||||
|
||||
<jsp:include page="/WEB-INF/jsp/include/tail.jsp" />
|
||||
<script>
|
||||
${functions}
|
||||
${userMenus}
|
||||
|
||||
let sticky = {id: -1, index: "dashboard", name: "대시보드", url: "/dashboard.do", parentID: null, description: "대시보드"},
|
||||
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").hover(
|
||||
function() {
|
||||
let span = $(this).find("span.ms-2");
|
||||
if (span.attr("onclick").includes(sticky.url)) return;
|
||||
span.show();
|
||||
},
|
||||
function() {
|
||||
$(this).find("span.ms-2").hide();
|
||||
}
|
||||
);
|
||||
},
|
||||
onCurrentChange: tab => {
|
||||
if (!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
|
||||
});
|
||||
|
||||
$(function() {
|
||||
${onload}
|
||||
mainTabs.getTab(sticky.url);
|
||||
});
|
||||
|
||||
//# sourceURL=index.jsp
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -0,0 +1,159 @@
|
||||
<%@ 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>
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-cover">
|
||||
<div class="authentication-inner row m-0">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-7 col-xl-8 align-items-center p-5">
|
||||
<div class="w-100 d-flex justify-content-center">
|
||||
<img
|
||||
src="<c:url value="/resources/img/illustrations/boy-with-rocket-light.png"/>"
|
||||
class="img-fluid"
|
||||
alt="Login image"
|
||||
width="700"
|
||||
data-app-dark-img="illustrations/boy-with-rocket-dark.png"
|
||||
data-app-light-img="illustrations/boy-with-rocket-light.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Login -->
|
||||
<div class="d-flex col-12 col-lg-5 col-xl-4 align-items-center authentication-bg p-sm-5 p-4" style="background-color:white;">
|
||||
<div class="w-px-400 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-5">
|
||||
<a href="index.html" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo demo">
|
||||
<svg
|
||||
width="25"
|
||||
viewBox="0 0 25 42"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
>
|
||||
<defs>
|
||||
<path
|
||||
d="M13.7918663,0.358365126 L3.39788168,7.44174259 C0.566865006,9.69408886 -0.379795268,12.4788597 0.557900856,15.7960551 C0.68998853,16.2305145 1.09562888,17.7872135 3.12357076,19.2293357 C3.8146334,19.7207684 5.32369333,20.3834223 7.65075054,21.2172976 L7.59773219,21.2525164 L2.63468769,24.5493413 C0.445452254,26.3002124 0.0884951797,28.5083815 1.56381646,31.1738486 C2.83770406,32.8170431 5.20850219,33.2640127 7.09180128,32.5391577 C8.347334,32.0559211 11.4559176,30.0011079 16.4175519,26.3747182 C18.0338572,24.4997857 18.6973423,22.4544883 18.4080071,20.2388261 C17.963753,17.5346866 16.1776345,15.5799961 13.0496516,14.3747546 L10.9194936,13.4715819 L18.6192054,7.984237 L13.7918663,0.358365126 Z"
|
||||
id="path-1"
|
||||
></path>
|
||||
<path
|
||||
d="M5.47320593,6.00457225 C4.05321814,8.216144 4.36334763,10.0722806 6.40359441,11.5729822 C8.61520715,12.571656 10.0999176,13.2171421 10.8577257,13.5094407 L15.5088241,14.433041 L18.6192054,7.984237 C15.5364148,3.11535317 13.9273018,0.573395879 13.7918663,0.358365126 C13.5790555,0.511491653 10.8061687,2.3935607 5.47320593,6.00457225 Z"
|
||||
id="path-3"
|
||||
></path>
|
||||
<path
|
||||
d="M7.50063644,21.2294429 L12.3234468,23.3159332 C14.1688022,24.7579751 14.397098,26.4880487 13.008334,28.506154 C11.6195701,30.5242593 10.3099883,31.790241 9.07958868,32.3040991 C5.78142938,33.4346997 4.13234973,34 4.13234973,34 C4.13234973,34 2.75489982,33.0538207 2.37032616e-14,31.1614621 C-0.55822714,27.8186216 -0.55822714,26.0572515 -4.05231404e-15,25.8773518 C0.83734071,25.6075023 2.77988457,22.8248993 3.3049379,22.52991 C3.65497346,22.3332504 5.05353963,21.8997614 7.50063644,21.2294429 Z"
|
||||
id="path-4"
|
||||
></path>
|
||||
<path
|
||||
d="M20.6,7.13333333 L25.6,13.8 C26.2627417,14.6836556 26.0836556,15.9372583 25.2,16.6 C24.8538077,16.8596443 24.4327404,17 24,17 L14,17 C12.8954305,17 12,16.1045695 12,15 C12,14.5672596 12.1403557,14.1461923 12.4,13.8 L17.4,7.13333333 C18.0627417,6.24967773 19.3163444,6.07059163 20.2,6.73333333 C20.3516113,6.84704183 20.4862915,6.981722 20.6,7.13333333 Z"
|
||||
id="path-5"
|
||||
></path>
|
||||
</defs>
|
||||
<g id="g-app-brand" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Brand-Logo" transform="translate(-27.000000, -15.000000)">
|
||||
<g id="Icon" transform="translate(27.000000, 15.000000)">
|
||||
<g id="Mask" transform="translate(0.000000, 8.000000)">
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<use fill="#696cff" xlink:href="#path-1"></use>
|
||||
<g id="Path-3" mask="url(#mask-2)">
|
||||
<use fill="#696cff" xlink:href="#path-3"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
<g id="Path-4" mask="url(#mask-2)">
|
||||
<use fill="#696cff" xlink:href="#path-4"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-4"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="Triangle"
|
||||
transform="translate(19.000000, 11.000000) rotate(-300.000000) translate(-19.000000, -11.000000) "
|
||||
>
|
||||
<use fill="#696cff" xlink:href="#path-5"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-5"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="app-brand-text demo text-body fw-bolder">XIT Base Example</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h4 class="mb-2">반갑습니다, XIT Base입니다. 👋</h4>
|
||||
<p class="mb-4">이 사이트는 XIT Base로 만든 예제 사이트 입니다.</p>
|
||||
|
||||
<div id="formAuthentication" class="mb-3">
|
||||
<div class="mb-3">
|
||||
<label for="userId" class="form-label">아이디</label>
|
||||
<input id="userId" type="text" value="${cookie['userAccount'].getValue()}" required class="form-control" placeholder="아이디를 입력하십시오." autofocus />
|
||||
</div>
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<div class="d-flex justify-content-between">
|
||||
<label class="form-label" for="password">비밀번호</label>
|
||||
<a href="auth-forgot-password-cover.html">
|
||||
<small>비밀번호 찾기</small>
|
||||
</a>
|
||||
</div>
|
||||
<div class="input-group input-group-merge">
|
||||
<input id="password" type="password" required class="form-control" placeholder="비밀번호를 입력하십시오." aria-describedby="password" />
|
||||
<span class="input-group-text cursor-pointer"><i class="bx bx-hide"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary d-grid w-100" onclick="login();">로그인</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Login -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- / Content -->
|
||||
<jsp:include page="/WEB-INF/jsp/include/tail.jsp" />
|
||||
<!-- Main JS -->
|
||||
<script>
|
||||
${functions}
|
||||
function login() {
|
||||
if (!$("#formAuthentication input").validInputs()) return;
|
||||
|
||||
var params = {
|
||||
account:$("#userId").val(),
|
||||
password:$("#password").val(),
|
||||
institute:"default"
|
||||
};
|
||||
ajax.post({
|
||||
url:wctx.url("/login.do"),
|
||||
data:params,
|
||||
success:function(resp) {
|
||||
if (resp.authenticated) {
|
||||
if (resp.message)
|
||||
dialog.alert(resp.message);
|
||||
|
||||
wctx.home();
|
||||
} else {
|
||||
dialog.alert({
|
||||
content:resp.reason,
|
||||
onClose:() => $("#userId").focus()
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$("#formAuthentication input").onEnterPress(login);
|
||||
if ($("#userId").val())
|
||||
$("#password").focus();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -0,0 +1,56 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
<link rel="stylesheet" href="<c:url value="/resources/3rd-party/sneat/libs/jstree/jstree.css"/>" /--%>
|
||||
<div id="_url-tree" class="main-left d-flex flex-column flex-grow-1">
|
||||
<div class="d-flex justify-content-between" style="padding-top:.5em; padding-bottom:.5em; border-top:1px solid #dfdfdf; border-bottom:1px solid #dfdfdf;">
|
||||
<span>
|
||||
<button id="_urlToggler" onclick="_toggleURLs();" class="btn btn-primary"></button>
|
||||
</span>
|
||||
</div>
|
||||
<div id="_urlTree" style="padding-top:1em; height:37em; overflow:auto;">
|
||||
</div>
|
||||
</div>
|
||||
<script src="<c:url value="/resources/3rd-party/sneat/libs/jstree/jstree.js"/>"></script>
|
||||
<script src="<c:url value="/resources/3rd-party/jstree/jstree-support.js"/>"></script>
|
||||
<script type="text/javascript">
|
||||
var _multiple = ${multiple},
|
||||
_urlSupport = treeSupport({
|
||||
selector:"#_urlTree",
|
||||
trace:wctx.trace,
|
||||
plugins: _multiple ? ["checkbox"] : [],
|
||||
core:{check_callback:true,
|
||||
multiple:_multiple
|
||||
// themes:{name:"proton"}
|
||||
},
|
||||
checkbox:{
|
||||
whole_node:false,
|
||||
tie_selection:false
|
||||
}
|
||||
});
|
||||
|
||||
function getSelectedURL() {
|
||||
var selected = _multiple ? _urlSupport.checkedNodes() : _urlSupport.selectedNodes();
|
||||
if (selected.length < 1)
|
||||
return dialog.alert("URL을 선택하십시오.");
|
||||
|
||||
if (_multiple)
|
||||
return selected;
|
||||
else
|
||||
return selected[0];
|
||||
}
|
||||
|
||||
function _toggleURLs() {
|
||||
$("#_urlToggler").text(_urlSupport.toggleFolding() == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
}
|
||||
|
||||
var urls = ${urls};
|
||||
|
||||
_urlSupport.setData(treeHtml(urls, {
|
||||
id:function(e){return e.url;},
|
||||
text:function(e){
|
||||
return e.name == e.url ? e.name : e.name + " (" + e.url + ")";
|
||||
}
|
||||
}));
|
||||
|
||||
$("#_urlToggler").text(_urlSupport._folding == "collapsed" ? "+ 펼치기" : "- 닫기");
|
||||
</script>
|
@ -0,0 +1,372 @@
|
||||
Authors ordered by first contribution
|
||||
A list of current team members is available at http://jqueryui.com/about
|
||||
|
||||
Paul Bakaus <paul.bakaus@gmail.com>
|
||||
Richard Worth <rdworth@gmail.com>
|
||||
Yehuda Katz <wycats@gmail.com>
|
||||
Sean Catchpole <sean@sunsean.com>
|
||||
John Resig <jeresig@gmail.com>
|
||||
Tane Piper <piper.tane@gmail.com>
|
||||
Dmitri Gaskin <dmitrig01@gmail.com>
|
||||
Klaus Hartl <klaus.hartl@gmail.com>
|
||||
Stefan Petre <stefan.petre@gmail.com>
|
||||
Gilles van den Hoven <gilles@webunity.nl>
|
||||
Micheil Bryan Smith <micheil@brandedcode.com>
|
||||
Jörn Zaefferer <joern.zaefferer@gmail.com>
|
||||
Marc Grabanski <m@marcgrabanski.com>
|
||||
Keith Wood <kbwood@iinet.com.au>
|
||||
Brandon Aaron <brandon.aaron@gmail.com>
|
||||
Scott González <scott.gonzalez@gmail.com>
|
||||
Eduardo Lundgren <eduardolundgren@gmail.com>
|
||||
Aaron Eisenberger <aaronchi@gmail.com>
|
||||
Joan Piedra <theneojp@gmail.com>
|
||||
Bruno Basto <b.basto@gmail.com>
|
||||
Remy Sharp <remy@leftlogic.com>
|
||||
Bohdan Ganicky <bohdan.ganicky@gmail.com>
|
||||
David Bolter <david.bolter@gmail.com>
|
||||
Chi Cheng <cloudream@gmail.com>
|
||||
Ca-Phun Ung <pazu2k@gmail.com>
|
||||
Ariel Flesler <aflesler@gmail.com>
|
||||
Maggie Wachs <maggie@filamentgroup.com>
|
||||
Scott Jehl <scottjehl@gmail.com>
|
||||
Todd Parker <todd@filamentgroup.com>
|
||||
Andrew Powell <andrew@shellscape.org>
|
||||
Brant Burnett <btburnett3@gmail.com>
|
||||
Douglas Neiner <doug@dougneiner.com>
|
||||
Paul Irish <paul.irish@gmail.com>
|
||||
Ralph Whitbeck <ralph.whitbeck@gmail.com>
|
||||
Thibault Duplessis <thibault.duplessis@gmail.com>
|
||||
Dominique Vincent <dominique.vincent@toitl.com>
|
||||
Jack Hsu <jack.hsu@gmail.com>
|
||||
Adam Sontag <ajpiano@ajpiano.com>
|
||||
Carl Fürstenberg <carl@excito.com>
|
||||
Kevin Dalman <development@allpro.net>
|
||||
Alberto Fernández Capel <afcapel@gmail.com>
|
||||
Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
|
||||
Ting Kuei <ting@kuei.com>
|
||||
Samuel Cormier-Iijima <sam@chide.it>
|
||||
Jon Palmer <jonspalmer@gmail.com>
|
||||
Ben Hollis <bhollis@amazon.com>
|
||||
Justin MacCarthy <Justin@Rubystars.biz>
|
||||
Eyal Kobrigo <kobrigo@hotmail.com>
|
||||
Tiago Freire <tiago.freire@gmail.com>
|
||||
Diego Tres <diegotres@gmail.com>
|
||||
Holger Rüprich <holger@rueprich.de>
|
||||
Ziling Zhao <zilingzhao@gmail.com>
|
||||
Mike Alsup <malsup@gmail.com>
|
||||
Robson Braga Araujo <robsonbraga@gmail.com>
|
||||
Pierre-Henri Ausseil <ph.ausseil@gmail.com>
|
||||
Christopher McCulloh <cmcculloh@gmail.com>
|
||||
Andrew Newcomb <ext.github@preceptsoftware.co.uk>
|
||||
Lim Chee Aun <cheeaun@gmail.com>
|
||||
Jorge Barreiro <yortx.barry@gmail.com>
|
||||
Daniel Steigerwald <daniel@steigerwald.cz>
|
||||
John Firebaugh <john_firebaugh@bigfix.com>
|
||||
John Enters <github@darkdark.net>
|
||||
Andrey Kapitcyn <ru.m157y@gmail.com>
|
||||
Dmitry Petrov <dpetroff@gmail.com>
|
||||
Eric Hynds <eric@hynds.net>
|
||||
Chairat Sunthornwiphat <pipo@sixhead.com>
|
||||
Josh Varner <josh.varner@gmail.com>
|
||||
Stéphane Raimbault <stephane.raimbault@gmail.com>
|
||||
Jay Merrifield <fracmak@gmail.com>
|
||||
J. Ryan Stinnett <jryans@gmail.com>
|
||||
Peter Heiberg <peter@heiberg.se>
|
||||
Alex Dovenmuehle <adovenmuehle@gmail.com>
|
||||
Jamie Gegerson <git@jamiegegerson.com>
|
||||
Raymond Schwartz <skeetergraphics@gmail.com>
|
||||
Phillip Barnes <philbar@gmail.com>
|
||||
Kyle Wilkinson <kai@wikyd.org>
|
||||
Khaled AlHourani <me@khaledalhourani.com>
|
||||
Marian Rudzynski <mr@impaled.org>
|
||||
Jean-Francois Remy <jeff@melix.org>
|
||||
Doug Blood <dougblood@gmail.com>
|
||||
Filippo Cavallarin <filippo.cavallarin@codseq.it>
|
||||
Heiko Henning <heiko@thehennings.ch>
|
||||
Aliaksandr Rahalevich <saksmlz@gmail.com>
|
||||
Mario Visic <mario@mariovisic.com>
|
||||
Xavi Ramirez <xavi.rmz@gmail.com>
|
||||
Max Schnur <max.schnur@gmail.com>
|
||||
Saji Nediyanchath <saji89@gmail.com>
|
||||
Corey Frang <gnarf37@gmail.com>
|
||||
Aaron Peterson <aaronp123@yahoo.com>
|
||||
Ivan Peters <ivan@ivanpeters.com>
|
||||
Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>
|
||||
Marcos Sousa <falecomigo@marcossousa.com>
|
||||
Michael DellaNoce <mdellanoce@mailtrust.com>
|
||||
George Marshall <echosx@gmail.com>
|
||||
Tobias Brunner <tobias@strongswan.org>
|
||||
Martin Solli <msolli@gmail.com>
|
||||
David Petersen <public@petersendidit.com>
|
||||
Dan Heberden <danheberden@gmail.com>
|
||||
William Kevin Manire <williamkmanire@gmail.com>
|
||||
Gilmore Davidson <gilmoreorless@gmail.com>
|
||||
Michael Wu <michaelmwu@gmail.com>
|
||||
Adam Parod <mystic414@gmail.com>
|
||||
Guillaume Gautreau <guillaume+github@ghusse.com>
|
||||
Marcel Toele <EleotleCram@gmail.com>
|
||||
Dan Streetman <ddstreet@ieee.org>
|
||||
Matt Hoskins <matt@nipltd.com>
|
||||
Giovanni Giacobbi <giovanni@giacobbi.net>
|
||||
Kyle Florence <kyle.florence@gmail.com>
|
||||
Pavol Hluchý <lopo@losys.sk>
|
||||
Hans Hillen <hans.hillen@gmail.com>
|
||||
Mark Johnson <virgofx@live.com>
|
||||
Trey Hunner <treyhunner@gmail.com>
|
||||
Shane Whittet <whittet@gmail.com>
|
||||
Edward A Faulkner <ef@alum.mit.edu>
|
||||
Adam Baratz <adam@adambaratz.com>
|
||||
Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
|
||||
Eike Send <eike.send@gmail.com>
|
||||
Kris Borchers <kris.borchers@gmail.com>
|
||||
Eddie Monge <eddie@eddiemonge.com>
|
||||
Israel Tsadok <itsadok@gmail.com>
|
||||
Carson McDonald <carson@ioncannon.net>
|
||||
Jason Davies <jason@jasondavies.com>
|
||||
Garrison Locke <gplocke@gmail.com>
|
||||
David Murdoch <david@davidmurdoch.com>
|
||||
Benjamin Scott Boyle <benjamins.boyle@gmail.com>
|
||||
Jesse Baird <jebaird@gmail.com>
|
||||
Jonathan Vingiano <jvingiano@gmail.com>
|
||||
Dylan Just <dev@ephox.com>
|
||||
Hiroshi Tomita <tomykaira@gmail.com>
|
||||
Glenn Goodrich <glenn.goodrich@gmail.com>
|
||||
Tarafder Ashek-E-Elahi <mail.ashek@gmail.com>
|
||||
Ryan Neufeld <ryan@neufeldmail.com>
|
||||
Marc Neuwirth <marc.neuwirth@gmail.com>
|
||||
Philip Graham <philip.robert.graham@gmail.com>
|
||||
Benjamin Sterling <benjamin.sterling@kenzomedia.com>
|
||||
Wesley Walser <waw325@gmail.com>
|
||||
Kouhei Sutou <kou@clear-code.com>
|
||||
Karl Kirch <karlkrch@gmail.com>
|
||||
Chris Kelly <ckdake@ckdake.com>
|
||||
Jason Oster <jay@kodewerx.org>
|
||||
Felix Nagel <info@felixnagel.com>
|
||||
Alexander Polomoshnov <alex.polomoshnov@gmail.com>
|
||||
David Leal <dgleal@gmail.com>
|
||||
Igor Milla <igor.fsp.milla@gmail.com>
|
||||
Dave Methvin <dave.methvin@gmail.com>
|
||||
Florian Gutmann <f.gutmann@chronimo.com>
|
||||
Marwan Al Jubeh <marwan.aljubeh@gmail.com>
|
||||
Milan Broum <midlis@googlemail.com>
|
||||
Sebastian Sauer <info@dynpages.de>
|
||||
Gaëtan Muller <m.gaetan89@gmail.com>
|
||||
Michel Weimerskirch <michel@weimerskirch.net>
|
||||
William Griffiths <william@ycymro.com>
|
||||
Stojce Slavkovski <stojce@gmail.com>
|
||||
David Soms <david.soms@gmail.com>
|
||||
David De Sloovere <david.desloovere@outlook.com>
|
||||
Michael P. Jung <michael.jung@terreon.de>
|
||||
Shannon Pekary <spekary@gmail.com>
|
||||
Dan Wellman <danwellman@hotmail.com>
|
||||
Matthew Edward Hutton <meh@corefiling.co.uk>
|
||||
James Khoury <james@jameskhoury.com>
|
||||
Rob Loach <robloach@gmail.com>
|
||||
Alberto Monteiro <betimbrasil@gmail.com>
|
||||
Alex Rhea <alex.rhea@gmail.com>
|
||||
Krzysztof Rosiński <rozwell69@gmail.com>
|
||||
Ryan Olton <oltonr@gmail.com>
|
||||
Genie <386@mail.com>
|
||||
Rick Waldron <waldron.rick@gmail.com>
|
||||
Ian Simpson <spoonlikesham@gmail.com>
|
||||
Lev Kitsis <spam4lev@gmail.com>
|
||||
TJ VanToll <tj.vantoll@gmail.com>
|
||||
Justin Domnitz <jdomnitz@gmail.com>
|
||||
Douglas Cerna <douglascerna@yahoo.com>
|
||||
Bert ter Heide <bertjh@hotmail.com>
|
||||
Jasvir Nagra <jasvir@gmail.com>
|
||||
Yuriy Khabarov <13real008@gmail.com>
|
||||
Harri Kilpiö <harri.kilpio@gmail.com>
|
||||
Lado Lomidze <lado.lomidze@gmail.com>
|
||||
Amir E. Aharoni <amir.aharoni@mail.huji.ac.il>
|
||||
Simon Sattes <simon.sattes@gmail.com>
|
||||
Jo Liss <joliss42@gmail.com>
|
||||
Guntupalli Karunakar <karunakarg@yahoo.com>
|
||||
Shahyar Ghobadpour <shahyar@gmail.com>
|
||||
Lukasz Lipinski <uzza17@gmail.com>
|
||||
Timo Tijhof <krinklemail@gmail.com>
|
||||
Jason Moon <jmoon@socialcast.com>
|
||||
Martin Frost <martinf55@hotmail.com>
|
||||
Eneko Illarramendi <eneko@illarra.com>
|
||||
EungJun Yi <semtlenori@gmail.com>
|
||||
Courtland Allen <courtlandallen@gmail.com>
|
||||
Viktar Varvanovich <non4eg@gmail.com>
|
||||
Danny Trunk <dtrunk90@gmail.com>
|
||||
Pavel Stetina <pavel.stetina@nangu.tv>
|
||||
Michael Stay <metaweta@gmail.com>
|
||||
Steven Roussey <sroussey@gmail.com>
|
||||
Michael Hollis <hollis21@gmail.com>
|
||||
Lee Rowlands <lee.rowlands@previousnext.com.au>
|
||||
Timmy Willison <timmywillisn@gmail.com>
|
||||
Karl Swedberg <kswedberg@gmail.com>
|
||||
Baoju Yuan <the_guy_1987@hotmail.com>
|
||||
Maciej Mroziński <maciej.k.mrozinski@gmail.com>
|
||||
Luis Dalmolin <luis.nh@gmail.com>
|
||||
Mark Aaron Shirley <maspwr@gmail.com>
|
||||
Martin Hoch <martin@fidion.de>
|
||||
Jiayi Yang <tr870829@gmail.com>
|
||||
Philipp Benjamin Köppchen <xgxtpbk@gws.ms>
|
||||
Sindre Sorhus <sindresorhus@gmail.com>
|
||||
Bernhard Sirlinger <bernhard.sirlinger@tele2.de>
|
||||
Jared A. Scheel <jared@jaredscheel.com>
|
||||
Rafael Xavier de Souza <rxaviers@gmail.com>
|
||||
John Chen <zhang.z.chen@intel.com>
|
||||
Robert Beuligmann <robertbeuligmann@gmail.com>
|
||||
Dale Kocian <dale.kocian@gmail.com>
|
||||
Mike Sherov <mike.sherov@gmail.com>
|
||||
Andrew Couch <andy@couchand.com>
|
||||
Marc-Andre Lafortune <github@marc-andre.ca>
|
||||
Nate Eagle <nate.eagle@teamaol.com>
|
||||
David Souther <davidsouther@gmail.com>
|
||||
Mathias Stenbom <mathias@stenbom.com>
|
||||
Sergey Kartashov <ebishkek@yandex.ru>
|
||||
Avinash R <nashpapa@gmail.com>
|
||||
Ethan Romba <ethanromba@gmail.com>
|
||||
Cory Gackenheimer <cory.gack@gmail.com>
|
||||
Juan Pablo Kaniefsky <jpkaniefsky@gmail.com>
|
||||
Roman Salnikov <bardt.dz@gmail.com>
|
||||
Anika Henke <anika@selfthinker.org>
|
||||
Samuel Bovée <samycookie2000@yahoo.fr>
|
||||
Fabrício Matté <ult_combo@hotmail.com>
|
||||
Viktor Kojouharov <vkojouharov@gmail.com>
|
||||
Pawel Maruszczyk (http://hrabstwo.net)
|
||||
Pavel Selitskas <p.selitskas@gmail.com>
|
||||
Bjørn Johansen <post@bjornjohansen.no>
|
||||
Matthieu Penant <thieum22@hotmail.com>
|
||||
Dominic Barnes <dominic@dbarnes.info>
|
||||
David Sullivan <david.sullivan@gmail.com>
|
||||
Thomas Jaggi <thomas@responsive.ch>
|
||||
Vahid Sohrabloo <vahid4134@gmail.com>
|
||||
Travis Carden <travis.carden@gmail.com>
|
||||
Bruno M. Custódio <bruno@brunomcustodio.com>
|
||||
Nathanael Silverman <nathanael.silverman@gmail.com>
|
||||
Christian Wenz <christian@wenz.org>
|
||||
Steve Urmston <steve@urm.st>
|
||||
Zaven Muradyan <megalivoithos@gmail.com>
|
||||
Woody Gilk <shadowhand@deviantart.com>
|
||||
Zbigniew Motyka <zbigniew.motyka@gmail.com>
|
||||
Suhail Alkowaileet <xsoh.k7@gmail.com>
|
||||
Toshi MARUYAMA <marutosijp2@yahoo.co.jp>
|
||||
David Hansen <hansede@gmail.com>
|
||||
Brian Grinstead <briangrinstead@gmail.com>
|
||||
Christian Klammer <christian314159@gmail.com>
|
||||
Steven Luscher <jquerycla@steveluscher.com>
|
||||
Gan Eng Chin <engchin.gan@gmail.com>
|
||||
Gabriel Schulhof <gabriel.schulhof@intel.com>
|
||||
Alexander Schmitz <arschmitz@gmail.com>
|
||||
Vilhjálmur Skúlason <vis@dmm.is>
|
||||
Siebrand Mazeland <siebrand@kitano.nl>
|
||||
Mohsen Ekhtiari <mohsenekhtiari@yahoo.com>
|
||||
Pere Orga <gotrunks@gmail.com>
|
||||
Jasper de Groot <mail@ugomobi.com>
|
||||
Stephane Deschamps <stephane.deschamps@gmail.com>
|
||||
Jyoti Deka <dekajp@gmail.com>
|
||||
Andrei Picus <office.nightcrawler@gmail.com>
|
||||
Ondrej Novy <novy@ondrej.org>
|
||||
Jacob McCutcheon <jacob.mccutcheon@gmail.com>
|
||||
Monika Piotrowicz <monika.piotrowicz@gmail.com>
|
||||
Imants Horsts <imants.horsts@inbox.lv>
|
||||
Eric Dahl <eric.c.dahl@gmail.com>
|
||||
Dave Stein <dave@behance.com>
|
||||
Dylan Barrell <dylan@barrell.com>
|
||||
Daniel DeGroff <djdegroff@gmail.com>
|
||||
Michael Wiencek <mwtuea@gmail.com>
|
||||
Thomas Meyer <meyertee@gmail.com>
|
||||
Ruslan Yakhyaev <ruslan@ruslan.io>
|
||||
Brian J. Dowling <bjd-dev@simplicity.net>
|
||||
Ben Higgins <ben@extrahop.com>
|
||||
Yermo Lamers <yml@yml.com>
|
||||
Patrick Stapleton <github@gdi2290.com>
|
||||
Trisha Crowley <trisha.crowley@gmail.com>
|
||||
Usman Akeju <akeju00+github@gmail.com>
|
||||
Rodrigo Menezes <rod333@gmail.com>
|
||||
Jacques Perrault <jacques_perrault@us.ibm.com>
|
||||
Frederik Elvhage <frederik.elvhage@googlemail.com>
|
||||
Will Holley <willholley@gmail.com>
|
||||
Uri Gilad <antishok@gmail.com>
|
||||
Richard Gibson <richard.gibson@gmail.com>
|
||||
Simen Bekkhus <sbekkhus91@gmail.com>
|
||||
Chen Eshchar <eshcharc@gmail.com>
|
||||
Bruno Pérel <brunoperel@gmail.com>
|
||||
Mohammed Alshehri <m@dralshehri.com>
|
||||
Lisa Seacat DeLuca <ldeluca@us.ibm.com>
|
||||
Anne-Gaelle Colom <coloma@westminster.ac.uk>
|
||||
Adam Foster <slimfoster@gmail.com>
|
||||
Luke Page <luke.a.page@gmail.com>
|
||||
Daniel Owens <daniel@matchstickmixup.com>
|
||||
Michael Orchard <morchard@scottlogic.co.uk>
|
||||
Marcus Warren <marcus@envoke.com>
|
||||
Nils Heuermann <nils@world-of-scripts.de>
|
||||
Marco Ziech <marco@ziech.net>
|
||||
Patricia Juarez <patrixd@gmail.com>
|
||||
Ben Mosher <me@benmosher.com>
|
||||
Ablay Keldibek <atomio.ak@gmail.com>
|
||||
Thomas Applencourt <thomas.applencourt@irsamc.ups-tlse.fr>
|
||||
Jiabao Wu <jiabao.foss@gmail.com>
|
||||
Eric Lee Carraway <github@ericcarraway.com>
|
||||
Victor Homyakov <vkhomyackov@gmail.com>
|
||||
Myeongjin Lee <aranet100@gmail.com>
|
||||
Liran Sharir <lsharir@gmail.com>
|
||||
Weston Ruter <weston@xwp.co>
|
||||
Mani Mishra <manimishra902@gmail.com>
|
||||
Hannah Methvin <hannahmethvin@gmail.com>
|
||||
Leonardo Balter <leonardo.balter@gmail.com>
|
||||
Benjamin Albert <benjamin_a5@yahoo.com>
|
||||
Michał Gołębiowski-Owczarek <m.goleb@gmail.com>
|
||||
Alyosha Pushak <alyosha.pushak@gmail.com>
|
||||
Fahad Ahmad <fahadahmad41@hotmail.com>
|
||||
Matt Brundage <github@mattbrundage.com>
|
||||
Francesc Baeta <francesc.baeta@gmail.com>
|
||||
Piotr Baran <piotros@wp.pl>
|
||||
Mukul Hase <mukulhase@gmail.com>
|
||||
Konstantin Dinev <kdinev@mail.bw.edu>
|
||||
Rand Scullard <rand@randscullard.com>
|
||||
Dan Strohl <dan@wjcg.net>
|
||||
Maksim Ryzhikov <rv.maksim@gmail.com>
|
||||
Amine HADDAD <haddad@allegorie.tv>
|
||||
Amanpreet Singh <apsdehal@gmail.com>
|
||||
Alexey Balchunas <bleshik@gmail.com>
|
||||
Peter Kehl <peter.kehl@gmail.com>
|
||||
Peter Dave Hello <hsu@peterdavehello.org>
|
||||
Johannes Schäfer <johnschaefer@gmx.de>
|
||||
Ville Skyttä <ville.skytta@iki.fi>
|
||||
Ryan Oriecuia <ryan.oriecuia@visioncritical.com>
|
||||
Sergei Ratnikov <sergeir82@gmail.com>
|
||||
milk54 <milk851@gmail.com>
|
||||
Evelyn Masso <evoutofambit@gmail.com>
|
||||
Robin <mail@robin-fowler.com>
|
||||
Simon Asika <asika32764@gmail.com>
|
||||
Kevin Cupp <kevin.cupp@gmail.com>
|
||||
Jeremy Mickelson <Jeremy.Mickelson@gmail.com>
|
||||
Kyle Rosenberg <kyle.rosenberg@gmail.com>
|
||||
Petri Partio <petri.partio@gmail.com>
|
||||
pallxk <github@pallxk.com>
|
||||
Luke Brookhart <luke@onjax.com>
|
||||
claudi <hirt-claudia@gmx.de>
|
||||
Eirik Sletteberg <eiriksletteberg@gmail.com>
|
||||
Albert Johansson <albert@intervaro.se>
|
||||
A. Wells <borgboyone@users.noreply.github.com>
|
||||
Robert Brignull <robertbrignull@gmail.com>
|
||||
Horus68 <pauloizidoro@gmail.com>
|
||||
Maksymenkov Eugene <foatei@gmail.com>
|
||||
OskarNS <soerensen.oskar@gmail.com>
|
||||
Gez Quinn <holla@gezquinn.design>
|
||||
jigar gala <jigar.gala140291@gmail.com>
|
||||
Florian Wegscheider <flo.wegscheider@gmail.com>
|
||||
Fatér Zsolt <fater.zsolt@gmail.com>
|
||||
Szabolcs Szabolcsi-Toth <nec@shell8.net>
|
||||
Jérémy Munsch <github@jeremydev.ovh>
|
||||
Hrvoje Novosel <hrvoje.novosel@gmail.com>
|
||||
Paul Capron <PaulCapron@users.noreply.github.com>
|
||||
Micah Miller <mikhey@runbox.com>
|
||||
sakshi87 <53863764+sakshi87@users.noreply.github.com>
|
||||
Mikolaj Wolicki <wolicki.mikolaj@gmail.com>
|
||||
Patrick McKay <patrick.mckay@vumc.org>
|
||||
c-lambert <58025159+c-lambert@users.noreply.github.com>
|
||||
Josep Sanz <josepsanzcamp@gmail.com>
|
||||
Ben Mullins <benm@umich.edu>
|
||||
Christian Oliff <christianoliff@pm.me>
|
||||
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
|
||||
Adam Lidén Hällgren <adamlh92@gmail.com>
|
||||
James Hinderks <hinderks@gmail.com>
|
||||
Denny Septian Panggabean <97607754+ddevsr@users.noreply.github.com>
|
@ -0,0 +1,43 @@
|
||||
Copyright jQuery Foundation and other contributors, https://jquery.org/
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals. For exact contribution history, see the revision history
|
||||
available at https://github.com/jquery/jquery-ui
|
||||
|
||||
The following license applies to all parts of this software except as
|
||||
documented below:
|
||||
|
||||
====
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
====
|
||||
|
||||
Copyright and related rights for sample code are waived via CC0. Sample
|
||||
code is defined as all source code contained within the demos directory.
|
||||
|
||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
====
|
||||
|
||||
All files located in the node_modules and external directories are
|
||||
externally maintained libraries used by this software which have their
|
||||
own licenses; we recommend you read them, as their terms may differ from
|
||||
the terms above.
|
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue