( function( $ ){ $.fn.OceanAndAirWorkFlow = function( settings ){ var defaultSettings = { declNoEle :null, //報單編號 的 selector ,required queryResultEle :$('#queryResult'), //查詢結果區塊的selector,required quertReusltFormTableEle :$('#quertReusltFormTable'), //查詢結果區塊中的表格的selector,required oceanGridTrEle :$('#oceanGridTr'), //海運grid所在TR的selector,required airGridTrEle :$('#airGridTr'), //空運gird所在TR的selector,required statusBarEle :$('#statusBar'), //狀態列的selecotr,required airQueryUrl :null, // 空運查詢 url,required oceanQueryUrl :null, //海運查詢url,required oceanGrid :'detail_grid2', //required airGrid :'air_grid2', //required isSwitchResultForm :false, //當會因海空運而有不同的查詢結果表格,optional queryOceanFormTableEle :null, //optional queryAirResultFormTableEle:null, //optional doBeforeValidate :function(){return true;}, //在驗證前作的事 optional setTransType :function(){return undefined;}, //是否自行設定海空運別,AIR:空運 :OCEAN ,當return undefined時會call getTransType 自行取得海空運別 , optional debug :false }; if (this.length == 0){ alert('找不到查詢按鈕'); return; } var newSettings = $.extend( defaultSettings, settings ); if( !( checkNull( newSettings.declNoEle, 'declNoEle' ) && checkNull( newSettings.queryResultEle, 'queryResultEle' ) && checkNull( newSettings.quertReusltFormTableEle, 'quertReusltFormTableEle' ) && checkNull( newSettings.oceanGridTrEle, 'oceanGridTrEle' ) && checkNull( newSettings.airGridTrEle, 'airGridTrEle' ) && checkNull( newSettings.statusBarEle, 'statusBarEle' ) && checkNull( newSettings.airQueryUrl, 'airQueryUrl' ) && checkNull( newSettings.oceanGrid, 'oceanGrid' ) && checkNull( newSettings.airGrid, 'airGrid' ) ) ) return; if( !( checkTypeByString( newSettings.airQueryUrl, 'airQueryUrl' ) && checkTypeByString( newSettings.oceanQueryUrl, 'oceanQueryUrl' ) && checkTypeByString( newSettings.oceanGrid, 'oceanGrid' ) && checkTypeByString( newSettings.airGrid, 'airGrid' ) ) ) return; if( !( checkSelector( newSettings.declNoEle, 'declNoEle' ) && checkSelector( newSettings.queryResultEle, 'queryResultEle' ) && //checkSelector( newSettings.quertReusltFormTableEle, 'quertReusltFormTableEle' ) && checkSelector( newSettings.oceanGridTrEle, 'oceanGridTrEle' ) && checkSelector( newSettings.airGridTrEle, 'airGridTrEle' ) && checkSelector( newSettings.statusBarEle, 'statusBarEle' ) ) ) return; //bid click 事件 OcenAndAirEvent this.click(OceanAndAirEvent(newSettings)); }; })( jQuery ); /** * * @param newSettings * @returns {Function} */ function OceanAndAirEvent(newSettings){ return function(){ alertDebugMsg(newSettings.debug,'excute OcenAndAirEvent'); var $declNo = newSettings.declNoEle; //查詢結果div區塊 var $queryResult=newSettings.queryResultEle; //查詢結果表頭 var $quertReusltFormTable=newSettings.quertReusltFormTableEle; //查詢結果海運表格 var $queryOceanFormTable = newSettings.queryOceanFormTableEle; //查詢結果空運表格 var $queryAirResultFormTable = newSettings.queryAirResultFormTableEle; //檢查是否海空運別的查詢結果表格需要各別設定 var switchResultForm = chkIsSwitchResultForm(newSettings); alertDebugMsg(newSettings.debug,'海空運別的查詢結果表格是否需要各別設定? '+switchResultForm); //狀態列 var $statusBar=newSettings.statusBarEle; //海運grid Tr var $oceanGridTr=newSettings.oceanGridTrEle; //空運grid Tr var $airGridTr=newSettings.airGridTrEle; //空運查詢url var airQueryUrl=newSettings.airQueryUrl; //海運查詢url var oceanQueryUrl=newSettings.oceanQueryUrl; // var oceanGrid =newSettings.oceanGrid; // var airGrid = newSettings.airGrid; var beforeChk=newSettings.doBeforeValidate(); var valid = $('#detail_dataForm2').valid(); //新加,每次都先隱藏 $queryResult.hide(); if(! (valid && beforeChk) ){ alertDebugMsg(newSettings.debug,'驗證失敗'); if(!switchResultForm){ $quertReusltFormTable.hide(); }else{ $queryOceanFormTable.hide(); $queryAirResultFormTable.hide(); } //$quertReusltFormTable.hide(); $oceanGridTr.hide(); $airGridTr.hide(); $statusBar.show(); //$queryResult.show(); return; } var transType; var setTransType = newSettings.setTransType(); if (typeof setTransType == 'undefined'){ transType = getTransType($declNo.val()); }else{ transType = setTransType; } alertDebugMsg(newSettings.debug,'transType:'+transType); //如果是ALL 海空運通用,暫時設成為查詢空運 if(transType=='ALL'){ console.log('報單號碼為海空運通用,設定為查詢空運'); transType='AIR'; } //海運 if(transType == 'OCEAN'){ $('#searchUrl:hidden').val(oceanQueryUrl); if(!switchResultForm){ $quertReusltFormTable.show(); }else{ $queryOceanFormTable.show(); $queryAirResultFormTable.hide(); } $oceanGridTr.show(); $airGridTr.hide(); $statusBar.show(); //$queryResult.show(); switchGroup( oceanGrid, 'detail_searchButton2'); $('#detail_searchButton2').click(); } //空運 else if(transType == 'AIR'){ $('#searchUrl:hidden').val(airQueryUrl); if(!switchResultForm){ $quertReusltFormTable.show(); }else{ $queryOceanFormTable.hide(); $queryAirResultFormTable.show(); } $oceanGridTr.hide(); $airGridTr.show(); $statusBar.show(); //$queryResult.show(); switchGroup( airGrid, 'detail_searchButton2' ); $('#detail_searchButton2').click();//trigger grid2 model }else{ showStatusMsg( 'ng', '非海空運報單編號,請重新輸入!' ); $quertReusltFormTable.hide(); $oceanGridTr.hide(); $airGridTr.hide(); $statusBar.show(); //$queryResult.show(); return; } }; } /** * 確認是否海空運別的查詢結果表格需要各別設定 * @param newSettings * @returns {Boolean} */ function chkIsSwitchResultForm(newSettings){ if(newSettings.isSwitchResultForm){ if( ! (checkNull( newSettings.queryOceanFormTableEle, 'queryOceanFormTableEle' ) && checkNull( newSettings.queryAirResultFormTableEle, 'queryAirResultFormTableEle' ) )) return; if( !( checkSelector( newSettings.queryOceanFormTableEle, 'queryOceanFormTableEle' ) && checkSelector( newSettings.queryAirResultFormTableEle, 'queryAirResultFormTableEle' ) )) return ; return true; }else{ return false; } } //取得海空運別 function getTransType(transCd) { var type='ERROR'; if(transCd.isBlank) return type; //報單號碼前兩碼為關別 var custCd=transCd.substring(0,2); $.ajax({ type: 'POST', url: 'TransTypeAction!getTransType', data: 'custCd='+custCd, success: function(data){ if(typeof data.errMsg == "undefined" ){ switch(data.TYPE){ case 0: type='ALL'; break; case -1: type = 'ERROR'; break; case 1: type = 'AIR'; break; case 2: type = 'OCEAN'; break; } }else{ //TODO:有errMsg //alert('errMsg'); } }, error: function(){ //TODO:發生錯誤 //alert('error'); }, async:false }); return type; } function alertDebugMsg(debug,msg){ if(debug) alert(msg); }