diff --git a/popup扩展以支持参数过滤.html b/popup扩展以支持参数过滤.html new file mode 100644 index 00000000..d9491d1f --- /dev/null +++ b/popup扩展以支持参数过滤.html @@ -0,0 +1,610 @@ + + + + popup扩展以支持参数过滤 + + + + + + + + + + + + + + + + + + +
+ +

1. 概述

+ +

本篇对总jeecg popup的实现和注意事项做一个简要说明,并进行了功能的扩展,可供参考、使用。

+

2. popup实现

+ +

2.1. 调用方式

+ +
onclick="popupClick(this,'ID,标准编码,标准名称,方法名称','methodid,standardCode,standardName,methodName','lims_p_method')"
+

2.2. 函数定义

+ +

popupClick定义在curdtools.js中。

+

2.2.1. 几处判断逻辑

+ + +

2.2.2. 调用online报表

+ + +

3. 扩展实现关联查询中传递参数

+ +

3.1. 对比“报表”功能分析

+ +

对比“报表”功能的请求地址:

+
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支持参数就差一哆嗦了。

+

3.2. 修改curdtools实现

+ +

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;
+}
+

3.3. 调用

+ +
onclick="popupClick(this,'id,标准编码,标准名称,方法名称','methodid,standardCode,standardName,methodName','lims_ps_method_testid','&testid=${mainId}')"
+

代码中mainId为父子表中的testid。

+

报表定义

+ +

Online报表定义如下,jeecg的红色注释可以去掉了。
+报表定义

+

4. 小结

+ + +

码字不易,如果对您有所帮助,请赞一个,谢谢!
+

+

5. 附录

+ +

5.1. 修改后的jeecg popup实现代码

+ +
/**
+ *   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(){}
+        });
+    }
+}
+
+
+ + + + + + + + + + + \ No newline at end of file