2016-12-12 23:45:55 +08:00

219 lines
9.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function ($) {
/**
* 创建表格HTML字符串
* 1、严重依赖Bootstrap的样式
* 2、严格的Json数据格式
* 3、如果有右侧操作按钮的话会默认自动加入{field:"action",info:"操作"}所以字段名不支持使用actionaction是关键字
* @param tableObj
* @returns {string}
*/
$.buildTable = function ( tableObj ) {
var tableHtml = '<div class="box box-primary" id="tableBox"><div class="box-body">';
if( tableObj.rightButton && tableObj.rightButton.length ){
tableObj.header.push({field:"action",info:"操作"});
}
if( tableObj.topButton && tableObj.topButton.length ){
tableHtml += buildTopButton( tableObj );
}
tableHtml += '<table class="table table-bordered"> <tbody>';
if( tableObj.header && tableObj.header.length ){
tableHtml += buildHeader( tableObj );
}
if( tableObj.data && tableObj.data.length ){
tableHtml += buildDataList( tableObj );
}else{
tableHtml += buildEmptyTable( tableObj );
}
tableHtml += '</tbody></table></div></div>';
return tableHtml;
};
/**
* 创建表格头部分
* @param tableObj
* @returns {string}
*/
function buildHeader( tableObj ) {
var headerHtml = '<tr><th style="width: 10px"><input type="checkbox"></th>';
$.each(tableObj.header, function (index, value) {
headerHtml += '<th>'+ value.info +'</th>';
});
headerHtml += '</tr>';
return headerHtml;
}
/**
* 创建顶部功能按钮
* @param tableObj
* @returns {string}
*/
function buildTopButton( tableObj ) {
var topHtml = '<div class="btn-group margin-bottom">';
if( tableObj.topButton ){
$.each(tableObj.topButton, function(index, value) {
topHtml += createButton(value);
});
}
topHtml += '</div>';
return topHtml;
}
/**
* 创建数据部分
* @param tableObj
* @returns {string}
*/
function buildDataList( tableObj ) {
var paramStr, dataListHtml = '';
$.each(tableObj.data, function (dataIndex, dataValue) {
dataListHtml += '<tr><td><input type="checkbox"></td>';
$.each(tableObj.header, function (fieldIndex, fieldValue) {
var fieldName = fieldValue.field;
if( fieldName == 'action' ){
dataListHtml += '<td><div class="btn-group">';
$.each(tableObj.rightButton, function(buttonIndex, buttonValue) {
dataListHtml += createButton(buttonValue, dataValue);
});
dataListHtml += '</div></td>';
}else{
if( tableObj.typeRule[fieldName] ){
var rule = tableObj.typeRule[fieldName];
var styleList ,detailInfo, classAttr = '';
switch (rule.module){
case 'label':
if( rule.rule[dataValue[fieldName]] ){
styleList = rule.rule[dataValue[fieldName]];
detailInfo = prepareInfo( styleList, dataValue, fieldName);
dataListHtml += '<td><span class="'+styleList['class']+'">'+detailInfo+'</span></td>';
}else{
dataListHtml += '<td style="color:red;">' + dataValue[fieldName] + '</td>';
}
break;
case 'a':
styleList = rule.rule;
detailInfo = prepareInfo( styleList, dataValue, fieldName);
paramStr = prepareParamStr( styleList, dataValue );
if( styleList['class'] ){
classAttr = 'class="'+ styleList['class'] +'"';
}
dataListHtml += '<td><a '+ classAttr +' url="'+styleList['href']+'" data="'+paramStr+'">' + detailInfo + '</a></td>';
break;
case 'date':
dataListHtml += '<td>' + $.formatDate(dataValue[fieldName]) + '</td>';
break;
case 'icon':
if( rule.rule[dataValue[fieldName]] ){
styleList = rule.rule[dataValue[fieldName]];
dataListHtml += '<td><i class="'+styleList['class']+'"></i></td>';
}else{
dataListHtml += '<td style="color:red;">' + dataValue[fieldName] + '</td>';
}
break;
case 'auth':
if( dataValue['url'] ){
if( dataValue[fieldName] && dataValue[fieldName] != 0 ){
dataListHtml += '<td><input class="auth" checked type="checkbox" url="'+ rule.rule['url'] +'" name="'+fieldName+'" ></td>';
}else{
dataListHtml += '<td><input class="auth" type="checkbox" url="'+ rule.rule['url'] +'" name="'+fieldName+'" ></td>';
}
}
break;
case 'listValue':
if( rule.rule[dataValue[fieldName]] ){
styleList = rule.rule[dataValue[fieldName]];
dataListHtml += '<td>'+ styleList +'</td>';
}else{
dataListHtml += '<td style="color:red;">' + dataValue[fieldName] + '</td>';
}
break;
}
}else{
dataListHtml += '<td>' + dataValue[fieldName] + '</td>';
}
}
});
dataListHtml += '</tr>';
});
return dataListHtml;
}
/**
* 创建按钮
* @param buttonValue 按钮属性对象
* @param dataValue 当前行数据对象
* @returns {string}
*/
function createButton( buttonValue, dataValue ) {
var paramStr = '', buttonStr = '', iconStr = '';
if( buttonValue.confirm ){
buttonValue.class += ' confirm';
}else{
buttonValue.class += ' refresh';
}
if( dataValue ){
paramStr = prepareParamStr( buttonValue, dataValue );
}
if( buttonValue.icon ){
iconStr = '<i class="'+buttonValue.icon+'"></i>';
}
if( buttonValue.show ){
if( dataValue[buttonValue.show[0]] == buttonValue.show[1] ){
buttonStr = '<button url="'+buttonValue.href+'" data="'+paramStr+'" type="button" class="btn '+buttonValue.class+'">'+ iconStr + ' ' +buttonValue.info+'</button>';
}
}else{
buttonStr = '<button url="'+buttonValue.href+'" data="'+paramStr+'" type="button" class="btn '+buttonValue.class+'">'+ iconStr + ' ' +buttonValue.info+'</button>';
}
return buttonStr;
}
/**
* 预处理显示信息
* @param styleList 当前字段对应的规则对象
* @param dataValue 当前行数据对象
* @param fieldName 需要处理的数据的字段名
* @returns {*}
*/
function prepareInfo( styleList, dataValue, fieldName ) {
var detailInfo;
if( styleList['info'] && styleList['info'].length ){
detailInfo = styleList['info'];
}else{
detailInfo = dataValue[fieldName];
}
return detailInfo;
}
/**
* 预处理参数信息
* @param styleList 当前字段对应的规则对象
* @param dataValue 当前行数据对象
* @returns {string}
*/
function prepareParamStr( styleList, dataValue ) {
var paramStr = '';
if( styleList['param'].length ){
$.each(styleList['param'], function (paramIndex, paramValue) {
paramStr += paramValue + '=' + dataValue[paramValue] + '&';
});
paramStr = paramStr.substring(0, paramStr.length-1);
}
return paramStr;
}
/**
* 创建空数据表
* @param tableObj
* @returns {string}
*/
function buildEmptyTable( tableObj ) {
var emptyHtml = '<tr>';
var spanNum = tableObj.header.length + 1;
emptyHtml += '<td colspan="'+spanNum+'" class="builder-data-empty">';
emptyHtml += '<div class="am-text-center no-data" >';
emptyHtml += '<i class="fa fa-cogs"></i> 暂时没有数据<br>';
emptyHtml += '<small> 本系统由<b> '+ COMPANY_NAME +' </b>开发维护</small>';
emptyHtml += '</div></td></tr>';
return emptyHtml;
}
})(jQuery);