/**
* 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 += '';
html += '
';
//轮播和card都只有一个item
if(record.items && record.items.length >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);
});