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:'<div layui-filter="referTree_toolbar_' + referFilter + '" class="layui-tree-toolbar" ></div><ul layui-filter="referTree_' + referFilter + '" id="referTree_' + referFilter + '" style="margin: 5px;"></ul>',
|
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);
|
});
|