layui.define(['layer','tree'],function(exports){
/**
* 参照树
* weidy@2018-03-16
*/
var ReferTree = function(){
this.defaultConfig = {
treeUrl:'/webReferController/referTree',//树的参照路径
valueField:'oid',//值的字段
textField:'name',//显示的字段
loadType:'node'
}
};
ReferTree.prototype.init = function(){
};
ReferTree.prototype.showReferDialog = function (referConfig){
//参照的接口
var filter = referConfig.filter,
name = referConfig.name,
title = referConfig.title,
valueInfo = ($webUtil.isNotNull(referConfig.text)?("已设置的值为[" +referConfig.text +"]"):'未设置值'),
isMuti = referConfig.isMuti,
target = referConfig.target,
value = referConfig.value,
text = referConfig.text;
var options = referConfig.options;
var me = this;
var referFilter = filter+"_" + name;
var referIndex = $webUtil.dialog({
title:title,
btn:['确定','取消'],
content:'
',
area:[(($webUtil.isNotNull(options.width) && options.width*1>1) ?options.width*1 : 500) +'px',
(($webUtil.isNotNull(options.height) && options.height*1>1) ?options.height*1 : 625) + 'px'],
btnBefore:valueInfo,
resizing:function(layero){
me.doResize(filter,name);
},
yes:function(index,layero){
//if(isMuti) {
var selectValue = me.getSelectValue(filter, name);
if(selectValue.allValues.length>500){
$webUtil.showErrorMsg("选择过多,选择数量不要超过500");
return false;
}else if(selectValue.allValues.length==0){
$webUtil.showErrorMsg("请选择数据");
return false;
}
if (selectValue) {
target.setValue(filter, name, selectValue.value, selectValue.rawValue, true,selectValue.allValues);
layer.close(referIndex);
}
//}else{
//layer.close(referIndex);
//}
},
success:function(layero){
me.showTree(filter,name,options,value,text,function(thisFilter,thisName,selectValue){
target.setValue(thisFilter,thisName,selectValue.value,selectValue.rawValue,true,selectValue.allValues);
layer.close(referIndex);
});
}
});
};
//显示
ReferTree.prototype.showTree=function(filter,name,options,value,rawValue,clickCallback){
var that = this;
options.singleClickCallback = clickCallback;
that.setConfig(filter,name,options);
if($('#referTree_' + filter + '_' + name).children().length>0){
layui.tree.clearCheckData(filter + '_' + name);
$('#referTree_' + filter + '_' + name).show();
}else{
var tree = layui.tree;
//layui.use('tree',function(){
var requestData = {};
if(options.extraParams){
requestData = options.extraParams;
}
var url = $webUtil.getValueFromObj(options,'url',that.defaultConfig.treeUrl);
var copyParam = ['btmType','lnType','toBtmType','textField','valueField','parentFieldName','parentValue','sort','order','isDirection','whereSql','isMuti','queryScheme','isQueryAllColumn','queryColumn','split','loadType','onlyLeaf','onlyLeafText','parentUsedField'];
var allOptions = {};
var tempDefaultConfig = {};
for(var key in that.defaultConfig){
tempDefaultConfig[key] = that.defaultConfig[key];
}
$.extend(allOptions,tempDefaultConfig,options);
for(var i= 0 ; i < copyParam.length ; i ++){
if(copyParam[i] == "btmType") {
requestData[copyParam[i]] = options['referBo'] || options['referType'];
}else if(copyParam[i] in options){
requestData[copyParam[i]] = options[copyParam[i]];
}
}
requestData['referBo'] = options['referBo'] || options['referType'];
requestData['selectAllLevel'] = (options.loadType == layui.tree.loadType.all?true:false);//true时后台会报错
if(requestData.isMuti =="true"){
requestData.muti =true;
}
if(requestData.isQueryAllColumn =="true"){
requestData.isQueryAllColumn = true;
}
if(options.useFormKey && options.formValues){
//使用表单上的字段来过滤
requestData['conditionMap["' + (options.paramForFormKey?options.paramForFormKey:options.useFormKey) + '"]'] = options.formValues[options.useFormKey];
}
//显示tree
var treeOptions = {
url:url,
//extraParams:requestData,
treeFilter:filter,
treeName:name,
requestType:options.requestType,
referSingleSelect:true,
showSearch:true,
loadType:options.loadType,
click:function(item,elem,options){
//that.doClick(item,elem,options);
//return false;
}
};
if(options.remoteSort) {
treeOptions.initSort = options.initSort;
treeOptions.remoteSort = options.remoteSort;
}
$.extend(treeOptions,allOptions);
treeOptions.extraParams = requestData;
if(options.rootParams){
treeOptions.rootParams = options.rootParams;
}
if(options.conditionParams){
treeOptions.conditionParams = options.conditionParams;
}
if(!treeOptions.conditionParams){
treeOptions.conditionParams ={};
}
if(options.where ) {
for (var key in options.where) {
treeOptions.conditionParams[key] = options.where[key];
}
}
if(options.treeExtandParams){
treeOptions.treeExtandParams = options.treeExtandParams;
}
if(options.data){//如果是固定数据的情况下
delete treeOptions.url;
treeOptions['nodes'] = options.data;
}
if(options.backPath){
treeOptions.backPath = options.backPath;
}
that.setConfig(filter,name,$.extend(tempDefaultConfig,options));
tree.init(filter + "_" + name,$('#referTree_' + filter + '_' + name),treeOptions);
//});
}
};
ReferTree.prototype.doClick = function(item,elem,options){
//处理点击事件
var that = this;
var filter = options.treeFilter;
var name = options.treeName;
var config = that.getConfig(filter,name);
var selectRecords = that.switchSelectData([item],config);
if(!selectRecords){
return false;
}
if(options.isMuti != "true" && options.isMuti != true){
if(options.singleClickCallback){
options.singleClickCallback(filter,name,selectRecords) ;
}
}
//参照的对象定义的
if(selectRecords && options.changeListener){
options.changeListener(filter,name,selectRecords.value,selectRecords.rawValue,selectRecords.allValues);
}
//获取值
return false;
};
ReferTree.prototype.setConfig=function(filter,name,options){
var that = this;
if(!that.referConfig){
that.referConfig = {};
}
that.referConfig[filter + "_" + name] = options;
};
ReferTree.prototype.getConfig=function(filter,name){
var that = this;
if(!that.referConfig){
that.referConfig = {};
}
if((filter + "_" + name) in that.referConfig){
return that.referConfig[filter + "_" + name];
}
};
ReferTree.prototype.getValueByField =function(item,field){
if(field.indexOf("attribute.")>=0){
return item.attributes[field.replace("attribute.","")];
}else{
return item.attributes[field] || item[field];
}
};
ReferTree.prototype.switchSelectData = function(data,config){
var that = this;
var value = "";
var rawValue = "";
var checkOnlyLeafPass = true;
layui.each(data,function(_index,item){
if(config.onlyLeaf && "leaf" in item){
if(item['leaf'] == false){
$webUtil.showErrorMsg(config.onlyLeafText?config.onlyLeafText:"只能选择叶子节点");
checkOnlyLeafPass = false;
return true;
}
}
value += that.getValueByField(item,config.valueField?config.valueField:that.defaultConfig.valueField) + ",";
var tempRaw = [];
if(!config.textField){
config.textField = that.defaultConfig.textField;
}
var textFieldArray = config.textField.split(",");
for(var i = 0 ; i < textFieldArray.length ; i ++){//显示的字段可能有多个
if($webUtil.isNotNull(textFieldArray[i])){
tempRaw.push(that.getValueByField(item,textFieldArray[i]));
}
}
rawValue += tempRaw.join(" ") + ",";
});
if(!checkOnlyLeafPass){
return false;
}
if($webUtil.endWith(value,",")){
value = value.substring(0,value.length - 1);
}
if($webUtil.endWith(rawValue,",")){
rawValue = rawValue.substring(0,rawValue.length -1);
}
var selectValue = {
value : value,
rawValue : rawValue,
allValues : data
};
return selectValue;
};
ReferTree.prototype.getSelectValue = function(filter,name){
var that = this;
var tree = layui.tree;
var config = that.getConfig(filter,name);
var selectValue = {};
var checkData = [tree.getSelectNode(filter +"_" +name )];
if(config.isMuti){
checkData = tree.getAllCheckData(filter +"_" +name );
}
if(checkData.length>0){
return that.switchSelectData(checkData,config);
}else{
return {allValues:[]};
}
};
ReferTree.prototype.doResize = function(filter,name){
};
ReferTree.prototype.destory = function(filter,name){
//销毁
var that = this;
if($('#ReferTree_' + filter + '_' + name)){
$('#ReferTree_' + filter + '_' + name).remove();
}
if(!that.referConfig){
that.referConfig = {};
}
if((filter + "_" + name) in that.referConfig){
delete that.referConfig[filter + "_" + name];
}
//layui.tree.destory(filter + '_' + name);
};
var referTree = new ReferTree();
exports('vciWebReferTree',referTree);
});