diff --git a/src/main/java/com/dbnt/faisp/config/BaseController.java b/src/main/java/com/dbnt/faisp/config/BaseController.java index 879fde83..6fb3d4e4 100644 --- a/src/main/java/com/dbnt/faisp/config/BaseController.java +++ b/src/main/java/com/dbnt/faisp/config/BaseController.java @@ -5,6 +5,7 @@ import com.dbnt.faisp.organMgt.service.OrganConfigService; import com.dbnt.faisp.userInfo.model.UserInfo; import com.dbnt.faisp.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.userInfo.service.UserInfoService; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.GetMapping; @@ -20,6 +21,7 @@ public class BaseController { private final CodeMgtService codeMgtService; private final OrganConfigService organConfigService; private final MenuMgtService menuMgtService; + private final UserInfoService userInfoService; @GetMapping("/") public ModelAndView loginCheck(@AuthenticationPrincipal UserInfo loginUser) { diff --git a/src/main/java/com/dbnt/faisp/config/ModalController.java b/src/main/java/com/dbnt/faisp/config/ModalController.java new file mode 100644 index 00000000..a7ebcf5f --- /dev/null +++ b/src/main/java/com/dbnt/faisp/config/ModalController.java @@ -0,0 +1,30 @@ +package com.dbnt.faisp.config; + +import com.dbnt.faisp.menuMgt.model.MenuMgt; +import com.dbnt.faisp.menuMgt.service.MenuMgtService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + + +@RestController +@RequiredArgsConstructor +@RequestMapping("/modal") +public class ModalController { + + private final MenuMgtService menuMgtService; + + @GetMapping("/menuModal") + public ModelAndView menuModalPage(MenuMgt menuMgt){ + ModelAndView mav = new ModelAndView("commonModal/menuModal"); + menuMgt.setQueryInfo(); + mav.addObject("menuMgtList", menuMgtService.selectMenuMgtList(menuMgt)); + menuMgt.setContentCnt(menuMgtService.selectMenuMgtListCnt(menuMgt)); + menuMgt.setPaginationInfo(); + mav.addObject("searchParams", menuMgt); + return mav; + } + +} diff --git a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java index 03c9894a..7d0b6e7b 100644 --- a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java +++ b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java @@ -81,7 +81,8 @@ public class SecurityConfig{ http.authorizeRequests() // 페이지 권한 설정 .antMatchers( "/dashboard", - "/refreshSession", + "/myInfo/**", + "/modal/**", "/publicBoard/**", "/affairPlan/**", "/affair/**", diff --git a/src/main/java/com/dbnt/faisp/userInfo/MyInfoController.java b/src/main/java/com/dbnt/faisp/userInfo/MyInfoController.java new file mode 100644 index 00000000..04937a2f --- /dev/null +++ b/src/main/java/com/dbnt/faisp/userInfo/MyInfoController.java @@ -0,0 +1,42 @@ +package com.dbnt.faisp.userInfo; + +import com.dbnt.faisp.menuMgt.model.MenuMgt; +import com.dbnt.faisp.userInfo.model.DashboardConfig; +import com.dbnt.faisp.userInfo.model.UserInfo; +import com.dbnt.faisp.userInfo.service.UserInfoService; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/myInfo") +public class MyInfoController { + + private final UserInfoService userInfoService; + + @GetMapping("/myInfoPage") + public ModelAndView myInfoPage(@AuthenticationPrincipal UserInfo loginUser){ + ModelAndView mav = new ModelAndView("user/myInfo"); + mav.addObject("userInfo", loginUser); + mav.addObject("dashboardConfigList", userInfoService.getDashboardConfigList(loginUser.getUserSeq())); + return mav; + } + + @GetMapping("/getDashBoardConfig") + public List getDashBoardConfig(@AuthenticationPrincipal UserInfo loginUser){ + return userInfoService.getDashboardConfigList(loginUser.getUserSeq()); + } + + @PostMapping("/selectedMenuTable") + @ResponseBody + public ModelAndView dashboardConfigTable(@RequestBody List selectMenuList){ + ModelAndView mav = new ModelAndView("user/dashboardConfigTable"); + mav.addObject("dashboardConfigList", selectMenuList); + return mav; + } + +} diff --git a/src/main/java/com/dbnt/faisp/userInfo/UserInfoController.java b/src/main/java/com/dbnt/faisp/userInfo/UserInfoController.java index f5cebc7e..0fdd28a4 100644 --- a/src/main/java/com/dbnt/faisp/userInfo/UserInfoController.java +++ b/src/main/java/com/dbnt/faisp/userInfo/UserInfoController.java @@ -3,12 +3,9 @@ package com.dbnt.faisp.userInfo; import com.dbnt.faisp.userInfo.model.UserInfo; import com.dbnt.faisp.userInfo.service.UserInfoService; import lombok.RequiredArgsConstructor; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.ModelAndView; @RestController @RequiredArgsConstructor @@ -22,11 +19,4 @@ public class UserInfoController { return userInfoService.insertUserInfo(insertReqInfo); } - @GetMapping("/myInfo") - public ModelAndView myInfoPage(@AuthenticationPrincipal UserInfo loginUser){ - ModelAndView mav = new ModelAndView("user/myInfo"); - mav.addObject("userInfo", loginUser); - mav.addObject("dashboardConfig", userInfoService.getDashboardConfigList(loginUser.getUserSeq())); - return mav; - } } diff --git a/src/main/java/com/dbnt/faisp/userInfo/mapper/UserInfoMapper.java b/src/main/java/com/dbnt/faisp/userInfo/mapper/UserInfoMapper.java index f5596f24..b5a58945 100644 --- a/src/main/java/com/dbnt/faisp/userInfo/mapper/UserInfoMapper.java +++ b/src/main/java/com/dbnt/faisp/userInfo/mapper/UserInfoMapper.java @@ -1,5 +1,6 @@ package com.dbnt.faisp.userInfo.mapper; +import com.dbnt.faisp.userInfo.model.DashboardConfig; import com.dbnt.faisp.userInfo.model.UserInfo; import com.dbnt.faisp.util.ParamMap; @@ -14,4 +15,6 @@ public interface UserInfoMapper { Integer selectUserInfoListCnt(UserInfo userInfo); List selectManagerList(ParamMap param); + + List selectDashboardConfigList(Integer userSeq); } diff --git a/src/main/java/com/dbnt/faisp/userInfo/model/DashboardConfig.java b/src/main/java/com/dbnt/faisp/userInfo/model/DashboardConfig.java index 94182999..733652bd 100644 --- a/src/main/java/com/dbnt/faisp/userInfo/model/DashboardConfig.java +++ b/src/main/java/com/dbnt/faisp/userInfo/model/DashboardConfig.java @@ -25,6 +25,15 @@ public class DashboardConfig { @Column(name = "order_num") private Integer orderNum; + @Transient + private String cat1Cd; + @Transient + private String cat2Cd; + @Transient + private String cat3Cd; + @Transient + private String menuUrl; + @Embeddable @Data @NoArgsConstructor diff --git a/src/main/java/com/dbnt/faisp/userInfo/repository/DashboardConfigRepository.java b/src/main/java/com/dbnt/faisp/userInfo/repository/DashboardConfigRepository.java index b97a87af..14bca9cf 100644 --- a/src/main/java/com/dbnt/faisp/userInfo/repository/DashboardConfigRepository.java +++ b/src/main/java/com/dbnt/faisp/userInfo/repository/DashboardConfigRepository.java @@ -8,5 +8,4 @@ import java.util.List; public interface DashboardConfigRepository extends JpaRepository { - List findByUserSeqOrderByOrderNum(Integer userSeq); } diff --git a/src/main/java/com/dbnt/faisp/userInfo/service/UserInfoService.java b/src/main/java/com/dbnt/faisp/userInfo/service/UserInfoService.java index 58de955f..b36781c8 100644 --- a/src/main/java/com/dbnt/faisp/userInfo/service/UserInfoService.java +++ b/src/main/java/com/dbnt/faisp/userInfo/service/UserInfoService.java @@ -117,6 +117,6 @@ public class UserInfoService implements UserDetailsService { } public List getDashboardConfigList(Integer userSeq) { - return dashboardConfigRepository.findByUserSeqOrderByOrderNum(userSeq); + return userInfoMapper.selectDashboardConfigList(userSeq); } } diff --git a/src/main/resources/mybatisMapper/UserInfoMapper.xml b/src/main/resources/mybatisMapper/UserInfoMapper.xml index 3888b1c7..73e99b2c 100644 --- a/src/main/resources/mybatisMapper/UserInfoMapper.xml +++ b/src/main/resources/mybatisMapper/UserInfoMapper.xml @@ -78,4 +78,18 @@ order by user_nm asc + + \ No newline at end of file diff --git a/src/main/resources/static/js/common.js b/src/main/resources/static/js/common.js index e8c25736..7cdfe7b2 100644 --- a/src/main/resources/static/js/common.js +++ b/src/main/resources/static/js/common.js @@ -10,7 +10,14 @@ $(document).on('click', '.allChk', function (){ $(this).parents('table').find('[type="checkbox"]').prop("checked", this.checked); }) $(document).on('click', '.page-item', function (){ - searchFormSubmit($(this).attr("data-pageindex")) + if(!this.className.includes("modalPage")){ + searchFormSubmit($(this).attr("data-pageindex")) + }else{ + searchModalSubmit($(this).attr("data-pageindex")) + } +}) +$(document).on('click', '#searchModalBtn', function (){ + searchModalSubmit(1); }) $(document).on('change', '#rowCnt', function (){ searchFormSubmit(1) @@ -19,6 +26,24 @@ function searchFormSubmit(pageIndex){ $("#pageIndex").val(pageIndex); $("#searchBtn").click(); } +function searchModalSubmit(pageIndex){ + $("#pageIndex").val(pageIndex); + $.ajax({ + url: $("#modalUrl").val(), + data : $("#modalSearchForm").serialize(), + type: 'GET', + contentType: false, + dataType:"html", + success: function(html){ + $("#modalBody").empty().append(html) + if(selectedList !== undefined){ + setSelectedChkBox(); + } + }, + error:function(){ + } + }); +} $(document).on('mouseenter', '.firstMenuLink', function (event){ diff --git a/src/main/resources/static/js/user/info.js b/src/main/resources/static/js/user/info.js index 9b57b749..dbdb9e22 100644 --- a/src/main/resources/static/js/user/info.js +++ b/src/main/resources/static/js/user/info.js @@ -1,5 +1,63 @@ +let selectedList = []; $(function (){ + $.ajax({ + type : 'GET', + url : "/myInfo/getDashBoardConfig", + dataType:"json", + success : function(data) { + }, + error : function(xhr, status) { + + } + }) +}) +$(document).on('click', '#configAddBtn', function (){ + searchModalSubmit(1); + $("#menuModal").modal('show'); +}) + +$(document).on('click', '.menuTr', function (){ + const checkBox = $(this).find(".menuCheckBox")[0] + checkBox.checked = !checkBox.checked; + if(checkBox.checked){ + selectedList.push({ + menuKey: Number(checkBox.value), + cat1Cd: $(this).find(".cat1Cd").val(), + cat2Cd: $(this).find(".cat2Cd").val(), + cat3Cd: $(this).find(".cat3Cd").val(), + menuUrl: $(this).find(".menuUrl").val() + }); + }else{ + const tempList = []; + $.each(selectedList, function (idx, menu){ + if(menu.menuKey !== Number(checkBox.value)){ + tempList.push(menu); + } + }) + selectedList = tempList; + } +}) + +$(document).on('click', '#getMenuBtn', function (){ + $.ajax({ + type : 'POST', + url : "/myInfo/selectedMenuTable", + data : JSON.stringify(selectedList), + contentType: 'application/json', + dataType:"html", + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(html) { + debugger + $("#dashboardConfigTbody").empty().append($(html)[1].children[0].children); + $("#menuModal").modal("hide"); + }, + error : function(xhr, status) { + + } + }) }) $(document).on('click', '#savePasswordBtn', function (){ @@ -29,6 +87,33 @@ $(document).on('click', '#savePasswordBtn', function (){ } }) +$(document).on('click', '#configSaveBtn', function (){ + contentFade("in"); + $.ajax({ + type : 'POST', + url : "/myInfo/saveDashboardConfig", + data : JSON.stringify(selectedList), + 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 setSelectedChkBox(){ + $.each(selectedList, function (idx, item){ + $("[value="+item.menuKey+"]").prop("checked", true); + }) +} function passwordCheck(){ let returnFlag = true; diff --git a/src/main/resources/static/js/userMgt/userMgt.js b/src/main/resources/static/js/userMgt/userMgt.js index 78e50c5b..b05f3769 100644 --- a/src/main/resources/static/js/userMgt/userMgt.js +++ b/src/main/resources/static/js/userMgt/userMgt.js @@ -1,19 +1,19 @@ $(document).on('click', '.userInfoTr', function (){ - if($('#userStatus').val() == 'USC003'){ - $.ajax({ - url: '/userMgt/userEditModal', - data: {userSeq: Number($(this).find(".userSeq").val())}, - type: 'GET', - dataType:"html", - success: function(html){ - $("#configInfo").empty().append(html) - $("#userEditModal").modal('show'); - }, - error:function(){ + if($('#userStatus').val() === 'USC003'){ + $.ajax({ + url: '/userMgt/userEditModal', + data: {userSeq: Number($(this).find(".userSeq").val())}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#configInfo").empty().append(html) + $("#userEditModal").modal('show'); + }, + error:function(){ - } - }); + } + }); } }) diff --git a/src/main/resources/templates/commonModal/menuModal.html b/src/main/resources/templates/commonModal/menuModal.html new file mode 100644 index 00000000..7f7c7f4c --- /dev/null +++ b/src/main/resources/templates/commonModal/menuModal.html @@ -0,0 +1,125 @@ + + +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
대분류중분류소분류url
+
+
+
+
+ +
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/fragments/header.html b/src/main/resources/templates/fragments/header.html index 1b506e60..086c933b 100644 --- a/src/main/resources/templates/fragments/header.html +++ b/src/main/resources/templates/fragments/header.html @@ -31,7 +31,7 @@ - + diff --git a/src/main/resources/templates/user/dashboardConfigTable.html b/src/main/resources/templates/user/dashboardConfigTable.html new file mode 100644 index 00000000..a9970a8f --- /dev/null +++ b/src/main/resources/templates/user/dashboardConfigTable.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/src/main/resources/templates/user/myInfo.html b/src/main/resources/templates/user/myInfo.html index 2c28e5d1..25eb1259 100644 --- a/src/main/resources/templates/user/myInfo.html +++ b/src/main/resources/templates/user/myInfo.html @@ -26,7 +26,49 @@
- +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
순번대분류중분류소분류url위치변경
+
+
+
+ +
+
+ + +
+
@@ -69,5 +111,34 @@ + \ No newline at end of file