( function( $ ){ $.fn.viewReport = function( settings ){ var defaultSettings = { url : null, //rquired, url jasperFileNameSelector : null, //jasperFileName or jasperFileNameEle rquired, jasper file name selector reportType : 'pdf', //optional, report type, 目前只有提供 "pdf", "excel", "word", "html" "text" outputFileName : '', //可以指定匯出檔案的 file name characterWidth : 10, //在 reportType = 'text' 才會有作用 characterHeight : 20, //在 reportType = 'text' 才會有作用 conditionFormSelector : null, //rquired, 將查詢條件包起來的 form debug : false, //optional, debug isSystemPrinter : false, formData : '', printerSelector : null, //optional , 有傳入則可以只用一個按鈕執行系統印表及本機列印 hasPrintBtn : false, beforeValiation : function( debug ){ if( debug ) alert( 'run beforeValidation() function.' ); }, //optional, 在 validation 之前會呼叫的 funciton beforeViewReport : function( debug ){ if( debug ) alert( 'run beforeViewReport() function.' ); return true; }, //optional, 在 submit 之前( 產生報表 ) 會呼叫的 function afterViewReport : function( debug , data ){ if( debug ) alert( 'run afterViewReport() function.' ); return true; } //optional, 在 submit 之後( 產生報表 ) 會呼叫的 function }; var newSettings = $.extend( defaultSettings, settings ); if( !check( newSettings ) ) return; initialValidation( newSettings.conditionFormSelector ); initLibraParam(newSettings.conditionFormSelector); this.click( clickButton( newSettings ) ); }; function check( newSettings ){ if( newSettings.url == null || $.trim( newSettings.url ).length == 0 ){ alert( '尚未指定 url 或指定的 url 錯誤, url:' + newSettings.url ); return false; } if( newSettings.reportType == null || $.trim( newSettings.reportType ).length == 0 ){ alert( '尚未指定 reportType' ); return false; } if( !( newSettings.reportType == 'pdf' || newSettings.reportType == 'excel' || newSettings.reportType == 'xls' || newSettings.reportType == 'word' || newSettings.reportType == 'html' || newSettings.reportType == 'text' || newSettings.reportType == 'doc' || newSettings.reportType == 'ods')){ alert( '指定的 reportType 值錯誤, 目前只有支援 "pdf", "excel","xls", "word", "html", "text", "doc", "ods"' ); return false; } if( newSettings.conditionFormSelector == null || newSettings.conditionFormSelector.length == 0 ){ alert( '指定的 conditon form selector 錯誤' ); return false; } return true; } function clickButton( newSettings ){ return function(){ if( newSettings.debug ) alert( 'url:' + newSettings.url ); processConditionBySettings( newSettings ); var urlIncludeParameter = newSettings.url + '?' + newSettings.conditionFormSelector.serialize(); if( newSettings.debug ) alert( '完整的 url:\r\n' + urlIncludeParameter ); newSettings.beforeValiation( newSettings.debug ); if( !newSettings.conditionFormSelector.valid() ) return false; if( !newSettings.beforeViewReport( newSettings.debug ) ) return false; if( newSettings.printerSelector==null || newSettings.printerSelector.length==0){ //未傳入printerSelector }else{ if(newSettings.printerSelector.val()==''){ //有傳入printerSelector 且列印時選擇使用者印表機 newSettings.isSystemPrinter = false; }else{ //有傳入printerSelector 且列印時選擇系統印表機 newSettings.isSystemPrinter = true; } } settingLibraParam(newSettings.conditionFormSelector); //console.log("$.ajaxSettings.async : "+$.ajaxSettings.async); $.ajaxSettings.async = true; $.blockUI(); $.post( newSettings.url, newSettings.conditionFormSelector.serialize(), function( data ){ //$.ajaxSetup({async:true}); $.unblockUI(); $.ajaxSettings.async = false; if(data.errorCode != "0"){ $("#statusMsg").attr("style","color:red"); $("#statusMsg").attr('value',data.errorMsg); }else{ if (!newSettings.isSystemPrinter) { var openCondition = "width=1024,height=768,resizable=yes,scrollbars=yes"; var date = new Date(); var now = date.getHours() + "_" + date.getMinutes() + "_" + date.getSeconds()+ date.getMilliseconds(); var reportUrl = data.reporturl; if (reportUrl instanceof Array && reportUrl.length >= 1) { for (var i = 0; i < reportUrl.length; i++) { window.open(reportUrl[i], "報表_" + now + "_" + i, openCondition); } }else{ if ( newSettings.hasPrintBtn ) new_open = window.open( "pages/viewReport.jsp?pdfUrl=" + data.reporturl, "報表_" + now + "_" + i, openCondition ); else window.open(data.reporturl, "報表_" + now + "_" + i, openCondition); } } $("#statusMsg").attr("style","color:blue"); $("#statusMsg").attr('value',"列印完成"); if( !newSettings.afterViewReport( newSettings.debug, data ) ){ return false; } } }); }; } function processConditionBySettings( newSettings ){ var $module = $( '#moduleByReport', newSettings.conditionFormSelector ); var $jasperFileName = $( '#jasperFileNameByReport', newSettings.conditionFormSelector ); var $reportType = $( '#reportTypeByReport', newSettings.conditionFormSelector ); var $outputFileName = $( '#outputFileNameByReport', newSettings.conditionFormSelector ); var $characterWidth = $( '#characterWidthByReport', newSettings.characterWidth ); var $characterHeight = $( '#characterHeightByReport', newSettings.characterHeight ); if( $module.length == 0 ){ $module = getSelector( 'module'); newSettings.conditionFormSelector.prepend( $module ); } if( $jasperFileName.length == 0 ){ $jasperFileName = getSelector( 'jasperFileName'); newSettings.conditionFormSelector.prepend( $jasperFileName ); } if( $reportType.length == 0 ){ $reportType = getSelector( 'reportType'); newSettings.conditionFormSelector.prepend( $reportType ); } if( $outputFileName.length == 0 ){ $outputFileName = getSelector( 'outputFileName'); newSettings.conditionFormSelector.prepend( $outputFileName ); } if( $characterWidth.length == 0 ){ $characterWidth = getSelector( 'characterWidth'); newSettings.conditionFormSelector.prepend( $characterWidth ); } if( $characterHeight.length == 0 ){ $characterHeight = getSelector( 'characterHeight'); newSettings.conditionFormSelector.prepend( $characterHeight ); } $module.val( newSettings.module ); //$jasperFileName.val( newSettings.jasperFileName == null ? newSettings.jasperFileNameSelector.val() : newSettings.jasperFileName ); $reportType.val( newSettings.reportType ); $outputFileName.val( newSettings.outputFileName ); $characterWidth.val( newSettings.characterWidth ); $characterHeight.val( newSettings.characterHeight ); } function getSelector( name ){ return $( '' ); } })( jQuery );