diff --git a/popup扩展以支持参数过滤.html b/popup扩展以支持参数过滤.html new file mode 100644 index 00000000..d9491d1f --- /dev/null +++ b/popup扩展以支持参数过滤.html @@ -0,0 +1,610 @@ + + +
+本篇对总jeecg popup的实现和注意事项做一个简要说明,并进行了功能的扩展,可供参考、使用。
+onclick="popupClick(this,'ID,标准编码,标准名称,方法名称','methodid,standardCode,standardName,methodName','lims_p_method')" +
popupClick定义在curdtools.js中。
+typeof(windowapi) == 'undefined'
+windowapi = frameElement.api,一般情况下都是defined了的;
指定了字典表字段,tablefield != "" && tablefield != null
+如果没有指定字典(报表)中的字段,则报表中的字段name同目标字段;
+项目中,字典用在多处,一般需要指定;
+(对应数据库字段不为空的情况下,根据表单中字典TEXT的值来取popup的值)
inputfield.length>1
+(对应数据库字段为空的情况下并且字典CODE传入多个值时,根据表单中字典CODE的值从popup中来取值;
+对应数据库字段为空的情况下并且字典CODE传入一个值时,根据表单中字典TEXT的值从popup中来取值)
str.indexOf("undefined")==-1
+如果在字典中获取不到该值,则将目标字段置为空字符串;
+此处要注意,报表中name是小写的,不论online设计中是否大写;
inputs.length==1
+是否是单选,列表中指定name,可以获取多条记录,触发popup,选择多条字典值,更新多条记录的值
对比“报表”功能的请求地址:
+http://localhost/labsharp/cgReportController.do?list&id=lims_ps_method_testid&testid=4028e381646d5a7201646d72ceda0004
+
对比两者的Freemarker模板:
+/org/jeecgframework/web/cgreport/engine/core/cgreportlist.ftl
+/org/jeecgframework/web/cgreport/engine/core/cgreportlistpopup.ftl
+
查找Freemarker中dataGrid的数据加载url:
+url:'cgReportController.do?datagrid&configId=${config_id}${config_params}'
+
两者调用的是同一个action,即popup支持参数就差一哆嗦了。
+popupClick添加pparams参数;
+拼接pparams参数到popup Action;
function popupClick(pobj,tablefield,inputnames,pcode,pparams) {} + +var contenturl = "url:cgReportController.do?popup&id="+pcode; +if(pparams != null && pparams !="" && pparams != "undefined"){ + contenturl += pparams; +} +
onclick="popupClick(this,'id,标准编码,标准名称,方法名称','methodid,standardCode,standardName,methodName','lims_ps_method_testid','&testid=${mainId}')" +
代码中mainId为父子表中的testid。
+Online报表定义如下,jeecg的红色注释可以去掉了。
+
码字不易,如果对您有所帮助,请赞一个,谢谢!
+
/** + * object: pobj当前操作的文本框. + * tablefield:对应字典TEXT,要从popup报表中获取的字段. + * inputnames:对应字典CODE,当前需要回填数据的文本框名称. + * pcode:动态报表的code + * pparams:动态报表的参数和值&p1=v1&p2=v2格式 + */ +function popupClick(pobj,tablefield,inputnames,pcode,pparams) { + $.dialog.setting.zIndex = getzIndex(false); + + if(inputnames==""||pcode==""){ + alert("popup参数配置不全"); + return; + } + var contenturl = "url:cgReportController.do?popup&id="+pcode; + if(pparams != null && pparams !="" && pparams != "undefined"){ + contenturl += pparams; + } + if(typeof(windowapi) == 'undefined'){ + $.dialog({ + content: contenturl, + //zIndex: getzIndex(), + lock : true, + title:"选择", + width:800, + height: 400, + cache:false, + ok: function(){ + iframe = this.iframe.contentWindow; + var selected = iframe.getSelectRows(); + if (selected == '' || selected == null ){ + alert("请选择"); + return false; + }else { + //对应数据库字段不为空的情况下,根据表单中字典TEXT的值来取popup的值 + if(tablefield != "" && tablefield != null){ + var fields = tablefield.split(","); + var inputfield = inputnames.split(","); + for(var i1=0;i1<fields.length;i1++){ + var str = ""; + $.each( selected, function(i, n){ + if (i==0) + str+= n[fields[i1]]; + else{ + str+= ","; + str+=n[fields[i1]]; + } + }); + var inputname = $(pobj).attr("name"); + var inputs = inputname.split("."); + //判断传入的this格式是否为 "AA[#index#].aa"的形式 + if(str.indexOf("undefined")==-1){ + if(inputs.length>1){ //update--begin--author:scott date:20171031 for:TASK #2385 online和代码生成器 一对多行popup多字段赋值问题解决----------- + var inpu = inputs[0]+"."+inputfield[i1]; + + $("input[name='"+inpu+"']").val(str); + }else{ + $("input[name='"+inputfield[i1]+"']").val(str); + } + }else{ + if(inputs.length>1){ + + var inpu = inputs[0]+"."+inputfield[i1]; + + $("input[name='"+inpu+"']").val(""); + }else{ + $("input[name='"+inputfield[i1]+"']").val(""); + } + } + } + }else{ + //对应数据库字段为空的情况下并且字典CODE传入多个值时,根据表单中字典CODE的值从popup中来取值 + var inputfield = inputnames.split(","); + if(inputfield.length>1){ + for(var i1=0;i1<inputfield.length;i1++){ + var str = ""; + $.each( selected, function(i, n){ + if (i==0) + str+= n[inputfield[i1]]; + else{ + str+= ","; + str+=n[inputfield[i1]]; + } + }); + var inputname = $(pobj).attr("name"); + var inputs = inputname.split("."); + if(str.indexOf("undefined")==-1){ + if(inputs.length>1){ + var inpu = inputs[i1]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(str); + }else{ + $("input[name='"+inputfield[i1]+"']").val(str); + } + }else{ + if(inputs.length>1){ + var inpu = inputs[i1]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(""); + }else{ + $("input[name='"+inputfield[i1]+"']").val(""); + } + } + } + }else{ + //对应数据库字段为空的情况下并且字典CODE传入一个值时,根据表单中字典TEXT的值从popup中来取值 + var str = ""; + $.each( selected, function(i, n){ + if (i==0) + str+= n[inputfield]; + else + str+= ","+n[inputfield]; + }); + var inputname = $(pobj).attr("name"); + var inputs = inputname.split("."); + if(str.indexOf("undefined")==-1){ + if(inputs.length>1){ + + var inpu = inputs[0]+"."+inputfield[i1]; + + $("input[name='"+inpu+"']").val(str); + }else{ + $("input[name='"+inputfield+"']").val(str); + } + }else{ + if(inputs.length>1){ + + var inpu = inputs[0]+"."+inputfield[i1]; + + $("input[name='"+inpu+"']").val(""); + }else{ + $("input[name='"+inputfield+"']").val(""); + } + } + } + } + return true; + } + + }, + cancelVal: '关闭', + cancel: true // 为true等价于function(){} + }); + }else{ + $.dialog({ + content: contenturl, + //zIndex: getzIndex(), + lock : true, + title:"选择", + width:800, + height: 400, + parent:windowapi, + cache:false, + ok: function(){ + iframe = this.iframe.contentWindow; + var selected = iframe.getSelectRows(); + if (selected == '' || selected == null ){ + alert("请选择"); + return false; + }else { + //对应数据库字段不为空的情况下,根据表单中字典TEXT的值来取popup的值 + if(tablefield != "" && tablefield != null){ + var fields = tablefield.split(","); + var inputfield = inputnames.split(","); + //循环所有的字段 + for(var i1=0;i1<fields.length;i1++){ + var str = ""; + //循环所有选中的行 + $.each( selected, function(i, n){ + if (i==0){ + str+= n[fields[i1].toLowerCase()]; + } + else{ + str+= ","; + str+=n[fields[i1]]; + } + }); + var inputname = $(pobj).attr("name"); + var inputs = inputname.split("."); + //判断传入的this格式是否为 "AA[#index#].aa"的形式 + if(str.indexOf("undefined")==-1){ + if(inputs.length>1){//多选 + var inpu = inputs[0]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(str); + }else{//单选 + $("input[name='"+inputfield[i1]+"']").val(str); + } + }else{//没有从弹窗中获取到值,则将表单中的字段值为空 + if(inputs.length>1){//多选 + var inpu = inputs[0]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(""); + }else{//单选 + $("input[name='"+inputfield[i1]+"']").val(""); + } + } + } + }else{ + //对应数据库字段为空的情况下并且字典CODE传入多个值时,根据表单中字典CODE的值从popup中来取值 + var inputfield = inputnames.split(","); + if(inputfield.length>1){ + for(var i1=0;i1<inputfield.length;i1++){ + var str = ""; + $.each( selected, function(i, n){ + if (i==0) + str+= n[inputfield[i1]]; + else{ + str+= ","; + str+=n[inputfield[i1]]; + } + }); + var inputname = $(pobj).attr("name"); + var inputs = inputname.split("."); + if(str.indexOf("undefined")==-1){ + if(inputs.length>1){ + var inpu = inputs[i1]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(str); + }else{ + $("input[name='"+inputfield[i1]+"']").val(str); + } + }else{ + if(inputs.length>1){ + var inpu = inputs[i1]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(""); + }else{ + $("input[name='"+inputfield[i1]+"']").val(""); + } + } + } + }else{ + //对应数据库字段为空的情况下并且字典CODE传入一个值时,根据表单中字典TEXT的值从popup中来取值 + var str = ""; + $.each( selected, function(i, n){ + if (i==0) + str+= n[inputfield]; + else + str+= ","+n[inputfield]; + }); + var inputname = $(pobj).attr("name"); + var inputs = inputname.split("."); + if(str.indexOf("undefined")==-1){ + if(inputs.length>1){ + var inpu = inputs[i1]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(str); + }else{ + $("input[name='"+inputfield+"']").val(str); + } + }else{ + if(inputs.length>1){ + var inpu = inputs[i1]+"."+inputfield[i1]; + $("input[name='"+inpu+"']").val(""); + }else{ + $("input[name='"+inputfield+"']").val(""); + } + } + } + } + return true; + } + + }, + cancelVal: '关闭', + cancel: true // 为true等价于function(){} + }); + } +} ++