//
var TablePermission = {
init : function(){
TablePermission.handleMainTableRequest();
if(typeof permission !="undefined"){
TablePermission.handleSubTable(permission);
}
TablePermission.handlePerTag();//处理表单中的权限控制字段
},
/**
* 主表的权限补充(必埴)
*
*/
handleMainTableRequest:function(){
//主表的附件必埴验证问题
$("div[name=div_attachment_container]").each(function() {
var div_me=$(this);
if(div_me.attr("right")!='b') return true;
$("a.link",div_me).each(function(){
var me=$(this);
var validRule = me.attr("validate");
if ( validRule != null && 'undefined' != validRule.toLowerCase() && validRule.length>2 ){
var json = eval('(' + validRule + ')');
if(!json.required){
var jsonStr = validRule.substring(0, validRule.lastIndexOf('}'));
jsonStr +=",'required':true}"; //加上必填
me.attr("validate",jsonStr);
}
}else{
me.attr("validate","{'required':true}"); //必填
}
});
});
},
/**
* 开始处理子表权限
* 这里简单说一下当前我们权限整个过程
* 首先在展示表单时会读取表单中保存的template,然后利用freemaker来将其跟数据结合
* 主表字段在这次结合时会连同权限一起解析出来,而子表字段只会解析出数据并不会处理权限,而是交给页面的js来处理
* (ps:俺已经试过在freemaker也处理掉子表字段的权限,但确实繁琐和艰难,有意者可以自行尝试-。-)
*
* permission: 参数拼装可以参考BpmFormHandlerService.java中的obtainHtml
*/
handleSubTable : function(permission){
var subFieldJson =permission["subFieldJson"];//子表新版本字段权限
var subTableShow =permission["subTableShow"];
$('div[type=subtable]').each(function() {
//子表
var table = $(this);
var tableName = table.attr('tableName').toLowerCase();
table.attr('tableName',tableName);
table.attr('right','w');//子表非隐藏状态,则需要给编辑或必填权限才能显示
//是否 只读 编辑 隐藏 决定子表的权限
for(var key in subTableShow){
var tableShow=subTableShow[key];
if(tableName!=key.toLowerCase()) continue;
TablePermission.handleSubTableShow(table,tableShow);
}
//处理子表字段权限
for(var key in subFieldJson){
var json=subFieldJson[key];
if(tableName!=key.toLowerCase()) continue;
for(var k in json){
TablePermission.handleSubTableField(table,k,json[k],key);
}
}
});
},
/**
* 解析一个子表show权限
* @param tableShow
* @returns
*/
handleSubTableShow : function(table,show){
if(show['y']== 'true'){//隐藏的话下面的操作就没必要了
table.attr('show','false');
table.attr('right','y'); //子表编辑功能
table.remove();
return;
}else{
table.attr('show','true'); //子表表单可见
}
if(show['b']== 'true'){//必填
table.attr('right','b'); //子表编辑功能或者必填
}
var removeItemCount=0;
var menu = CustomForm.tables[table.attr("tablename")].menu;
if(!menu) return;
if(show['addRow']== 'false'){//不可新增
$("a.link",table).remove();//去除所有a.link的按钮
$("a.extend",table).each(function(){ // 导入导出按钮的特殊处理
var extend=$(this);
if(typeof extend.attr("importexcel") != "undefined"
||typeof extend.attr("exportexcel") != "undefined"){
extend.remove();
}
});
var items=[];
for(var i=0,itemIndex=1;i
2 ){
var jsonObjArray = eval('(' + jsonStr + ')');
for(var j =0,jsonObj;jsonObj=jsonObjArray[j++];){
var fileds = jsonObj.fields;
for ( var i = 0; i < fileds.length; i++) {
var targetArr = fileds[i].target;
for ( var k = 0,target;target=targetArr[k++];){
var filed =target.split("-")[1];
var filedName = "s:"+tableName+":"+filed;
if(filedName==name){
extend.remove(); //只读时,删除(可能会有多个一样的)
break;
}
}
}
}
}
});
//处理其它
$("input:visible,textarea:visible,select:visible",table).each(function(){
var me=$(this);
if(name.toLowerCase()!=me.attr('name').toLowerCase()) return true; //即是 continue;
me.attr("right",right);
var isSelect=me.is("select");
var isTextarea=me.is("textarea");
var isCheckboxOrRadio = false; //单选或者复选
var type = me.attr("type"); //标签种类
if(type=="checkbox"||type=="radio"){
isCheckboxOrRadio = true;
}
var val ='';
var validRule = me.attr("validate");
if ( validRule && 'undefined' != validRule.toLowerCase() ){
var json = eval('(' + validRule + ')');
if(json.isWebSign){
var lablename = me.attr("lablename");
if(isSelect){
val = '';
}else if(isTextarea){
val = ''
}else{
val = '';
}
}
}
if(isSelect){
val += CustomForm.selectValue(me);
me.before(val);
me.remove();
}else if(isCheckboxOrRadio){
me.attr("disabled","disabled");
}else{
val += me.val();
var refid=me.attr("refid");
if(typeof(refid)!=undefined && refid!=null&&refid!=''){
var refids=me.prev("input[name='"+refid+"']").val();
var linkType=me.attr("linktype");
var tempval="
";
var nametemp = new Array();
var str = me.val();
if(typeof(str)!=undefined && str!=null&&str!=''){
nametemp = str.split(",");
}
if(refids){
var id=refids.split(",");
for(var i=0;i"+nametemp[i]+" ";
tempval+=""+nametemp[i]+"";
}
}else{
for(var i=0;i"+nametemp[i]+"";
tempval+=""+nametemp[i]+"";
}
}
tempval+="
";
val = tempval;
}
//替换 /n 为
if(val) val = val.replace(/\n/g," ");
me.before(val);
me.remove();
}
});
}
if(right=="b"){
$("input:visible,textarea:visible,select:visible,a:visible",table).each(function(){
var me=$(this);
me.attr("right",right);
var isSelect=me.is("a"); //这个一般情况是子表的附件上传功能的 链接必填问题
var objName = "";
if(isSelect){
objName = me.attr('field');
}else{
objName = me.attr('name');
}
if(name!=objName) return true;
var validRule = me.attr("validate");
if ( validRule != null && 'undefined' != validRule.toLowerCase() && validRule.length>2 ){
var json = eval('(' + validRule + ')');
if(!json.required){
var jsonStr = validRule.substring(0, validRule.lastIndexOf('}'));
jsonStr +=",\'required\':true}"; //加上必填
me.attr("validate",jsonStr);
}
}else{
me.attr("validate","{\'required\':true}"); //必填
}
});
}
},
handlePerTag : function(){
$("[permission]").each(function(){
var expr = $(this).attr("permission");
try{
var b = eval(expr);
if(!b){
$(this).remove();
}
}catch(e){
}
});
//另外处理一下子表row
$('div[type=subtable]').each(function() {
var row=$($(this).data("row"));
row.find("[permission]").each(function(){
var expr = $(this).attr("permission");
try{
var b = eval(expr);
if(!b){
$(this).remove();
}
}catch(e){
}
});
$(this).data("row",row[0].outerHTML);
});
}
}