相同的画面信息,只有个别按钮不同时,通过拼接参数进行控制按钮的显示
由以上画面可以看到,通知书列印和通知书补印的区别是一个画面有批量下载按钮,而另一个无此按钮,这时如果不想写两个相同的画面增加劳动力,则可以通过以下方式来实现一个页面实现两个页面的效果。
第一步:在进行数据库菜单配置时,给两个画面的地址后拼接参数prtflag,其值为0或1.
第二步:input.jsp页面里面在html标签外部引入参数prtflag。
<%
String prtflag = request.getParameter("prtflag");
%>
第三步:input.jsp页面给批量下载按钮添加id作为标志。
<input class=cssButton TYPE=button value="批量下載" id="download" onClick="Physicalhealthdownloads();">
第四步:input.jsp页面引入隐藏标签prtflag。
<input type="hidden" name="prtflag" id="prtflag" value="<%=prtflag%>"><%--打印標誌--%>
第五步:在init.jsp页面进行初始化页面的时候进行控制,如果参数为0则是列印画面,如果参数为1则是补印画面,补印画面需要对批量下载的按钮进行隐藏。
//初始化页面
function initForm(){
try {
//获取prtflag参数,如果他为0的话,则是列印,为1则为补印,需要隐藏批量下载按钮
if($("#prtflag").val()==1){
//此处使用的是jQuery的隐藏元素的方法:$("#test").hide() - 隐藏所有 id="test" 的元素,即这里指的是隐藏所有id="download"的元素
$("#download").hide();
}
initPhysicalhealthGrid();
}catch (ex){
alert("界面初始化失敗")
}
}
第六步:针对两个不同画面进行值的查询时将标志作为参数传入:
function queryPhysicalhealthGrid(){
var date = document.getElementById('startDate').value;
var date1= document.getElementById('enddate').value;
if((date == "" && date1 != "" ) ||(date != "" && date1 == "")){
alert("日期輸入不完整,請重新輸入。")
return;
}
if(date > date1){
alert("日期區間起期大於迄期,請重新輸入。");
return;
}
var tcodeno = fm.contno.value;
var tinsureid = fm.insureid.value;
var tstartDate = fm.startDate.value;
var tenddate = fm.enddate.value;
var mySql=new SqlClass();
mySql.setModule("ind_print_pa"); mySql.setResourceName("bq.PhysicalHealthSql"); mySql.setSqlId("PhysicalHealthSql1");
mySql.addPara(tcodeno);
mySql.addPara(tinsureid);
mySql.addPara(tstartDate);
mySql.addPara(tenddate);
//此处将打印标志作为参数传入
mySql.addPara($("#prtflag").val()); turnPageGrid.queryModal(mySql.getString(),PhysicalhealthGrid);
}
第七步:进入到controller层,执行查询方法,调用查询的sql,将查到的值返回到前端页面。
controller层
@ApiOperation("綜合列印-->保全列印-->身體健康檢查通知書列印-->查詢")
@ResponseBody
@PostMapping(value = "/bq/PhysicalHealthSql/Query/PhysicalHealthSql1")
public String query(@RequestBody RequestInfo requestInfo, HttpSession session, HttpServletRequest request) {
return super.query(requestInfo, session, request);
}
sql层
@SQL(value = "select (select c.PRTSEQ from LIS.LOPRTMANAGER c where c.OTHERNO=b.EDORACCEPTNO and c.CODE='BQ105'),a.CONTNO,b.RISKNAME," +
" floor(months_between(b.MAKEDATE,a.CVALIDATE)/12) + 1 interval, (select ldcontstate.MAINSTATENAME from ldcontstate where ldcontstate.MAINSTATE=b.state) contstate," +
" b.appntname,b.INSUREDNAME,a.STARTCONTDATE,b.MAKEDATE from lcpol a ,lpchangePoltypedetail b where a.CONTNO=b.CONTNO and a.POLNO=b.POLNO and b.DEALFLAG is null" +
" @{0} @{1} @{2} @{3} @{4} order by a.CONTNO asc,b.MAKEDATE desc", clauses = {
@Clause(key = 0, clause = "and a.contno='#{para0}'", expression = "#{para0} != empty"),
@Clause(key = 1, clause = "and exists(select 1 from lcinsured d where d.CONTNO=a.contno and a.INSUREDNO=d.INSUREDNO and d.IDNO='#{para1}')", expression = "#{para1} != empty"),
@Clause(key = 2, clause = "and b.MAKEDATE>= '#{para2}'", expression = "#{para2} != empty"),
@Clause(key = 3, clause = "and b.MAKEDATE <='#{para3}'", expression = "#{para3} != empty"),
@Clause(key = 4, clause = "and exists (select 1 from LIS.LOPRTMANAGER c where c.OTHERNO=b.EDORNO and c.CODE='BQ105' and nvl(PatchFlag,'0')='#{para4}')", expression = "${para4} != empty")})
SSRS PhysicalHealthSql1(@Param("para0") String para0, @Param("para1") String para1, @Param("para2") String para2, @Param("para3") String para3, @Param("para4") String para4);
注意:
- 其中查询的controller层的查询方法上面的@PostMapping里的值是sql类的存放路径,最后一个值是引用的sql名。如:/bq/PhysicalHealthSql/Query/PhysicalHealthSql1,其中PhysicalHealthSql1是sql类里面的查询方法名字。
- nvl(ex1,ex2)函数,当ex1为空的时候,选择ex2作为值返回。