/**
* admin/menu
*/
var mcare_admin_auth = function( language_code ){
//상속
mcare_admin.call(this);
var self = this;
//언어코드
var DEFAULT_LANGUAGE = language_code;
//변수
var $wrapper = $(".main-wrapper #wrapper"),
$addItem = $("#add-item"),
$saveItem = $("#save-item"),
$reloadItem = $("#reload-item"),
$removeItem = $("#remove-item"),
$deselectItem = $("#deselect-item"),
$treeView = $("#tree-view"),
$addAttrList = $("#addAttrList"),
$minusAttrList = $("#minusAttrList")
$authDesc = $("#authDesc");
$crudServiceBaseUrl = contextPath + "/admin/auth"
$attrCrudServiceBaseUrl = contextPath + "/admin/attr"; //속성 관련 요청을 위해 별도로 작성
var attrTypes;
var hospitalAttr;
var dutyAttr;
var workAttr;
var extraAttr;
var attrs = null;
//트리
this.treeView;
// this.addAttrListGrid;
// this.minusAttrListGrid = null;
this.addAttrList;
this.minusAttrList;
/**
* 객체 초기화
*/
this.init = function(){
// 왼쪽이랑 오른쪽 구분
initSplitter();
// 왼쪽 트리
initTree();
//설명 글자수 이벤트 - core에 선언
self.checkDescBytes($authDesc);
addEvent();
initAttrTypes();
initGrid();
};
/**
* 이벤트 등록
*/
var addEvent = function(){
// 아이템 생성
$addItem.on("click", function(e) {
addItem(e);
});
// 아이템 저장
$saveItem.on("click",function(e) {
saveItem(e);
});
// 아이템 갱신 (to 모바일 서버)
$reloadItem.on("click",function(e) {
reloadItem(e);
});
// 아이템 삭제
$removeItem.on("click",function(e) {
removeItem(e);
});
// 아이템 선택 해제
$deselectItem.on("click",function(e) {
deselectItem(e);
});
};
// add 랑 minus 랑 따로 데이터소스를 정의
var addAuthAttrDataSource = new kendo.data.DataSource({
transport: {
read: function(options) {
$.ajax({
url: $crudServiceBaseUrl + "/getAuthAttrList.json",
method: "get",
dataType: "json",
data: {authId: self.selectedAuthId, authType : 'add'},
success: function(result) {
options.success(result);
}
});
},
create: function(e) {
e.success();
},
destroy: {},
parameterMap: function( options, operation ) {
if( operation === "read" ){
return {authId: self.selectedAuthId, authType : 'add'};
};
}
},
batch: true,
schema: {
data: function(response) {
return response;
},
// 요게 서버에서 속성들을 내려주는 데이터구조
model: {
id: "authAttrSeq",
fields: {
attrName: { type: "string", editable: true, validation: { required: false }},
attrTypeName: { type: "string", editable: true, validation: { required: false }},
authAttrId: { type: "string", editable: true, validation: { required: false }},
authAttrSeq: { type: "string"},
authAttrType: { type: "string", editable: true, validation: { required: false }},
authId: { type: "string"},
authType: { type: "string"}
}
}
}
});
// 마이너스 쪽은 걍 손안댔다고보면됨.. add 하고 완료되면 해야지했는데ㅋㅋㅋ
var minusAuthAttrDataSource = new kendo.data.DataSource({
transport: {
read: function(options) {
$.ajax({
url: $crudServiceBaseUrl + "/getAuthAttrList.json",
method: "get",
dataType: "json",
data: {authId: self.selectedAuthId, authType : 'minus'},
success: function(result) {
options.success(result);
}
});
},
create: function(e) {
e.success();
},
destroy: {},
parameterMap: function( options, operation ) {
if( operation === "read" ){
return {authId: self.selectedAuthId, authType : 'minus'};
} else {
return;
}
}
},
schema: {
data: function(response) {
return response;
},
// 요게 서버에서 속성들을 내려주는 데이터구조
model: {
id: "authAttrSeq",
fields: {
attrName: { type: "string", editable: true, validation: { required: false }},
attrTypeName: { type: "string", editable: true, validation: { required: false }},
authAttrId: { type: "string", editable: true, validation: { required: false }},
authAttrSeq: { type: "string"},
authAttrType: { type: "string", editable: true, validation: { required: false }},
authId: { type: "string"},
authType: { type: "string"}
}
}
}
});
var initGrid = function () {
var grid = $addAttrList.kendoGrid({
dataSource: addAuthAttrDataSource,
resizable: true,
sortable: false,
toolbar: [{ name : "create", text: "추가" }],
columns: [
{ field: "authAttrType", title: "속성 타입", width: 35, attributes: {style: "text-align: center;"},
template: function(data){
for(var i = 0; i < attrTypes.length; i++) {
if(attrTypes[i].attrType == data.authAttrType)
return attrTypes[i].attrTypeName;
}}, editor:attrTypeEditor}
,{ field: "authAttrId", title: "속성",hidden:false, width: 35, attributes: {style: "text-align: center;"},
template: function(data){
if(data.authAttrType == "hospital") {
for(var i = 0; i < hospitalAttr.length; i++) {
if(hospitalAttr[i].attrId == data.authAttrId)
return hospitalAttr[i].attrName;
}
} else if(data.authAttrType == "duty") {
for(var i = 0; i < dutyAttr.length; i++) {
if(dutyAttr[i].attrId == data.authAttrId)
return dutyAttr[i].attrName;
}
} else if(data.authAttrType == "work") {
for(var i = 0; i < workAttr.length; i++) {
if(workAttr[i].attrId == data.authAttrId)
return workAttr[i].attrName;
}
} else if(data.authAttrType == "extra") {
for(var i = 0; i < extraAttr.length; i++) {
if(extraAttr[i].attrId == data.authAttrId)
return extraAttr[i].attrName;
}
}
},editor:attrEditor}
,{ command: [{name:"edit",text:{edit: "편집", update: "저장", cancel: "취소"}},{name:"destroy",text:"삭제"}], title: " ", width: 30, attributes: {style: "text-align: center;"}}
],
editable: {
mode:"inline",
confirmation:"정말 삭제하시겠습니까?"
},
edit: function(e) {
//추가event찍힘
}
});
var gridMinus = $minusAttrList.kendoGrid({
dataSource: minusAuthAttrDataSource,
resizable: true,
sortable: false,
toolbar: [{ name : "create", text: "추가"}],
columns: [
{ field: "authAttrType", title: "속성 타입", width: 35, attributes: {style: "text-align: center;"},
template: function(data){
for(var i = 0; i < attrTypes.length; i++) {
if(attrTypes[i].attrType == data.authAttrType)
return attrTypes[i].attrTypeName;
}}, editor:attrTypeEditor}
,{ field: "authAttrId", title: "속성",hidden:false, width: 35, attributes: {style: "text-align: center;"},
template: function(data){
if(data.authAttrType == "hospital") {
for(var i = 0; i < hospitalAttr.length; i++) {
if(hospitalAttr[i].attrId == data.authAttrId)
return hospitalAttr[i].attrName;
}
} else if(data.authAttrType == "duty") {
for(var i = 0; i < dutyAttr.length; i++) {
if(dutyAttr[i].attrId == data.authAttrId)
return dutyAttr[i].attrName;
}
} else if(data.authAttrType == "work") {
for(var i = 0; i < workAttr.length; i++) {
if(workAttr[i].attrId == data.authAttrId)
return workAttr[i].attrName;
}
} else if(data.authAttrType == "extra") {
for(var i = 0; i < extraAttr.length; i++) {
if(extraAttr[i].attrId == data.authAttrId)
return extraAttr[i].attrName;
}
}
},editor:attrEditor}
,{ command: [{name:"edit",text:"편집"},{name:"destroy",text:"삭제"}], title: " ", width: 30, attributes: {style: "text-align: center;"}}
],
editable: {
mode:"inline",
confirmation:"정말 삭제하시겠습니까?"
},
edit: function(e) {
//추가event찍힘
}
});
function attrTypeEditor(container, options) {
$('')
.appendTo(container)
.kendoDropDownList({
dataSource: attrTypes,
dataTextField: "attrTypeName",
dataValueField: "attrType",
change: selectChangeAttr,
optionLabel: {
attrTypeName: "선택",
attrType: ""
}
}).data("kendoDropDownList").select(0);
};
function selectChangeAttr(e){
var options= e.sender._selectedValue;
var container = $('.k-grid-edit-row [data-container-for=authAttrId]');
if( options == 'hospital') {
container.find('input').data("kendoDropDownList").dataSource.data(hospitalAttr);
} else if( options == 'duty') {
container.find('input').data("kendoDropDownList").dataSource.data(dutyAttr);
} else if( options == 'work') {
container.find('input').data("kendoDropDownList").dataSource.data(workAttr);
} else if( options == 'extra') {
container.find('input').data("kendoDropDownList").dataSource.data(extraAttr);
};
};
function attrEditor(container, options) {
var dataSource;
if(options.model.authAttrType=='hospital'){
dataSource = hospitalAttr;
}else if(options.model.authAttrType=='duty'){
dataSource = dutyAttr;
}else if(options.model.authAttrType=='work'){
dataSource = workAttr;
}else if(options.model.authAttrType=='extra'){
dataSource = extraAttr;
};
$('')
.appendTo(container)
.kendoDropDownList({
autoBind: false,
dataTextField: "attrName",
dataValueField: "attrId",
dataSource: dataSource,
optionLabel: {
attrId: "",
attrName: "선택"
}
}).data("kendoDropDownList").select(0);
};
}
var initSplitter = function(){
$wrapper.kendoSplitter({
panes: [
{ collapsible: true, resizable: true, size: '240px' },
{ collapsible: false }
]
});
$wrapper.data("kendoSplitter").trigger("resize");
};
/**
* 트리 아이템 신규 이벤트
* @private
*/
var addItem = function(e){
var treeView = self.treeView;
addedNodeCheck(e, treeView.dataSource.data().toJSON());
if (addedNodeArr.length > 0) {
alert("저장하지 않은 아이템 [ " + addedNodeArr[0].menuName + " ] (이)가 있습니다");
addedNodeArr = [];
return false;
}
var node = treeView.select(),
item = treeView.dataItem(node);
var nodeData = null,
defData = {
menuType: "CONT",
menuName: "NewItem",
menuOrder: 0,
enabledYn: "Y",
authYn: "Y",
authViewYn: "N",
aggYn: "N",
accessUriAddr: "",
imageUriAddr: "",
authDesc: "",
childCount: 0,
i18ns: [],
addedNode: true,
selected: false,
menuParam : []
};
/*if( node.length === 0 ) {*/
node = null;
nodeData = $.extend(true, {}, {
menuType: 'MAIN'
}, defData);
/* } else {
if( item.childCount === 0 ) {
item.loaded(true);
}
nodeData = $.extend( true, {}, item.toJSON(), {
menuId: null,
parentMenuId: item.menuId
}, defData);
}*/
treeView.append(nodeData, node);
};
// 다국어 코드 중복 체크
var i18nArr = [];
/**
* 트리 아이템 저장 이벤트
* @private
*/
var saveItem = function(e){
var treeView = self.treeView;
var node = treeView.select(),
item = treeView.dataItem(node);
if( node.length === 0 ) {
alert("선택한 아이템이 없습니다");
return false;
}
if( item.authId === null || item.authId === "" ) {
alert( "아이디가 누락되었습니다" );
return false;
}
var addList = $addAttrList.data("kendoGrid").dataSource.data();
var minusList = $minusAttrList.data("kendoGrid").dataSource.data();
var attrList = [];
for(var i=0; i 0);
}
}
}
});
/**
* 트리 초기화
*/
var initTree = function(){
//kendo tree
var option = {
loadOnDemand: false,
dataSource : treeDataSource,
dataTextField : "authName",
template : treeTemplate,
select : treeSelect,
expand : treeExpand
};
self.treeView = self.tree( $treeView, option );
/**
* tree template
* @private
* @description 트리 구성
*/
function treeTemplate(o){
var span = $("").addClass("k-sprite");
span.addClass("html");
return span[0].outerHTML + o.item.authName;
};
/**
* tree select
* @private
* @description 트리 선택
*/
function treeSelect(o){
kendo.unbind( $wrapper );
var item = this.dataItem( o.node );
console.log(self.util.stringifyJson(item));
var observer = new kendo.observable( item );
observer.bind("change", function(o) {
});
kendo.bind( $wrapper, observer );
if( observer.menuId !== undefined && observer.menuId !== null ){
$("#authId").prop("disabled",true);
} else {
$("#authId").prop("disabled",false);
}
//설명 글자수제한 초기화
$authDesc.trigger("keyup");
if(item.authId !== undefined) {
// 왼쪽 아이템 선택 시 !!!!!!
self.selectedAuthId = item.authId;
$addAttrList.data("kendoGrid").dataSource.read();
$minusAttrList.data("kendoGrid").dataSource.read();
}
};
/**
* tree expand
* @private
* @description 트리 펼치기
*/
function treeExpand(o){
};
};
/**
* 속성 데이터 가져오기
*/
var initAttrTypes = function() {
$.ajax({
url : $attrCrudServiceBaseUrl + "/getAttrTypeList.json",
method : "POST",
dataType : "json",
contentType : "application/json",
success : function(data){
attrTypes = data.attrType;
hospitalAttr = data.hospital;
dutyAttr = data.duty;
workAttr = data.work;
extraAttr = [];
if(data.extra!=undefined&&data.extra.length>0){
for(var i=0; i 0 ){
addedNodeCheck( e, child );
}
}
}
}
}
};
};
var rowNum = 0;
function resetRowNum(){
rowNum = 0;
}
function getNum(){
return ++rowNum;
}