코드관리 디자인, 오류 수정. 정렬기능 추가.
관서설정 디자인 수정 메뉴관리 디자인 수정, 정렬기능 추가. 외사경찰관리 시스템 권한설정 기능 수정.
parent
819955e441
commit
f98ce35af1
|
|
@ -1,6 +1,7 @@
|
||||||
package com.dbnt.faisp.main.codeMgt;
|
package com.dbnt.faisp.main.codeMgt;
|
||||||
|
|
||||||
import com.dbnt.faisp.main.codeMgt.model.CodeCatg;
|
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 com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
@ -17,7 +18,9 @@ public class CodeMgtController {
|
||||||
|
|
||||||
@GetMapping("/codeMgtPage")
|
@GetMapping("/codeMgtPage")
|
||||||
public ModelAndView 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;
|
return mav;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -27,6 +30,10 @@ public class CodeMgtController {
|
||||||
codeMgtService.saveCode(codeCategoryList);
|
codeMgtService.saveCode(codeCategoryList);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@PostMapping("/saveCode2")
|
||||||
|
public void saveCode2(CodeFormData formData){
|
||||||
|
codeMgtService.saveCode2(formData.getCategoryList(), formData.getCodeList());
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/selectCodeCatgList")
|
@GetMapping("/selectCodeCatgList")
|
||||||
public List<CodeCatg> selectCodeCatgList(){
|
public List<CodeCatg> selectCodeCatgList(){
|
||||||
|
|
|
||||||
|
|
@ -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<CodeCatg> categoryList;
|
||||||
|
List<CodeMgt> codeList;
|
||||||
|
}
|
||||||
|
|
@ -27,6 +27,8 @@ public class CodeMgt {
|
||||||
private String itemValue;
|
private String itemValue;
|
||||||
@Column(name = "use_chk")
|
@Column(name = "use_chk")
|
||||||
private String useChk;
|
private String useChk;
|
||||||
|
@Column(name = "order_num")
|
||||||
|
private Integer orderNum;
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
private String status;
|
private String status;
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ import java.util.Optional;
|
||||||
public interface CodeMgtRepository extends JpaRepository<CodeMgt, CodeMgt.CodeMgtId> {
|
public interface CodeMgtRepository extends JpaRepository<CodeMgt, CodeMgt.CodeMgtId> {
|
||||||
|
|
||||||
List<CodeMgt> findByCategoryCdOrderByItemCdAsc(String categoryCd);
|
List<CodeMgt> findByCategoryCdOrderByItemCdAsc(String categoryCd);
|
||||||
List<CodeMgt> findByCategoryCdAndUseChkOrderByItemCdAsc(String categoryCd, String useChk);
|
List<CodeMgt> findByCategoryCdAndUseChkOrderByOrderNumAsc(String categoryCd, String useChk);
|
||||||
Optional<CodeMgt> findByCategoryCdAndItemValue(String categoryCd, String itemValue);
|
Optional<CodeMgt> findByCategoryCdAndItemValue(String categoryCd, String itemValue);
|
||||||
List<CodeMgt> findByUseChkOrderByItemCdAsc(String useChk);
|
List<CodeMgt> findByUseChkOrderByItemCdAsc(String useChk);
|
||||||
List<CodeMgt> findByOrderByItemCdAsc();
|
List<CodeMgt> findByOrderByOrderNumAsc();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.dbnt.faisp.main.codeMgt.service;
|
package com.dbnt.faisp.main.codeMgt.service;
|
||||||
|
|
||||||
import com.dbnt.faisp.main.codeMgt.model.CodeCatg;
|
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.model.CodeMgt;
|
||||||
import com.dbnt.faisp.main.codeMgt.repository.CodeCatgRepository;
|
import com.dbnt.faisp.main.codeMgt.repository.CodeCatgRepository;
|
||||||
import com.dbnt.faisp.main.codeMgt.repository.CodeMgtRepository;
|
import com.dbnt.faisp.main.codeMgt.repository.CodeMgtRepository;
|
||||||
|
|
@ -8,10 +9,7 @@ import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
|
|
@ -31,6 +29,31 @@ public class CodeMgtService{
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void saveCode2(List<CodeCatg> categoryList, List<CodeMgt> codeList) {
|
||||||
|
if(categoryList!=null){
|
||||||
|
codeCatgRepository.saveAll(categoryList);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(codeList!=null){
|
||||||
|
HashMap<String, Integer> 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<CodeMgt> itemList){
|
private void codeItemSave(List<CodeMgt> itemList){
|
||||||
codeMgtRepository.saveAll(itemList);
|
codeMgtRepository.saveAll(itemList);
|
||||||
}
|
}
|
||||||
|
|
@ -45,7 +68,7 @@ public class CodeMgtService{
|
||||||
|
|
||||||
public Map<String, List<CodeMgt>> getCommonCode() {
|
public Map<String, List<CodeMgt>> getCommonCode() {
|
||||||
List<CodeCatg> categoryList = codeCatgRepository.findAll();
|
List<CodeCatg> categoryList = codeCatgRepository.findAll();
|
||||||
List<CodeMgt> codeList = codeMgtRepository.findByOrderByItemCdAsc();
|
List<CodeMgt> codeList = codeMgtRepository.findByOrderByOrderNumAsc();
|
||||||
Map<String, List<CodeMgt>> categoryMap = new HashMap<>();
|
Map<String, List<CodeMgt>> categoryMap = new HashMap<>();
|
||||||
for(CodeCatg category: categoryList){
|
for(CodeCatg category: categoryList){
|
||||||
List<CodeMgt> childList = new ArrayList<>();
|
List<CodeMgt> childList = new ArrayList<>();
|
||||||
|
|
@ -60,7 +83,7 @@ public class CodeMgtService{
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CodeMgt> selectCodeMgtList(String categoryCd) {
|
public List<CodeMgt> selectCodeMgtList(String categoryCd) {
|
||||||
return codeMgtRepository.findByCategoryCdAndUseChkOrderByItemCdAsc(categoryCd, "T");
|
return codeMgtRepository.findByCategoryCdAndUseChkOrderByOrderNumAsc(categoryCd, "T");
|
||||||
}
|
}
|
||||||
public List<CodeMgt> selectCodeMgtListOrderByDesc(String categoryCd){
|
public List<CodeMgt> selectCodeMgtListOrderByDesc(String categoryCd){
|
||||||
List<CodeMgt> codeList = selectCodeMgtList(categoryCd);
|
List<CodeMgt> codeList = selectCodeMgtList(categoryCd);
|
||||||
|
|
@ -71,4 +94,12 @@ public class CodeMgtService{
|
||||||
CodeMgt code = codeMgtRepository.findByCategoryCdAndItemValue(categoryCd, value).orElse(null);
|
CodeMgt code = codeMgtRepository.findByCategoryCdAndItemValue(categoryCd, value).orElse(null);
|
||||||
return code==null?null:code.getItemCd();
|
return code==null?null:code.getItemCd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<CodeCatg> selectAllCategoryList() {
|
||||||
|
return codeCatgRepository.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CodeMgt> selectAllCodeList() {
|
||||||
|
return codeMgtRepository.findByOrderByOrderNumAsc();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,8 @@ public class MenuMgt extends BaseModel {
|
||||||
private String deadlineChk;
|
private String deadlineChk;
|
||||||
@Column(name = "use_chk")
|
@Column(name = "use_chk")
|
||||||
private String useChk;
|
private String useChk;
|
||||||
|
@Column(name = "order_str")
|
||||||
|
private String orderStr;
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
private List<MenuMgt> childList;
|
private List<MenuMgt> childList;
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,10 @@ public class MenuMgtService {
|
||||||
if(accessMenu.getCat1Cd().equals(cat1Cd)
|
if(accessMenu.getCat1Cd().equals(cat1Cd)
|
||||||
&& accessMenu.getCat2Cd().equals(secondMenu.getCat2Cd())
|
&& accessMenu.getCat2Cd().equals(secondMenu.getCat2Cd())
|
||||||
&& accessMenu.getCat3Cd().equals(thirdMenu.getCat3Cd())){
|
&& 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());
|
thirdMenu.setMenuUrl(accessMenu.getMenuUrl());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -135,15 +139,18 @@ public class MenuMgtService {
|
||||||
}
|
}
|
||||||
if(thirdMenuList.size()>0){
|
if(thirdMenuList.size()>0){
|
||||||
thirdMenuList.sort((o1, o2) -> {
|
thirdMenuList.sort((o1, o2) -> {
|
||||||
String cat3_1 = o1.getCat3Cd();
|
String orderStr_1 = o1.getOrderStr();
|
||||||
String cat3_2 = o2.getCat3Cd();
|
String orderStr_2 = o2.getOrderStr();
|
||||||
return cat3_1.compareTo(cat3_2);
|
return orderStr_1.compareTo(orderStr_2);
|
||||||
});
|
});
|
||||||
secondMenu.setChildList(thirdMenuList);
|
secondMenu.setChildList(thirdMenuList);
|
||||||
}else{
|
}else{
|
||||||
for(MenuMgt accessMenu: accessMenuList){
|
for(MenuMgt accessMenu: accessMenuList){
|
||||||
if(accessMenu.getCat1Cd().equals(cat1Cd)
|
if(accessMenu.getCat1Cd().equals(cat1Cd)
|
||||||
&& accessMenu.getCat2Cd().equals(secondMenu.getCat2Cd())){
|
&& 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());
|
secondMenu.setMenuUrl(accessMenu.getMenuUrl());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -153,17 +160,17 @@ public class MenuMgtService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
secondMenuList.sort((o1, o2) -> {
|
secondMenuList.sort((o1, o2) -> {
|
||||||
String cat2_1 = o1.getCat2Cd();
|
String orderStr_1 = o1.getOrderStr();
|
||||||
String cat2_2 = o2.getCat2Cd();
|
String orderStr_2 = o2.getOrderStr();
|
||||||
return cat2_1.compareTo(cat2_2);
|
return orderStr_1.compareTo(orderStr_2);
|
||||||
});
|
});
|
||||||
firstMenu.setChildList(secondMenuList);
|
firstMenu.setChildList(secondMenuList);
|
||||||
firstMenuList.add(firstMenu);
|
firstMenuList.add(firstMenu);
|
||||||
}
|
}
|
||||||
firstMenuList.sort((o1, o2) -> {
|
firstMenuList.sort((o1, o2) -> {
|
||||||
String cat1_1 = o1.getCat1Cd();
|
String orderStr_1 = o1.getOrderStr();
|
||||||
String cat1_2 = o2.getCat1Cd();
|
String orderStr_2 = o2.getOrderStr();
|
||||||
return cat1_1.compareTo(cat1_2);
|
return orderStr_1.compareTo(orderStr_2);
|
||||||
});
|
});
|
||||||
return firstMenuList;
|
return firstMenuList;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,63 +5,63 @@
|
||||||
|
|
||||||
<mapper namespace="com.dbnt.faisp.main.menuMgt.mapper.MenuMgtMapper">
|
<mapper namespace="com.dbnt.faisp.main.menuMgt.mapper.MenuMgtMapper">
|
||||||
<sql id="selectMenuMgtListWhere">
|
<sql id="selectMenuMgtListWhere">
|
||||||
<if test='useChk == "T"'>
|
<where>
|
||||||
and use_chk = 'T'
|
<if test='useChk == "T"'>
|
||||||
</if>
|
and use_chk = 'T'
|
||||||
<if test='useChk == "F"'>
|
</if>
|
||||||
and (use_chk is null or use_chk = '')
|
<if test='useChk == "F"'>
|
||||||
</if>
|
and (use_chk is null or use_chk = '')
|
||||||
<if test='cat1Cd != null and cat1Cd != ""'>
|
</if>
|
||||||
and cat1_cd = #{cat1Cd}
|
<if test='cat1Cd != null and cat1Cd != ""'>
|
||||||
</if>
|
and cat1_cd = #{cat1Cd}
|
||||||
<if test='cat1Cd != null and cat1Cd != ""'>
|
</if>
|
||||||
and cat1_cd = #{cat1Cd}
|
<if test='cat1Cd != null and cat1Cd != ""'>
|
||||||
</if>
|
and cat1_cd = #{cat1Cd}
|
||||||
<if test='cat2Cd != null and cat2Cd != ""'>
|
</if>
|
||||||
and cat2_cd = #{cat2Cd}
|
<if test='cat2Cd != null and cat2Cd != ""'>
|
||||||
</if>
|
and cat2_cd = #{cat2Cd}
|
||||||
<if test='cat3Cd != null and cat3Cd != ""'>
|
</if>
|
||||||
and cat3_cd = #{cat3Cd}
|
<if test='cat3Cd != null and cat3Cd != ""'>
|
||||||
</if>
|
and cat3_cd = #{cat3Cd}
|
||||||
<if test='menuUrl != null and menuUrl != ""'>
|
</if>
|
||||||
and menu_url like '%'||#{menuUrl}||'%'
|
<if test='menuUrl != null and menuUrl != ""'>
|
||||||
</if>
|
and menu_url like '%'||#{menuUrl}||'%'
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
</sql>
|
</sql>
|
||||||
<select id="selectMenuMgtList" resultType="MenuMgt" parameterType="MenuMgt">
|
<select id="selectMenuMgtList" resultType="MenuMgt" parameterType="MenuMgt">
|
||||||
select menu_key as menuKey,
|
select menu_key as menuKey,
|
||||||
cat1_cd as cat1Cd,
|
cat1_cd as cat1Cd,
|
||||||
cat2_cd as cat2Cd,
|
cat2_cd as cat2Cd,
|
||||||
cat3_cd as cat3Cd,
|
cat3_cd as cat3Cd,
|
||||||
|
order_str as orderStr,
|
||||||
menu_url as menuUrl,
|
menu_url as menuUrl,
|
||||||
approval_chk as approvalChk,
|
approval_chk as approvalChk,
|
||||||
deadline_chk as deadlineChk,
|
deadline_chk as deadlineChk,
|
||||||
use_chk as useChk
|
use_chk as useChk
|
||||||
from menu_mgt
|
from menu_mgt
|
||||||
<where>
|
<include refid="selectMenuMgtListWhere"></include>
|
||||||
<include refid="selectMenuMgtListWhere"></include>
|
order by order_str, cat1_cd, cat2_cd, cat3_cd
|
||||||
</where>
|
|
||||||
order by cat1_cd, cat2_cd, cat3_cd
|
|
||||||
limit #{rowCnt} offset #{firstIndex}
|
limit #{rowCnt} offset #{firstIndex}
|
||||||
</select>
|
</select>
|
||||||
<select id="selectMenuMgtListCnt" resultType="int" parameterType="MenuMgt">
|
<select id="selectMenuMgtListCnt" resultType="int" parameterType="MenuMgt">
|
||||||
select count(*)
|
select count(*)
|
||||||
from menu_mgt
|
from menu_mgt
|
||||||
<where>
|
<include refid="selectMenuMgtListWhere"></include>
|
||||||
<include refid="selectMenuMgtListWhere"></include>
|
|
||||||
</where>
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectAccessMenuListWhereUserSeq" resultType="MenuMgt" parameterType="int">
|
<select id="selectAccessMenuListWhereUserSeq" resultType="MenuMgt" parameterType="int">
|
||||||
select ab.cat1_cd,
|
select ab.cat1_cd,
|
||||||
ab.cat2_cd,
|
ab.cat2_cd,
|
||||||
ab.cat3_cd,
|
ab.cat3_cd,
|
||||||
|
ab.order_str,
|
||||||
ab.menu_url
|
ab.menu_url
|
||||||
from access_config aa
|
from access_config aa
|
||||||
inner join menu_mgt ab on aa.menu_key = ab.menu_key
|
inner join menu_mgt ab on aa.menu_key = ab.menu_key
|
||||||
where aa.user_seq = #{userSeq}
|
where aa.user_seq = #{userSeq}
|
||||||
and aa.access_auth is not null
|
and aa.access_auth is not null
|
||||||
and aa.access_auth <> ''
|
and aa.access_auth <> ''
|
||||||
order by cat1_cd, cat2_cd, cat3_cd
|
order by order_str, cat1_cd, cat2_cd, cat3_cd
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectMenuMgtListToAccessAuth" resultType="MenuMgt" parameterType="MenuMgt">
|
<select id="selectMenuMgtListToAccessAuth" resultType="MenuMgt" parameterType="MenuMgt">
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
and aa.access_auth is not null
|
and aa.access_auth is not null
|
||||||
and aa.access_auth <> ''
|
and aa.access_auth <> ''
|
||||||
<include refid="selectMenuMgtListWhere"></include>
|
<include refid="selectMenuMgtListWhere"></include>
|
||||||
order by cat1_cd, cat2_cd, cat3_cd
|
order by order_str, cat1_cd, cat2_cd, cat3_cd
|
||||||
limit #{rowCnt} offset #{firstIndex}
|
limit #{rowCnt} offset #{firstIndex}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,9 @@
|
||||||
.w-35{
|
.w-35{
|
||||||
width:35%!important;
|
width:35%!important;
|
||||||
}
|
}
|
||||||
|
.w-100p{
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
#subModalBody{
|
#subModalBody{
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,197 @@
|
||||||
|
$(document).on('click', '#categoryAddBtn', function (){
|
||||||
|
const categoryTbody = $("#categoryTbody");
|
||||||
|
const tr = categoryTbody[0].insertRow(0);
|
||||||
|
tr.className = "categoryTr"
|
||||||
|
$(tr).append("<input type='hidden' class='status' value='add'>");
|
||||||
|
$(tr.insertCell(0)).append("<input type='text' class='form-control form-control-sm categoryCd' value=''>")
|
||||||
|
$(tr.insertCell(1)).append("<input type='text' class='form-control form-control-sm categoryValue' value=''>")
|
||||||
|
$(tr.insertCell(2)).append(
|
||||||
|
" <div class='input-group'>\n" +
|
||||||
|
" <input type='text' class='form-control form-control-sm description' value=''>\n" +
|
||||||
|
" <button class='btn btn-sm btn-outline-danger rowDeleteBtn'><i class='bi bi-x'></i></button>\n" +
|
||||||
|
" </div>\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("<input type='hidden' class='status' value='add'>");
|
||||||
|
jtr.append("<input type='hidden' class='categoryCd' value='"+categoryCd+"'>");
|
||||||
|
jtr.append("<input type='hidden' class='itemCd' value=''>");
|
||||||
|
$(tr.insertCell(0)).append("자동생성");
|
||||||
|
$(tr.insertCell(1)).append("<input type='text' class='form-control form-control-sm itemValue'>")
|
||||||
|
$(tr.insertCell(2)).append("<input type='number' class='form-control form-control-sm orderNum' min='0'>")
|
||||||
|
$(tr.insertCell(3)).append("<button class='btn btn-sm btn-outline-danger rowDeleteBtn'><i class='bi bi-x'></i></button>")
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
@ -13,6 +13,7 @@ $(document).on('click', '.menuTr', function (event){
|
||||||
cat1Cd: row.find(".cat1Cd").val(),
|
cat1Cd: row.find(".cat1Cd").val(),
|
||||||
cat2Cd: row.find(".cat2Cd").val(),
|
cat2Cd: row.find(".cat2Cd").val(),
|
||||||
cat3Cd: row.find(".cat3Cd").val(),
|
cat3Cd: row.find(".cat3Cd").val(),
|
||||||
|
orderStr: row.find(".orderStr").val(),
|
||||||
menuUrl: row.find(".menuUrl").val(),
|
menuUrl: row.find(".menuUrl").val(),
|
||||||
approvalChk: row.find(".approvalChk").val(),
|
approvalChk: row.find(".approvalChk").val(),
|
||||||
useChk: row.find(".useChk").val()
|
useChk: row.find(".useChk").val()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
<!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/codeMgt/codeMgt2.js}"></script>
|
||||||
|
</th:block>
|
||||||
|
<div layout:fragment="content">
|
||||||
|
<main>
|
||||||
|
<h4>코드 관리</h4>
|
||||||
|
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
|
||||||
|
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
|
||||||
|
<div class="row mx-0">
|
||||||
|
<div class="col-12 card bg-light text-center">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-10">
|
||||||
|
<div class="row justify-content-end my-1">
|
||||||
|
<div class="col-auto">
|
||||||
|
<button class="col-auto btn btn-success" id="codeSaveBtn">저장</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-start">
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row justify-content-end pb-1">
|
||||||
|
<div class="col-auto">
|
||||||
|
<button class="btn btn-sm btn-outline-primary" id="categoryAddBtn"><i class="bi bi-plus-lg"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="table table-sm table-hover table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr class="table-secondary">
|
||||||
|
<th>분류코드</th>
|
||||||
|
<th>분류명</th>
|
||||||
|
<th>설명</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="table-group-divider" id="categoryTbody">
|
||||||
|
<th:block th:each="category:${catgList}">
|
||||||
|
<tr class="categoryTr" th:data-categorycd="${category.categoryCd}">
|
||||||
|
<input type="hidden" class="categoryCd" th:value="${category.categoryCd}">
|
||||||
|
<input type="hidden" class="categoryValue" th:value="${category.categoryValue}">
|
||||||
|
<input type="hidden" class="status" value="saved">
|
||||||
|
<td th:text="${category.categoryCd}"></td>
|
||||||
|
<td th:text="${category.categoryValue}"></td>
|
||||||
|
<td><input type="text" class="form-control form-control-sm description" th:value="${category.description}"></td>
|
||||||
|
</tr>
|
||||||
|
</th:block>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-4" id="valueDiv">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row justify-content-end pb-1">
|
||||||
|
<div class="col-auto">
|
||||||
|
<button class="btn btn-sm btn-outline-primary" id="codeAddBtn"><i class="bi bi-plus-lg"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="table table-sm table-hover table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr class="table-secondary">
|
||||||
|
<th>하위코드</th>
|
||||||
|
<th>코드값</th>
|
||||||
|
<th class="w-100p">정렬순번</th>
|
||||||
|
<th>사용</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="table-group-divider" id="codeTbody">
|
||||||
|
<th:block th:each="code:${codeList}">
|
||||||
|
<tr class="codeTr" th:classappend="${code.categoryCd}" style="display: none">
|
||||||
|
<input type="hidden" class="categoryCd" th:value="${code.categoryCd}">
|
||||||
|
<input type="hidden" class="itemCd" th:value="${code.itemCd}">
|
||||||
|
<input type="hidden" class="itemValue" th:value="${code.itemValue}">
|
||||||
|
<input type="hidden" class="status" value="saved">
|
||||||
|
<td th:text="${code.itemCd}"></td>
|
||||||
|
<td th:text="${code.itemValue}"></td>
|
||||||
|
<td class="w-100p"><input type="number" class="form-control form-control-sm codeInfo orderNum" min="0" th:value="${code.orderNum}"></td>
|
||||||
|
<td><input type="checkbox" class="codeInfo useChk" th:checked="${code.useChk eq 'T'}"></td>
|
||||||
|
</tr>
|
||||||
|
</th:block>
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr id="emptyTr"><td colspan="4">분류를 선택해주세요.</td></tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
|
|
@ -43,6 +43,12 @@
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="orderStr" class="col-sm-4 col-form-label col-form-label-sm text-center">정렬번호</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="text" class="form-control form-control-sm" id="orderStr" name="orderStr" th:value="${menuMgt.orderStr}" placeholder="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="menuUrl" class="col-sm-4 col-form-label col-form-label-sm text-center">URL</label>
|
<label for="menuUrl" class="col-sm-4 col-form-label col-form-label-sm text-center">URL</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,7 @@
|
||||||
<th>대분류</th>
|
<th>대분류</th>
|
||||||
<th>중분류</th>
|
<th>중분류</th>
|
||||||
<th>소분류</th>
|
<th>소분류</th>
|
||||||
|
<th>정렬번호</th>
|
||||||
<th>url</th>
|
<th>url</th>
|
||||||
<th>사용여부</th>
|
<th>사용여부</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -88,6 +89,7 @@
|
||||||
<input type="hidden" class="cat1Cd" th:value="${menuMgt.cat1Cd}">
|
<input type="hidden" class="cat1Cd" th:value="${menuMgt.cat1Cd}">
|
||||||
<input type="hidden" class="cat2Cd" th:value="${menuMgt.cat2Cd}">
|
<input type="hidden" class="cat2Cd" th:value="${menuMgt.cat2Cd}">
|
||||||
<input type="hidden" class="cat3Cd" th:value="${menuMgt.cat3Cd}">
|
<input type="hidden" class="cat3Cd" th:value="${menuMgt.cat3Cd}">
|
||||||
|
<input type="hidden" class="orderStr" th:value="${menuMgt.orderStr}">
|
||||||
<input type="hidden" class="menuUrl" th:value="${menuMgt.menuUrl}">
|
<input type="hidden" class="menuUrl" th:value="${menuMgt.menuUrl}">
|
||||||
<input type="hidden" class="approvalChk" th:value="${menuMgt.approvalChk}">
|
<input type="hidden" class="approvalChk" th:value="${menuMgt.approvalChk}">
|
||||||
<input type="hidden" class="useChk" th:value="${menuMgt.useChk}">
|
<input type="hidden" class="useChk" th:value="${menuMgt.useChk}">
|
||||||
|
|
@ -112,6 +114,7 @@
|
||||||
<th:block th:if="${#strings.isEmpty(menuMgt.cat3Cd)}">
|
<th:block th:if="${#strings.isEmpty(menuMgt.cat3Cd)}">
|
||||||
<td></td>
|
<td></td>
|
||||||
</th:block>
|
</th:block>
|
||||||
|
<td th:text="${menuMgt.orderStr}"></td>
|
||||||
<td th:text="${menuMgt.menuUrl}"></td>
|
<td th:text="${menuMgt.menuUrl}"></td>
|
||||||
<td th:text="${menuMgt.useChk eq 'T'?'O':''}"></td>
|
<td th:text="${menuMgt.useChk eq 'T'?'O':''}"></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
||||||
|
|
@ -14,14 +14,16 @@
|
||||||
<div class="col-12 card bg-light text-center">
|
<div class="col-12 card bg-light text-center">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6">
|
<div class="col-4">
|
||||||
<div class="row justify-content-end">
|
<div class="row justify-content-end my-2">
|
||||||
<button class="col-auto btn btn-success mx-3 my-2" id="organSaveBtn">저장</button>
|
<div class="col-auto">
|
||||||
|
<button class="btn btn-success" id="organSaveBtn">저장</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row justify-content-start">
|
<div class="row justify-content-start">
|
||||||
<div class="col-3">
|
<div class="col-2">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
@ -43,7 +45,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-2">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
|
||||||
|
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="menuEditModalLabel">외사경찰 수정</h5>
|
<h5 class="modal-title" id="menuEditModalLabel">외사경찰 수정</h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
|
@ -13,7 +14,7 @@
|
||||||
<div class="mb-3 mt-3 row">
|
<div class="mb-3 mt-3 row">
|
||||||
<label for="userRole" class="col-sm-2 col-form-label col-form-label-sm text-center ">시스템권한</label>
|
<label for="userRole" class="col-sm-2 col-form-label col-form-label-sm text-center ">시스템권한</label>
|
||||||
<div class="col-sm-4" id="userRole">
|
<div class="col-sm-4" id="userRole">
|
||||||
<label style="font-size: 12px">
|
<label style="font-size: 12px" sec:authorize="hasRole('ROLE_ADMIN')">
|
||||||
<input type="radio" name="userRole" value="ROLE_ADMIN,ROLE_SUB_ADMIN,ROLE_USER"
|
<input type="radio" name="userRole" value="ROLE_ADMIN,ROLE_SUB_ADMIN,ROLE_USER"
|
||||||
th:checked="${userInfo.userRole eq 'ROLE_ADMIN,ROLE_SUB_ADMIN,ROLE_USER'}">관리자</label>
|
th:checked="${userInfo.userRole eq 'ROLE_ADMIN,ROLE_SUB_ADMIN,ROLE_USER'}">관리자</label>
|
||||||
<label style="font-size: 12px">
|
<label style="font-size: 12px">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue