diff --git a/src/main/java/com/dbnt/faisp/main/codeMgt/CodeMgtController.java b/src/main/java/com/dbnt/faisp/main/codeMgt/CodeMgtController.java index 74044df4..f825584c 100644 --- a/src/main/java/com/dbnt/faisp/main/codeMgt/CodeMgtController.java +++ b/src/main/java/com/dbnt/faisp/main/codeMgt/CodeMgtController.java @@ -1,6 +1,7 @@ package com.dbnt.faisp.main.codeMgt; import com.dbnt.faisp.main.codeMgt.model.CodeCatg; +import com.dbnt.faisp.main.codeMgt.model.CodeFormData; import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -17,7 +18,9 @@ public class CodeMgtController { @GetMapping("/codeMgtPage") public ModelAndView codeMgtPage() { - ModelAndView mav = new ModelAndView("adminPage/codeMgt/codeMgt"); + ModelAndView mav = new ModelAndView("adminPage/codeMgt/codeMgt2"); + mav.addObject("catgList", codeMgtService.selectAllCategoryList()); + mav.addObject("codeList", codeMgtService.selectAllCodeList()); return mav; } @@ -27,6 +30,10 @@ public class CodeMgtController { codeMgtService.saveCode(codeCategoryList); return ""; } + @PostMapping("/saveCode2") + public void saveCode2(CodeFormData formData){ + codeMgtService.saveCode2(formData.getCategoryList(), formData.getCodeList()); + } @GetMapping("/selectCodeCatgList") public List selectCodeCatgList(){ diff --git a/src/main/java/com/dbnt/faisp/main/codeMgt/model/CodeFormData.java b/src/main/java/com/dbnt/faisp/main/codeMgt/model/CodeFormData.java new file mode 100644 index 00000000..86d4e55e --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/codeMgt/model/CodeFormData.java @@ -0,0 +1,13 @@ +package com.dbnt.faisp.main.codeMgt.model; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class CodeFormData { + List categoryList; + List codeList; +} diff --git a/src/main/java/com/dbnt/faisp/main/codeMgt/model/CodeMgt.java b/src/main/java/com/dbnt/faisp/main/codeMgt/model/CodeMgt.java index 1930c216..e78f3169 100644 --- a/src/main/java/com/dbnt/faisp/main/codeMgt/model/CodeMgt.java +++ b/src/main/java/com/dbnt/faisp/main/codeMgt/model/CodeMgt.java @@ -27,6 +27,8 @@ public class CodeMgt { private String itemValue; @Column(name = "use_chk") private String useChk; + @Column(name = "order_num") + private Integer orderNum; @Transient private String status; diff --git a/src/main/java/com/dbnt/faisp/main/codeMgt/repository/CodeMgtRepository.java b/src/main/java/com/dbnt/faisp/main/codeMgt/repository/CodeMgtRepository.java index 206ffad2..bfdb0ea1 100644 --- a/src/main/java/com/dbnt/faisp/main/codeMgt/repository/CodeMgtRepository.java +++ b/src/main/java/com/dbnt/faisp/main/codeMgt/repository/CodeMgtRepository.java @@ -10,8 +10,8 @@ import java.util.Optional; public interface CodeMgtRepository extends JpaRepository { List findByCategoryCdOrderByItemCdAsc(String categoryCd); - List findByCategoryCdAndUseChkOrderByItemCdAsc(String categoryCd, String useChk); + List findByCategoryCdAndUseChkOrderByOrderNumAsc(String categoryCd, String useChk); Optional findByCategoryCdAndItemValue(String categoryCd, String itemValue); List findByUseChkOrderByItemCdAsc(String useChk); - List findByOrderByItemCdAsc(); + List findByOrderByOrderNumAsc(); } diff --git a/src/main/java/com/dbnt/faisp/main/codeMgt/service/CodeMgtService.java b/src/main/java/com/dbnt/faisp/main/codeMgt/service/CodeMgtService.java index f2fe6559..6cfe37a6 100644 --- a/src/main/java/com/dbnt/faisp/main/codeMgt/service/CodeMgtService.java +++ b/src/main/java/com/dbnt/faisp/main/codeMgt/service/CodeMgtService.java @@ -1,6 +1,7 @@ package com.dbnt.faisp.main.codeMgt.service; import com.dbnt.faisp.main.codeMgt.model.CodeCatg; +import com.dbnt.faisp.main.codeMgt.model.CodeFormData; import com.dbnt.faisp.main.codeMgt.model.CodeMgt; import com.dbnt.faisp.main.codeMgt.repository.CodeCatgRepository; import com.dbnt.faisp.main.codeMgt.repository.CodeMgtRepository; @@ -8,10 +9,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Service @RequiredArgsConstructor @@ -31,6 +29,31 @@ public class CodeMgtService{ return ""; } + @Transactional + public void saveCode2(List categoryList, List codeList) { + if(categoryList!=null){ + codeCatgRepository.saveAll(categoryList); + } + + if(codeList!=null){ + HashMap map = new HashMap<>(); + for(CodeMgt code: codeList){ + if(code.getItemCd().isEmpty()){ + map.put(code.getCategoryCd(), 1); + } + } + for(CodeMgt code: codeList){ + if(code.getItemCd().isEmpty()) { + Integer categorySeq = map.get(code.getCategoryCd()); + String tempItemCd = "000" + categorySeq++; + code.setItemCd(code.getCategoryCd() + (tempItemCd.substring(tempItemCd.length() - 3))); + map.put(code.getCategoryCd(), categorySeq); + } + } + codeMgtRepository.saveAll(codeList); + } + } + private void codeItemSave(List itemList){ codeMgtRepository.saveAll(itemList); } @@ -45,7 +68,7 @@ public class CodeMgtService{ public Map> getCommonCode() { List categoryList = codeCatgRepository.findAll(); - List codeList = codeMgtRepository.findByOrderByItemCdAsc(); + List codeList = codeMgtRepository.findByOrderByOrderNumAsc(); Map> categoryMap = new HashMap<>(); for(CodeCatg category: categoryList){ List childList = new ArrayList<>(); @@ -60,7 +83,7 @@ public class CodeMgtService{ } public List selectCodeMgtList(String categoryCd) { - return codeMgtRepository.findByCategoryCdAndUseChkOrderByItemCdAsc(categoryCd, "T"); + return codeMgtRepository.findByCategoryCdAndUseChkOrderByOrderNumAsc(categoryCd, "T"); } public List selectCodeMgtListOrderByDesc(String categoryCd){ List codeList = selectCodeMgtList(categoryCd); @@ -71,4 +94,12 @@ public class CodeMgtService{ CodeMgt code = codeMgtRepository.findByCategoryCdAndItemValue(categoryCd, value).orElse(null); return code==null?null:code.getItemCd(); } + + public List selectAllCategoryList() { + return codeCatgRepository.findAll(); + } + + public List selectAllCodeList() { + return codeMgtRepository.findByOrderByOrderNumAsc(); + } } diff --git a/src/main/java/com/dbnt/faisp/main/menuMgt/model/MenuMgt.java b/src/main/java/com/dbnt/faisp/main/menuMgt/model/MenuMgt.java index d4fc44b3..abddd3b5 100644 --- a/src/main/java/com/dbnt/faisp/main/menuMgt/model/MenuMgt.java +++ b/src/main/java/com/dbnt/faisp/main/menuMgt/model/MenuMgt.java @@ -36,6 +36,8 @@ public class MenuMgt extends BaseModel { private String deadlineChk; @Column(name = "use_chk") private String useChk; + @Column(name = "order_str") + private String orderStr; @Transient private List childList; diff --git a/src/main/java/com/dbnt/faisp/main/menuMgt/service/MenuMgtService.java b/src/main/java/com/dbnt/faisp/main/menuMgt/service/MenuMgtService.java index f2de68fb..84fb1f87 100644 --- a/src/main/java/com/dbnt/faisp/main/menuMgt/service/MenuMgtService.java +++ b/src/main/java/com/dbnt/faisp/main/menuMgt/service/MenuMgtService.java @@ -126,6 +126,10 @@ public class MenuMgtService { if(accessMenu.getCat1Cd().equals(cat1Cd) && accessMenu.getCat2Cd().equals(secondMenu.getCat2Cd()) && accessMenu.getCat3Cd().equals(thirdMenu.getCat3Cd())){ + String orderStr = accessMenu.getOrderStr(); + firstMenu.setOrderStr(orderStr.substring(0,1)); + secondMenu.setOrderStr(orderStr.substring(1,2)); + thirdMenu.setOrderStr(orderStr.substring(2,3)); thirdMenu.setMenuUrl(accessMenu.getMenuUrl()); break; } @@ -135,15 +139,18 @@ public class MenuMgtService { } if(thirdMenuList.size()>0){ thirdMenuList.sort((o1, o2) -> { - String cat3_1 = o1.getCat3Cd(); - String cat3_2 = o2.getCat3Cd(); - return cat3_1.compareTo(cat3_2); + String orderStr_1 = o1.getOrderStr(); + String orderStr_2 = o2.getOrderStr(); + return orderStr_1.compareTo(orderStr_2); }); secondMenu.setChildList(thirdMenuList); }else{ for(MenuMgt accessMenu: accessMenuList){ if(accessMenu.getCat1Cd().equals(cat1Cd) && accessMenu.getCat2Cd().equals(secondMenu.getCat2Cd())){ + String orderStr = accessMenu.getOrderStr(); + firstMenu.setOrderStr(orderStr.substring(0,1)); + secondMenu.setOrderStr(orderStr.substring(1,2)); secondMenu.setMenuUrl(accessMenu.getMenuUrl()); break; } @@ -153,17 +160,17 @@ public class MenuMgtService { } } secondMenuList.sort((o1, o2) -> { - String cat2_1 = o1.getCat2Cd(); - String cat2_2 = o2.getCat2Cd(); - return cat2_1.compareTo(cat2_2); + String orderStr_1 = o1.getOrderStr(); + String orderStr_2 = o2.getOrderStr(); + return orderStr_1.compareTo(orderStr_2); }); firstMenu.setChildList(secondMenuList); firstMenuList.add(firstMenu); } firstMenuList.sort((o1, o2) -> { - String cat1_1 = o1.getCat1Cd(); - String cat1_2 = o2.getCat1Cd(); - return cat1_1.compareTo(cat1_2); + String orderStr_1 = o1.getOrderStr(); + String orderStr_2 = o2.getOrderStr(); + return orderStr_1.compareTo(orderStr_2); }); return firstMenuList; } diff --git a/src/main/resources/mybatisMapper/menuMgtMapper.xml b/src/main/resources/mybatisMapper/menuMgtMapper.xml index e8845597..866de17e 100644 --- a/src/main/resources/mybatisMapper/menuMgtMapper.xml +++ b/src/main/resources/mybatisMapper/menuMgtMapper.xml @@ -5,63 +5,63 @@ - - and use_chk = 'T' - - - and (use_chk is null or use_chk = '') - - - and cat1_cd = #{cat1Cd} - - - and cat1_cd = #{cat1Cd} - - - and cat2_cd = #{cat2Cd} - - - and cat3_cd = #{cat3Cd} - - - and menu_url like '%'||#{menuUrl}||'%' - + + + and use_chk = 'T' + + + and (use_chk is null or use_chk = '') + + + and cat1_cd = #{cat1Cd} + + + and cat1_cd = #{cat1Cd} + + + and cat2_cd = #{cat2Cd} + + + and cat3_cd = #{cat3Cd} + + + and menu_url like '%'||#{menuUrl}||'%' + + diff --git a/src/main/resources/static/css/common.css b/src/main/resources/static/css/common.css index 80037e41..98c03ba1 100644 --- a/src/main/resources/static/css/common.css +++ b/src/main/resources/static/css/common.css @@ -101,6 +101,9 @@ .w-35{ width:35%!important; } +.w-100p{ + width: 100px; +} #subModalBody{ white-space: nowrap; } diff --git a/src/main/resources/static/js/codeMgt/codeMgt2.js b/src/main/resources/static/js/codeMgt/codeMgt2.js new file mode 100644 index 00000000..7a34dad4 --- /dev/null +++ b/src/main/resources/static/js/codeMgt/codeMgt2.js @@ -0,0 +1,197 @@ +$(document).on('click', '#categoryAddBtn', function (){ + const categoryTbody = $("#categoryTbody"); + const tr = categoryTbody[0].insertRow(0); + tr.className = "categoryTr" + $(tr).append(""); + $(tr.insertCell(0)).append("") + $(tr.insertCell(1)).append("") + $(tr.insertCell(2)).append( + "
\n" + + " \n" + + " \n" + + "
\n" + ) +}) +$(document).on('click', '#codeAddBtn', function (){ + const categoryCd = $(".activeTr").find(".categoryCd").val(); + if(categoryCd!== undefined && categoryCd!==""){ + appendNewCode(categoryCd) + }else{ + alert("분류코드를 입력해주세요.") + } +}) +$(document).on('change', '.categoryCd', function (){ + this.value = this.value.toUpperCase(); + if($("#categoryTbody").find("[value='"+this.value+"']").length>0){ + alert("분류코드를 중복되지 않게 입력해주세요.") + this.value = ""; + }else{ + $(this).parents("tr").attr("data-categorycd", this.value); + } +}) +$(document).on('click', '.rowDeleteBtn', function (){ + $(this).parents('tr').remove(); +}) +$(document).on('click', '.categoryTr', function (){ + activeTrChange(this); + const categoryCd = $(this).attr("data-categorycd"); + codeTrShow(categoryCd) + $("#emptyTr").hide(); +}) +$(document).on('change', '.description', function (){ + trStatusChange(this); +}) +$(document).on('change', '.orderNum', function (){ + trStatusChange(this); +}) +$(document).on('change', '.useChk', function (){ + trStatusChange(this); +}) +function trStatusChange(target){ + const status = $(target).parents('tr').find(".status"); + if(status.val()==="saved"){ + status.val("update"); + } +} +function activeTrChange(target){ + const activeTr = $(".activeTr")[0]; + if(activeTr !== undefined){ + activeTr.className = activeTr.className.replace(" activeTr", "") + } + target.className = target.className + " activeTr"; +} + +function appendNewCode(categoryCd){ + const codeTbody = $("#codeTbody"); + let childCnt = ("00"+(codeTbody.find("."+categoryCd).length+1)).slice(-3); + const tr = codeTbody[0].insertRow(0); + tr.className = "codeTr "+categoryCd; + const jtr = $(tr); + jtr.append(""); + jtr.append(""); + jtr.append(""); + $(tr.insertCell(0)).append("자동생성"); + $(tr.insertCell(1)).append("") + $(tr.insertCell(2)).append("") + $(tr.insertCell(3)).append("") +} + +function codeTrShow(categoryCd){ + $(".codeTr").hide(); + if(categoryCd !== undefined && categoryCd !== ""){ + $("."+categoryCd).show(); + } +} + +$(document).on('click', '#codeSaveBtn', function (){ + const categoryTbody = $("#categoryTbody"); + const codeTbody = $("#codeTbody"); + if(emptyValueCheck(categoryTbody, codeTbody)){ + contentFade("in"); + const formData = new FormData(); + let i=0; + $.each(categoryTbody.find("tr"), function (idx, tr){ + const jtr = $(tr) + if(jtr.find(".status").val()!=="saved"){ + formData.append("categoryList["+i+"].categoryCd", jtr.find(".categoryCd").val()) + formData.append("categoryList["+i+"].categoryValue", jtr.find(".categoryValue").val()) + formData.append("categoryList["+i+"].description", jtr.find(".description").val()) + i++; + } + }) + i=0; + $.each(codeTbody.find("tr"), function (idx, tr){ + const jtr = $(tr) + const status = jtr.find(".status").val(); + if(status!=="saved"){ + formData.append("codeList["+i+"].categoryCd", jtr.find(".categoryCd").val()) + formData.append("codeList["+i+"].itemCd", jtr.find(".itemCd").val()) + formData.append("codeList["+i+"].itemValue", jtr.find(".itemValue").val()) + const useChk = status==="add"?'T':(jtr.find(".useChk")[0].checked?'T':'F') + formData.append("codeList["+i+"].useChk", useChk); + formData.append("codeList["+i+"].orderNum", jtr.find(".orderNum").val()) + i++; + } + }) + $.ajax({ + type : 'POST', + data : formData, + url : "/codeMgt/saveCode2", + processData: false, + contentType: false, + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + location.reload(); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) + }else{ + alert("분류코드, 분류명, 코드값을 확인해주세요.") + } + /*contentFade("in"); + $.ajax({ + type : 'POST', + url : "/codeMgt/saveCode", + data : JSON.stringify(codeCategoryList), + 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 emptyValueCheck(categoryTbody, codeTbody){ + let flag = true; + let saveContentCnt = 0; + $.each($(".status"), function (idx, input){ + if(input.value === "add" || input.value === "update"){ + saveContentCnt++; + } + }) + if(saveContentCnt===0){ + flag=false; + alert("저장대상이 없습니다."); + }else{ + $.each(categoryTbody.find(".categoryCd"), function (idx, input){ + if(input.value === ""){ + flag = false; + } + }) + if(!flag){ + alert("분류코드를 확인해주세요") + } + $.each(categoryTbody.find(".categoryValue"), function (idx, input){ + if(input.value === ""){ + flag = false; + } + }) + if(!flag){ + alert("분류명을 확인해주세요") + } + $.each(codeTbody.find(".itemValue"), function (idx, input){ + if(input.value === ""){ + flag = false; + } + }) + if(!flag){ + alert("코드값을 확인해주세요") + } + } + return flag; +} \ No newline at end of file diff --git a/src/main/resources/static/js/menuMgt/menuMgt.js b/src/main/resources/static/js/menuMgt/menuMgt.js index b580cde3..37a5bd28 100644 --- a/src/main/resources/static/js/menuMgt/menuMgt.js +++ b/src/main/resources/static/js/menuMgt/menuMgt.js @@ -13,6 +13,7 @@ $(document).on('click', '.menuTr', function (event){ cat1Cd: row.find(".cat1Cd").val(), cat2Cd: row.find(".cat2Cd").val(), cat3Cd: row.find(".cat3Cd").val(), + orderStr: row.find(".orderStr").val(), menuUrl: row.find(".menuUrl").val(), approvalChk: row.find(".approvalChk").val(), useChk: row.find(".useChk").val() diff --git a/src/main/resources/templates/adminPage/codeMgt/codeMgt2.html b/src/main/resources/templates/adminPage/codeMgt/codeMgt2.html new file mode 100644 index 00000000..ea3eeaec --- /dev/null +++ b/src/main/resources/templates/adminPage/codeMgt/codeMgt2.html @@ -0,0 +1,102 @@ + + + + + +
+
+

코드 관리

+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + +
분류코드분류명설명
+
+
+
+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
하위코드코드값정렬순번사용
분류를 선택해주세요.
+
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/adminPage/menuMgt/menuEditModal.html b/src/main/resources/templates/adminPage/menuMgt/menuEditModal.html index 2c0181cf..328746da 100644 --- a/src/main/resources/templates/adminPage/menuMgt/menuEditModal.html +++ b/src/main/resources/templates/adminPage/menuMgt/menuEditModal.html @@ -43,6 +43,12 @@ +
+ +
+ +
+
diff --git a/src/main/resources/templates/adminPage/menuMgt/menuMgt.html b/src/main/resources/templates/adminPage/menuMgt/menuMgt.html index d14051e9..0bee9037 100644 --- a/src/main/resources/templates/adminPage/menuMgt/menuMgt.html +++ b/src/main/resources/templates/adminPage/menuMgt/menuMgt.html @@ -78,6 +78,7 @@ 대분류 중분류 소분류 + 정렬번호 url 사용여부 @@ -88,6 +89,7 @@ + @@ -112,6 +114,7 @@ + diff --git a/src/main/resources/templates/adminPage/organMgt/organMgt.html b/src/main/resources/templates/adminPage/organMgt/organMgt.html index 0a6460dc..ae60f3a0 100644 --- a/src/main/resources/templates/adminPage/organMgt/organMgt.html +++ b/src/main/resources/templates/adminPage/organMgt/organMgt.html @@ -14,14 +14,16 @@
-
-
- +
+
+
+ +
-
+
@@ -43,7 +45,7 @@
-
+
diff --git a/src/main/resources/templates/adminPage/userMgt/userEditModal.html b/src/main/resources/templates/adminPage/userMgt/userEditModal.html index 3df55b28..2cde855a 100644 --- a/src/main/resources/templates/adminPage/userMgt/userEditModal.html +++ b/src/main/resources/templates/adminPage/userMgt/userEditModal.html @@ -1,5 +1,6 @@ - +