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); });