관서설정 페이지 동작방식 변경.

강석 최 2022-08-31 11:16:43 +09:00
parent 378c929f7d
commit 793097dcb9
3 changed files with 69 additions and 65 deletions

View File

@ -27,29 +27,30 @@ public class OrganConfigController {
}
@GetMapping("/selectOrganList")
public Map<String, List<Object>> selectOrganList(){
List<CodeMgt> organList = codeMgtService.selectCodeMgtList("OG");
List<OrganConfig> usedOrganList = organConfigService.selectSavedOrganList();
List<CodeMgt> notUsedOrganList = new ArrayList<>();
for(CodeMgt organCode: organList){
public List<OrganConfig> selectOrganList(){
List<CodeMgt> organCdList = codeMgtService.selectCodeMgtList("OG");
List<OrganConfig> organConfigList = organConfigService.selectSavedOrganList();
for(CodeMgt organCode: organCdList){
if(!organCode.getItemCd().equals("OG001")){
boolean usedFlag = false;
for(OrganConfig usedOrgan: usedOrganList){
if(organCode.getItemCd().equals(usedOrgan.getOrganCd())){
for(OrganConfig organConfig: organConfigList){
if(organCode.getItemCd().equals(organConfig.getOrganCd())){
usedFlag = true;
usedOrgan.setOrganNm(organCode.getItemValue());
organConfig.setOrganNm(organCode.getItemValue());
organConfig.setUseState("T");
break;
}
}
if(!usedFlag){
notUsedOrganList.add(organCode);
OrganConfig organConfig = new OrganConfig();
organConfig.setOrganCd(organCode.getItemCd());
organConfig.setOrganNm(organCode.getItemValue());
organConfig.setUseState("F");
organConfigList.add(organConfig);
}
}
}
Map<String, List<Object>> returnMap = new HashMap<>();
returnMap.put("notUsedOrganList", Collections.singletonList(notUsedOrganList));
returnMap.put("usedOrganList", Collections.singletonList(usedOrganList));
return returnMap;
return organConfigList;
}
@PostMapping("/saveOrganConfig")

View File

@ -27,5 +27,7 @@ public class OrganConfig {
@Transient
private String organNm;
@Transient
private String useState;
}

View File

@ -1,5 +1,4 @@
let notUsedOrganList = [];
let usedOrganList = [];
let organList = [];
let selectedMiddleOrganCd = "";
$(function (){
@ -8,8 +7,7 @@ $(function (){
type: 'GET',
dataType:"json",
success: function(data){
notUsedOrganList = data.notUsedOrganList[0];
usedOrganList = data.usedOrganList[0];
organList = data;
setUsedOrganTr("OG001", "OGC002");
},
error:function(){
@ -29,43 +27,38 @@ $(document).on('click', '#bottomAddBtn', function (){
$(document).on('click', '.rowDeleteBtn', function (){
const targetTr = $(this).parents('tr');
const selector = targetTr.find("select");
usedOrganList.forEach(function (organ, idx){
if(organ.organCd === selector.val()
|| organ.parentOrgan === selector.val()){
notUsedOrganList.push({
itemCd: organ.organCd,
itemValue: organ.organNm
})
usedOrganList = usedOrganList.splice(0, idx).concat(usedOrganList.splice(idx+1, usedOrganList.length));
organList.forEach(function (organ, idx){
if(organ.organCd === selector.val() //해당관서
|| organ.parentOrgan === selector.val()){ // 해당 지방청을 상위로 둔 관할 서
organ.useState = "F";
}
})
targetTr.remove();
})
$(document).on('change', '.organSelector', function () {
const selectedItemCd = this.value;
const selectedItemValue = this.selectedOptions[0].text;
const tbodyId = $(this).parents('tbody').id
usedOrganList.forEach(function (organ, idx){
if(organ.organCd===selectedItemCd){
alert("이미 등록된 관서입니다.")
return null;
}
})
for(var i=0; i<this.options.length; i++){
if(this.options[i].index !== this.options.selectedIndex){
this.options[i].remove();
const selector = this;
const selectedItemCd = selector.value;
const tbodyId = $(this).parents('tbody')[0].id
organList.forEach(function (organ, idx){
if(organ.organCd === selectedItemCd){
switch (organ.useState){
case "T":
selector[0].selected = true;
alert("다른 위치에 등록된 관서입니다.")
$(selector).find("[value='"+selectedItemCd+"']").remove()
break;
case "F":
for(var i=0; i<selector.options.length; i++){
if(selector.options[i].index !== selector.options.selectedIndex){
selector.options[i].remove();
}
}
usedOrganList.push({
parentOrgan: tbodyId==="middleTbody"?"OG001":selectedMiddleOrganCd,
organCd: selectedItemCd,
organNm: selectedItemValue,
organType: tbodyId==="middleTbody"?"OGC002":"OGC003"
})
notUsedOrganList.forEach(function (organ, idx){
if(organ.itemCd === selectedItemCd){
notUsedOrganList = notUsedOrganList.slice(0,idx).concat(notUsedOrganList.slice(idx+1, notUsedOrganList.length));
organ.parentOrgan = tbodyId==='middleTbody'?'OG001':selectedMiddleOrganCd;
organ.organType = tbodyId==='middleTbody'?'OGC002':'OGC003';
organ.useState = "T";
break;
}
}
})
})
@ -83,10 +76,15 @@ $(document).on('click', '.middleTr', function (){
})
$(document).on('click', '#organSaveBtn', function (){
contentFade("in");
const saveList = [];
organList.forEach(function (organ) {
if(organ.useState==="T")
saveList.push(organ);
});
$.ajax({
type : 'POST',
url : "/organMgt/saveOrganConfig",
data : JSON.stringify(usedOrganList),
data : JSON.stringify(saveList),
contentType: 'application/json',
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
@ -104,13 +102,14 @@ $(document).on('click', '#organSaveBtn', function (){
})
function addTr(tbody){
if(notUsedOrganList.length===0){
alert("추가할 수 있는 관서가 없습니다.")
}else{
let options = '';
notUsedOrganList.forEach(function (organ) {
options+= '<option value="'+organ.itemCd+'">'+organ.itemValue+'</option>'
organList.forEach(function (organ) {
if(organ.useState==="F")
options+= '<option value="'+organ.organCd+'">'+organ.organNm+'</option>'
});
if(options===''){
alert("배정되지 않은 관서가 없습니다.");
}else{
$('#'+tbody).append(
'<tr '+(tbody==="middleTbody"?'class="middleTr"':'')+'>' +
'<td><button class="btn btn-sm btn-outline-danger rowDeleteBtn"><i class="bi bi-x"></i></button></td>' +
@ -125,7 +124,8 @@ function addTr(tbody){
function setUsedOrganTr(parentOrgan, organType){
const target = organType==="OGC002"?$("#middleTbody"):$("#bottomTbody")
usedOrganList.forEach(function (organ){
organList.forEach(function (organ){
if(organ.useState === "T"){
if(organ.parentOrgan===parentOrgan && organ.organType===organType){
target.append(
'<tr '+(organType==="OGC002"?'class="middleTr"':'')+'>' +
@ -136,5 +136,6 @@ function setUsedOrganTr(parentOrgan, organType){
'</tr>'
)
}
}
})
}