접속설정 페이지, 기능 추가.
parent
5068c2e10f
commit
ecd4237209
|
|
@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -69,6 +70,12 @@ public class BaseController {
|
|||
return mav;
|
||||
}
|
||||
|
||||
@GetMapping("/resetSession")
|
||||
public ModelAndView resetSession(@AuthenticationPrincipal UserInfo loginUser, HttpServletRequest request){
|
||||
setSession(loginUser, request.getSession());
|
||||
return new ModelAndView("redirect:/dashboard");
|
||||
}
|
||||
|
||||
public void setSession(@AuthenticationPrincipal UserInfo loginUser, HttpSession session){
|
||||
loginUser.setDownOrganCdList(organConfigService.selectDownOrganListWhereUserOgCd(loginUser.getOgCd()));
|
||||
loginUser.setUpOrganCdList(organConfigService.selectUpOrganListWhereUserOgCd(loginUser.getOgCd()));
|
||||
|
|
|
|||
|
|
@ -127,7 +127,8 @@ public class SecurityConfig{
|
|||
"/faStatistics/**",
|
||||
"/translator/**",
|
||||
"/police/**",
|
||||
"/sri/**"
|
||||
"/sri/**",
|
||||
"/resetSession"
|
||||
).hasRole(Role.USER.name()) // USER 접근 허용
|
||||
.antMatchers(
|
||||
"/authMgt/**",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package com.dbnt.faisp.main.userInfo;
|
||||
|
||||
import com.dbnt.faisp.config.BaseController;
|
||||
import com.dbnt.faisp.config.SecurityConfig;
|
||||
import com.dbnt.faisp.kwms.service.KwmsService;
|
||||
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
|
||||
import com.dbnt.faisp.main.userInfo.model.UserInoutLog;
|
||||
|
|
@ -9,9 +11,14 @@ import com.dbnt.faisp.main.userInfo.model.UserInfo;
|
|||
import com.dbnt.faisp.main.userInfo.service.UserLogService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
|
|
@ -27,12 +34,13 @@ public class UserMgtController {
|
|||
private final KwmsService kwmsService;
|
||||
|
||||
@GetMapping("/userMgtPage")
|
||||
public ModelAndView codeMgtPage(UserInfo userInfo) {
|
||||
public ModelAndView userMgtPage(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo) {
|
||||
ModelAndView mav = new ModelAndView("adminPage/userMgt/userMgt");
|
||||
userInfo.setQueryInfo();
|
||||
if(userInfo.getUserStatus() == null || userInfo.getUserStatus().equals("")) {
|
||||
userInfo.setUserStatus("USC003");
|
||||
}
|
||||
userInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
|
||||
mav.addObject("userInfoList", userInfoService.selectUserInfoList(userInfo));
|
||||
userInfo.setContentCnt(userInfoService.selectUserInfoListCnt(userInfo));
|
||||
userInfo.setPaginationInfo();
|
||||
|
|
@ -41,7 +49,7 @@ public class UserMgtController {
|
|||
}
|
||||
|
||||
@GetMapping("/userEditModal")
|
||||
public ModelAndView menuEditModal(UserInfo userInfo){
|
||||
public ModelAndView userEditModal(UserInfo userInfo){
|
||||
ModelAndView mav = new ModelAndView("adminPage/userMgt/userEditModal");
|
||||
mav.addObject("ogList", codeMgtService.selectCodeMgtList("OG"));
|
||||
mav.addObject("ofcList", codeMgtService.selectCodeMgtList("OFC"));
|
||||
|
|
@ -120,4 +128,23 @@ public class UserMgtController {
|
|||
mav.addObject("searchParams", inoutLog);
|
||||
return mav;
|
||||
}
|
||||
@GetMapping("/accessChangePage")
|
||||
public ModelAndView accessChangePage(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo){
|
||||
ModelAndView mav = new ModelAndView("adminPage/userMgt/accessChange");
|
||||
userInfo.setQueryInfo();
|
||||
userInfo.setUserStatus("USC003");
|
||||
userInfo.setUserRole(loginUser.getUserRole());
|
||||
userInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
|
||||
mav.addObject("userInfoList", userInfoService.selectUserInfoList(userInfo));
|
||||
userInfo.setContentCnt(userInfoService.selectUserInfoListCnt(userInfo));
|
||||
userInfo.setPaginationInfo();
|
||||
mav.addObject("searchParams", userInfo);
|
||||
return mav;
|
||||
}
|
||||
@PostMapping("/changeAccessUser")
|
||||
public void changeAccessUser(UserInfo userInfo){
|
||||
UserDetails user = userInfoService.loadUserByUsername(userInfo.getUserId());
|
||||
Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
|
||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,28 +7,40 @@
|
|||
<sql id="selectUserInfoWhere">
|
||||
<where>
|
||||
<choose>
|
||||
<when test="userStatus != null and userStatus != ''">
|
||||
<when test='userStatus != null and userStatus != ""'>
|
||||
user_status = #{userStatus}
|
||||
</when>
|
||||
<otherwise>
|
||||
user_status != 'D'
|
||||
</otherwise>
|
||||
</choose>
|
||||
<if test="userId != null and userId != ''">
|
||||
<if test='userId != null and userId != ""'>
|
||||
and user_id like '%'||#{userId}||'%'
|
||||
</if>
|
||||
<if test="userNm != null and userNm != ''">
|
||||
<if test='userNm != null and userNm != ""'>
|
||||
and user_nm like '%'||#{userNm}||'%'
|
||||
</if>
|
||||
<if test="ogCd != null and ogCd != ''">
|
||||
<if test='ogCd != null and ogCd != ""'>
|
||||
and og_cd = #{ogCd}
|
||||
</if>
|
||||
<if test="ofcCd != null and ofcCd != ''">
|
||||
<if test='ofcCd != null and ofcCd != ""'>
|
||||
and ofc_cd = #{ofcCd}
|
||||
</if>
|
||||
<if test="titleCd != null and titleCd != ''">
|
||||
<if test='titleCd != null and titleCd != ""'>
|
||||
and title_cd = #{titleCd}
|
||||
</if>
|
||||
<if test='userRole == "ROLE_ADMIN,ROLE_SUB_ADMIN,ROLE_USER"'>
|
||||
and user_role like '%ROLE_USER'
|
||||
</if>
|
||||
<if test='userRole == "ROLE_SUB_ADMIN,ROLE_USER"'>
|
||||
and (user_role = 'ROLE_SUB_ADMIN,ROLE_USER' or user_role = 'ROLE_USER')
|
||||
</if>
|
||||
<if test="downOrganCdList != null">
|
||||
and og_cd in
|
||||
<foreach collection="downOrganCdList" item="organCd" separator="," open="(" close=")">
|
||||
#{organCd}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
<select id="selectUserInfoList" resultType="UserInfo" parameterType="UserInfo">
|
||||
|
|
|
|||
|
|
@ -1,71 +1,71 @@
|
|||
$(document).on('click', '#addCellPhone', function (){
|
||||
showModal(null);
|
||||
showModal(null);
|
||||
})
|
||||
|
||||
$(document).on('change', '#mgtOrgan', function (){
|
||||
const ogCd = $(this).val();
|
||||
if(ogCd != ''){
|
||||
changeManager(ogCd);
|
||||
const ogCd = $(this).val();
|
||||
if(ogCd != ''){
|
||||
changeManager(ogCd);
|
||||
}else{
|
||||
$("#pUserSeq").prop('disabled',true);
|
||||
$("#pUserSeq").val('');
|
||||
$("#pUserSeq").prop('disabled',true);
|
||||
$("#pUserSeq").val('');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function changeManager(ogCd){
|
||||
$.ajax({
|
||||
url: '/equip/cellPhoneSelecBox',
|
||||
data: {
|
||||
ogCd,
|
||||
},
|
||||
type: 'GET',
|
||||
dataType:"html",
|
||||
success: function(html){
|
||||
$("#pUserSeq").empty().append(html);
|
||||
$("#pUserSeq").prop('disabled',false);
|
||||
},
|
||||
error:function(){
|
||||
}
|
||||
});
|
||||
$.ajax({
|
||||
url: '/equip/cellPhoneSelecBox',
|
||||
data: {
|
||||
ogCd,
|
||||
},
|
||||
type: 'GET',
|
||||
dataType:"html",
|
||||
success: function(html){
|
||||
$("#pUserSeq").empty().append(html);
|
||||
$("#pUserSeq").prop('disabled',false);
|
||||
},
|
||||
error:function(){
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('click', '#saveCellPhone', function (){
|
||||
if(Validation()){
|
||||
if(confirm("저장하시겠습니까?")){
|
||||
document.getElementById("mgtOrgan").disabled = false;
|
||||
contentFade("in");
|
||||
const formData = new FormData($("#cellPhoneEditFm")[0]);
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
data : formData,
|
||||
url : "/equip/saveCellPhone",
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success : function(result) {
|
||||
alert("저장되었습니다.");
|
||||
contentFade("out");
|
||||
location.reload();
|
||||
},
|
||||
error : function(xhr, status) {
|
||||
alert("저장에 실패하였습니다.")
|
||||
contentFade("out");
|
||||
}
|
||||
})
|
||||
}
|
||||
if(Validation()){
|
||||
if(confirm("저장하시겠습니까?")){
|
||||
document.getElementById("mgtOrgan").disabled = false;
|
||||
contentFade("in");
|
||||
const formData = new FormData($("#cellPhoneEditFm")[0]);
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
data : formData,
|
||||
url : "/equip/saveCellPhone",
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success : function(result) {
|
||||
alert("저장되었습니다.");
|
||||
contentFade("out");
|
||||
location.reload();
|
||||
},
|
||||
error : function(xhr, status) {
|
||||
alert("저장에 실패하였습니다.")
|
||||
contentFade("out");
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
$(document).on('click', '.cellPhoneTr', function (event){
|
||||
const target = event.target;
|
||||
if(!(target.className === "cpChk" ||$(target).parents("td").length>0)){
|
||||
const phoneKey = (Number($(this).find(".phoneKey").val()));
|
||||
showModal(phoneKey);
|
||||
}
|
||||
const target = event.target;
|
||||
if(!(target.className === "cpChk" ||$(target).parents("td").length>0)){
|
||||
const phoneKey = (Number($(this).find(".phoneKey").val()));
|
||||
showModal(phoneKey);
|
||||
}
|
||||
});
|
||||
|
||||
function showModal(phoneKey){
|
||||
$.ajax({
|
||||
function showModal(phoneKey){
|
||||
$.ajax({
|
||||
url: '/equip/cellPhoneEditModal',
|
||||
data: {phoneKey: phoneKey},
|
||||
type: 'GET',
|
||||
|
|
@ -74,7 +74,7 @@ function showModal(phoneKey){
|
|||
$("#cellPhoneEditModalContent").empty().append(html);
|
||||
$("#cellPhoneEditModal").modal('show');
|
||||
if(phoneKey == null){
|
||||
changeManager($("#mgtOrgan").val());
|
||||
changeManager($("#mgtOrgan").val());
|
||||
}
|
||||
},
|
||||
error:function(){
|
||||
|
|
@ -84,29 +84,29 @@ function showModal(phoneKey){
|
|||
}
|
||||
|
||||
$(document).on('click', '#updateCellPhone', function (){
|
||||
if(Validation()){
|
||||
if(confirm("수정하시겠습니까?")){
|
||||
document.getElementById("mgtOrgan").disabled = false;
|
||||
contentFade("in");
|
||||
const formData = new FormData($("#cellPhoneEditFm")[0]);
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
data : formData,
|
||||
url : "/equip/saveCellPhone",
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success : function(result) {
|
||||
alert("수정되었습니다.");
|
||||
contentFade("out");
|
||||
showModal(result);
|
||||
},
|
||||
error : function(xhr, status) {
|
||||
alert("수정에 실패하였습니다.")
|
||||
contentFade("out");
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
if(Validation()){
|
||||
if(confirm("수정하시겠습니까?")){
|
||||
document.getElementById("mgtOrgan").disabled = false;
|
||||
contentFade("in");
|
||||
const formData = new FormData($("#cellPhoneEditFm")[0]);
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
data : formData,
|
||||
url : "/equip/saveCellPhone",
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success : function(result) {
|
||||
alert("수정되었습니다.");
|
||||
contentFade("out");
|
||||
showModal(result);
|
||||
},
|
||||
error : function(xhr, status) {
|
||||
alert("수정에 실패하였습니다.")
|
||||
contentFade("out");
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
$(document).ready( function() {
|
||||
|
|
@ -116,93 +116,93 @@ $(document).ready( function() {
|
|||
});
|
||||
|
||||
$(document).on('click', '#deleteCellPhone', function (){
|
||||
if($('input:checkbox[name=cpChk]:checked').length < 1){
|
||||
alert("게시물을 선택해주세요")
|
||||
return false;
|
||||
}
|
||||
if(confirm("선택한 대상을 삭제처리 하시겠습니까?")){
|
||||
const checkArr = [];
|
||||
$('input:checkbox[name=cpChk]:checked').each(function (idx, el){
|
||||
checkArr.push({});
|
||||
const target = $(el);
|
||||
checkArr[idx].phoneKey = Number(target.parents('tr').find('.phoneKey').val());
|
||||
})
|
||||
deleteCellPhone(checkArr);
|
||||
if($('input:checkbox[name=cpChk]:checked').length < 1){
|
||||
alert("게시물을 선택해주세요")
|
||||
return false;
|
||||
}
|
||||
if(confirm("선택한 대상을 삭제처리 하시겠습니까?")){
|
||||
const checkArr = [];
|
||||
$('input:checkbox[name=cpChk]:checked').each(function (idx, el){
|
||||
checkArr.push({});
|
||||
const target = $(el);
|
||||
checkArr[idx].phoneKey = Number(target.parents('tr').find('.phoneKey').val());
|
||||
})
|
||||
deleteCellPhone(checkArr);
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
$(document).on('click', '#deleteCellPhoneM', function (){
|
||||
if(confirm("선택한 대상을 삭제처리 하시겠습니까?")){
|
||||
const checkArr = [];
|
||||
checkArr.push({});
|
||||
checkArr[0].phoneKey = Number( $('input[name=phoneKey]').val());
|
||||
deleteCellPhone(checkArr);
|
||||
}
|
||||
if(confirm("선택한 대상을 삭제처리 하시겠습니까?")){
|
||||
const checkArr = [];
|
||||
checkArr.push({});
|
||||
checkArr[0].phoneKey = Number( $('input[name=phoneKey]').val());
|
||||
deleteCellPhone(checkArr);
|
||||
}
|
||||
})
|
||||
|
||||
function deleteCellPhone(checkArr){
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
url : "/equip/deleteCellPhone",
|
||||
data : JSON.stringify(checkArr),
|
||||
contentType: 'application/json',
|
||||
beforeSend: function (xhr){
|
||||
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
|
||||
},
|
||||
success : function() {
|
||||
alert("삭제처리 되었습니다.");
|
||||
location.reload();
|
||||
},
|
||||
error : function(xhr, status) {
|
||||
alert("삭제처리에 실패하였습니다");
|
||||
}
|
||||
})
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
url : "/equip/deleteCellPhone",
|
||||
data : JSON.stringify(checkArr),
|
||||
contentType: 'application/json',
|
||||
beforeSend: function (xhr){
|
||||
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
|
||||
},
|
||||
success : function() {
|
||||
alert("삭제처리 되었습니다.");
|
||||
location.reload();
|
||||
},
|
||||
error : function(xhr, status) {
|
||||
alert("삭제처리에 실패하였습니다");
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
$(document).on('click', '#goExcel', function (){
|
||||
if(confirm("엑셀로 다운로드 하시겠습니까?")){
|
||||
$('input[name=excel]').val('Y');
|
||||
$('#searchFm').submit();
|
||||
$('input[name=excel]').val('');
|
||||
}else{
|
||||
false;
|
||||
}
|
||||
if(confirm("엑셀로 다운로드 하시겠습니까?")){
|
||||
$('input[name=excel]').val('Y');
|
||||
$('#searchFm').submit();
|
||||
$('input[name=excel]').val('');
|
||||
}else{
|
||||
false;
|
||||
}
|
||||
})
|
||||
|
||||
function Validation(){
|
||||
let flag = true;
|
||||
const emailRule = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
|
||||
const regExp = /^\d{2,3}-\d{3,4}-\d{4}$/;
|
||||
if($('#mgtOrgan').val() == ""){
|
||||
alert("관리처를 선택해주세요.");
|
||||
$('#mgtOrgan').focus();
|
||||
flag = false;
|
||||
}
|
||||
if($('#pUserSeq').val() == ""){
|
||||
alert("사용자를 선택해주세요.");
|
||||
$('#pUserSeq').focus();
|
||||
flag = false;
|
||||
}
|
||||
if($('#telNo').val() != ""){
|
||||
if(!regExp.test($("input[id='telNo']").val())) {
|
||||
alert("전화번호 형식이 맞지않습니다.");
|
||||
$('#telNo').focus();
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
if($('#extMail').val() != ""){
|
||||
if(!emailRule.test($("input[id='extMail']").val())) {
|
||||
alert("이메일 형식이 맞지않습니다.");
|
||||
$('#extMail').focus();
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
let flag = true;
|
||||
const emailRule = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
|
||||
const regExp = /^\d{2,3}-\d{3,4}-\d{4}$/;
|
||||
if($('#mgtOrgan').val() == ""){
|
||||
alert("관리처를 선택해주세요.");
|
||||
$('#mgtOrgan').focus();
|
||||
flag = false;
|
||||
}
|
||||
if($('#pUserSeq').val() == ""){
|
||||
alert("사용자를 선택해주세요.");
|
||||
$('#pUserSeq').focus();
|
||||
flag = false;
|
||||
}
|
||||
if($('#telNo').val() != ""){
|
||||
if(!regExp.test($("input[id='telNo']").val())) {
|
||||
alert("전화번호 형식이 맞지않습니다.");
|
||||
$('#telNo').focus();
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
if($('#extMail').val() != ""){
|
||||
if(!emailRule.test($("input[id='extMail']").val())) {
|
||||
alert("이메일 형식이 맞지않습니다.");
|
||||
$('#extMail').focus();
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
$(document).on('click', '#btn-close', function (){
|
||||
location.reload();
|
||||
location.reload();
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
$(document).on('click', '.userInfoTr', function (){
|
||||
const selectedTr = $(this);
|
||||
if(confirm(selectedTr.find(".userNm").val()+"으로 접속 정보를 변경하시겠습니까?")){
|
||||
contentFade("in");
|
||||
const formData = new FormData();
|
||||
formData.append("userSeq", selectedTr.find(".userSeq").val());
|
||||
formData.append("userId", selectedTr.find(".userId").val());
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
data : formData,
|
||||
url : "/userMgt/changeAccessUser",
|
||||
processData: false,
|
||||
contentType: false,
|
||||
beforeSend: function (xhr){
|
||||
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
|
||||
},
|
||||
success : function(result) {
|
||||
location.href = "/resetSession";
|
||||
},
|
||||
error : function(xhr, status) {
|
||||
alert("다시 시도해주십시오.")
|
||||
contentFade("out");
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout/layout}">
|
||||
<th:block layout:fragment="script">
|
||||
<script type="text/javascript" th:src="@{/js/userMgt/accessChange.js}"></script>
|
||||
</th:block>
|
||||
<div layout:fragment="content">
|
||||
<main>
|
||||
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
|
||||
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
|
||||
<h4>접속 설정</h4>
|
||||
<div class="card bg-light">
|
||||
<div class="card-body">
|
||||
<form method="get" th:action="@{/userMgt/accessChangePage}">
|
||||
<input type="hidden" name="userStatus" id="userStatus" th:value="${searchParams.userStatus}">
|
||||
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
|
||||
<div class="row justify-content-between py-1">
|
||||
<div class="col-auto">
|
||||
<select class="form-select form-select-sm" name="rowCnt" id="rowCnt">
|
||||
<th:block th:each="num : ${#numbers.sequence(1,5)}">
|
||||
<option th:value="${num*10}" th:text="${num*10}" th:selected="${searchParams.rowCnt==num*10}"></option>
|
||||
</th:block>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-auto">
|
||||
<select class="form-select form-select-sm" name="ogCd">
|
||||
<option value="">관서 선택</option>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
|
||||
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${searchParams.ogCd==commonCode.itemCd}"></option>
|
||||
</th:block>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<select class="form-select form-select-sm" name="ofcCd">
|
||||
<option value="">부서 선택</option>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('OFC')}">
|
||||
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${searchParams.ofcCd==commonCode.itemCd}"></option>
|
||||
</th:block>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<select class="form-select form-select-sm" name="titleCd">
|
||||
<option value="">계급 선택</option>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
|
||||
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${searchParams.titleCd==commonCode.itemCd}"></option>
|
||||
</th:block>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<input type="text" class="form-control form-control-sm" name="userNm" placeholder="사용자명" th:value="${searchParams.userNm}">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<input type="text" class="form-control form-control-sm" name="userId" placeholder="사용자 아이디" th:value="${searchParams.userId}">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<input type="submit" class="btn btn-sm btn-primary" id="searchBtn" value="검색">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<table class="table table-sm table-hover table-bordered">
|
||||
<thead>
|
||||
<tr class="table-secondary">
|
||||
<th>소속</th>
|
||||
<th>부서</th>
|
||||
<th>계급</th>
|
||||
<th>성명</th>
|
||||
<th>아이디</th>
|
||||
<th>식별번호</th>
|
||||
<th>등록일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="table-group-divider">
|
||||
<tr class="userInfoTr" th:each="userInfo:${userInfoList}">
|
||||
<input type="hidden" class="userSeq" th:value="${userInfo.userSeq}">
|
||||
<input type="hidden" class="userId" th:value="${userInfo.userId}">
|
||||
<input type="hidden" class="userNm" th:value="${userInfo.userNm}">
|
||||
<td>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
|
||||
<th:block th:if="${commonCode.itemCd == userInfo.ogCd}" th:text="${commonCode.itemValue}"></th:block>
|
||||
</th:block>
|
||||
</td>
|
||||
<td>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('OFC')}">
|
||||
<th:block th:if="${commonCode.itemCd == userInfo.ofcCd}" th:text="${commonCode.itemValue}"></th:block>
|
||||
</th:block>
|
||||
</td>
|
||||
<td>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
|
||||
<th:block th:if="${commonCode.itemCd == userInfo.titleCd}" th:text="${commonCode.itemValue}"></th:block>
|
||||
</th:block>
|
||||
</td>
|
||||
<td th:text="${userInfo.userNm}"></td>
|
||||
<td th:text="${userInfo.userId}"></td>
|
||||
<td th:text="${userInfo.dicCode}"></td>
|
||||
<td th:text="${#temporals.format(userInfo.wrtDt, 'yyyy-MM-dd HH:mm:ss')}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-auto">
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination mb-0">
|
||||
<th:block th:if="${searchParams.pageIndex>3}">
|
||||
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)-3}">
|
||||
<a class="page-link" href="#" aria-label="Previous">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
</th:block>
|
||||
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}">
|
||||
<li class="page-item" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex==num?'active':''}">
|
||||
<a class="page-link" href="#" th:text="${num}"></a>
|
||||
</li>
|
||||
</th:block>
|
||||
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}">
|
||||
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)+3}">
|
||||
<a class="page-link" href="#" aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
</th:block>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</html>
|
||||
|
|
@ -146,13 +146,6 @@
|
|||
<option value="N" th:selected="${searchParams.isDamboUnpaidAmount eq 'N'}">X</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<select class="form-select form-select-sm" name="isDirectHandoverDt" th:value="${searchParams.isDirectHandoverDt}">
|
||||
<option value="">직접인계 여부</option>
|
||||
<option value="Y" th:selected="${searchParams.isDirectHandoverDt eq 'Y'}">O</option>
|
||||
<option value="N" th:selected="${searchParams.isDirectHandoverDt eq 'N'}">X</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<select class="form-select form-select-sm" name="isEvictionDt" th:value="${searchParams.isEvictionDt}">
|
||||
<option value="">퇴거여부</option>
|
||||
|
|
@ -174,7 +167,6 @@
|
|||
<option value="N" th:selected="${searchParams.isConsignmentStartDt eq 'N'}">X</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-2"></div>
|
||||
<div class="col-2">
|
||||
<select class="form-select form-select-sm" name="isConfiscationDt" th:value="${searchParams.isConfiscationDt}">
|
||||
<option value="">침몰여부</option>
|
||||
|
|
@ -182,6 +174,7 @@
|
|||
<option value="N" th:selected="${searchParams.isConfiscationDt eq 'N'}">X</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-2"></div>
|
||||
<div class="col-2">
|
||||
<select class="form-select form-select-sm" name="boatDisposalType" th:value="${searchParams.boatDisposalType}">
|
||||
<option value="">폐선종류</option>
|
||||
|
|
@ -191,6 +184,13 @@
|
|||
</th:block>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<select class="form-select form-select-sm" name="isDirectHandoverDt" th:value="${searchParams.isDirectHandoverDt}">
|
||||
<option value="">직접인계 여부</option>
|
||||
<option value="Y" th:selected="${searchParams.isDirectHandoverDt eq 'Y'}">O</option>
|
||||
<option value="N" th:selected="${searchParams.isDirectHandoverDt eq 'N'}">X</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<input class="form-control form-control-sm" name="handoverSeaPointDetail" id="handoverSeaPointDetail" placeholder="직접인계 해점" th:value="${searchParams.handoverSeaPointDetail}">
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<li><a href="/userMgt/userMgtPage" class="dropdown-item">외사경찰관리</a></li>
|
||||
<li><a href="/authMgt/authMgtPage" class="dropdown-item">권한설정</a></li>
|
||||
<li><a href="/userMgt/userLog/requestLog" class="dropdown-item">사용자로그</a></li>
|
||||
<li><a href="#" class="dropdown-item disabled">접속설정</a></li>
|
||||
<li><a href="/userMgt/accessChangePage" class="dropdown-item">접속설정</a></li>
|
||||
</th:block>
|
||||
</ul>
|
||||
</li>
|
||||
|
|
|
|||
Loading…
Reference in New Issue