/** * Created by weidy on 2018/5/3. 主页,与vciWebPortal的区别是,portal是整个架构,这个是其中的主页 */ layui.define(['layer'],function(exports){ /** * 与之前easyui的portal,或者extjs的portal有区别的地方是,这个主页里的挂件不支持拖拽 * 实现方式也相同,先确定有多少列,然后显示每列中的挂件 * 主页通常一个系统只有一个,因此这里不再添加filter的方式 */ var Home = function(){ this.styleConfig = { filter:'layui-index-home', padding:'5px',//每个元素之间的间隙 colspace:15//每一列的偏移量,支持1,3,5,8,10,12,15,18,20,22,28,30;也可以在layui.css里定义 }; this.config = { requestDataType:'ajax',//请求数据的类型,提供ajax,data两种,data表示直接设置列 ajaxUrl:'',//异步请求的路径 ajaxWhere:{},//异步请求的附加属性 backDefineColumns:12//后台定义的列是按12份还是10份的;10份是为了兼容以前的平台 }; this.backPath = configData.compatibility?path:configData.frameworkPath; this.MOUDLENAME = "vciWebPortalHome"; this.data = [];//如果是数据的时候 this.columns = [];//最终获取到列的信息 this.needInitItem = []; this.tabItems = {}; }; Home.prototype.setConfig = function(config){ var that = this; $.extend(that.config,config); }; Home.prototype.setData = function(data){ var that = this; that.data = data; }; Home.prototype.getContent = function(){ //获取初始的html,用于兼容portal中的选项卡打开 var that = this; return '
'; }; Home.prototype.init = function(){ var that = this; //先判断是哪种方式 if('ajax' == that.config.requestDataType.toLowerCase()){ //异步请求方式 //服务端必须返回的是JSON对象格式,JSON对象包含success,msg,obj属性 if(layui.util.isNull(that.config.ajaxUrl)){ $webUtil.showErrorMsg("ajaxUrl没有设置值"); return false; } $webUtil.post(that.config.ajaxUrl,that.config.ajaxWhere,function(result){ if(result.success){ that.columns =result.obj; that.showColumns(); }else{ $webUtil.showErrorMsg(result.msg); } },function(xhr,error){},that.backPath,false); }else{ //直接设置数据 that.columns = that.data; that.showColumns(); } }; Home.prototype.showColumns = function(){ //显示列 var that = this,root = $('[layui-filter="' + that.styleConfig.filter + '"]'); //先添加一个完成的行 var row = $('
'); root.html(row); var colHtml = ""; layui.each(that.columns,function(_index,record){ /*** * layui原生支持了将一行的内容切分成了12份,而不是常规的10份。主要是其适配平板,手机和桌面 * width--宽度,最大为backDefineColumns * 高度是自动的,不能设置,是在具体的挂件里设置的 * id--列的主键 * portlets 里面的挂件 */ if(layui.util.isNull(record.id)) { record.id = layui.util.uuid(); } if(that.config.backDefineColumns == 10){//如果后台是按10来设置的,那得转化一下 record.width = Math.ceil(record.width*1/10*12);//向上进1 } colHtml += that.getColumnHtml(record); }); row.html(colHtml); that.initItems(); that.bindListeners(); try{ if(respond){//IE9下刷新格栅 respond.update(); } }catch (e){ } }; Home.prototype.getColumnHtml = function(column){ var that = this; var html = ""; if(layui.util.isNull(column.id)) { column.id = layui.util.uuid(); } if(that.config.backDefineColumns == 10){//如果后台是按10来设置的,那得转化一下 column.width = Math.ceil(column.width*1/10*12);//向上进1 } html += '
'; if(column.children && column.children.length>0){ //说明还包含了子列的 html += '
'; layui.each(column.children,function(_index,child){ if(child.enable) { html += that.getColumnHtml(child); } }); html += '
'; }else if(column.portlets && column.portlets.length >0){ //说明直接显示挂件了 html += that.getPortletHtml(column.portlets) ; } html += '
'; return html; }; Home.prototype.getPortletHtml = function(portlets){ var that = this; /** * 获取挂件的html * portlet */ var html = ""; if(portlets){ layui.each(portlets,function(_index,record){ /** * id 每一个挂件的主键 * title 挂件的名称 * type 挂件的类型 card,tab * centerUrl 跳转到功能的url * info 提示信息 * items 具体展示的对象 */ if(layui.util.isNull(record.id)) { record.id = layui.util.uuid(); } html += '
'; if('tab'!= record.type){ //不是选项卡的,都是按card来执行 html += '
' + record.title ; if(layui.util.isNotNull(record.centerUrl)){ html +=''; } if(layui.util.isNotNull(record.info)){ html += ''; }//标题 html += '
'; html += '
0){ /** * item对象 * id 主键 * title 名称,用于具体的操作 * type 类型 layui,url, * url */ if("url" == record.type){ html += ''; }else{ var sourceData = {}; var url = record.items[0].url; if($webUtil.isNotNull(url)) { if (url.indexOf("?") > -1) { var params = url.substring(url.indexOf("?") + 1); url = url.substring(0, url.indexOf("?")); var paramsArray = params.split("&"); for (var i = 0; i < paramsArray.length; i++) { var preParam = paramsArray[i].split("="); sourceData[preParam[0]] = preParam[1]; } } that.needInitItem.push({parentId: record.id, items: record.items[0]}); } } } html += '
'; }else{ html += '
'; that.tabItems[record.id] = record.items; } html += '
'; }); } return html; }; Home.prototype.initItems = function(){ var that = this; if(that.needInitItem && that.needInitItem.length > 0){ layui.each( that.needInitItem,function(_index,record){ var sourceData = {}; var url = record.items.url; if($webUtil.isNotNull(url)){ if(url.indexOf("?") > -1){ var params = url.substring(url.indexOf("?")+1); url = url.substring(0,url.indexOf("?")); var paramsArray = params.split("&"); for(var i = 0 ; i < paramsArray.length ; i ++){ var preParam =paramsArray[i].split("="); sourceData[preParam[0]] = preParam[1]; } } layui.use([url],function(){ var newTabClass = layui[url]; newTabClass.id = record.items.id; newTabClass.sourceData = sourceData; $('[layui-index-home-data-id="' + record.parentId + '"] .layui-card-body').append(newTabClass.getContent()); newTabClass.init(); }); } }); } if(that.tabItems){ var element = layui.element; for(var tabId in that.tabItems){ var record = that.tabItems[tabId]; layui.each(record,function(_itemIndex,_item){ var sourceData = {}; var url =_item.url; if($webUtil.isNotNull(url)){ if(url.indexOf("?") > -1) { var params = url.substring(url.indexOf("?") + 1); url = url.substring(0, url.indexOf("?")); var paramsArray = params.split("&"); for (var i = 0; i < paramsArray.length; i++) { var preParam = paramsArray[i].split("="); sourceData[preParam[0]] = preParam[1]; } } layui.use([url],function(){ var newTabClass = layui[url]; newTabClass.id = item.id; newTabClass.sourceData = sourceData; element.tabAdd(tabId, { title:_item.title, id:_item.id, item:newTabClass }); }); } }); } } }; Home.prototype.bindListeners = function(){ var that = this; $(".layui-vci-portlet-center").click(function(){ var thisIcon = $(this); var id = thisIcon.attr("lay-center-id"); var title = thisIcon.attr("lay-center-title"); var url = thisIcon.attr("lay-center-url"); portal.showTabByMenu(id,{ id:id, text:title, bsUrl:url }); }); }; var home = new Home(); exports(home.MOUDLENAME,home); });