코드관리 디자인, 오류 수정. 정렬기능 추가.
관서설정 디자인 수정 메뉴관리 디자인 수정, 정렬기능 추가. 외사경찰관리 시스템 권한설정 기능 수정.
parent
819955e441
commit
f98ce35af1
|
|
@ -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<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;
|
||||
@Column(name = "use_chk")
|
||||
private String useChk;
|
||||
@Column(name = "order_num")
|
||||
private Integer orderNum;
|
||||
|
||||
@Transient
|
||||
private String status;
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ import java.util.Optional;
|
|||
public interface CodeMgtRepository extends JpaRepository<CodeMgt, CodeMgt.CodeMgtId> {
|
||||
|
||||
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);
|
||||
List<CodeMgt> findByUseChkOrderByItemCdAsc(String useChk);
|
||||
List<CodeMgt> findByOrderByItemCdAsc();
|
||||
List<CodeMgt> findByOrderByOrderNumAsc();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<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){
|
||||
codeMgtRepository.saveAll(itemList);
|
||||
}
|
||||
|
|
@ -45,7 +68,7 @@ public class CodeMgtService{
|
|||
|
||||
public Map<String, List<CodeMgt>> getCommonCode() {
|
||||
List<CodeCatg> categoryList = codeCatgRepository.findAll();
|
||||
List<CodeMgt> codeList = codeMgtRepository.findByOrderByItemCdAsc();
|
||||
List<CodeMgt> codeList = codeMgtRepository.findByOrderByOrderNumAsc();
|
||||
Map<String, List<CodeMgt>> categoryMap = new HashMap<>();
|
||||
for(CodeCatg category: categoryList){
|
||||
List<CodeMgt> childList = new ArrayList<>();
|
||||
|
|
@ -60,7 +83,7 @@ public class CodeMgtService{
|
|||
}
|
||||
|
||||
public List<CodeMgt> selectCodeMgtList(String categoryCd) {
|
||||
return codeMgtRepository.findByCategoryCdAndUseChkOrderByItemCdAsc(categoryCd, "T");
|
||||
return codeMgtRepository.findByCategoryCdAndUseChkOrderByOrderNumAsc(categoryCd, "T");
|
||||
}
|
||||
public List<CodeMgt> selectCodeMgtListOrderByDesc(String categoryCd){
|
||||
List<CodeMgt> 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<CodeCatg> selectAllCategoryList() {
|
||||
return codeCatgRepository.findAll();
|
||||
}
|
||||
|
||||
public List<CodeMgt> selectAllCodeList() {
|
||||
return codeMgtRepository.findByOrderByOrderNumAsc();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<MenuMgt> childList;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,63 +5,63 @@
|
|||
|
||||
<mapper namespace="com.dbnt.faisp.main.menuMgt.mapper.MenuMgtMapper">
|
||||
<sql id="selectMenuMgtListWhere">
|
||||
<if test='useChk == "T"'>
|
||||
and use_chk = 'T'
|
||||
</if>
|
||||
<if test='useChk == "F"'>
|
||||
and (use_chk is null or use_chk = '')
|
||||
</if>
|
||||
<if test='cat1Cd != null and cat1Cd != ""'>
|
||||
and cat1_cd = #{cat1Cd}
|
||||
</if>
|
||||
<if test='cat1Cd != null and cat1Cd != ""'>
|
||||
and cat1_cd = #{cat1Cd}
|
||||
</if>
|
||||
<if test='cat2Cd != null and cat2Cd != ""'>
|
||||
and cat2_cd = #{cat2Cd}
|
||||
</if>
|
||||
<if test='cat3Cd != null and cat3Cd != ""'>
|
||||
and cat3_cd = #{cat3Cd}
|
||||
</if>
|
||||
<if test='menuUrl != null and menuUrl != ""'>
|
||||
and menu_url like '%'||#{menuUrl}||'%'
|
||||
</if>
|
||||
<where>
|
||||
<if test='useChk == "T"'>
|
||||
and use_chk = 'T'
|
||||
</if>
|
||||
<if test='useChk == "F"'>
|
||||
and (use_chk is null or use_chk = '')
|
||||
</if>
|
||||
<if test='cat1Cd != null and cat1Cd != ""'>
|
||||
and cat1_cd = #{cat1Cd}
|
||||
</if>
|
||||
<if test='cat1Cd != null and cat1Cd != ""'>
|
||||
and cat1_cd = #{cat1Cd}
|
||||
</if>
|
||||
<if test='cat2Cd != null and cat2Cd != ""'>
|
||||
and cat2_cd = #{cat2Cd}
|
||||
</if>
|
||||
<if test='cat3Cd != null and cat3Cd != ""'>
|
||||
and cat3_cd = #{cat3Cd}
|
||||
</if>
|
||||
<if test='menuUrl != null and menuUrl != ""'>
|
||||
and menu_url like '%'||#{menuUrl}||'%'
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
<select id="selectMenuMgtList" resultType="MenuMgt" parameterType="MenuMgt">
|
||||
select menu_key as menuKey,
|
||||
cat1_cd as cat1Cd,
|
||||
cat2_cd as cat2Cd,
|
||||
cat3_cd as cat3Cd,
|
||||
order_str as orderStr,
|
||||
menu_url as menuUrl,
|
||||
approval_chk as approvalChk,
|
||||
deadline_chk as deadlineChk,
|
||||
use_chk as useChk
|
||||
from menu_mgt
|
||||
<where>
|
||||
<include refid="selectMenuMgtListWhere"></include>
|
||||
</where>
|
||||
order by cat1_cd, cat2_cd, cat3_cd
|
||||
<include refid="selectMenuMgtListWhere"></include>
|
||||
order by order_str, cat1_cd, cat2_cd, cat3_cd
|
||||
limit #{rowCnt} offset #{firstIndex}
|
||||
</select>
|
||||
<select id="selectMenuMgtListCnt" resultType="int" parameterType="MenuMgt">
|
||||
select count(*)
|
||||
from menu_mgt
|
||||
<where>
|
||||
<include refid="selectMenuMgtListWhere"></include>
|
||||
</where>
|
||||
<include refid="selectMenuMgtListWhere"></include>
|
||||
</select>
|
||||
|
||||
<select id="selectAccessMenuListWhereUserSeq" resultType="MenuMgt" parameterType="int">
|
||||
select ab.cat1_cd,
|
||||
ab.cat2_cd,
|
||||
ab.cat3_cd,
|
||||
ab.order_str,
|
||||
ab.menu_url
|
||||
from access_config aa
|
||||
inner join menu_mgt ab on aa.menu_key = ab.menu_key
|
||||
where aa.user_seq = #{userSeq}
|
||||
and aa.access_auth is not null
|
||||
and aa.access_auth <> ''
|
||||
order by cat1_cd, cat2_cd, cat3_cd
|
||||
order by order_str, cat1_cd, cat2_cd, cat3_cd
|
||||
</select>
|
||||
|
||||
<select id="selectMenuMgtListToAccessAuth" resultType="MenuMgt" parameterType="MenuMgt">
|
||||
|
|
@ -76,7 +76,7 @@
|
|||
and aa.access_auth is not null
|
||||
and aa.access_auth <> ''
|
||||
<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}
|
||||
</select>
|
||||
|
||||
|
|
|
|||
|
|
@ -101,6 +101,9 @@
|
|||
.w-35{
|
||||
width:35%!important;
|
||||
}
|
||||
.w-100p{
|
||||
width: 100px;
|
||||
}
|
||||
#subModalBody{
|
||||
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(),
|
||||
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()
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
</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">
|
||||
<label for="menuUrl" class="col-sm-4 col-form-label col-form-label-sm text-center">URL</label>
|
||||
<div class="col-sm-6">
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@
|
|||
<th>대분류</th>
|
||||
<th>중분류</th>
|
||||
<th>소분류</th>
|
||||
<th>정렬번호</th>
|
||||
<th>url</th>
|
||||
<th>사용여부</th>
|
||||
</tr>
|
||||
|
|
@ -88,6 +89,7 @@
|
|||
<input type="hidden" class="cat1Cd" th:value="${menuMgt.cat1Cd}">
|
||||
<input type="hidden" class="cat2Cd" th:value="${menuMgt.cat2Cd}">
|
||||
<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="approvalChk" th:value="${menuMgt.approvalChk}">
|
||||
<input type="hidden" class="useChk" th:value="${menuMgt.useChk}">
|
||||
|
|
@ -112,6 +114,7 @@
|
|||
<th:block th:if="${#strings.isEmpty(menuMgt.cat3Cd)}">
|
||||
<td></td>
|
||||
</th:block>
|
||||
<td th:text="${menuMgt.orderStr}"></td>
|
||||
<td th:text="${menuMgt.menuUrl}"></td>
|
||||
<td th:text="${menuMgt.useChk eq 'T'?'O':''}"></td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -14,14 +14,16 @@
|
|||
<div class="col-12 card bg-light text-center">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="row justify-content-end">
|
||||
<button class="col-auto btn btn-success mx-3 my-2" id="organSaveBtn">저장</button>
|
||||
<div class="col-4">
|
||||
<div class="row justify-content-end my-2">
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-success" id="organSaveBtn">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-start">
|
||||
<div class="col-3">
|
||||
<div class="col-2">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
|
|
@ -43,7 +45,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="col-2">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<!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">
|
||||
<h5 class="modal-title" id="menuEditModalLabel">외사경찰 수정</h5>
|
||||
<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">
|
||||
<label for="userRole" class="col-sm-2 col-form-label col-form-label-sm text-center ">시스템권한</label>
|
||||
<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"
|
||||
th:checked="${userInfo.userRole eq 'ROLE_ADMIN,ROLE_SUB_ADMIN,ROLE_USER'}">관리자</label>
|
||||
<label style="font-size: 12px">
|
||||
|
|
|
|||
Loading…
Reference in New Issue