// 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;i2 ){ 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"; 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); }); } }