JEECG popup表单带参数改造

JEECG popup表单带参数改造

因为工作上要使用JEECG,JEECG在大体上很方便但是在部分内容中功能受限,因为我需要使用带参数的popup表单所以重写了方法。
首先是js方法

function popupClick(pobj,tablefield,inputnames,pcode,params) {
	$.dialog.setting.zIndex = getzIndex(true);
	if(inputnames==""||pcode==""){
		alert("popup参数配置不全");
		return;
	}
	if(typeof(windowapi) == 'undefined'){
		$.dialog({
			content: "url:cgReportController.do?popupModify&id="+pcode+"&params="+params,
			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: "url:cgReportController.do?popupModify&id="+pcode+"&params="+params,
			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]];
								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(){}
		});
	}
}

这个方法在原有的基础上增加了params用‘,’来分割多个参数
然后是后台的方法

@RequestMapping(params = "popupModify")
	public void popupModify(String params,String id, HttpServletRequest request,
					  HttpServletResponse response) {
		//step.1 根据id获取该动态报表的配置参数
		Map<String, Object>  cgReportMap = null;
		//String params = (String) request.getAttribute("params");
		try{
			cgReportMap = cgReportService.queryCgReportConfig(id);
			String[] pstr = params.split(",");
			List<String> param = Arrays.asList(pstr);
			cgReportMap.put("paramValue",param);
		}catch (Exception e) {
			throw new CgReportNotFoundException("动态报表配置不存在!");
		}
		//step.2 获取列表ftl模板路径
		FreemarkerHelper viewEngine = new FreemarkerHelper();
		//step.3 组合模板+数据参数,进行页面展现
		loadVars2(cgReportMap,request);

		//step.4 页面css js引用
		cgReportMap.put(CgReportConstant.CONFIG_IFRAME, getHtmlHead(request));

		String html = viewEngine.parseTemplate("/org/jeecgframework/web/cgreport/engine/core/cgreportlistpopup.ftl", cgReportMap);
		PrintWriter writer = null;
		try {
			response.setContentType("text/html");
			response.setHeader("Cache-Control", "no-store");
			writer = response.getWriter();
			writer.println(html);
			writer.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				writer.close();
			} catch (Exception e2) {
				// TODO: handle exception
			}
		}
	}
private void loadVars2(Map<String, Object> cgReportMap,HttpServletRequest request) {
		Map mainM = (Map) cgReportMap.get(CgReportConstant.MAIN);
		List<Map<String,Object>> fieldList = (List<Map<String, Object>>) cgReportMap.get(CgReportConstant.ITEMS);
		List<String> paramList = (List<String>)cgReportMap.get(CgReportConstant.PARAMS);
		List<String> paramValue = (List<String>)cgReportMap.get("paramValue");
		List<Map<String,Object>> queryList = new ArrayList<Map<String,Object>>(0);
		for(Map<String,Object> fl:fieldList){
			fl.put(CgReportConstant.ITEM_FIELDNAME, ((String)fl.get(CgReportConstant.ITEM_FIELDNAME)).toLowerCase());
			String isQuery = (String) fl.get(CgReportConstant.ITEM_ISQUERY);
			if(CgReportConstant.BOOL_TRUE.equalsIgnoreCase(isQuery)){
				loadDic(fl,fl);
				queryList.add(fl);
			}
		}
		StringBuilder sb = new StringBuilder("");
		if(paramList!=null&&paramList.size()>0){
			queryList = new ArrayList<Map<String,Object>>(0);
			int index = 0;
			for(String param:paramList){
				sb.append("&").append(param).append("=").append(paramValue.get(index));
				/*String value = request.getParameter(param);
				if(StringUtil.isNotEmpty(value)){
					sb.append(value);
				}*/
				index++;
			}
		}
		cgReportMap.put(CgReportConstant.CONFIG_ID, mainM.get("code"));
		cgReportMap.put(CgReportConstant.CONFIG_NAME, mainM.get("name"));
		cgReportMap.put(CgReportConstant.CONFIG_FIELDLIST, fieldList);
		cgReportMap.put(CgReportConstant.CONFIG_QUERYLIST, queryList);
		//获取传递参数
		cgReportMap.put(CgReportConstant.CONFIG_PARAMS, sb.toString());
	}

在表单填写的时候就如同动态表单提示那样就行
在这里插入图片描述

报表参数把参数顺序写对就行。
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值