123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- /**
- * admin/category
- */
- var mplus_admin_category = function(){
- //상속
- mplus_admin.call(this);
-
- var self = this;
- //변수
- var $wrapper = $(".main-wrapper #wrapper"),
- $btnCreateNode = $("#btnCreateNode"),
- $btnSaveNode = $("#btnSaveNode"),
- $btnRemoveNode = $("#btnRemoveNode"),
- $btnDeselectNode = $("#btnDeselectNode"),
- $categoryTreeView = $("categoryTreeView"),
- $txtId = $("#txtId"),
- $txtName = $("#txtName"),
- $txtUri = $("#txtUri"),
- $spanUri = $("#spanUri"),
- $txtCategoryDesc = $("#txtCategoryDesc"),
- $spanCreateDt = $("#spanCreateDt"),
- $spanCreateId = $("#spanCreateId"),
- $spanUpdateDt = $("#spanUpdateDt"),
- $spanUpdateId = $("#spanUpdateId"),
- $crudServiceBaseUrl = contextPath + "/admin/category";
- //tree
- var $tree;
- /**
- * 초기화
- */
- this.init = function(){
- initTree();
- addEvent();
- /*if($("#categoryTreeView .fancytree-expander")[0]!=undefined){
- $('#categoryTreeView').fancytree('getTree').getNodeByKey($("#categoryTreeView .fancytree-expander")[0].id).setActive();
- };*/
- };
- /**
- * 이벤트 등록
- */
- var addEvent = function(){
- //아이템 추가
- $btnCreateNode.on("click",function(e){
- addItem(e);
- });
- //아이템 저장
- $btnSaveNode.on("click",function(e){
- saveItem(e);
- });
- //아이템 삭제
- $btnRemoveNode.on("click",function(e){
- removeItem(e);
- });
- //아이템 선택 해제
- $btnDeselectNode.on("click",function(e){
- deselectItem();
- });
- };
- /**
- * 아이템 추가 이벤트
- */
- var addItem = function(e){
- /*
- addedNodeCheck( e, treeView.dataSource.data().toJSON() );
-
- if( addedNodeArr.length > 0 ) {
- alert( "저장하지 않은 아이템 [ " + addedNodeArr[0].catName + " ] (이)가 있습니다" );
- addedNodeArr = [];
- return false;
- }*/
- if($("#categoryTreeView").fancytree("getActiveNode")!=null){
- var node = $("#categoryTreeView").fancytree("getActiveNode"),
- item = $("#categoryTreeView").fancytree("getActiveNode").data,
- parentCatSeq = item.catSeq;
-
- if(node.expanded==undefined){
- $("#categoryTreeView").fancytree("getActiveNode").setExpanded();
- };
- }else{
- var node = $("#categoryTreeView").fancytree("getRootNode"),
- parentCatSeq = '';
- };
-
- var nodeData = null,
- defData = {
- catSeq : null,
- parentCatSeq : parentCatSeq,
- catName : 'NewItem',
- catDesc : null,
- childCount : 0,
- addedNode : true,
- pathName : ""
- };
-
- node.addChildren({
- title: defData.catName,
- key: defData.catSeq,
- folder: false,
- lazy: false,
- data: defData}
- );
- addedNodeArr.push( defData );
- if(node.children.length==1){
- $("#categoryTreeView").fancytree("getActiveNode").setExpanded();
- };
- node.children[node.children.length-1].li.click();
- $txtName.focus();
- };
- /**
- * 아이템 저장 이벤트
- */
- var saveItem = function(e){
- var node = $("#categoryTreeView").fancytree("getActiveNode"),
- item = $("#categoryTreeView").fancytree("getActiveNode").data,
- pnode = node.parent.data;
- var paramItem = {};
- if(item.addedNode==true){
- paramItem = {
- catSeq: null,
- catName: $txtName.val(),
- pathName: $txtUri.val(),
- parentPath : $spanUri.text(),
- catDesc: $txtCategoryDesc.val(),
- childCount : 0,
- parentCatSeq: pnode.catSeq
- }
- }else{
- paramItem = item;
- paramItem.catName = $txtName.val();
- paramItem.pathName = $txtUri.val();
- paramItem.catDesc = $txtCategoryDesc.val();
- paramItem.parentPath = $spanUri.text();
- };
-
- if( paramItem.catName === null || paramItem.catName === "" ) {
- alert( "이름을 입력해주세요." );
- return false;
- }
-
- if( paramItem.pathName === null || paramItem.pathName === "" ) {
- alert( "카테고리 URI를 입력해주세요." );
- return false;
- };
- var regExp = /^[a-z0-9_-]{2,16}$/;
- if( !regExp.test( paramItem.pathName ) ) {
- alert( "카테고리 URI는 소문자나 숫자, 언더스코어, 하이픈을 포함할 수 있고 2byte이상 15byte이하만 가능합니다" );
- return false;
- }
- var opt = {
- url : $crudServiceBaseUrl + "/save.json",
- type : "POST",
- data : self.util.stringifyJson( paramItem ),
- dataType : "json",
- contentType : "application/json;charset=utf-8"
- };
- var success = function(data){
- alert("저장 되었습니다");
- addedNodeArr = [];
- var saveItemData = $('#categoryTreeView').fancytree('getActiveNode');
- $('#title'+saveItemData.key).text(data.catName);
- saveItemData.data = data;
- /*location.reload(true);*/
- };
- var error = function(xhr,d,t){
- console.log(xhr);
- console.log(xhr.responseText);
- };
- self.ajaxAdmin( opt, success, error );
- addedNodeArr = [];
- };
- /**
- * 아이템 삭제 이벤트
- */
- var removeItem = function(e){
- var node = $("#categoryTreeView").fancytree("getActiveNode"),
- item = $("#categoryTreeView").fancytree("getActiveNode").data;
-
- if( node.length === 0 ) {
- alert( "선택한 아이템이 없습니다" );
- return false;
- };
-
- if( item.addedNode === true ) {
- node.remove();
- addedNodeArr = [];
-
- $('#categoryDetail').css('display', 'none');
- $('#categoryDetailEmpty').css('display', 'block');
- return false;
- };
- if( item.childCount > 0 ) {
- alert( "하위 카테고리가 존재하여 삭제할 수 없습니다" );
- return false;
- };
- if( item.apiCount > 0 ) {
- alert( "하위 API가 존재하여 삭제할 수 없습니다" );
- return false;
- };
- if( !confirm("삭제 하시겠습니까?") ) {
- return false;
- }
- var opt = {
- url : $crudServiceBaseUrl + "/remove.json",
- type : "POST",
- data : { catSeq : item.catSeq }
- };
- var success = function(data){
- alert("삭제 되었습니다");
- $('#categoryTreeView').fancytree('getActiveNode').remove();
- /*location.reload(true);*/
- };
- var error = function(xhr,d,t){
- console.log(xhr);
- console.log(xhr.responseText);
- };
- self.ajaxAdmin( opt, success, error );
- };
- /**
- * 트리 초기화
- */
- var createDeptNodeData = function(data) {
- return $.extend({
- title : data.catName,
- key : data.catSeq,
- folder : data.childCount>0? true: false,
- lazy : data.childCount>0? true: false,
- data : data
- }, data);
- };
-
- var initTree = function(){
- $tree = $("#categoryTreeView").fancytree({
- extensions: ["edit"],
- lazyLoad : function(event, ctx) {
- var param_lazyload = {
- async: false,
- url : $crudServiceBaseUrl + "/getList.json",
- dataType : 'json',
- type : 'POST',
- data: {catSeq: ctx.node.data.catSeq}
- };
- result = [];
- var success_lazyload = function(data){
- categorytList = data;
-
- for ( var i in categorytList) {
- var item = categorytList[i];
- result.push(createDeptNodeData(item));
- };
- ctx.result = result;
-
- };
- var error_lazyload = function(xhr,d,t){
- console.log(xhr);
- console.log(t);
- };
- self.ajaxAdmin( param_lazyload, success_lazyload, error_lazyload );
- },
- selectMode : 3,
- activate : function(event, ctx) {
- var categoryData = ctx.node.data;
- var parentUrl = '';
- var parentData = ctx.node.parent;
- if(parentData.title!='root'){
- do{
- parentUrl = parentData.data.pathName + '/' + parentUrl;
- parentData = parentData.parent;
- }while(parentData.parent!=null);
- };
- $spanUri.text('/'+parentUrl);
- if(categoryData.catSeq==undefined){
- $txtId.val('');
- $txtName.val('');
- $txtUri.val('');
- $txtCategoryDesc.val('');
- $spanCreateDt.text('');
- $spanCreateId.text('');
- $spanUpdateDt.text('');
- $spanUpdateId.text('');
- }else{
- var opt = {
- url : $crudServiceBaseUrl + "/getCategory.json",
- type : "POST",
- data : self.util.stringifyJson( {'catSeq': categoryData.catSeq,
- 'pathName': categoryData.pathName} ),
- dataType : "json",
- contentType : "application/json;charset=utf-8"
- };
- var success = function(data){
- $txtId.val(data.catSeq);
- $txtName.val(data.catName);
- $txtUri.val(data.pathName);
- $txtCategoryDesc.val(data.catDesc);
- $spanCreateDt.text(moment(data.createDt).format('YYYY-MM-DD'));
- $spanCreateId.text(data.createId==null? '': data.createId);
- $spanUpdateDt.text(moment(data.updateDt).format('YYYY-MM-DD'));
- $spanUpdateId.text(data.updateId==null? '':data.updateId);
- };
- var error = function(xhr,d,t){
- console.log(xhr);
- console.log(xhr.responseText);
- };
- self.ajaxAdmin( opt, success, error );
- };
- $('#categoryDetail').css('display', 'block');
- $('#categoryDetailEmpty').css('display', 'none');
- }
- }).fancytree('getTree');
- var deptList;
- $.ajax({
- async : false,
- url : $crudServiceBaseUrl + "/getList.json",
- dataType : 'json',
- type : 'POST',
- contentType : 'application/json',
- success : function(result){
- categoryList = result;
- }
- });
-
- var $root = $tree.getRootNode();
- for ( var i in categoryList) {
- var item = categoryList[i];
- $root.addNode(createDeptNodeData(item));
- }
- };
-
- var deselectItem = function(e){
- var node = $("#categoryTreeView").fancytree("getActiveNode");
- if(node!=undefined){
- node.setActive(false);
- node.setFocus(false);
-
- $txtId.val('');
- $txtName.val('');
- $txtUri.val('');
- $txtCategoryDesc.val('');
- $spanCreateDt.text('');
- $spanCreateId.text('');
- $spanUpdateDt.text('');
- $spanUpdateId.text('');
-
- $('#categoryDetail').css('display', 'none');
- $('#categoryDetailEmpty').css('display', 'block');
- };
- };
-
- // 저장하지 않은 아이템 확인
- var addedNodeArr = [];
- function addedNodeCheck( e, treeViewData ) {
- if( treeViewData ) {
- for( var n = 0; n < treeViewData.length; n++) {
- var childData = treeViewData[n];
- if( childData.addedNode === true ) {
- addedNodeArr.push(childData);
- return;
- } else {
- var child = childData.items;
- if (child) {
- if (child.length > 0) {
- addedNodeCheck(e, child);
- }
- }
- }
- }
- }
- };
- /**
- * 선택된 노드의 부모경로 가져오기
- */
- var getTotalPath = function(node){
- var treeView = self.treeView,
- totalPathName = "",
- //현재 선택된 노드 모델 정보
- item = treeView.dataItem( node );
- var cat_seq = item.catSeq;
- var cat_name = item.catName;
- var cat_path_name = "";
-
- cat_path_name = "";
- //부모있으면
- while ( item.parentNode() ) {
- //있을 때까지 부모로 설정해서 경로를 만듬
- item = item.parentNode();
- cat_path_name = item.pathName + "/" + cat_path_name;
- }
- //부모경로가 없으면 '/' 있으면 '/ + 부모경로'
- return totalPathName = (cat_path_name !== ""?"/" + cat_path_name : "/");
- };
- };
|