Compare commits

..

2 Commits

3 changed files with 69 additions and 65 deletions

View File

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

View File

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

View File

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