diff --git a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java index 542a9cce..8ab76efc 100644 --- a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java +++ b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java @@ -59,8 +59,17 @@ public class SecurityConfig{ @Bean protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeRequests() // 페이지 권한 설정 - .antMatchers("/dashboard", "/refreshSession").hasRole(Role.USER.name()) // USER, ADMIN 접근 허용 - .antMatchers("/codeMgt/**", "/menuMgt/**", "/authMgt/**","/userMgt/**").hasRole(Role.ADMIN.name()) // ADMIN만 접근 허용 + .antMatchers( + "/dashboard", + "/refreshSession" + ).hasRole(Role.USER.name()) // USER, ADMIN 접근 허용 + .antMatchers( + "/codeMgt/**", + "/menuMgt/**", + "/authMgt/**", + "/userMgt/**", + "/organMgt/**" + ).hasRole(Role.ADMIN.name()) // ADMIN만 접근 허용 .antMatchers("/login").permitAll() // 로그인 페이지는 권한 없이 접근 허용 .and() // 로그인 설정 .formLogin() .loginPage("/login") // Custom login form 사용 diff --git a/src/main/java/com/dbnt/faisp/controller/OrganConfigController.java b/src/main/java/com/dbnt/faisp/controller/OrganConfigController.java index 7390de5c..84632992 100644 --- a/src/main/java/com/dbnt/faisp/controller/OrganConfigController.java +++ b/src/main/java/com/dbnt/faisp/controller/OrganConfigController.java @@ -1,17 +1,23 @@ package com.dbnt.faisp.controller; +import com.dbnt.faisp.codeMgt.CodeMgtService; +import com.dbnt.faisp.codeMgt.model.CodeMgt; import com.dbnt.faisp.organMgt.OrganConfigService; +import com.dbnt.faisp.organMgt.model.OrganConfig; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import java.util.*; + @RestController @RequiredArgsConstructor @RequestMapping("/organMgt") public class OrganConfigController { private final OrganConfigService organConfigService; + private final CodeMgtService codeMgtService; @GetMapping("/organMgtPage") public ModelAndView organMgtPage(UserInfo userInfo) { @@ -20,4 +26,36 @@ public class OrganConfigController { return mav; } + @GetMapping("/selectOrganList") + public Map> selectOrganList(){ + List organList = codeMgtService.selectCodeMgtList("OG"); + List usedOrganList = organConfigService.selectSavedOrganList(); + List notUsedOrganList = new ArrayList<>(); + for(CodeMgt organCode: organList){ + if(!organCode.getItemCd().equals("OG001")){ + boolean usedFlag = false; + for(OrganConfig usedOrgan: usedOrganList){ + if(organCode.getItemCd().equals(usedOrgan.getOrganCd())){ + usedFlag = true; + usedOrgan.setOrganNm(organCode.getItemValue()); + break; + } + } + if(!usedFlag){ + notUsedOrganList.add(organCode); + } + } + } + Map> returnMap = new HashMap<>(); + returnMap.put("notUsedOrganList", Collections.singletonList(notUsedOrganList)); + returnMap.put("usedOrganList", Collections.singletonList(usedOrganList)); + return returnMap; + } + + @PostMapping("/saveOrganConfig") + @ResponseBody + public Integer saveOrganConfig(@RequestBody List organConfigList){ + return organConfigService.saveOrganConfig(organConfigList); + } + } diff --git a/src/main/java/com/dbnt/faisp/organMgt/OrganConfigService.java b/src/main/java/com/dbnt/faisp/organMgt/OrganConfigService.java index ed8d027c..d730eb2a 100644 --- a/src/main/java/com/dbnt/faisp/organMgt/OrganConfigService.java +++ b/src/main/java/com/dbnt/faisp/organMgt/OrganConfigService.java @@ -1,10 +1,22 @@ package com.dbnt.faisp.organMgt; +import com.dbnt.faisp.organMgt.model.OrganConfig; +import com.dbnt.faisp.organMgt.repository.OrganConfigRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + @Service @RequiredArgsConstructor public class OrganConfigService { + private final OrganConfigRepository organConfigRepository; + public List selectSavedOrganList() { + return organConfigRepository.findAll(); + } + + public Integer saveOrganConfig(List organConfigList) { + return organConfigRepository.saveAll(organConfigList).size(); + } } diff --git a/src/main/java/com/dbnt/faisp/organMgt/model/OrganConfig.java b/src/main/java/com/dbnt/faisp/organMgt/model/OrganConfig.java index 25099d99..a9b2ea34 100644 --- a/src/main/java/com/dbnt/faisp/organMgt/model/OrganConfig.java +++ b/src/main/java/com/dbnt/faisp/organMgt/model/OrganConfig.java @@ -26,5 +26,6 @@ public class OrganConfig { private String parentOrgan; @Transient - private List organConfigList; + private String organNm; + } diff --git a/src/main/resources/static/css/common.css b/src/main/resources/static/css/common.css index d15b91a1..34073393 100644 --- a/src/main/resources/static/css/common.css +++ b/src/main/resources/static/css/common.css @@ -14,4 +14,9 @@ top: 50%; transform: translate(-50%, -50%); background-color: #ffffff; +} + +.activeTr{ + --bs-bg-opacity: 0.25; + background-color: rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important; } \ No newline at end of file diff --git a/src/main/resources/static/js/organMgt/organMgt.js b/src/main/resources/static/js/organMgt/organMgt.js index d43df30f..117f5cbe 100644 --- a/src/main/resources/static/js/organMgt/organMgt.js +++ b/src/main/resources/static/js/organMgt/organMgt.js @@ -1,4 +1,22 @@ -const organConfigList = [] +let notUsedOrganList = []; +let usedOrganList = []; +let selectedMiddleOrganCd = ""; + +$(function (){ + $.ajax({ + url: '/organMgt/selectOrganList', + type: 'GET', + dataType:"json", + success: function(data){ + notUsedOrganList = data.notUsedOrganList[0]; + usedOrganList = data.usedOrganList[0]; + setUsedOrganTr("OG001", "OGC002"); + }, + error:function(){ + + } + }); +}) $(document).on('click', '#middleAddBtn', function (){ addTr('middleTbody') @@ -9,13 +27,114 @@ $(document).on('click', '#bottomAddBtn', function (){ }) $(document).on('click', '.rowDeleteBtn', function (){ - $(this).parents('tr').remove(); + const targetTr = $(this).parents('tr'); + const selector = targetTr.find("select"); + usedOrganList.forEach(function (organ, idx){ + if(organ.organCd === selector.val() + || organ.parentOrgan === selector.val()){ + notUsedOrganList.push({ + itemCd: organ.organCd, + itemValue: organ.organNm + }) + usedOrganList = usedOrganList.splice(0, idx).concat(usedOrganList.splice(idx+1, usedOrganList.length)); + } + }) + targetTr.remove(); }) + +$(document).on('change', '.organSelector', function () { + const selectedItemCd = this.value; + const selectedItemValue = this.selectedOptions[0].text; + const tbodyId = $(this).parents('tbody').id + usedOrganList.forEach(function (organ, idx){ + if(organ.organCd===selectedItemCd){ + alert("이미 등록된 관서입니다.") + return null; + } + }) + for(var i=0; i0){ + activeTr[0].className = "middleTr"; + } + this.className = "middleTr activeTr" + $("#bottomTbody").empty(); + selectedMiddleOrganCd = $(this).find("select").val(); + setUsedOrganTr(selectedMiddleOrganCd, "OGC003") + $("#bottomBtnRow").show(); + $("#emptyTr").hide(); +}) +$(document).on('click', '#organSaveBtn', function (){ + contentFade("in"); + $.ajax({ + type : 'POST', + url : "/organMgt/saveOrganConfig", + data : JSON.stringify(usedOrganList), + contentType: 'application/json', + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(data) { + alert("저장되었습니다."); + contentFade("out"); + location.reload(); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) +}) + function addTr(tbody){ - $('#'+tbody).append( - '' + - '' + - '' + - '' - ) + if(notUsedOrganList.length===0){ + alert("추가할 수 있는 관서가 없습니다.") + }else{ + let options = ''; + notUsedOrganList.forEach(function (organ) { + options+= '' + }); + $('#'+tbody).append( + '' + + '' + + '' + + '' + ) + } +} + +function setUsedOrganTr(parentOrgan, organType){ + const target = organType==="OGC002"?$("#middleTbody"):$("#bottomTbody") + usedOrganList.forEach(function (organ){ + if(organ.parentOrgan===parentOrgan && organ.organType===organType){ + target.append( + '' + + '' + + '' + + '' + ) + } + }) } \ No newline at end of file diff --git a/src/main/resources/templates/adminPage/organMgt/organMgt.html b/src/main/resources/templates/adminPage/organMgt/organMgt.html index ae20bee0..a3941e3d 100644 --- a/src/main/resources/templates/adminPage/organMgt/organMgt.html +++ b/src/main/resources/templates/adminPage/organMgt/organMgt.html @@ -16,16 +16,16 @@
- +
-
+
- +
@@ -43,18 +43,18 @@ -
+
-
+
- +
관할서