File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
<%--
Class Name : EgovOrgChartManage.jsp
Description : 조직도 관리 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2018.06.11 ITN 최초 생성
author : ITN
since : 2018.06.11
--%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="egovframework.com.cmm.service.EgovProperties"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="ko">
<link href="<c:url value='/'/>css/jstree/themes/default/style.min.css" rel="stylesheet" type="text/css">
<style>
.jstree_orgChart {
overflow: auto;
border: 1px solid silver;
min-height: 100px;
width: 390px;
}
</style>
<script src="<c:url value='/js/jquery-1.12.4.min.js' />"></script>
<script src="<c:url value='/js/jstree.min.js' />"></script>
<script src="<c:url value='/js/EgovCmmUtl.js' />"></script>
<script>
$( document ).ready(function() {
jstreeInit();
});
/*********************************
* jstree
*********************************
*/
var newNodeId = "";
var modiNodeId = "";
function jstreeInit() {
$('#kopost_organization').jstree({
"core" : {
"animation" : 0,
"multiple" : false,
"check_callback" : true,
"themes" : { "stripes" : true },
"data" : {
"url" : "<c:url value='/sym/ccm/ccc/EgovCcmCmmnCodeTreeInitAjax.do'/>",
"dataType" : "json",
"data" : function (node) {
return {'id' : node.id , 'itsmYn' : '${cmmnDetailCodeVO.itsmYn}' }
}
}
},
"types" : {
"#" : {
/* "max_children" : 4, */
"max_depth" : 4,
"valid_children" : ["root"]
},
"root" : {
//"icon" : "/static/3.3.5/assets/images/tree_icon.png",
"icon" : "glyphicon glyphicon-flash",
"valid_children" : ["default"]
},
"default" : {
"valid_children" : ["default","file"]
},
"file" : {
//"icon" : "glyphicon glyphicon-file",
"icon" : "jstree-file",
"valid_children" : []
}
},
"plugins" : [
"contextmenu", "search",
"types"
//, "unique"
//, "wholerow"
// "dnd" move기능 삭제
// "checkbox" 체크박스 삭제
]
})
.bind('loaded.jstree', function(e, data) {
//console.log("jstree loaded");
//$(this).jstree(true).open_all();
$('#kopost_organization').jstree('open_node' , $('#0') )
})
.on('select_node.jstree', function (e, data) {
if(!$('.organ_rightbox').is(":visible")){
$(".organ_rightbox").show();
}
/* 매뉴 선택 */
var menuNo = data.node.id;
var upperMenuId = data.node.parent;
//하위 매뉴가 있으면 매뉴코드 변경못하게
$('#nodeDepth').val(data.node.parents.length);
$('#upperMenuId').val(upperMenuId);
if(data.node.children.length > 0){
$('#menuNo').attr("readonly",true);
}else{
$('#menuNo').attr("readonly",false);
}
//매뉴 추가시 자동 선택되게
if(newNodeId !=""){
menuNo = newNodeId ;
newNodeId = "";
$('#'+data.instance.get_node(menuNo).a_attr.id).trigger("click"); //클릭 이벤트 발생
}
$("#menuTopNm").text(data.node.text);
$.ajax({
type:"POST",
url:"<c:url value='/sym/ccm/ccc/EgovCcmCmmnCodeInfoAjax.do' />",
data:{ "menuNo" : menuNo, "upperMenuId" : upperMenuId, "nodeDepth" : data.node.parents.length},
dataType:'jsonp',
async: false,
//timeout:(1000*30),
success : function(returnData, status) {
if (status == "success") {
var cmmnClCodeVO = returnData.menuManageVO;
fn_setting_menuNo(cmmnClCodeVO);
} else { alert("ERROR"); return;}
},
error : function(request , status, error) {
//alert("부서 정보 조회가 실패되었습니다.");
//alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
},
complete : function () {
deleteLodingBar();
}
});
})
.on('rename_node.jstree', function (e, data) { //매뉴명 변경
var nodeId = data.node.id;
var oldText = data.old;
var newText = data.text;
var upperMenuId = data.node.parent;
if (data.node.parents.length == 1) {
alert("최상위 공통코드명은 변경할수 없습니다.");
data.instance.refresh();
}else if (data.node.parents.length > 0) {
/* 부서명 변경 */
if (oldText != newText) {
//if (confirm("[" + oldText + "]" + "부서를 " + "[" + newText + "]" + "로 변경하시겠습니까?" )) {
if (confirm("매뉴명을 변경하시겠습니까?" )) {
$.ajax({
type:"POST",
url:"<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoNmUpdateAjax.do' />",
data:{ "menuNo" : nodeId, "upperMenuId" : upperMenuId, "menuNm" : newText , "nodeDepth" : data.node.parents.length },
dataType:'jsonp',
success : function(returnData, status) {
if (status == "success") {
alert("매뉴명이 변경되었습니다.");
} else { alert("ERROR"); return;}
},
error : function(request , status, error) {
alert("매뉴명이 변경이 실패되었습니다.");
},
complete : function () {
data.instance.refresh();
}
});
} else {
data.instance.refresh();
}
}
} else {/* 매뉴 추가 */
}
})
.on('delete_node.jstree', function (e, data) {
/* 매뉴 삭제 */
var upperMenuId = data.node.parent;
if(data.node.parents.length == 1){
alert("최상위 공통코드는 삭제할수 없습니다.");
data.instance.refresh();
}else{
if(data.node.children.length != 0){
alert("하위 매뉴를 먼저 삭제 후 매뉴를 삭제해 주세요.");
data.instance.refresh();
}else{
if (confirm("[" + data.node.text + "]" + " 매뉴를 삭제하시겠습니까?")){
$.ajax({
type:"POST",
url:"<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoDeleteAjax.do' />",
data:{ "menuNo" : data.node.id , "upperMenuId" : upperMenuId, "nodeDepth" : data.node.parents.length },
dataType:'jsonp',
//timeout:(1000*30),
success : function(returnData, status) {
if (status == "success") {
alert("매뉴 정보가 삭제되었습니다.");
fn_init_menuInfo();
} else { alert("ERROR"); return;}
},
error : function(request , status, error) {
alert("매뉴 정보 삭제가 실패되었습니다.");
//alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
},
complete : function () {
data.instance.refresh();
}
});
} else {
data.instance.refresh();
}
}
}
})
.on('create_node.jstree', function(e, data) {
if (data.node.parents.length > 4) {
alert("더 이상 하위 코드를 생성할수 없습니다.");
data.instance.refresh();
}else{
if (confirm("코드를 추가하시겠습니까?")){
var instance = data.instance;
var menuNm = data.text;
var upperMenuId = data.node.parent;
var menuOrdr = 1;
var childrenNodes = instance.get_node(upperMenuId).children;
// 하위 매뉴 있을 시 마지막 부서 sort_ord + 1
if (childrenNodes.length > 1) {
//var lastChildrenNode = instance.get_node(childrenNodes[childrenNodes.length - 2]);
//sortOrd = lastChildrenNode.li_attr.sortOrd + 1;
menuOrdr = childrenNodes.length ;
}
$.ajax({
type:"POST",
url:"<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoInsertAjax.do' />",
data:{ "menuNm" : menuNm, "upperMenuId" : upperMenuId, "nodeDepth" :data.node.parents.length , 'itsmYn' : '${cmmnDetailCodeVO.itsmYn}' },
dataType:'jsonp',
//timeout:(1000*30),
success : function(returnData, status) {
if(returnData.status == "success") {
alert("매뉴가 추가 되었습니다.");
//fn_select_menuNo(returnData.menuManageVO, returnData.menuManageVO.menuUserType);
newNodeId = returnData.newMenuNo ; //매뉴추가후 노드선택
}else if(returnData.status == "dupl"){
alert("중복된 아이디가 있습니다.\n 중복된 아이디변경/삭제후 다시 추가해 주세요\n"+ "("+returnData.menuManageVO.codeNm+")");
return;
}else{
alert("매뉴 추가가 실패하였습니다.");
return;
}
},
error : function(request , status, error) {
alert("매뉴 추가가 실패되었습니다.")
},
complete : function () {
data.instance.refresh();
}
});
}else{
data.instance.refresh();
}
}
})
.on('move_node.jstree', function (e, data) {
/* 매뉴 위치 변경 */
var instance = data.instance;
var menuNo = data.node.id;
var childrenNodes = instance.get_node(menuNo).children;
// 하위 매뉴 있을 시 이동 금지
/* if (childrenNodes.length > 1) {
alert("하위 매뉴가 있으면 매뉴 이동을 할 수 없습니다.");
data.instance.refresh();
return;
} */
if (confirm("매뉴 위치를 변경하시겠습니까?" )){
//var partIdx = data.node.id;
var upperMenuId = data.parent;
var menuOrdr = data.position + 1;
var sortOver = "A" ;
$.ajax({
type:"POST",
url:"<c:url value='/sym/mnu/mcm/EgovMenuInfoMoveAjax.do' />",
data:{ "menuNo" : menuNo, "upperMenuId" : upperMenuId, "menuOrdr" : menuOrdr},
dataType:'jsonp',
//timeout:(1000*30),
success : function(returnData, status) {
if (status == "success") {
alert("매뉴 위치가 변경되었습니다.");
} else { alert("ERROR"); return;}
},
error : function(request , status, error) {
alert("매뉴 위치 변경이 실패되었습니다.");
//alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
},
complete : function () {
data.instance.refresh();
}
});
} else {
data.instance.refresh();
}
})
.on("refresh.jstree", function (e,data) {
if(modiNodeId !=""){
$('#'+data.instance.get_node(modiNodeId).a_attr.id).trigger("click");
}
});
}
//매뉴 정보 세팅
function fn_setting_menuNo(cmmnClCodeVO){
//upperIdxs = upperIdxs.join("|");
var tmpHtml = "";
if(cmmnClCodeVO!=null){
$('#menuNo').val(cmmnClCodeVO.codeId);
$('#tmp_Id').val(cmmnClCodeVO.codeId);
$('#menuNm').val(cmmnClCodeVO.codeNm);
$('#menuDc').val(cmmnClCodeVO.codeDc);
$('#upperMenuIdText').text(cmmnClCodeVO.parent);
$('#upperMenuId').val(cmmnClCodeVO.parent);
$('#useYn').val(cmmnClCodeVO.useAt);
$(".main1_delete_btn").removeAttr("onclick");
$(".main1_delete_btn").attr("onclick", "fn_delete_menuInfo('"+cmmnClCodeVO.codeId+"');return false;");
$(".main1_save_btn").removeAttr("onclick");
$(".main1_save_btn").attr("onclick", "fn_save_menuInfo('"+cmmnClCodeVO.codeId+"');return false;");
//selectupdate
$('#useYn').niceSelect('update');
}
}
//매뉴 정보 세팅
function fn_select_menuNo_back(menuManageVO, menuUserTypeList){
//upperIdxs = upperIdxs.join("|");
var tmpHtml = "";
if(menuManageVO!=null){
$('#menuNo').val(menuManageVO.menuNo);
$('#tmp_Id').val(menuManageVO.menuNo);
$('#menuCours').text(menuManageVO.menuCours);
$('#menuOrdr').val(menuManageVO.menuOrdr);
$('#menuNm').val(menuManageVO.menuNm);
$('#menuDc').val(menuManageVO.menuDc);
$('#upperMenuIdText').text(menuManageVO.upperMenuId);
$('#upperMenuId').val(menuManageVO.upperMenuId);
$('#progrmFileNm').val(menuManageVO.progrmFileNm);
/* $('#progrmFileNmText').text(menuManageVO.progrmFileNm); */
$('#tmp_Name').val(menuManageVO.progrmFileNm);
$('#relateImageNm').val(menuManageVO.relateImageNm);
$('#relateImagePath').val(menuManageVO.relateImagePath);
$('#userType').val(menuManageVO.userType);
$('#url').val(menuManageVO.url);
$('#useYn').val(menuManageVO.useYn);
$("#menuTopNm").text( menuManageVO.menuNm );
$("#progrmHtmlFileId").val( menuManageVO.progrmHtmlFileId );
$("#progrmBbsId").val(menuManageVO.progrmBbsId);
$('#progrmFileNm_tmp').val(menuManageVO.progrmFileNm);
var menuType = menuManageVO.menuType ;
if(menuManageVO.progrmFileNm == 'dir' || menuType == 'M'){
$("#menuType").val("M"); //매뉴로 세팅
$('#progrmFileNm').attr("readonly", true);
$('#progrmFileNm_tmp').val("");
$('#url_tmp').val("");
}else{
$("#menuType").val(menuType);
//$('#progrmFileNm').attr("readonly", false);
$('#url_tmp').val(menuManageVO.url);
}
//매뉴타입 설정
initShowUrl('Y');
$('#url').val(menuManageVO.url);
$(".main1_delete_btn").removeAttr("onclick");
$(".main1_delete_btn").attr("onclick", "fn_delete_menuInfo('"+menuManageVO.menuNo+"' , '"+menuManageVO.progrmFileNm+"' );return false;");
$(".main1_save_btn").removeAttr("onclick");
$(".main1_save_btn").attr("onclick", "fn_save_menuInfo('"+menuManageVO.menuNo+"');return false;");
}
}
//매뉴 정보 삭제
function fn_delete_menuInfo(menuNo) {
if(menuNo == null || "undefined"== menuNo){
alert("삭제 하려는 매뉴를 먼저 선택해주세요.");
return ;
}
var instance = $('#kopost_organization').jstree(true);
if(instance.get_node(menuNo)==false){
menuNo = $('#upperMenuIdText').text()+"__"+menuNo ;
}
if(instance.get_node(menuNo).children.length != 0){
alert("하위 매뉴를 먼저 삭제 후 매뉴를 삭제해 주세요.");
return;
}
if (confirm("코드를 삭제 하시겠습니까?")){
$.ajax({
type:"POST",
"url" : "<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoDeleteAjax.do'/>",
data:{ "menuNo" : menuNo , "nodeDepth" : instance.get_node(menuNo).parents.length , upperMenuId : $('#upperMenuId').val() },
dataType:'jsonp',
//timeout:(1000*30),
success : function(returnData, status) {
if (returnData.status == "success") {
//코드 목록 갱신
var instance = $('#kopost_organization').jstree(true);
alert("코드 정보가 삭제 되었습니다.");
$("#kopost_organization").jstree("refresh");
fn_init_menuInfo();
} else if(returnData.status == "duplPk"){
alert("삭제하려는 매뉴를 참조하고 있는 매뉴가 있습니다.\n 참조하는 매뉴를 삭제후 다시 시도해 주세요\n"+ "("+returnData.menuManageResultVO.menuCours+")");
return;
}
else {
alert("매뉴 삭제가 실패되었습니다.");
return;
}
},
error : function(request , status, error) {
alert("매뉴 삭제가 실패되었습니다..");
},
complete : function () {
}
});
}
}
//매뉴정보 init(매뉴 초기화)
function fn_init_menuInfo() {
$("#menuTopNm").text("매뉴선택");
$("#menuForm input[type=text]").val("")
$('#menuCours').text("");
$('#upperMenuIdText').text("");
/* $('#progrmFileNmText').text(""); */
}
//매뉴 초기화
function jstreeRefresh() {
var searchForm = document.searchForm ;
searchForm.authorCode.value = $('#authorCode').val();
searchForm.submit();
/* $('#kopost_organization').jstree("refresh");
$('#kopost_organization').jstree(true).open_all();
fn_init_menuInfo(); */
}
//매뉴 정보 저장. 등록/수정
function fn_save_menuInfo(menuNo) {
var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?.]/gi;
if(special_pattern.test(document.menuForm.menuNo.value) == true){
alert("매뉴 코드는 특수문자를 쓸수 없습니다.") ;
return;
}
if(menuNo == null || "undefined"== menuNo){
alert("저장 하려는 매뉴를 먼저 매뉴트리에서 생성해 주세요."); return ;
}
var menuForm = document.menuForm;
if(""==menuForm.menuNo.value){
alert("매뉴코드는 필수 값입니다"); return false;
}
if(""==menuForm.menuDc.value){
alert("매뉴설명은 필수 값입니다"); return false;
}
var url = "";
url = "<c:url value='/sym/ccm/ccc/EgovCcmCmmnInfoUpdateAjax.do'/>";
var params = $(menuForm).serialize();
$.ajax({
type:"POST",
"url":url,
data:params,
dataType:'jsonp',
async: false,
success : function(returnData, status) {
if (returnData.status == "success") {
alert("매뉴 정보가 저장되었습니다.");
//modiNodeId = $('#menuNo').val();
modiNodeId = returnData.newMenuNo;
} else if(returnData.status == "upperDupl"){
alert("상위 매뉴 번호가 있습니다.");
return;
}else if(returnData.status == "dupl"){
alert("이미 사용하고 있는 매뉴 번호가 있습니다.");
return;
}else if(returnData.status == "duplProNm"){
alert("이미 사용하고 있는 프로그램파일명이 있습니다.");
return;
}else{
alert("ERROR"); return;
}
},
error : function(request , status, error) {
alert("매뉴 정보 저장이 실패되었습니다.");
},
complete : function () {
$("#kopost_organization").jstree("refresh");
}
});
}
/* ********************************************************
* 게시판목록조회 함수
******************************************************** */
function searchBBSId() {
var bbsPopup = window.open("<c:url value='/cop/bbs/EgovBBSIdListSearch.do'/>",'','width=800,height=730');
}
/* ********************************************************
* 화면컨텐츠ID 검색 팝업
******************************************************** */
function searchContentList() {
var contentPopup = window.open("<c:url value='/uss/ion/cnt/contentListPopup.do'/>",'','width=800,height=730');
}
function greeting(name){
alert('반갑습니다. ' + name);
}
/* function processUserInput(callback){
var name = prompt('이름을 입력해 주세요.');
callback(name);
} */
function processUserInput(callback){
var tempMenuNo = $('#menuNo').val();
callback(fn_save_menuInfo(tempMenuNo));
console.log("----processUserInput------");
}
//processUserInput(greeting);
</script>
<title>코드관리</title>
</head>
<body>
<style>
.organ_rightbox span{
float: none; margin-top: unset;
font-size: unset; margin-left: 10px;
}
</style>
<div class="cont_area">
<form name="menuForm" id="menuForm" >
<input type="hidden" id="existChildNode" name="existChildNode" value="N" />
<input type="hidden" id="nodeDepth" name="nodeDepth" value="" />
<input type="hidden" id="upperMenuId" name="upperMenuId" value="" />
<div class="ad_con_head" style="margin-bottom:28px;">
<div class="ad_head_text">
<!-- <p class="today_txt">코드관리
</p> -->
<div class="cont_main_title">
<img src="/direct/img/home_icon.png" alt=""><span id="cnt_cate_list"></span>
</div>
</div>
</div>
<div class="ad_organcon">
<!-- 조직도 관리 시작 -->
<div class="organ_leftbox" style="float:left;">
<button type="button" id="evts_button_open_all" onclick="$('#kopost_organization').jstree('open_all' ); " >open all</button>
<button type="button" id="evts_button_close_all" onclick="$('#kopost_organization').jstree('close_node' , $('#0') ); " >close all</button>
<div id="kopost_organization" class="jstree_orgChart" style="margin-top:10px;"></div>
</div>
<div class="organ_rightbox" style="display: none; float:left; margin-left:30px;" >
<!-- <div class="organ_righthead" id="menuTopNm">매뉴선택</div> -->
<table id="tbEmpList">
<thead>
</thead>
<tbody>
</tbody>
</table>
<!-- <p class="reply_emp" id="empFormTitle">매뉴 추가등록 상세</p> -->
<div class="emp_div2">
<div class="list_wrap setting_list_wrap" style="width:100%;">
<table>
<colgroup>
<col style="width:150px;"/>
<col style="width:500px;"/>
</colgroup>
<tr>
<th><div class="listTitle">매뉴코드</div></th>
<td>
<div id="select_part">
<input type="text" name="menuNo" id="menuNo" />
<input type="hidden" id="tmp_Id" name="tmp_Id"/><!-- 이전매뉴 No -->
</div>
</td>
</tr>
<tr>
<th><div class="listTitle">매뉴명</div></th>
<td>
<input type="text" name="menuNm" id="menuNm" />
<input type="hidden" id="tmp_Name" name="tmp_Name"/><!-- 이전매뉴 이름 -->
</td>
</tr>
<tr>
<th><div class="listTitle">상위매뉴코드</div></th>
<td>
<span id="upperMenuIdText"></span>
</td>
</tr>
<!-- <tr>
<th>코드경로</th>
<td>
<span id="menuCours">
</span>
</td>
</tr> -->
<tr>
<th><div class="listTitle">매뉴설명</div></th>
<td>
<input type="text" name="menuDc" id="menuDc" />
</td>
</tr>
<tr>
<th><div class="listTitle">사용/미사용</div></th>
<td>
<select name="useYn" id="useYn" title="" >
<option value="Y" <c:if test="${userSearchVO.useYn == 'Y'}">selected="selected"</c:if> >사용</option>
<option value="N" <c:if test="${userSearchVO.useYn == 'N'}">selected="selected"</c:if> >미사용</option>
</select>
</td>
</tr>
</table>
</div>
<div class="setting_btn">
<input type="button" value="삭제" class="del_btn main1_delete_btn" onClick="fn_delete_menuInfo(); return false;">
<input type="button" value="저장" class="edit_btn main1_save_btn" onClick="fn_save_menuInfo(); return false;" >
</div>
</div>
</div>
</div>
</form>
<form name="searchForm" method="get" action="<c:url value='/sym/mnu/mcm/EgovMenuCreatSelectJtree.do'/>" >
<input name="authorCode" type="hidden" value="ROLE_ANONYMOUS" />
</form>
</div>
</body>
</html>