/*! * Copyright 2011 Guangzhou Donghong Software Technology Inc. * Licensed under the www.jxstar.org */ /** * 报表打印选择窗口。 * * @author TonyTan * @version 1.0, 2010-01-01 */ JxPrint = {}; (function(){ Ext.apply(JxPrint, { /** * 是否有报表定义信息 **/ hasReport: false, /** * public 显示报表选项对话框 * * pageNode -- 当前功能的表格定义对象 * iszip -- 支持多选报表合并为zip下载 **/ showWindow: function(pageNode, iszip) { var self = this; var funid = pageNode.nodeId; var hdCall = function(data) { var lsReport = []; if (data == null || data.length == 0) { self.hasReport = false; lsReport[0] = {baseCls:'x-plain', border:false, html:''+ jx.print.noreport +''}; //没有报表定义信息! } else { self.hasReport = true; for (var i = 0, n = data.length; i < n; i++) { var item = {boxLabel: data[i].report_name, xtype: iszip?'checkbox':'radio', name: 'reportId', inputValue: data[i].report_id, checked: false}; if (i == 0) item.checked = true; lsReport[i] = item; } } self.createWindow(funid, lsReport, pageNode, iszip); }; //从后台取报表定义信息 var params = 'funid=rpt_list&pagetype=grid&eventcode=listdata&selfunid='+ funid; //报表列表根据部门控制 var isdept = Jxstar.systemVar.sys__report__dept||'0'; if (isdept == '1' && (JxDefault.getRoleId() != 'administrator')) { params += '&deptid=' + JxDefault.getDeptId(); } else { params += '&deptid='; } Request.dataRequest(params, hdCall); }, /** * private 创建报表选项对话框 * * funid -- 当前功能ID * lsReport -- 当前功能的报表定义信息 **/ createWindow: function(funid, lsReport, pageNode, iszip) { var vitem = [{ boxLabel: jx.print.outxls, //'输出Excel' name: 'printType', inputValue: 'xls', checked: true }]; //是否支持html打印 var ishtml = Jxstar.systemVar.sys__report__html||'1'; if (ishtml == '1' && !iszip) { vitem[vitem.length] = { boxLabel: jx.print.outhtm, //'输出HTML', name: 'printType', inputValue: 'html' }; } //是否支持pdf打印 var ispdf = Jxstar.systemVar.sys__attach__pdfprint||'0'; if (ispdf == '1' && !iszip) { vitem[vitem.length] = { boxLabel: '输出PDF', name: 'printType', inputValue: 'pdf' }; } var printForm = new Ext.form.FormPanel({ style: 'padding-top:10px;', border: false, frame: false, baseCls: 'x-plain', items: [{ baseCls:'xf-panel', title:jx.print.seltemp, //'选择报表模板' autoHeight:true, hideLabels:true, style:'margin-left:10px;', items:lsReport },{ baseCls:'xf-panel', title: jx.print.outtype, //'选择输出类型' autoHeight:true, defaultType: 'radio', hideLabels: true, style: 'margin-left:10px;', items: vitem },{ baseCls:'xf-panel', title: jx.print.outrang, //'选择输出范围' autoHeight:true, defaultType: 'radio', hideLabels: true, style: 'margin-left:10px;', items: [{ boxLabel: jx.print.outrec, //'输出选择的记录' name: 'printScope', inputValue: 'select', checked: true },{ boxLabel: jx.print.outall, //'输出当前所有记录' name: 'printScope', inputValue: 'query' }] }] }); var self = this; //创建对话框 var win = new Ext.Window({ title: jx.print.ptitle, //'输出报表选项' width:300, height:480, autoScroll:true, resizable: false, modal: true, closeAction:'close', items:[printForm], buttons: [{ text:jx.base.ok, //'确定' disabled:(!self.hasReport), handler:function(){ JxPrint.printReport(funid, printForm.getForm(), pageNode, iszip); win.close(); } },{ text:jx.base.cancel, //'取消' handler:function(){win.close();} }] }); win.show(); }, /** * private 向后台发出打印报表的请求 * * funId -- 当前功能ID * form -- 打印报表选项信息 **/ printReport: function(funId, form, pageNode, iszip) { //取选择的输出类型 var printType = form.findField('printType').getGroupValue(); //取选择的数据范围 var printScope = form.findField('printScope').getGroupValue(); //取选择的报表ID var reportId = ''; if (iszip) { form.items.each(function(item){ if (item.getName() == 'reportId' && item.checked == true) { reportId += item.initialConfig.inputValue+';'; } }); if (reportId.length > 0) { reportId = reportId.substring(0, reportId.length-1); } if (reportId.length == 0) { alert('没有选择需要下载的报表!'); return; } printType = 'xlszip'; } else { reportId = form.findField('reportId').getGroupValue(); } this.exePrint(pageNode, funId, reportId, printType, printScope, '0'); }, /** * public 直接打印需要调用的公共方法。 * **/ exePrint: function(pageNode, funId, reportId, printType, printScope, printMode) { reportId = reportId||''; printType = printType||'xls'; printScope = printScope||'select'; printMode = printMode||'0'; var server_param = ''; var queryType = '0'; if (printScope == 'select') { server_param = this.selectWhere(pageNode); if (server_param.length == 0) { JxHint.alert(jx.print.selectno); //'没有选择一条记录,不能执行此操作!' return false; } //选择模式不处理归档 queryType = '1'; } else if (printScope == 'query') { var wheres = this.queryWhere(pageNode); if (!wheres) return false; server_param = wheres[0]; queryType = wheres[1]; } else { return false; } var rptidname = 'reportId'; if (printType == 'xlszip') {//支持多个报表模版合并下载 rptidname = 'reportIds'; var define = Jxstar.findNode(funId); if (define) { rptidname = 'zipname='+encodeURIComponent(define.nodetitle)+'.zip&reportIds'; } } //扩展事件用的参数 var data = {reportId:reportId, printType:printType, printScope:printScope, printMode:printMode}; //触发打印前事件 if (pageNode.event.fireEvent('beforeprint', pageNode.event, data) == false) return false; //请求参数 var e = encodeURIComponent; //编码 var params = 'funid='+ funId +'&'+ rptidname +'='+ reportId +'&printType='+((printType=='html'||printType=='web')?'html':printType)+ '&printMode='+printMode+'&queryType='+ queryType; var paramWhere = '&server_param='+e(server_param); if (reportId.length == 0) { params += '&isDefault=1'; } params += '&user_id=' + Jxstar.session['user_id']; //扩展打印请求参数 if (typeof pageNode.event.dataPrintParam == 'function') { var ret = pageNode.event.dataPrintParam(data); if (ret && ret.length > 0) { if (ret.charAt(0) != '&') { ret = '&' + ret; } params += ret; } } //发送后台请求 var href = Jxstar.path + "/reportAction.do?" + params; if ('xls' == printType || 'xlszip' == printType) {//如果选择的记录数达200条,则用GET方式会造成显示不了下载文件问题 //var postParams = {whereSql:whereSql, whereValue:whereValue, whereType:whereType}; this.postExpReport(href, server_param); } else if ('html' == printType) { var url = Jxstar.path + "/report/html/htmlprint.jsp"; window.tmp_print_title = "打印窗口"; window.tmp_print_params = params + paramWhere; window.open(url); } else if ('pdf' == printType) { //支持异地输出pdf报表,会话信息处理? var appurl = Jxstar.systemVar.sys__attach__pdfurl||''; if (appurl.length == 0) { appurl = Jxstar.path; } else { params += '&nocheck=1'; } appurl += "/reportAction.do?" + params; //var postParams = {whereSql:whereSql, whereValue:whereValue, whereType:whereType}; this.postExpReport(appurl, server_param, printType); } //触发打印后事件 pageNode.event.fireEvent('afterprint', pageNode.event, data); }, //通过post方式导出xls报表 postExpReport: function(href, server_param, printType) { //如果没有form则自动创建 var fd = Ext.get('frmExpReport'); if (!fd) { fd = Ext.DomHelper.append(Ext.getBody(), { tag:'form', method:'post', id:'frmExpReport', name:'frmExpReport', target:((printType && printType.indexOf('pdf')>=0) ? '_blank' : 'frmhidden'), cls:'x-hidden', cn:[{tag:'input',name:'server_param',id:'server_param',type:'hidden'}] }, true); } //POST请求参数 fd.child('#server_param').set({value:server_param||''}); //URL请求参数 fd.dom.action = href; fd.dom.submit(); }, /** * private 取当前查询结果的where子句 **/ queryWhere: function(pageNode) { var wheres = [2]; var dsOption = {}; //取当前where子句 if (pageNode.pageType.indexOf("form") > -1) { var grid = pageNode.page.getForm().myGrid; if (grid && grid.isXType('grid')) { dsOption = grid.getStore().lastOptions.params || {}; } else { alert('没有表格,不支持输出所有数据!'); return null; } } else { dsOption = pageNode.page.getStore().lastOptions.params || {}; } wheres[0] = dsOption.server_param || ''; wheres[1] = dsOption.query_type || '0'; return wheres; }, /** * private 取当前选择记录的where子句 **/ selectWhere: function(pageNode) { var page = pageNode.page; var where = ''; var pkcol = pageNode.define.pkcol; if (pageNode.pageType.indexOf("form") > -1) { var keyid = page.getForm().findField(pkcol).getValue(); if (keyid != null && keyid.length > 0) { where = "'" + keyid + "'"; } } else { var records = page.getSelectionModel().getSelections(); if (records.length > 0) { for (var i = 0, n = records.length; i < n; i++) { where += "'" + records[i].get(pkcol) + "',"; } where = where.substring(0, where.length - 1); } } if (where.length > 0) { where = pkcol.replace('__', '.') + ' in (' + where + ')'; } return JxThree.getServerParam(where, '', ''); }, //取主键值 getKeyId: function(pageNode){ var page = pageNode.page; var pkcol = pageNode.define.pkcol; if (pageNode.pageType.indexOf("form") > -1) { var keyid = page.getForm().findField(pkcol).getValue(); if (keyid != null && keyid.length > 0) { return keyid; } } else { var records = page.getSelectionModel().getSelections(); if (records.length > 0) { return records[0].get(pkcol); } } return ''; }, //输出PDF标签文件 printPDF: function(grid, model_id){ var records = JxUtil.getSelectRows(grid); if (!JxUtil.selected(records)) return; var define = grid.gridNode.define; var nodeid = define.nodeid; //取选择记录的主键值 var params = 'funid=sysevent&query_funid='+ nodeid; for (var i = 0; i < records.length; i++) { params += '&keyid=' + records[i].get(define.pkcol); } //设置请求的参数 params += '&eventcode=pdfnew&model_id='+model_id; //添加当前排序字段 var st = grid.getStore(); if(st.sortInfo && st.remoteSort){ params += '&sort='+st.sortInfo.field+'&dir='+st.sortInfo.direction; } var hdcall = function(data) { var filename = data.filename; if (!filename) { JxHint.alert('not find pdf file!'); return; } var e = encodeURIComponent; var params = 'funid=sysevent&eventcode=pdfdown&filename=' + e(filename); JxAttach.previewPDF('PDF_PRINT','PDF_PRINT.pdf',params); }; //发送请求 Request.postRequest(params, hdcall); } });//Ext.apply })();