/**
* 根据module的定义和schemeOrderId返回此列表方案的多层表头定义
*/
getColumnsWithMult : function(module, schemeOrderId) {
var scheme = module.getGridScheme(schemeOrderId); // 当前选中的gridScheme
// tf_orderid是二位数的,是最顶层,4位数的是第二层
for (var i = scheme.tf_schemeGroups.length - 1; i >= 0; i--) {
var sg = scheme.tf_schemeGroups[i];
if (('' + sg.tf_gridGroupOrder).length > 2) {
// 不是二位数,那么就不是顶层,将非顶层放在一块,看看能不能找到他的直接父层。
// 如果找到了,就把自己加在父层的 columns 里面
var subOrder = '' + sg.tf_gridGroupOrder;
for (var j = i - 1; j >= 0; j--) {
var parent = scheme.tf_schemeGroups[j];
var parentOrder = '' + parent.tf_gridGroupOrder;
if (parentOrder.length == subOrder.length - 2
&& subOrder.substring(0, parentOrder.length) == parentOrder) {
// 如果是直接的父级
if (!parent.columns)
parent.columns = [];
parent.columns.unshift(scheme.tf_schemeGroups.pop());
break;
}
}
}
}
var columns = this.getLockedLeftColumns(module);
// 递归生成grid 的 columns
return columns.concat(this.addGroupAndField(module,
scheme.tf_schemeGroups));
},
/**
* 生成指定数组定义的列表组和列表,这是一个递归调用的函数。
*/
getGroupAndField : function(module, groups) {
var result = [];
for ( var i in groups) {
var sg = groups[i];
// 是否需要分组
var isgroup = sg.tf_isShowHeaderSpans;
var group = {
gridGroupId : sg.tf_gridGroupId,
text : sg.tf_gridGroupName,
locked : sg.tf_isLocked,
columns : []
};
// 加入分组下的字段
for ( var j in sg.tf_groupFields) {
var gf = sg.tf_groupFields[j];
var field = this.createColumn(module, sg, gf);
if (field)
if (isgroup) {
this.canReduceTitle(group, field);
group.columns.push(field);
} else
result.push(field);
}
if (isgroup) {
result.push(group);
}
// 本分组下如果还有下层分组,则递归调用本函数
if (sg.columns) {
var subColumns = this.getGroupAndField(module, sg.columns);
for ( var k in subColumns)
if (isgroup)
group.columns.push(subColumns[k])
else
result.push(subColumns[k])
}
}
return result;
},
/**
* 建立一个列
*/
createColumn : function(module, group, groupfield) {
var fd = module.getFieldDefine(groupfield.tf_fieldId);
var field;
if (fd) {
if (fd.tf_isHidden)
return null;
field = this.getColumn(groupfield, fd, module);
} else { // 如果不是本模块的基本字段,那么在附加字段中找(可能是父模块,祖父模块的字段,或者子模块的聚合字段)
var fd = module.getAdditionFieldDefine(groupfield.tf_fieldId);
field = this.getColumn(groupfield, fd, module);
if (field.dataIndex.search('C_') == 0) {
field.moduleName = field.dataIndex.slice(2);
field.renderer = this.childCountFieldRenderer;
}
}
field.locked = group.tf_isLocked || groupfield.tf_isLocked;
// 如果列显示字段有附加的属性,如renderer 可以放在这里加入进去
if (groupfield.tf_otherSetting) {
try {
eval('Ext.apply(field,{' + groupfield.tf_otherSetting + '})');
} catch (err) {
console.log(groupfield.tf_otherSetting + '解析出错。');
}
}
return field;
},
getLockedLeftColumns : function(module) {
var columns = [];
// 是否有附件,有附件则加入附件按钮
if (module.tf_hasAttachment
&& module.tf_userRole.tf_attachmentBrowse)
columns.push({
locked : true,
xtype : 'attachmentnumbercolumn'
});
// 是否模块具有审核功能
if (module.tf_hasAuditing) {
columns.push({
locked : true,
xtype : 'auditingactioncolumn'
});
}
// 是否模块具有审批功能
if (module.tf_hasApprove) {
columns.push({
locked : true,
xtype : 'approveactioncolumn'
});
}
// 是否模块具有支付功能
if (module.tf_hasPayment) {
columns.push({
locked : true,
xtype : 'payoutactioncolumn'
});
}
// 如果是附件模块,加一个可以预览的列
if (module.tf_moduleName == '_Attachment') {
columns
.push({
dataIndex : 'tf_attachmentId',
text : '预览',
align : 'center',
menuDisabled : true,
sortable : true,
width : 56,
resizable : false,
renderer : function(val, rd, model) {
if (model.get('tf_filename'))
return '<img height="16" width="16" src="attachment/preview.do?id='
+ model.get('tf_attachmentId') + '" />';
else
return '<img height="16" width="16" src="" />';
}
});
}
// 如果模块有记录icon,则加入记录字段icon列
if (module.tf_hasRecordIcon) {
columns.push({
xtype : 'recordiconcolumn'
})
}
return columns;
}常规功能和模块自定义系统 (cfcmms)—020自定义grid方案(4改成任意层表头)
原文:http://blog.csdn.net/jfok/article/details/49947065