Globals.js 170 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198
  1. //拼音字典字典缓存全局变量
  2. window.PINYIN_DICT_CACHE = null;
  3. /**
  4. * Purpose:全角转半角,返回转换后的字符串
  5. * Inputs: String
  6. * Returns:String
  7. */
  8. function qj2bj(str){
  9. //全角字符
  10. var qj = new Array('0','1','2','3','4','5','6','7','8','9','(',')','-','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
  11. //半角字符
  12. var bj = new Array('0','1','2','3','4','5','6','7','8','9','(',')','-','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
  13. var newStr = "";
  14. var change = false;
  15. for(var i=0;i<str.length;i++){
  16. var ch = str.charAt(i);
  17. var isQj = false;
  18. for(var j=0;j<qj.length;j++){
  19. if(qj[j]==ch){
  20. newStr += bj[j];
  21. isQj = true;
  22. change = true;
  23. break;
  24. }
  25. }
  26. if(!isQj){
  27. newStr += ch;
  28. }
  29. }
  30. if(change){
  31. return newStr;
  32. }
  33. }
  34. /**
  35. * Purpose: 将数值类型转化为String
  36. * Inputs: int
  37. * Returns: String
  38. */
  39. function CStr(inp)
  40. {
  41. return(""+inp+"");
  42. }
  43. /**
  44. * Purpose: 判断输入是否为整数字
  45. * Inputs: String
  46. * Returns: True, False
  47. */
  48. function isInteger(str)
  49. {
  50. var i,strlength,tempchar;
  51. str=CStr(str);
  52. if(str=="") return false;
  53. strlength=str.length;
  54. for(i=0;i<strlength;i++)
  55. {
  56. tempchar=str.substring(i,i+1);
  57. if(!(tempchar==0||tempchar==1||tempchar==2||tempchar==3||tempchar==4||tempchar==5||tempchar==6||tempchar==7||tempchar==8||tempchar==9))
  58. {
  59. //alert("只能输入数字 ");
  60. return false;
  61. }
  62. }
  63. return true;
  64. }
  65. /**
  66. * Purpose: 判断输入是否为数值(包括小数点)
  67. * Inputs: String
  68. * Returns: True, False
  69. */
  70. function isFloat(str) {
  71. var tmp;
  72. var temp;
  73. var i;
  74. tmp =str;
  75. if(str=="")
  76. return false;
  77. for(i=0;i<tmp.length;i++)
  78. {
  79. temp=tmp.substring(i,i+1);
  80. if((temp>='0'&& temp<='9')||(temp=='.'))
  81. {} //check input in 0-9 and '.'
  82. else
  83. {
  84. return false;
  85. }
  86. }
  87. return true;
  88. }
  89. /**
  90. * Purpose: 判断输入是否为电话号码
  91. * Inputs: String
  92. * Returns: True, False
  93. */
  94. function isPhoneNumber(str)
  95. {
  96. var i,strlengh,tempchar;
  97. str=CStr(str);
  98. if(str=="")
  99. return false;
  100. strlength=str.length;
  101. for(i=0;i<strlength;i++)
  102. {
  103. tempchar=str.substring(i,i+1);
  104. if(!(tempchar==0||tempchar==1||tempchar==2||tempchar==3||tempchar==4||tempchar==5||tempchar==6||tempchar==7||tempchar==8||tempchar==9||tempchar=='-'||tempchar=='+'||tempchar==' '||tempchar=='/'||tempchar=='('||tempchar==')'))
  105. {
  106. return(false);
  107. }
  108. }
  109. return(true);
  110. }
  111. /**
  112. * Purpose: 判断输入是否为Email
  113. * Inputs: String
  114. * Returns: True, False
  115. */
  116. function isEmail(str)
  117. {
  118. var bflag=true;
  119. if (str.indexOf("'")!=-1)
  120. {
  121. bflag=false;
  122. }
  123. if (str.indexOf("@")==-1)
  124. {
  125. bflag=false;
  126. }
  127. else if(str.charAt(0)=="@")
  128. {
  129. bflag=false;
  130. }
  131. return bflag;
  132. }
  133. /**
  134. * Purpose: 判断输入是否含有为中文
  135. * Inputs: String
  136. * Returns: True, False
  137. */
  138. function hasChinese(str)
  139. {
  140. if(escape(str).indexOf("%u")!=-1)
  141. {
  142. return true;
  143. }
  144. return false;
  145. }
  146. /**
  147. * Purpose: 判断输入是否全为中文
  148. * Inputs: String
  149. * Returns: True, False
  150. */
  151. function isAllChinese(str)
  152. {
  153. if(/[^\u4E00-\u9FA5]/gi.test(str))
  154. {
  155. return false;
  156. }
  157. return true;
  158. }
  159. /**
  160. * Purpose: 判断输入是否含有空格
  161. * Inputs: String
  162. * Returns: True, False
  163. */
  164. function hasBlank(str)
  165. {
  166. var strlength;
  167. var k;
  168. var ch;
  169. strlength=str.length;
  170. for(k=0;k<=strlength;k++)
  171. {
  172. ch=str.substring(k,k+1);
  173. if(ch==" ")
  174. {
  175. FWalert("对不起 不能输入空格 ");
  176. return false;
  177. }
  178. }
  179. return true;
  180. }
  181. /**
  182. * Purpose: 15位身份号码转18位
  183. * Inputs: String
  184. * Returns: 18位身份号码
  185. */
  186. function transformSfzh_na(str){
  187. var newstr="new";
  188. if ((isNull(str)) || (str == "null") || (str == "")){
  189. return 0;
  190. }
  191. if (str.length!=15 && str.length !=18){
  192. //alert("公民身份证长度不正确应该为15或18位!");
  193. return -1;
  194. }
  195. if (str.length==15){
  196. if (isNaN(str)==true){
  197. //alert("15位公民身份证应该为数字!");
  198. return -2;
  199. }
  200. newstr = transact_na(str);
  201. }
  202. if (str.length==18){
  203. if (isNaN(str.substr(0,17))==true){
  204. //alert("18位公民身份证前17位应该为数字!");
  205. return -3;
  206. }
  207. newstr = str;
  208. }
  209. if (IDCard_validate(newstr)==true){
  210. return newstr;
  211. }else{
  212. return -4;
  213. }
  214. }
  215. /**
  216. * Purpose: 替代字符
  217. * Inputs: 目标String,欲替代的字符,替代成为字符串,大小写是否敏感,是否整字代替
  218. * Returns: String
  219. */
  220. function replace(target,oldTerm,newTerm,caseSens,wordOnly)
  221. {
  222. var wk ;
  223. var ind = 0;
  224. var next = 0;
  225. wk=CStr(target);
  226. if (!caseSens)
  227. {
  228. oldTerm = oldTerm.toLowerCase();
  229. wk = target.toLowerCase();
  230. }
  231. while ((ind = wk.indexOf(oldTerm,next)) >= 0)
  232. {
  233. if (wordOnly)
  234. {
  235. var before = ind - 1;
  236. var after = ind + oldTerm.length;
  237. if (!(space(wk.charAt(before)) && space(wk.charAt(after))))
  238. {
  239. next = ind + oldTerm.length;
  240. continue;
  241. }
  242. }
  243. target = target.substring(0,ind) + newTerm + target.substring(ind+oldTerm.length,target.length);
  244. wk = wk.substring(0,ind) + newTerm + wk.substring(ind+oldTerm.length,wk.length);
  245. next = ind + newTerm.length;
  246. if (next >= wk.length)
  247. {
  248. break;
  249. }
  250. }
  251. return target;
  252. }
  253. /**
  254. *判断输入是否为年月(格式:yyyymm)
  255. *输入:string
  256. *返回:true-是,false-否
  257. */
  258. function isNY(str){
  259. if(str.length != 6) return false;
  260. var yy=str.substring(0,4);
  261. var mm=str.substring(4,6);
  262. if(!isInteger(yy)) return false;
  263. if(!isInteger(mm)) return false;
  264. if(yy<"1900"||yy>"2999") return false;
  265. if(mm<"01"||mm>"12") return false;
  266. return true;
  267. }
  268. /**
  269. * Purpose: 判断输入是否为日期,录入的格式可以为yyyy-mm-dd,yyyymmdd,yyyy/mm/dd
  270. * Inputs: String
  271. * Returns: True, False
  272. */
  273. function isDate(str)
  274. {
  275. var sYear ='';
  276. var sMonth='';
  277. var sDay ='';
  278. var arry;
  279. var j =0;
  280. var i =0;
  281. var s="-";
  282. i = str.indexOf(s);
  283. if(i==-1){s="/";}
  284. i = str.indexOf(s);
  285. if(i==-1){s="";}
  286. if(i>-1){
  287. j = str.lastIndexOf(s);
  288. }
  289. //yyyy-mm-dd 或 yyyy/mm/dd
  290. if(i>0 && str.length != 10){
  291. return false;
  292. }
  293. if(i>0){
  294. if((i != 4)||(j != 7)) return false;
  295. arry = str.split(s);
  296. sYear =arry[0];
  297. sMonth =arry[1];
  298. sDay =arry[2];
  299. }
  300. if(i==-1 && str.length != 8){
  301. return false;
  302. }
  303. //yyyymmdd
  304. if(i==-1 && str.length == 8){
  305. sYear =str.substr(0,4);
  306. sMonth =str.substr(4,2);
  307. sDay =str.substr(6,2);
  308. }
  309. if(sDay==""){return false;}
  310. if(sDay!=""&&!FWisDate(sYear,sMonth,sDay)){
  311. return false;
  312. }else{
  313. return true;
  314. }
  315. return false;
  316. }
  317. /**
  318. * Purpose: 判断输入是否为日期 格式:yyyy-MM-dd,且为合法的日期
  319. * Inputs: String
  320. * Returns: True, False
  321. */
  322. function isDate2(strDate)
  323. {
  324. strDate = strDate.replace(/(^\s+)?(\s+$)?/gi, "");
  325. var strSeparator = "-";
  326. var strDateArray;
  327. var intYear;
  328. var intMonth;
  329. var intDay;
  330. var boolLeapYear;
  331. var ln_len=strDate.length;
  332. if(ln_len<8||ln_len>10) return false;//长度判断
  333. strDateArray = strDate.split(strSeparator);
  334. if(strDateArray.length!=3) return false;
  335. intYear = parseInt(strDateArray[0],10);
  336. intMonth = parseInt(strDateArray[1],10);
  337. intDay = parseInt(strDateArray[2],10);
  338. if(isNaN(intYear)||isNaN(intMonth)||isNaN(intDay)) return false;
  339. if(intYear<1900||intYear>2999) return false;
  340. if(intMonth>12||intMonth<1) return false;
  341. if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intDay>31||intDay<1)) return false;
  342. if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intDay>30||intDay<1)) return false;
  343. if(intMonth==2){
  344. if(intDay<1) return false;
  345. boolLeapYear = false;
  346. if((intYear%100)==0){
  347. if((intYear%400)==0) boolLeapYear = true;
  348. }
  349. else{
  350. if((intYear%4)==0) boolLeapYear = true;
  351. }
  352. if(boolLeapYear){
  353. if(intDay>29) return false;
  354. }
  355. else{
  356. if(intDay>28) return false;
  357. }
  358. }
  359. return true;
  360. }
  361. /**
  362. * Purpose: 判断输入是否为日期 格式:yyyy-MM-dd 或者 yyyy-MM-dd hh:mm:ss,且为合法的日期
  363. * Inputs: String
  364. * Returns: True, False
  365. */
  366. function isDate3(strDate)
  367. {
  368. strDate = strDate.replace(/(^\s+)?(\s+$)?/gi, "");
  369. var ln_len=strDate.length;
  370. if((ln_len<8||ln_len>10) && (ln_len<17||ln_len>19)) return false;//长度判断
  371. if ( ln_len >=8 && ln_len <= 10 )
  372. return isDate(strDate);
  373. if ( ln_len >=17 && ln_len <= 19 )
  374. return isDateTime(strDate);
  375. return false;
  376. }
  377. /**
  378. * Purpose: 判断输入是否为日期 格式:yyyy-MM,且为合法的日期
  379. * Inputs: String
  380. * Returns: True, False
  381. */
  382. function isDateShort(strDate)
  383. {
  384. var strSeparator = "-";
  385. var strDateArray;
  386. var intYear;
  387. var intMonth;
  388. var intDay;
  389. var boolLeapYear;
  390. var ln_len=strDate.length;
  391. if(ln_len<6||ln_len>7) return false;//长度判断
  392. strDateArray = strDate.split(strSeparator);
  393. if(strDateArray.length!=2) return false;
  394. intYear = parseInt(strDateArray[0],10);
  395. intMonth = parseInt(strDateArray[1],10);
  396. if(isNaN(intYear)||isNaN(intMonth)) return false;
  397. if(intYear<1900||intYear>2999) return false;
  398. if(intMonth>12||intMonth<1) return false;
  399. return true;
  400. }
  401. /**
  402. * Purpose: 判断输入是否为日期 格式:yyyyMM,且为合法的日期
  403. * Inputs: String
  404. * Returns: True, False
  405. */
  406. function isDateClose(strDate)
  407. {
  408. var strSeparator = "-";
  409. var strDateArray;
  410. var intYear;
  411. var intMonth;
  412. var intDay;
  413. var boolLeapYear;
  414. var charMonth;
  415. var ln_len=strDate.length;
  416. if(ln_len!=6) return false;//长度判断
  417. intYear = parseInt(strDate.substr(0,4));
  418. intMonth = parseInt(strDate.substr(4,6));
  419. charMonth = strDate.substr(4,6);
  420. if(isNaN(intYear)||isNaN(intMonth)) return false;
  421. if(intYear<1900||intYear>2999) return false;
  422. if(charMonth>12||charMonth<1) return false;
  423. return true;
  424. }
  425. /**
  426. * Purpose: 判断输入是否为时间,格式:hh:mm:ss,且为合法的24小时制时间
  427. * Inputs: String
  428. * Returns: True, False
  429. */
  430. function isTime2(strTime)
  431. {
  432. var hStr;
  433. var mStr;
  434. var sStr;
  435. var h;
  436. var m;
  437. var s;
  438. if(strTime.length == 8)
  439. {
  440. if((strTime.substring(2,3)==":")&&(strTime.substring(5,6)==":"))
  441. {
  442. hStr = strTime.substring(0,2);
  443. mStr = strTime.substring(3,5);
  444. sStr = strTime.substring(6,8);
  445. h = parseInt(hStr);
  446. m = parseInt(mStr);
  447. s = parseInt(sStr);
  448. if((h<=23)&&(m<=59)&&(s<=59))
  449. return true;
  450. else
  451. return false;
  452. }
  453. }
  454. else
  455. {
  456. return false;
  457. }
  458. }
  459. /**
  460. * Purpose: 判断输入是否为日期+时间,格式:yyyy-MM-dd hh:mm:ss,且为合法的日期和合法的24小时制时间
  461. * Inputs: String
  462. * Returns: True, False
  463. */
  464. function isDateTime(str){
  465. // alert(str);
  466. var ln_len=str.length;
  467. if(ln_len<17||ln_len>19) return false;//长度判断
  468. var str1=str.split(" ");
  469. // alert(str1.length);
  470. // alert(str1[0]);
  471. // alert(str1[1]);
  472. if(isDate(str1[0])){
  473. if(isDate2(str1[0])){
  474. if(isTime2(str1[1])){
  475. return true;
  476. }
  477. }
  478. }
  479. return false;
  480. }
  481. /**
  482. * Purpose: 从身份证号码取生日
  483. * Inputs: String
  484. * Returns: String
  485. */
  486. function getBirthday(str)
  487. {
  488. if(str!="")
  489. {
  490. if(str.length==15)
  491. {
  492. var year = "19" + str.substring(6,8);
  493. var month = str.substring(8,10);
  494. var day = str.substring(10,12);
  495. var retStr = year + "-" + month + "-" + day;
  496. //window.alert(year);
  497. //window.alert(month);
  498. //window.alert(day);
  499. //window.alert(retStr);
  500. return retStr;
  501. }
  502. else if(str.length==18)
  503. {
  504. var year = str.substring(6,10);
  505. var month = str.substring(10,12);
  506. var day = str.substring(12,14);
  507. var retStr = year + "-" + month + "-" + day;
  508. return retStr;
  509. }
  510. }
  511. else
  512. return "";
  513. }
  514. /**
  515. * Purpose: 判断输入是否为空
  516. * Inputs: String
  517. * Returns: True, False
  518. */
  519. function isNull(str)
  520. {
  521. var temp;
  522. temp = CStr(str);
  523. try{
  524. temp =$.trim(temp);
  525. }catch(e){}
  526. if(typeof(str)=="undefined" || str==null || (temp=="")||(temp.length==0))
  527. {
  528. return true;
  529. }
  530. return false;
  531. }
  532. /**
  533. * added by runfly on 07-06-12
  534. * Purpose: 类似oracle数据库的nvl函数
  535. * Inputs: String str
  536. * Inputs: String defv 默认值
  537. * Returns: 如果str为空,则返回defv,若不为空,返回str
  538. */
  539. function nvl(str,defv)
  540. {
  541. if(typeof(str)=="undefined" || str==null || str=="" || str.toLowerCase()=="null"){
  542. return defv;
  543. }else{
  544. return str;
  545. }
  546. }
  547. /**
  548. * Purpose: 判断输入是否为数值(包括小数点)
  549. * Inputs: String ,lenStr表示要判断的小数位数,如4,表示小数点后不能超过4位
  550. * Returns: True, False
  551. */
  552. function checkFloat(str, lenStr) {
  553. if(str=="")
  554. return true;
  555. //alert('str=' + str);
  556. var tmp;
  557. var temp;
  558. var i;
  559. var num;
  560. num = -1;
  561. tmp =str;
  562. for(i=0;i<tmp.length;i++) {
  563. temp=tmp.substring(i,i+1);
  564. if((temp>='0'&& temp<='9')||(temp=='.')){
  565. if (num >= 0){num = num+1;}
  566. if (temp=='.'){num = 0;}
  567. } //check input in 0-9 and '.'
  568. else
  569. {
  570. return false;
  571. }
  572. }
  573. if (num > lenStr || num == 0){return false;}
  574. return true;
  575. }
  576. /**
  577. *
  578. * Purpose: 检查整个表单中输入组件的输入情况的合法性,只包含非空、字符和日期型的校验
  579. * Inputs: 表单,
  580. * Inputs: options,其它校验规则,格式如:{valLenRule:'char'}
  581. * 长度校验规则valLenRule,byte:按字节校验,char:按字符校验,默认按字节校验
  582. * Returns: True, False
  583. */
  584. function validateForm(dform,options){
  585. var notnullStr = '';
  586. var notnullArr = [];
  587. var numberStr = '';
  588. var numberArr = [];
  589. var numberAgeStr = '';
  590. var numberAgeArr = [];
  591. var numberAgeLawMaleStr = '';
  592. var numberAgeLawMaleArr = [];
  593. var numberAgeLawFemaleStr = '';
  594. var numberAgeLawFemaleArr = [];
  595. var numberHeightStr = '';
  596. var numberHeightArr = [];
  597. var numberWeightStr = '';
  598. var numberWeightArr = [];
  599. var postcodeStr = '';
  600. var postcodeArr = [];
  601. var dateStr = '';
  602. var dateArr = [];
  603. var mailStr = '';
  604. var mailArr = [];
  605. var dateLongStr = '';
  606. var dateLongArr = [];
  607. var dateShortStr = '';
  608. var dateShortArr = [];
  609. var dateCloseStr = '';
  610. var dateCloseArr = [];
  611. var dateTimeStr = '';
  612. var dateTimeArr = [];
  613. var floatStr = '';
  614. var floatArr = [];
  615. var floatSightStr = '';
  616. var floatSightArr = [];
  617. var bitLStr ='';
  618. var bitLArr = [];
  619. var telLStr ='';
  620. var telLArr = [];
  621. var colorStr ='';
  622. var colorArr = [];
  623. var sfzStr ='';
  624. var sfzArr = [];
  625. var chineseStr = '';
  626. var chineseArr = [];
  627. var notHasChineseStr = '';
  628. var notHasChineseArr = [];
  629. var basicCondiction ={length:0};
  630. theForm = dform;
  631. //检查不安全的字符串
  632. for (i = 0; i < theForm.elements.length; i ++){//遍历form中的字段
  633. var isInvalide=false;
  634. ele = theForm.elements[i];
  635. if(null != ele.value){
  636. for(var unsafei=0;unsafei<fwUnsafeValidateFormTokens.length;unsafei++){
  637. var lowerEleValue = ele.value.toLowerCase();
  638. var lowerUnsafe = fwUnsafeValidateFormTokens[unsafei].toLowerCase();
  639. if(-1 != lowerEleValue.indexOf(lowerUnsafe)){
  640. alert("请求包含不安全的字符串: " + fwUnsafeValidateFormTokens[unsafei] + "\n" + ele.name + ": " + ele.value);
  641. return false;
  642. }
  643. }
  644. }
  645. //身份证号码
  646. if($(ele).hasClass('idcardbox')){
  647. ele.className = ele.className.replace(/valueInvalide/,'');
  648. if(ele.value!=''){
  649. if(!FWidcardCheck(ele.value)){
  650. sfzStr = sfzStr + '\n' + _IDCARD_MSG;
  651. sfzArr.push(ele);
  652. jQuery(ele).addClass('valueInvalide');
  653. }
  654. }
  655. }
  656. //邮政编码
  657. if($(ele).hasClass('postbox')){
  658. var s = ele.value;
  659. if(s.length>0&&s.length!=6){
  660. postcodeArr.push(ele);
  661. }
  662. }
  663. //证件类型
  664. if($(ele).hasClass('combobox')){
  665. ele.className = ele.className.replace(/valueInvalide/,'');
  666. if(ele.cn!=null){
  667. if(ele.value=='6'){//证件类型为身份证
  668. var zjhm;
  669. eval("zjhm=theForm."+ele.cn);
  670. zjhm.className = ele.className.replace(/valueInvalide/,'');
  671. if(zjhm.value!=''){
  672. if(!FWidcardCheck(zjhm.value)){
  673. sfzStr = sfzStr + '\n' + _IDCARD_MSG;
  674. sfzArr.push(zjhm);
  675. jQuery(zjhm).addClass('valueInvalide');
  676. }
  677. }
  678. }//=6
  679. }//ele.cn!=null
  680. }//combobox
  681. if(ele.vldStr==null){
  682. continue;
  683. }else if(ele.vldStr==''){
  684. continue;
  685. }
  686. colName = theForm.elements[i].name;//字段的名称
  687. validStrs = theForm.elements[i].vldStr;
  688. name_validStrs = validStrs.split('=');//得到字段的中文名称
  689. if (name_validStrs.length == 2){
  690. colName = name_validStrs[0];
  691. validStrs = name_validStrs[1];
  692. pint=parseInt(theForm.elements[i].value);
  693. pfloat=parseFloat(theForm.elements[i].value);
  694. }
  695. tmpArray = validStrs.split('+');
  696. for (j = 0; j < tmpArray.length; j ++){//检查该字段的校验类型
  697. if (tmpArray[j] == 'nn' ){
  698. if(isNull(theForm.elements[i].value)){
  699. //有非空却为空的字段
  700. notnullStr = notnullStr + '\n' + colName;
  701. notnullArr.push(theForm.elements[i]);
  702. //属于封装过的下拉框
  703. var eleName = theForm.elements[i].className;
  704. if(eleName.indexOf('combobox')!=-1 ||eleName.indexOf('incombox')!=-1
  705. ||eleName.indexOf('dbcombox')!=-1||eleName.indexOf('zjcombox')!= -1){
  706. try{
  707. var span = jQuery.data(theForm.elements[i], 'fwcombox').fwcombox;
  708. var input = jQuery('.fwcombox-text',span);
  709. input.addClass('valueInvalide');
  710. isInvalide=true;
  711. }catch(e){
  712. jQuery(theForm.elements[i]).addClass('valueInvalide');
  713. }
  714. }else{
  715. //加入底框的颜色
  716. jQuery(theForm.elements[i]).addClass('valueInvalide');
  717. }
  718. }else{
  719. //取消valueInvalide标志
  720. //属于封装过的下拉框
  721. var eleName = theForm.elements[i].className;
  722. if(eleName.indexOf('combobox')!=-1 ||eleName.indexOf('incombox')!=-1
  723. ||eleName.indexOf('dbcombox')!=-1||eleName.indexOf('zjcombox')!= -1){
  724. try{
  725. var span = jQuery.data(theForm.elements[i], 'fwcombox').fwcombox;
  726. var input = jQuery('.fwcombox-text',span);
  727. input.removeClass('valueInvalide');
  728. }catch(e){
  729. jQuery(theForm.elements[i]).removeClass('valueInvalide');
  730. }
  731. }else{
  732. //加入底框的颜色
  733. jQuery(theForm.elements[i]).removeClass('valueInvalide');
  734. }
  735. }
  736. }else if(tmpArray[j] == 'n' && !isNull(theForm.elements[i].value) && !isInteger(theForm.elements[i].value)){//有不合法的数字型字段
  737. numberStr = numberStr + '\n' + colName;
  738. numberArr.push(theForm.elements[i]);
  739. }else if(tmpArray[j] == 'h' && !isNull(theForm.elements[i].value)){//有不合法的身高型字段
  740. if(isInteger(theForm.elements[i].value) && (pint>0) && (pint<300)){
  741. }else{
  742. numberHeightStr = numberHeightStr + '\n' + colName;
  743. numberHeightArr.push(theForm.elements[i]);
  744. }
  745. }else if(tmpArray[j] == 'w' && !isNull(theForm.elements[i].value)){//有不合法的体重型字段
  746. if(isInteger(theForm.elements[i].value) && (pint>0) && (pint<200)){
  747. }else{
  748. numberWeightStr = numberWeightStr + '\n' + colName;
  749. numberWeightArr.push(theForm.elements[i]);
  750. }
  751. }else if(tmpArray[j] == 'a' && !isNull(theForm.elements[i].value)){//有不合法的年龄型字段
  752. if(isInteger(theForm.elements[i].value) && (pint>0) && (pint<200)){
  753. }else{
  754. numberAgeStr = numberAgeStr + '\n' + colName;
  755. numberAgeArr.push(theForm.elements[i]);
  756. }
  757. }else if(tmpArray[j] == 'alm' && !isNull(theForm.elements[i].value)){//有不合法的法定男性年龄型字段
  758. if(isInteger(theForm.elements[i].value) && (pint>=16) && (pint<=60)){
  759. }else{
  760. numberAgeLawMaleStr = numberAgeLawMaleStr + '\n' + colName;
  761. numberAgeLawMaleArr.push(theForm.elements[i]);
  762. }
  763. }else if(tmpArray[j] == 'alf' && !isNull(theForm.elements[i].value)){//有不合法的法定女性年龄型字段
  764. if(isInteger(theForm.elements[i].value) && (pint>=16) && (pint<=55)){
  765. }else{
  766. numberAgeLawFemaleStr = numberAgeLawFemaleStr + '\n' + colName;
  767. numberAgeLawFemaleArr.push(theForm.elements[i]);
  768. }
  769. }else if(tmpArray[j] == 'p' && !isNull(theForm.elements[i].value)){//有不合法的邮政编码型字段
  770. if(isInteger(theForm.elements[i].value) && (theForm.elements[i].value.length == 6)){
  771. }else{
  772. postcodeStr = postcodeStr + '\n' + colName;
  773. postcodeArr.push(theForm.elements[i]);
  774. }
  775. }else if(tmpArray[j]=='ml' && !isNull(theForm.elements[i].value) && !isEmail(theForm.elements[i].value)){//有不合法的邮箱字段
  776. mailStr = mailStr + '\n' + colName;
  777. mailArr.push(theForm.elements[i]);
  778. }else if(tmpArray[j] == 't' && !isNull(theForm.elements[i].value) && !isPhoneNumber(theForm.elements[i].value)){//有不合法的电话号码型字段
  779. telLStr = telLStr + '\n' + colName;
  780. telLArr.push(theForm.elements[i]);
  781. }else if(tmpArray[j] == 'd' && !isNull(theForm.elements[i].value) && !isDate3(theForm.elements[i].value)){//有不合法的日期型字典
  782. dateStr = dateStr + '\n' + colName;
  783. dateArr.push(theForm.elements[i]);
  784. }else if(tmpArray[j] == 'dl' && !isNull(theForm.elements[i].value) && !isDateTime(theForm.elements[i].value)){//有不合法的(YYYY-MM-DD HH24:MI:SS)日期型字典
  785. dateLongStr = dateLongStr + '\n' + colName;
  786. dateLongArr.push(theForm.elements[i]);
  787. }else if(tmpArray[j] == 'ds' && !isNull(theForm.elements[i].value) && !isDateShort(theForm.elements[i].value)){//有不合法的(YYYY-MM)日期型字典
  788. dateShortStr = dateShortStr + '\n' + colName;
  789. dateShortArr.push(theForm.elements[i]);
  790. }else if(tmpArray[j] == 'dc' && !isNull(theForm.elements[i].value) && !isDateClose(theForm.elements[i].value)){//有不合法的(YYYYMM)日期型字典
  791. dateCloseStr = dateCloseStr + '\n' + colName;
  792. dateCloseArr.push(theForm.elements[i]);
  793. }else if(tmpArray[j] == 'dt' && !isNull(theForm.elements[i].value) && !isTime2(theForm.elements[i].value)){//有不合法的(HH24:MI:SS)时间型字典
  794. dateTimeStr = dateTimeStr + '\n' + colName;
  795. dateTimeArr.push(theForm.elements[i]);
  796. }else if(tmpArray[j] == 'ac' && !isNull(theForm.elements[i].value) && !isAllChinese(theForm.elements[i].value)){//不合法的纯中文字符串
  797. chineseStr = chineseStr + '\n' + colName;
  798. chineseArr.push(theForm.elements[i]);
  799. }else if(tmpArray[j] == 'nc' && !isNull(theForm.elements[i].value) && hasChinese(theForm.elements[i].value)){//不合法的非中文字符串
  800. notHasChineseStr = notHasChineseStr + '\n' + colName;
  801. notHasChineseArr.push(theForm.elements[i]);
  802. }else if(tmpArray[j].indexOf('f')!=-1&&tmpArray[j]!='alf'){ //校验浮点型数据类型
  803. var tmp = tmpArray[j];
  804. var len = tmp.length;
  805. var ips = tmp.indexOf('f');
  806. var str = "";
  807. var val = theForm.elements[i].value;
  808. var ixu =0; //小数位数
  809. var izu =0; //整数位数
  810. if(val==''){
  811. continue;
  812. }else{
  813. val = val.replace(/,/gi,'');
  814. }
  815. if(!isFloat(val)){
  816. floatStr = floatStr + '\n' + colName +' 必须为数值 ';
  817. floatArr.push(theForm.elements[i]);
  818. continue;
  819. }
  820. if(ips!=-1&&(ips+1)!=len){
  821. str = tmp.split('f');
  822. ixu = parseInt(str[1],10);
  823. if(!checkFloat(val, ixu)){
  824. floatStr = floatStr + '\n' + colName +' 必须为'+ixu+'位小数 ';
  825. floatArr.push(theForm.elements[i]);
  826. continue;
  827. }
  828. }else{
  829. var ips2 = val.indexOf('.');
  830. if(ips2!=-1){
  831. floatStr = floatStr + '\n' + colName +' 不能带有小数 ';
  832. floatArr.push(theForm.elements[i]);
  833. continue;
  834. }
  835. }
  836. str = tmp.split('f');
  837. if(str[0]==''){
  838. izu = 1;
  839. }else{
  840. izu = parseInt(str[0],10);
  841. }
  842. str = val.split('.');
  843. tmp = str[0];
  844. len = tmp.length;
  845. if(parseInt(len,10) > izu){
  846. floatStr = floatStr + '\n' + colName +' 不能大于'+izu+'位整数 ';
  847. floatArr.push(theForm.elements[i]);
  848. continue;
  849. }
  850. }else if(tmpArray[j] == 'sfz' && !isNull(theForm.elements[i].value) && !FWidcardCheck(theForm.elements[i].value)){//有不合法的身份证型字段
  851. sfzStr = sfzStr + '\n' + colName +' '+_IDCARD_MSG;
  852. sfzArr.push(theForm.elements[i]);
  853. }else if(tmpArray[j] == 's'&& !isNull(theForm.elements[i].value)){//有不合法的视力型字段
  854. if(checkFloat(theForm.elements[i].value, 1) && (((pfloat>=0.1) && (pfloat<=1.5))||((pfloat>=4.0)&&(pfloat<=5.2))) ){
  855. }else{
  856. floatSightStr = floatSightStr + '\n' + colName;
  857. floatSightArr.push(theForm.elements[i]);
  858. }
  859. }else if(tmpArray[j] == 'c'&& !isNull(theForm.elements[i].value)){//有不合法的颜色型字段
  860. var c1=theForm.elements[i].value.substr(0,1);
  861. var c2=theForm.elements[i].value.substr(1,6);
  862. if((theForm.elements[i].value.length==7) && (c1=="#") && (parseInt(c2,16)>=0) && (parseInt(c2,16)<=16777215)){
  863. }else{
  864. colorStr = colorStr + '\n' + colName;
  865. colorArr.push(theForm.elements[i]);
  866. }
  867. }else if(tmpArray[j].substr(0,1) == 'l'){
  868. var tmpA1=new String();
  869. var bitL;
  870. tmpA=tmpArray[j];
  871. if(arguments.length==2){
  872. if(options.valLenRule=='char'){
  873. bitL=(theForm.elements[i].value).length;
  874. }else{
  875. bitL=bitLength(theForm.elements[i].value);
  876. }
  877. }else{
  878. bitL=bitLength(theForm.elements[i].value);
  879. }
  880. var tmpAL=tmpA.length;
  881. var pos1=tmpA.indexOf("(");
  882. var pos2=tmpA.indexOf("-");
  883. var pos3=tmpA.indexOf(")");
  884. var bitL1=0;
  885. var bitL2=0;
  886. if(pos2!=-1){
  887. bitL1=tmpA.substring(pos1+1,pos2);
  888. bitL2=tmpA.substring(pos2+1,pos3);
  889. }else{
  890. bitL1=0;
  891. bitL2=tmpA.substring(pos1+1,pos3);
  892. }
  893. if(bitL!=0){
  894. if(isInteger(bitL1)&&isInteger(bitL2)){
  895. if(bitL<bitL1||bitL>bitL2){
  896. bitLStr = bitLStr + '\n' +colName+'(字母或数字长度应在'+bitL1+'和'+bitL2+'之间,汉字长度应在'+Math.floor(parseInt(bitL1)/2)+'和'+Math.floor(parseInt(bitL2)/2)+'之间)';
  897. bitLArr.push(theForm.elements[i]);
  898. }
  899. }
  900. }
  901. }else if(tmpArray[j].substr(0,2) == 'sn'){
  902. var tmpA=tmpArray[j].substr(2);
  903. if(!basicCondiction[tmpA]){
  904. basicCondiction[tmpA]=[];
  905. basicCondiction.length++;
  906. }
  907. var one={
  908. 'colName':colName,
  909. 'title':colName,
  910. 'isNull':isNull(theForm.elements[i].value),
  911. 'target':theForm.elements[i]
  912. };
  913. basicCondiction[tmpA].push(one);
  914. }
  915. }
  916. }
  917. if (notnullStr.length > 0){
  918. FWalert('以下字段不能为空!' + notnullStr);
  919. tryFocusEditableOne(notnullArr);
  920. return false;
  921. }else if (sfzStr.length > 0){
  922. FWalert('以下身份证型字段不合法!' + sfzStr);
  923. tryFocusEditableOne(sfzArr);
  924. return false;
  925. }else if (numberStr.length > 0){
  926. FWalert('以下数字型字段不合法!' + numberStr);
  927. tryFocusEditableOne(numberArr);
  928. return false;
  929. }else if (numberHeightStr.length > 0){
  930. FWalert('以下身高型字段不合法!' + numberHeightStr);
  931. tryFocusEditableOne(numberHeightArr);
  932. return false;
  933. }else if (numberWeightStr.length > 0){
  934. FWalert('以下体重型字段不合法!' + numberWeightStr);
  935. tryFocusEditableOne(numberWeightArr);
  936. return false;
  937. }else if (numberAgeStr.length > 0){
  938. FWalert('以下年龄型字段不合法!' + numberAgeStr);
  939. tryFocusEditableOne(numberAgeArr);
  940. return false;
  941. }else if (numberAgeLawMaleStr.length > 0){
  942. FWalert('以下法定男性年龄(16~60)型字段不合法!' + numberAgeLawMaleStr);
  943. tryFocusEditableOne(numberAgeLawMaleArr);
  944. return false;
  945. }else if (numberAgeLawFemaleStr.length > 0){
  946. FWalert('以下法定女性年龄(16~55)型字段不合法!' + numberAgeLawFemaleStr);
  947. tryFocusEditableOne(numberAgeLawFemaleArr);
  948. return false;
  949. }else if (postcodeStr.length > 0){
  950. FWalert('以下邮政编码型字段不合法!' + postcodeStr);
  951. tryFocusEditableOne(postcodeArr);
  952. return false;
  953. }else if (telLStr.length > 0){
  954. FWalert('以下电话型字段不合法!(格式示例:+86020-12345678)' + telLStr);
  955. tryFocusEditableOne(telLArr);
  956. return false;
  957. }else if (dateStr.length > 0){
  958. FWalert('以下日期型字段格式不合法!(格式示例:2005-05-05)' + dateStr);
  959. tryFocusEditableOne(dateArr);
  960. return false;
  961. }else if (dateLongStr.length > 0){
  962. FWalert('以下日期型字段格式不合法!(格式示例:2005-05-05 23:59:59)' + dateLongStr);
  963. tryFocusEditableOne(dateLongArr);
  964. return false;
  965. }else if (dateShortStr.length > 0){
  966. FWalert('以下日期型字段格式不合法!(格式示例:2005-05)' + dateShortStr);
  967. tryFocusEditableOne(dateShortArr);
  968. return false;
  969. }else if (dateCloseStr.length > 0){
  970. FWalert('以下日期型字段格式不合法!(格式示例:200505)' + dateCloseStr);
  971. tryFocusEditableOne(dateCloseArr);
  972. return false;
  973. }else if (dateTimeStr.length > 0){
  974. FWalert('以下时间型字段格式不合法!(格式示例:23:59:59)' + dateTimeStr);
  975. tryFocusEditableOne(dateTimeArr);
  976. return false;
  977. }else if (chineseStr.length > 0){
  978. FWalert('以下纯中文字符串不合法!' + chineseStr);
  979. tryFocusEditableOne(chineseArr);
  980. return false;
  981. }else if (notHasChineseStr.length > 0){
  982. FWalert('以下非中文字符串不合法!' + notHasChineseStr);
  983. tryFocusEditableOne(notHasChineseArr);
  984. return false;
  985. }else if (floatStr.length > 0){
  986. FWalert('以下浮点型字段不合法!' + floatStr);
  987. tryFocusEditableOne(floatArr);
  988. return false;
  989. }else if (floatSightStr.length > 0){
  990. FWalert('以下浮点型字段不合法!(示例:0.1~1.5 或者 4.0~5.2)' + floatSightStr);
  991. tryFocusEditableOne(floatSightArr);
  992. return false;
  993. }else if (bitLStr.length > 0){
  994. FWalert('以下字段长度不合法!' + bitLStr);
  995. tryFocusEditableOne(bitLArr);
  996. return false;
  997. }else if (colorStr.length > 0){
  998. FWalert('以下颜色型字段不合法!' + colorStr);
  999. tryFocusEditableOne(colorArr);
  1000. return false;
  1001. }else if (mailStr.length > 0){
  1002. FWalert('以下email地址型字段不合法!' + mailStr);
  1003. tryFocusEditableOne(mailArr);
  1004. return false;
  1005. }
  1006. if(basicCondiction.length>0){
  1007. for(var att in basicCondiction){
  1008. if(att=='length')continue;
  1009. var flag=false;
  1010. var msg='下列字段之一必录:';
  1011. var arr = [];
  1012. for(v_index=0;v_index<basicCondiction[att].length;v_index++){
  1013. if(basicCondiction[att][v_index].isNull){
  1014. msg+=basicCondiction[att][v_index].title+'、';
  1015. arr.push(basicCondiction[att][v_index].target);
  1016. }else{
  1017. flag=true;
  1018. }
  1019. }
  1020. if(!flag){
  1021. msg=msg.substr(0,msg.length-1);
  1022. FWalert(msg);
  1023. tryFocusEditableOne(arr);
  1024. return false;
  1025. }
  1026. }
  1027. }
  1028. return true;
  1029. }
  1030. /**
  1031. * 遍历控件数组,设置焦点到第一个可以见且可编辑的控件上
  1032. * @param eleArr 控件数组
  1033. */
  1034. function tryFocusEditableOne(eleArr){
  1035. for(index in eleArr){
  1036. //顺序找,找到第一个可编辑的控件
  1037. var visible = isObjVisible(eleArr[index]);
  1038. var enable = isObjEnable(eleArr[index]);
  1039. if(visible&&enable){
  1040. $(eleArr[index]).focus();
  1041. break;
  1042. }
  1043. }
  1044. }
  1045. /**
  1046. * 根据列表中的选择(checkbox,可选多条)要进行某项操作前(如批量删除),调用
  1047. * 该函数进行检查,如果没有打勾,提示没有选择,如果有打勾,确认是否要执行某项操作
  1048. * 使用方式: confirmOper(aform,'checkbox','删除');
  1049. */
  1050. function confirmOper(theForm, checkboxName, confirmStr){
  1051. var flag = false;
  1052. if(theForm.elements == null){
  1053. FWalert("要提交的表单没有数据");
  1054. }else{
  1055. for(i = 0; i < theForm.elements.length; i ++){
  1056. if(theForm.elements[i].type == "checkbox" || theForm.elements[i].type == "radio"){
  1057. if(theForm.elements[i].name == checkboxName || theForm.elements[i].name.substr(0,checkboxName.length) == checkboxName){
  1058. if (theForm.elements[i].checked){
  1059. flag = true;
  1060. break;
  1061. }
  1062. }
  1063. }
  1064. }
  1065. }
  1066. if (flag){
  1067. answer = window.confirm("您确定要" + confirmStr + "所选的记录吗?");
  1068. if (answer != "0"){
  1069. return true;
  1070. }
  1071. }else{
  1072. FWalert("您没有选择要操作的记录!");
  1073. }
  1074. return false;
  1075. }
  1076. /**
  1077. * Purpose: 根据列表中的选择(checkbox,可选多条)进行修改操作,调用
  1078. * 该函数进行检查,如果勾选项数量为空或者超过一个时,提示出错,
  1079. * 否则直接将checkbox 的值赋给inputID
  1080. * Inputs: 表单,勾选框的名字、存取ID的变量
  1081. * Returns: true、false
  1082. * 使用方法
  1083. * confirmEdit(document.saveform,'checkbox', editform.saveId)
  1084. * 从saveform多记录表内把checkbox的值赋给saveID
  1085. */
  1086. function confirmEdit(aform, checkboxName,inputID){
  1087. theForm = aform;
  1088. flag = false;
  1089. var id;
  1090. var count=0;
  1091. if(theForm.elements == null){
  1092. FWalert("要提交的表单没有数据");
  1093. }else{
  1094. for (i = 0; i < theForm.elements.length; i ++){
  1095. if (theForm.elements[i].name == checkboxName
  1096. && (theForm.elements[i].type == "checkbox" || theForm.elements[i].type == "radio" )){
  1097. if (theForm.elements[i].checked){
  1098. flag = true;
  1099. inputID.value = theForm.elements[i].value;
  1100. count = count + 1;
  1101. continue;
  1102. }
  1103. }
  1104. }
  1105. }
  1106. if(count == 0){
  1107. FWalert("您没有选择要操作的记录!");
  1108. return false;
  1109. }
  1110. if (flag && count > 1){
  1111. FWalert("您只能选择一条记录!");
  1112. return false;
  1113. }
  1114. if (flag && count == 1){
  1115. return true;
  1116. }
  1117. return false;
  1118. }
  1119. /**
  1120. * Purpose: 根据列表中的选择(checkbox,可选多条)进行修改操作,调用
  1121. * 该函数进行检查,如果勾选项数量为空或者超过一个时,提示出错,
  1122. * 否则从多记录表中checkbox 的VALUE中取值例如: value=”001|002”
  1123. * Inputs: 表单,勾选框的名字、表单、存取ID的变量(2个以上)
  1124. * Returns: true、false
  1125. * 使用方法:confirmEditCon2(document.showform,
  1126. * 'checkbox',
  1127. * hiddenform,
  1128. * 'AAA100|AAA102')
  1129. *调用上面的函数后,以下的的AAA100以及AAA102的值为001和002
  1130. * <form name="hiddenform" >
  1131. * <input type=hidden name=AAA100 value="">
  1132. * <input type=hidden name=AAA102 value="">
  1133. * </form>
  1134. */
  1135. function confirmEditCon2(aform, checkboxName,editform,eles){
  1136. theForm = aform;
  1137. if(theForm.elements == null){
  1138. FWalert("要提交的表单没有数据");
  1139. return false;
  1140. }
  1141. var count=0;
  1142. index = -1;
  1143. flag = false;
  1144. for (i = 0; i < theForm.elements.length; i ++){
  1145. if (theForm.elements[i].name == checkboxName
  1146. && (theForm.elements[i].type == "checkbox" || theForm.elements[i].type == "radio" )){
  1147. if (theForm.elements[i].checked){
  1148. flag = true;
  1149. index = i;
  1150. count = count + 1;
  1151. continue;
  1152. }
  1153. }
  1154. }
  1155. if(count == 0){
  1156. FWalert("您没有选择要操作的记录!");
  1157. return false;
  1158. }
  1159. if (flag && count > 1){
  1160. FWalert("您只能选择一条记录!");
  1161. return false;
  1162. }
  1163. if (flag && count == 1){
  1164. split_pot=theForm.elements[index].value;
  1165. split_array=split_pot.split("|");
  1166. arr2=eles.split("|");
  1167. if (arr2.length != split_array.length){
  1168. FWalert("主键数目不匹配");
  1169. FWalert("checkbox:"+split_array.length+";form.value:"+arr2.length);
  1170. }
  1171. for(j=0; j<arr2.length; j++){
  1172. inputs = editform.getElementsByTagName('input');
  1173. flag = false;
  1174. for(k = 0; k < inputs.length; k ++){
  1175. inputname = inputs[k].name;
  1176. if (inputname == arr2[j]){
  1177. inputs[k].value=split_array[j];
  1178. flag = true;
  1179. break;
  1180. }
  1181. }
  1182. if (!flag){
  1183. FWalert ("editform中没有找到明为" + arr2[j] + "的元素");
  1184. return false;
  1185. }
  1186. }
  1187. return true;
  1188. }
  1189. return false;
  1190. }
  1191. /**
  1192. *能: 将指定表单中的部分(或者所有)的复选框设置为选中状态
  1193. *@param opform form的名称
  1194. *@param chkname 复选框名称(可选),如果不提供这个参数,将选中状表单中所有多选框。
  1195. */
  1196. function checkAll(opform, chkname){
  1197. eval('var obj = document.' + opform);
  1198. if(!chkname){
  1199. $(':checkbox',obj).each(function(){
  1200. if (!this.disabled) {
  1201. this.checked=true;
  1202. }
  1203. });
  1204. }else{
  1205. $(':checkbox[name="'+chkname+'"]',obj).each(function(){
  1206. if (!this.disabled) {
  1207. this.checked=true;
  1208. }
  1209. });
  1210. }
  1211. }
  1212. /**
  1213. *功能: 将指定表单中的部分(或者所有)的复选框设置为非选中状态
  1214. *@param opform form的名称
  1215. *@param chkname 复选框名称(可选),如果不提供这个参数,将清除表单中所有多选框的选中状态。
  1216. */
  1217. function unCheckAll(opform, chkname){
  1218. eval('var obj = document.' + opform);
  1219. if(!chkname){
  1220. $(':checkbox',obj).each(function(){
  1221. if (!this.disabled) {
  1222. this.checked=false;
  1223. }
  1224. });
  1225. }else{
  1226. $(':checkbox[name="'+chkname+'"]',obj).each(function(){
  1227. if (!this.disabled) {
  1228. this.checked=false;
  1229. }
  1230. });
  1231. }
  1232. }
  1233. /**
  1234. * 要使用这个函数,直接用checkAll
  1235. *功能描述: 对包含在form的复选框,根据给定的名称设置成已选
  1236. *@param opform 表单名称
  1237. *@param chkname 复选框名称
  1238. */
  1239. function checkAll2(opform, chkname){
  1240. checkAll(opform, chkname);
  1241. }
  1242. /**
  1243. * 不要使用这个函数,直接用unCheckAll
  1244. * 功能描述: 对包含在form的复选框,根据给定的名称设置成未选中
  1245. *@param opform 表单名称
  1246. *@param chkname 复选框名称
  1247. *
  1248. */
  1249. function unCheckAll2(opform, chkname){
  1250. unCheckAll(opform, chkname);
  1251. }
  1252. /**
  1253. * Purpose: clear the elements of the form called formName
  1254. * Inputs: formName
  1255. * Returns: no return value
  1256. * Author: runfly
  1257. */
  1258. function clear(formName){
  1259. //清除表单前先提示
  1260. var confFlag = window.confirm("您确定要清除表单吗?");
  1261. if (!confFlag){
  1262. return ;
  1263. }else{
  1264. clearNoPrompt(formName);
  1265. }
  1266. }
  1267. /**
  1268. * Purpose: clear the elements of the form called formName
  1269. * Inputs: formName
  1270. * Returns: no return value
  1271. * Author: runfly
  1272. */
  1273. function clearNoPrompt(formName){
  1274. var obj;
  1275. if(typeof formName =="object"){
  1276. obj = formName;
  1277. }else{
  1278. eval("obj = document."+ formName + ";");
  1279. }
  1280. if(obj.elements.length==0){
  1281. return;
  1282. }
  1283. for(var i=0;i<obj.elements.length;i++){
  1284. var eleObj = obj.elements[i];
  1285. var type = eleObj.type;
  1286. switch(type){
  1287. case "text":
  1288. if(eleObj.readOnly==true){
  1289. break;
  1290. }else{
  1291. //封装后下拉框实际为INPUT
  1292. if($(eleObj).hasClass('fwcombox-text')){
  1293. break;
  1294. }
  1295. eleObj.value = "";
  1296. break;
  1297. }
  1298. case "hidden":break;
  1299. case "password":
  1300. if(eleObj.readOnly==true){
  1301. break;
  1302. }else{
  1303. eleObj.value = "";break;
  1304. }
  1305. case "file":eleObj.value = "";break;
  1306. case "textarea":
  1307. if(eleObj.readOnly==true){
  1308. break;
  1309. }else{
  1310. eleObj.value = "";break;
  1311. }
  1312. case "checkbox":
  1313. eleObj.checked = false;break;
  1314. case "radio":
  1315. eleObj.checked = false;break;
  1316. case "select-one":
  1317. if(eleObj.disabled){
  1318. break;
  1319. }
  1320. for(var j=0;j<eleObj.options.length;j++){
  1321. eleObj.options[j].selected = false;
  1322. if(eleObj.options[j].text == ""){//the Chinese is "please select"
  1323. eleObj.options[j].selected = true;
  1324. }
  1325. }
  1326. //处理被封装过的下拉框
  1327. if(jQuery.data(eleObj,'fwcombox')!=null){
  1328. var span = jQuery.data(eleObj,'fwcombox').fwcombox;
  1329. var input = span.find('input.fwcombox-text');
  1330. input.val('');
  1331. eleObj.value='';
  1332. }
  1333. break;
  1334. case "select-multiple":
  1335. for(var j=0;j<eleObj.options.length;j++){
  1336. eleObj.options[j].selected = false;
  1337. }
  1338. break;;
  1339. }
  1340. }
  1341. }
  1342. function bitLength(str){
  1343. if(str==null || str == "") return 0;
  1344. var len = 0;
  1345. for(var i=0; i < str.length; i++){
  1346. var t=str.substring(i,i+1);
  1347. if(t.charCodeAt(0) < 0x4e00&&t.charCodeAt(0)!=0x3002&&t.charCodeAt(0)!=0x2018&&t.charCodeAt(0)!=0x2019){
  1348. len ++;
  1349. continue;
  1350. }
  1351. len += 2;
  1352. }
  1353. return len;
  1354. }
  1355. function transact(inputStr){
  1356. var getno=inputStr;
  1357. if(getno.length==15){
  1358. var wi=new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
  1359. // alert("wi="+wi[1]);
  1360. var ai=new Array(1,0,'X',9,8,7,6,5,4,3,2);
  1361. // alert("ai="+ai);
  1362. var F1=getno.substr(0,6)+"19"+getno.substr(6,15);
  1363. // alert("F1="+F1);
  1364. var F2=new Array();
  1365. F2=F1.split("");
  1366. // alert("F2="+F2[1]);
  1367. var i=0;
  1368. var j=0;
  1369. var sum =0;
  1370. for(i = 0 ; i<17; i++)
  1371. {
  1372. j = wi[i]*F2[i];
  1373. sum = sum + j;
  1374. }
  1375. // alert("sum="+sum);
  1376. sum=sum%11;
  1377. // alert("again.sum="+sum);
  1378. F2[17]=ai[sum];
  1379. var F3=new String();
  1380. for(i=0;i<18;i++){
  1381. if(F2[i]=='X'){
  1382. F3=F3+"X";
  1383. break;
  1384. }
  1385. eval("F3=F3+"+F2[i]);
  1386. }
  1387. alert("身份证自动升位为"+F3);
  1388. return F3;
  1389. }else{
  1390. return inputStr;
  1391. }
  1392. }
  1393. function transact_na(inputStr){
  1394. var getno=inputStr;
  1395. if(getno.length==15){
  1396. var wi=new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
  1397. // alert("wi="+wi[1]);
  1398. var ai=new Array(1,0,'X',9,8,7,6,5,4,3,2);
  1399. // alert("ai="+ai);
  1400. var F1=getno.substr(0,6)+"19"+getno.substr(6,15);
  1401. // alert("F1="+F1);
  1402. var F2=new Array();
  1403. F2=F1.split("");
  1404. // alert("F2="+F2[1]);
  1405. var i=0;
  1406. var j=0;
  1407. var sum =0;
  1408. for(i = 0 ; i<17; i++)
  1409. {
  1410. j = wi[i]*F2[i];
  1411. sum = sum + j;
  1412. }
  1413. // alert("sum="+sum);
  1414. sum=sum%11;
  1415. // alert("again.sum="+sum);
  1416. F2[17]=ai[sum];
  1417. var F3=new String();
  1418. for(i=0;i<18;i++){
  1419. if(F2[i]=='X'){
  1420. F3=F3+"X";
  1421. break;
  1422. }
  1423. eval("F3=F3+"+F2[i]);
  1424. }
  1425. //alert("身份证自动升位为"+F3);
  1426. return F3;
  1427. }else{
  1428. return inputStr;
  1429. }
  1430. }
  1431. function IDCard_validate(inputStr){
  1432. var inputPro = "公民身份号码";
  1433. if(inputStr == null) inputStr = "";
  1434. var format=inputStr.length;
  1435. if(!is0AndPosInteger(inputStr)){
  1436. FWalert(inputPro + "输入不合法!");
  1437. return false; }
  1438. if(inputStr == "") return true;
  1439. if((format==18)&&(!checkCheckStr(inputStr))) return false;
  1440. if(format==15){
  1441. inputStr=transact(inputStr);
  1442. format=18;
  1443. }
  1444. if(format==15 || format==18){
  1445. if(!checkID(inputStr,inputPro,format))
  1446. return false;
  1447. }else{
  1448. FWalert("公民身份号码的位数输入不正确!");
  1449. return false;
  1450. }
  1451. return true;
  1452. }
  1453. function checkCheckStr(inputstr){
  1454. var i=(inputstr.substr(0,1)*7+inputstr.substr(1,1)*9+inputstr.substr(2,1)*10+inputstr.substr(3,1)*5+inputstr.substr(4,1)*8+inputstr.substr(5,1)*4+inputstr.substr(6,1)*2+inputstr.substr(7,1)*1+inputstr.substr(8,1)*6+inputstr.substr(9,1)*3+inputstr.substr(10,1)*7+inputstr.substr(11,1)*9+inputstr.substr(12,1)*10+inputstr.substr(13,1)*5+inputstr.substr(14,1)*8+inputstr.substr(15,1)*4+inputstr.substr(16,1)*2 )% 11 ;
  1455. if(i>2)i=12-i;
  1456. else if(i==2)i="X";
  1457. else if(i<2)i=1-i;
  1458. if(inputstr.substr(17,1)==i) {return true;}
  1459. else
  1460. {
  1461. FWalert("公民身份号码输入不合法!校验位错误");
  1462. return false;}
  1463. }
  1464. function checkID(inputStr,objName,format){
  1465. var temp;
  1466. var year,month,day;
  1467. if(inputStr.length != format){
  1468. FWalert(objName+"格式不对,应为“"+format+"”位。");
  1469. return false;
  1470. }
  1471. else {
  1472. if(format==18){
  1473. temp=inputStr.substring(6,10);
  1474. year=parseInt(temp,10);
  1475. if(year<1900 || year>2200){
  1476. FWalert(objName+"年份应介于1900与2200之间,请重新输入!");
  1477. return false;
  1478. }
  1479. }
  1480. else if(format==15){
  1481. temp=inputStr.substring(6,8);
  1482. year=parseInt(temp,10);
  1483. if(year<00 || year>99){
  1484. FWalert(objName+"年份应介于00与99之间,请重新输入!");
  1485. return false;
  1486. }
  1487. }
  1488. if(format==18)
  1489. temp=inputStr.substring(10,12);
  1490. else if(format==15)
  1491. temp=inputStr.substring(8,10);
  1492. month=parseInt(temp,10);
  1493. if(month<1 ||month>12){
  1494. FWalert(objName+"月份必须介于1与12之间!");
  1495. return false;
  1496. }
  1497. if(format==18)
  1498. temp=inputStr.substring(12,14);
  1499. else if(format==15)
  1500. temp=inputStr.substring(10,12);
  1501. day=parseInt(temp,10);
  1502. if((day==0)||(day>31)){
  1503. FWalert(objName+"日必须介于0与31之间!");
  1504. return false;
  1505. }else if(day>28 && day<31){
  1506. if(month==2){
  1507. if(day!=29){
  1508. FWalert(objName+year+"年"+month+"月无"+day+"日。");
  1509. return false;
  1510. }
  1511. else {
  1512. if((year%4)!=0){
  1513. FWalert(objName+year+"年"+month+"月无"+day+"日。");
  1514. return false;
  1515. }
  1516. else {
  1517. if((year%100==0)&&(year%400!=0)){
  1518. FWalert(objName+year+"年"+month+"月无"+day+"日。");
  1519. return false;
  1520. }
  1521. }
  1522. }
  1523. }
  1524. }
  1525. else if(day==31){
  1526. if((month==2)||(month==4)||(month==6)||(month==9)||(month==11)){
  1527. FWalert(objName+month+"月无"+day+"日");
  1528. return false;
  1529. }
  1530. }
  1531. }
  1532. return true;
  1533. }
  1534. function is0AndPosInteger(inputVal) {
  1535. var format=inputVal.length;
  1536. if(format==18){
  1537. var lastChar = inputVal.charAt(inputVal.length-1);
  1538. if(lastChar=="X")
  1539. inputVal=inputVal.substring(0, inputVal.length-1);
  1540. }
  1541. for (var i = 0; i < inputVal.length; i++) {
  1542. var oneChar = inputVal.charAt(i);
  1543. if (oneChar < "0" || oneChar > "9") {
  1544. return false;
  1545. }
  1546. }
  1547. return true;
  1548. }
  1549. /**
  1550. ** 获取中文字符串的拼音首字母
  1551. **
  1552. **/
  1553. var CH2EN = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY";
  1554. function GetChFirstLetter(str){
  1555. if(!str || str.length==0) return "";
  1556. var py = "";
  1557. for(var i=0;i<str.length;i++){
  1558. var utfcode = str.charCodeAt(i);
  1559. var ind = utfcode - 19968;
  1560. if(ind<0 || ind>=CH2EN.length){//不是汉字,返回字符本身
  1561. py += str.charAt(i);
  1562. }else{
  1563. py += CH2EN.charAt(ind);
  1564. }
  1565. }
  1566. return py;
  1567. }
  1568. /**
  1569. *置输入框为不可编辑状态
  1570. *theForm : FORM 名字 string 如:'aform'
  1571. *fields : FORM 中的输入框名字 string 如:'GMSFHM',有多个的写法:['XM','GMSFHM']
  1572. *flag : -1 表示,除了指定的fields之外
  1573. *author : herong
  1574. */
  1575. function toDisabled(theForm,fields,flag){
  1576. if (typeof theForm == 'string') {
  1577. var formStr = " var theForm = document."+theForm+" ;";
  1578. eval(formStr);
  1579. }
  1580. if(fields == null || fields == ''){
  1581. var tagObjs = theForm.elements;
  1582. for(var i=0,j=0; i<tagObjs.length; i++){
  1583. toDisabledObj(tagObjs[i]);
  1584. }
  1585. return true;
  1586. }
  1587. if(flag == -1 && typeof fields =='string'){
  1588. var tagObjs = theForm.elements;
  1589. for(var i=0,j=0; i<tagObjs.length; i++){
  1590. if($(tagObjs[i]).hasClass('fwcombox-text' )){
  1591. continue;
  1592. }
  1593. if(tagObjs[i].name != fields){
  1594. toDisabledObj(tagObjs[i]);
  1595. } else {
  1596. reObjReadOnly(tagObjs[i]);
  1597. }
  1598. }
  1599. return true;
  1600. }else if(flag == -1 && typeof fields !='string'){
  1601. var tagObjs = theForm.elements;
  1602. jQuery.each(tagObjs,
  1603. function(i,o){
  1604. if($(tagObjs[i]).hasClass('fwcombox-text' )){
  1605. return ;
  1606. }
  1607. var dFlag = false;
  1608. jQuery.each(fields,function(i1,o1){
  1609. var obj = o;
  1610. if(obj.type == 'text' || obj.type == 'select-one' || obj.type == 'textarea'){
  1611. if (obj.name == o1){
  1612. dFlag = true ;
  1613. }
  1614. }
  1615. });
  1616. if(dFlag){
  1617. reObjReadOnly(o);
  1618. } else {
  1619. toDisabledObj(o);
  1620. }
  1621. }
  1622. );
  1623. return true;
  1624. }else if(typeof fields =='string'){
  1625. var obj;
  1626. var eStr = 'obj=document.'+theForm.name+'.'+fields;
  1627. eval(eStr);
  1628. toDisabledObj(obj);
  1629. }else{
  1630. jQuery.each(fields,function(i,o){
  1631. var obj;
  1632. var eStr = 'obj=document.'+theForm.name+'.'+o;
  1633. eval(eStr);
  1634. toDisabledObj(obj);
  1635. });
  1636. }
  1637. }
  1638. /**
  1639. * @tableId 配置单记录表单的ID字符
  1640. * 功能说明:设置单记录表内所有对象为只读属性
  1641. */
  1642. function toDisabledTable(tableId){
  1643. jQuery('#'+tableId+' :input').each(function(){
  1644. toDisabledObj(this);
  1645. });
  1646. jQuery('#'+tableId+' a[class^=buttonlink]').each(function(){
  1647. $(this).linkbutton('disable');
  1648. });
  1649. }
  1650. /**
  1651. * 设置某个控件为只读
  1652. * @param Obj
  1653. */
  1654. function toDisabledObj(Obj){
  1655. var qObj = $(Obj);
  1656. if(qObj.hasClass('searchgridbox')){
  1657. qObj.searchgrid('disabled',true);
  1658. }else if($.data(Obj, 'fwcombox')!=null){
  1659. qObj.fwcombox('disabled',true);
  1660. }else{
  1661. disablePrimitiveInput(Obj);
  1662. }
  1663. }
  1664. /**
  1665. * 设置html原始控件的只读属性,仅供框架内部使用
  1666. */
  1667. function disablePrimitiveInput(obj){
  1668. if(obj==null){return;}
  1669. if(obj.type=='text'||obj.type=='textarea'|| obj.type=='file'){
  1670. obj.readOnly=true;
  1671. $(obj).addClass("readOnly");
  1672. $(obj).css("background-color","");
  1673. FWnoPointer(obj);
  1674. }else if(obj.type=='checkbox'||obj.type=='radio'
  1675. ||obj.type == 'select-one' ){
  1676. obj.disabled=true;
  1677. }
  1678. }
  1679. /**
  1680. * 取消html原始控件的只读属性,仅供框架内部使用
  1681. */
  1682. function enablePrimitiveInput(obj){
  1683. var qObj=$(obj);
  1684. if(qObj.hasClass('searchgridbox')){
  1685. qObj.searchgrid('disabled',false);
  1686. }else if($.data(obj, 'fwcombox')!=null){
  1687. qObj.fwcombox('disabled',false);
  1688. }else if (obj.type == 'checkbox' ||obj.type == 'radio'
  1689. ||obj.type == 'select-one'){
  1690. obj.disabled=false;
  1691. }else{
  1692. qObj.removeAttr("readOnly");
  1693. qObj.removeClass("readOnly");
  1694. qObj.unbind("focus.readOnly");
  1695. qObj.attr("tabindex","");
  1696. }
  1697. }
  1698. /**
  1699. * 判断控件是否可编辑
  1700. * @param Obj 控件对象
  1701. * @return true,表示可编辑;false,表示只读
  1702. */
  1703. function isObjEnable(obj){
  1704. var qObj=$(obj);
  1705. if(qObj.hasClass('searchgridbox')){
  1706. return !qObj.searchgrid('disabled');
  1707. }else if($.data(obj, 'fwcombox')!=null){
  1708. return !qObj.fwcombox('disabled');
  1709. }else if (obj.type == 'checkbox' ||obj.type == 'radio'
  1710. ||obj.type == 'select-one'){
  1711. return !obj.disabled;
  1712. }else{
  1713. return !qObj.hasClass("readOnly");
  1714. }
  1715. }
  1716. /**
  1717. * 判断控件是否可见
  1718. * @param Obj 控件对象
  1719. * @return true,表示可见;false,表示不可见
  1720. */
  1721. function isObjVisible(obj){
  1722. var qObj=$(obj);
  1723. if(qObj.hasClass('searchgridbox')){
  1724. return qObj.searchgrid('visible');
  1725. }else if($.data(obj, 'fwcombox')!=null){
  1726. return qObj.fwcombox('visible');
  1727. }else if (obj.type == 'checkbox' ||obj.type == 'radio'
  1728. ||obj.type == 'select-one'){
  1729. return qObj.is(":visible");
  1730. }else{
  1731. return qObj.is(":visible");
  1732. }
  1733. }
  1734. /**
  1735. *过滤掉select控制指定项
  1736. *selectName :select控件名 类型:string 如:document.aform.GRBGYY
  1737. *optValues : 要删除的项 类型:string|Array
  1738. *opt : 反向如果为-1,则optValues表示是要保留的项
  1739. *author :herong
  1740. *date :2008.9.23
  1741. *使用方法 1 filter('aform.XB','1');
  1742. *使用方法2 var arr=[];
  1743. *arr[0] = '1';
  1744. *arr[1] = '2';
  1745. *filter('aform.XB',arr);
  1746. */
  1747. function filter(selectName,optValues,opt){
  1748. if(typeof selectName ==='undefined' || selectName =='' || selectName ==''){
  1749. return;
  1750. }
  1751. var evalStr = selectName+'.options';
  1752. var target = eval(selectName);
  1753. var sObj = eval(evalStr);
  1754. var selectObj = sObj;
  1755. var i = 0;
  1756. //2011-12-03 若使用到过滤则先初始化下拉框,因为下拉框是获取焦点才初始化的
  1757. if(jQuery.data(target, 'fwcombox')!=null){
  1758. var opts = jQuery.data(target, 'fwcombox').options;
  1759. opts.setValue(target,target.value);
  1760. opts.dataLoad = true;
  1761. }
  1762. if(typeof optValues == 'string'){
  1763. jQuery.each(selectObj,function(){
  1764. if(this.value==optValues){
  1765. jQuery(this).remove();
  1766. FWremoveItem(target,this.value);
  1767. }
  1768. });
  1769. }else{
  1770. //20100114 wuyingde modified
  1771. var arr=[];
  1772. //提取该删除的对象
  1773. jQuery.each(selectObj,function(){
  1774. var rst=jQuery.inArray(this.value,optValues);
  1775. if(rst!=-1&&opt!=-1){
  1776. arr.push(this);
  1777. FWremoveItem(target,this.value);
  1778. }else if(rst==-1&&-1==opt){
  1779. arr.push(this);
  1780. FWremoveItem(target,this.value);
  1781. }
  1782. });
  1783. //一次性删除
  1784. jQuery(arr).remove();
  1785. }
  1786. }
  1787. /**
  1788. *清除表单输入域
  1789. *theForm : FORM 名字 form object
  1790. *fields : FORM 中的输入框名字 string/Array 注意:非框架的输入域不要用”_“ 前缀 ,如:_XM ,此类是不会清除的
  1791. *flag : -1 表示,除了指定的fields之外
  1792. *isTip : 是否提示确认
  1793. *author :herong
  1794. *date :2008.10.7
  1795. *
  1796. *e.g:
  1797. *doClear(wfForm,'','',false);//清除wfForm表单输入域,false表示清除时无需确定
  1798. *doClear(wfForm,'','',true);//清除wfForm表单输入域,true表示清除时需确定
  1799. *doClear(wfForm,'XM','',false);//清除wfForm表单'XM'输入域,false表示清除时无需确定
  1800. *doClear(wfForm,['XM','XB'],'',false);//清除wfForm表单'XM','XB'输入域,false表示清除时无需确定
  1801. *doClear(wfForm,['XM','XB'],'-1',false);//清除wfForm表单除'XM','XB'之外输入域,false表示清除时无需确定
  1802. *
  1803. *代码解析。该函数代码包含许多重复代码,而且分支条件写的不够明白,但是由于代码为遗留代码,应用多年以及许多地方,所以不敢随便更改,故留下代码分析(by liguocai)
  1804. *经过分析,函数依次是5个分支判断
  1805. *fields是空 // if(fields == null || fields == ''){
  1806. *fields不是空 && fields是string && flag==-1 // else if(flag == -1 && typeof fields =='string')
  1807. *fields不是空 && fields不是string && flag==-1 // else if(flag == -1 && typeof fields =='string')
  1808. *fields不是空 && fields是string && flag=='' // else if (typeof fields =='string')
  1809. *fields不是空 && fields不是string && flag=='' // else
  1810. *
  1811. *每个分支由于处理的实际逻辑一模一样,都是对不同的控件类型进行判断然后清空。如果维护代码的时候需要修改某个控件的清空逻辑,则对5个分支都需要更新。
  1812. */
  1813. function doClear(theForm,fields,flag,isTip){
  1814. if(typeof theForm !="object"){
  1815. eval("theForm = document."+ theForm + ";");
  1816. }
  1817. if (isTip ) {
  1818. //清除表单前先提示
  1819. var confFlag = window.confirm("您确定要清除表单吗?");
  1820. if (!confFlag){
  1821. return ;
  1822. }
  1823. }
  1824. if(fields == null || fields == ''){//fields是空
  1825. var tagObjs = theForm.elements;
  1826. for(var i=0,j=0; i<tagObjs.length; i++){
  1827. if(tagObjs[i].type == 'text' || tagObjs[i].type == 'select-one' || tagObjs[i].type == 'textarea' || tagObjs[i].type == 'hidden'){
  1828. if (tagObjs[i].name.indexOf("_") == 0 || tagObjs[i].name == 'pid' || tagObjs[i].name == 'wid') {
  1829. continue;
  1830. }
  1831. //封装后下拉框实际为INPUT
  1832. if(!$(tagObjs[i]).hasClass('fwcombox-text' )){
  1833. tagObjs[i].value='';
  1834. }
  1835. //02y清除
  1836. if($(tagObjs[i]).hasClass('bankaccounthid' )){
  1837. tagObjs[i].value='';
  1838. jQuery(':input[name="_HID_'+tagObjs[i].name+'"]',theForm).val('');
  1839. }
  1840. //05q清除
  1841. if($(tagObjs[i]).hasClass('searchgridbox')){
  1842. var box = $.data(tagObjs[i], 'searchgrid').input;
  1843. box.val('');
  1844. }
  1845. //处理被封装过的下拉框
  1846. if(tagObjs[i].type == 'select-one'){
  1847. if(jQuery.data(tagObjs[i],'fwcombox')!=null){
  1848. var span = jQuery.data(tagObjs[i],'fwcombox').fwcombox;
  1849. var input = span.find('input.fwcombox-text');
  1850. input.val('');
  1851. //将选中的项目清除,选中项为空白
  1852. var fwpanel = $.data(tagObjs[i], 'fwcombox').fwpanel;
  1853. var panelbody = $('.fwcombox-panel-body',fwpanel);
  1854. panelbody.find('div.fwcombox-item-selected').removeClass('fwcombox-item-selected');
  1855. panelbody.find('div.fwcombox-item[value=""]').addClass('fwcombox-item-selected');
  1856. }
  1857. }
  1858. }
  1859. }
  1860. return true;
  1861. } else if(flag == -1 && typeof fields =='string'){//fields不是空 && fields是string && flag==-1
  1862. var tagObjs = theForm.elements;
  1863. for(var i=0,j=0; i<tagObjs.length; i++){
  1864. if( tagObjs[i].name != fields && (tagObjs[i].type == 'text' || tagObjs[i].type == 'select-one' || tagObjs[i].type == 'textarea' || tagObjs[i].type == 'hidden')){
  1865. if ( tagObjs[i].name.indexOf("_") == 0 || tagObjs[i].name == 'pid' || tagObjs[i].name == 'wid') {
  1866. continue;
  1867. }
  1868. //封装后下拉框实际为INPUT
  1869. if(!$(tagObjs[i]).hasClass('fwcombox-text') &&!$(tagObjs[i]).hasClass('searchgrid-text')){
  1870. tagObjs[i].value='';
  1871. }
  1872. //02y清除
  1873. if($(tagObjs[i]).hasClass('bankaccounthid' )){
  1874. tagObjs[i].value='';
  1875. jQuery(':input[name="_HID_'+tagObjs[i].name+'"]',theForm).val('');
  1876. }
  1877. //05q清除
  1878. if($(tagObjs[i]).hasClass('searchgridbox')){
  1879. var box = $.data(tagObjs[i], 'searchgrid').input;
  1880. box.val('');
  1881. }
  1882. //处理被封装过的下拉框
  1883. if(tagObjs[i].type == 'select-one'){
  1884. if(jQuery.data(tagObjs[i],'fwcombox')!=null){
  1885. var span = jQuery.data(tagObjs[i],'fwcombox').fwcombox;
  1886. var input = span.find('input.fwcombox-text');
  1887. input.val('');
  1888. //将选中的项目清除,选中项为空白
  1889. var fwpanel = $.data(tagObjs[i], 'fwcombox').fwpanel;
  1890. var panelbody = $('.fwcombox-panel-body',fwpanel);
  1891. panelbody.find('div.fwcombox-item-selected').removeClass('fwcombox-item-selected');
  1892. panelbody.find('div.fwcombox-item[value=""]').addClass('fwcombox-item-selected');
  1893. }
  1894. }
  1895. }
  1896. }
  1897. } else if (flag == -1 && typeof fields !='string'){//fields不是空 && fields不是string && flag==-1
  1898. var tagObjs = theForm.elements;
  1899. var temps = fields;
  1900. for(var i=0; i<tagObjs.length; i++){
  1901. if(jQuery.inArray(tagObjs[i].name,fields)==-1){
  1902. if(tagObjs[i].type == 'text' || tagObjs[i].type == 'select-one' || tagObjs[i].type == 'textarea' || tagObjs[i].type == 'hidden'){
  1903. if (tagObjs[i].name.indexOf("_") == 0 || tagObjs[i].name == 'pid' || tagObjs[i].name == 'wid') {
  1904. continue;
  1905. }
  1906. //封装后下拉框实际为INPUT
  1907. if(!$(tagObjs[i]).hasClass('fwcombox-text') &&!$(tagObjs[i]).hasClass('searchgrid-text')){
  1908. tagObjs[i].value='';
  1909. }
  1910. //02y清除
  1911. if($(tagObjs[i]).hasClass('bankaccounthid' )){
  1912. tagObjs[i].value='';
  1913. jQuery(':input[name="_HID_'+tagObjs[i].name+'"]',theForm).val('');
  1914. }
  1915. //05q清除
  1916. if($(tagObjs[i]).hasClass('searchgridbox')){
  1917. var box = $.data(tagObjs[i], 'searchgrid').input;
  1918. box.val('');
  1919. }
  1920. //处理被封装过的下拉框
  1921. if(tagObjs[i].type == 'select-one'){
  1922. if(jQuery.data(tagObjs[i],'fwcombox')!=null){
  1923. var span = jQuery.data(tagObjs[i],'fwcombox').fwcombox;
  1924. var input = span.find('input.fwcombox-text');
  1925. input.val('');
  1926. //将选中的项目清除,选中项为空白
  1927. var fwpanel = $.data(tagObjs[i], 'fwcombox').fwpanel;
  1928. var panelbody = $('.fwcombox-panel-body',fwpanel);
  1929. panelbody.find('div.fwcombox-item-selected').removeClass('fwcombox-item-selected');
  1930. panelbody.find('div.fwcombox-item[value=""]').addClass('fwcombox-item-selected');
  1931. }
  1932. }
  1933. }
  1934. }
  1935. }
  1936. } else if (typeof fields =='string'){//fields不是空 && fields是string && flag==''
  1937. var tagObjs = theForm.elements;
  1938. for(var i=0,j=0; i<tagObjs.length; i++){
  1939. if($.trim(tagObjs[i].name) != '' && tagObjs[i].name == fields && (tagObjs[i].type == 'text' || tagObjs[i].type == 'select-one' || tagObjs[i].type == 'textarea' || tagObjs[i].type == 'hidden')){
  1940. if ( tagObjs[i].name.indexOf("_") == 0 || tagObjs[i].name == 'pid' || tagObjs[i].name == 'wid') {
  1941. continue;
  1942. }
  1943. //封装后下拉框实际为INPUT
  1944. if(!$(tagObjs[i]).hasClass('fwcombox-text')){
  1945. tagObjs[i].value='';
  1946. }
  1947. //02y清除
  1948. if($(tagObjs[i]).hasClass('bankaccounthid' )){
  1949. tagObjs[i].value='';
  1950. jQuery(':input[name="_HID_'+tagObjs[i].name+'"]',theForm).val('');
  1951. }
  1952. //05q清除
  1953. if($(tagObjs[i]).hasClass('searchgridbox')){
  1954. var box = $.data(tagObjs[i], 'searchgrid').input;
  1955. box.val('');
  1956. }
  1957. //处理被封装过的下拉框
  1958. if(tagObjs[i].type == 'select-one'){
  1959. if(jQuery.data(tagObjs[i],'fwcombox')!=null){
  1960. //将显示的文本值清空
  1961. var span = jQuery.data(tagObjs[i],'fwcombox').fwcombox;
  1962. var input = span.find('input.fwcombox-text');
  1963. input.val('');
  1964. //将选中的项目清除,选中项为空白
  1965. var fwpanel = $.data(tagObjs[i], 'fwcombox').fwpanel;
  1966. var panelbody = $('.fwcombox-panel-body',fwpanel);
  1967. panelbody.find('div.fwcombox-item-selected').removeClass('fwcombox-item-selected');
  1968. panelbody.find('div.fwcombox-item[value=""]').addClass('fwcombox-item-selected');
  1969. }
  1970. }
  1971. }
  1972. }
  1973. } else {//fields不是空 && fields不是string && flag==''
  1974. //{这是一段遗留的代码,虽然一看来就是逻辑过于简单,有问题,但是不做修改
  1975. var tagObjs = theForm.elements;
  1976. jQuery.each(fields,function(i,o){
  1977. var dd = $("[name='"+o+"']",$(theForm));
  1978. if (dd != null) {
  1979. if(dd.hasClass('searchgridbox')){
  1980. var box = $.data(dd.get(0), 'searchgrid').input;
  1981. box.val('');
  1982. } else {
  1983. dd.val('');
  1984. }
  1985. }
  1986. });
  1987. //}
  1988. //新增更正的代码
  1989. for(var i=0; i<tagObjs.length; i++){
  1990. if(jQuery.inArray(tagObjs[i].name,fields)!=-1){
  1991. if(tagObjs[i].type == 'text' || tagObjs[i].type == 'select-one' || tagObjs[i].type == 'textarea' || tagObjs[i].type == 'hidden'){
  1992. if (tagObjs[i].name.indexOf("_") == 0 || tagObjs[i].name == 'pid' || tagObjs[i].name == 'wid') {
  1993. continue;
  1994. }
  1995. //封装后下拉框实际为INPUT
  1996. if(!$(tagObjs[i]).hasClass('fwcombox-text') &&!$(tagObjs[i]).hasClass('searchgrid-text')){
  1997. tagObjs[i].value='';
  1998. }
  1999. //02y清除
  2000. if($(tagObjs[i]).hasClass('bankaccounthid' )){
  2001. tagObjs[i].value='';
  2002. jQuery(':input[name="_HID_'+tagObjs[i].name+'"]',theForm).val('');
  2003. }
  2004. //05q清除
  2005. if($(tagObjs[i]).hasClass('searchgridbox')){
  2006. var box = $.data(tagObjs[i], 'searchgrid').input;
  2007. box.val('');
  2008. }
  2009. //处理被封装过的下拉框
  2010. if(tagObjs[i].type == 'select-one'){
  2011. if(jQuery.data(tagObjs[i],'fwcombox')!=null){
  2012. var span = jQuery.data(tagObjs[i],'fwcombox').fwcombox;
  2013. var input = span.find('input.fwcombox-text');
  2014. input.val('');
  2015. //将选中的项目清除,选中项为空白
  2016. var fwpanel = $.data(tagObjs[i], 'fwcombox').fwpanel;
  2017. var panelbody = $('.fwcombox-panel-body',fwpanel);
  2018. panelbody.find('div.fwcombox-item-selected').removeClass('fwcombox-item-selected');
  2019. panelbody.find('div.fwcombox-item[value=""]').addClass('fwcombox-item-selected');
  2020. }
  2021. }
  2022. }
  2023. }
  2024. }
  2025. return true;
  2026. }
  2027. }
  2028. /**
  2029. * 在页面的左上角显示错误消息
  2030. * @param msg 消息内容
  2031. * @param timeout 秒为单位,0或者负数表示不自动隐藏
  2032. * @author 吴英德
  2033. **/
  2034. var framework_message_layer;
  2035. var clearIntervalID;
  2036. function showErrMsg(msg,delay){
  2037. if(framework_message_layer == null){
  2038. framework_message_layer=document.createElement('div');
  2039. framework_message_layer.className='err_message_blank_board';
  2040. //Element.extend(framework_message_layer);
  2041. document.body.appendChild(framework_message_layer);
  2042. clearIntervalID=window.setInterval(recurrectLocation,100);
  2043. recurrectLocation();
  2044. }
  2045. var my_div = document.createElement('div');
  2046. my_div.className='err_message';
  2047. //Element.extend(my_div);
  2048. my_div.innerHTML=msg;
  2049. framework_message_layer.appendChild(my_div);
  2050. recurrectLocation();
  2051. if(delay>0){
  2052. setTimeout(function(){
  2053. jQuery(my_div).remove();
  2054. if(jQuery(framework_message_layer).is(':empty')){
  2055. jQuery(framework_message_layer).remove();
  2056. window.clearInterval(clearIntervalID);
  2057. framework_message_layer=null;
  2058. }
  2059. },delay*1000);
  2060. }
  2061. }
  2062. function recurrectLocation(){
  2063. if(framework_message_layer==null)
  2064. {clearInterval(clearIntervalID);return;}
  2065. var posX,posY;
  2066. if (window.innerHeight) {
  2067. posX = window.pageXOffset;
  2068. posY = window.pageYOffset;
  2069. }
  2070. else if (document.documentElement && document.documentElement.scrollTop) {
  2071. posX = document.documentElement.scrollLeft;
  2072. posY = document.documentElement.scrollTop;
  2073. }
  2074. else if (document.body) {
  2075. posX = document.body.scrollLeft;
  2076. posY = document.body.scrollTop;
  2077. }
  2078. framework_message_layer.style.top=String(posY+10)+'px';
  2079. framework_message_layer.style.right=String(posX+10)+'px';
  2080. }
  2081. /**
  2082. * 作者:刘斯宇
  2083. * 日期:2005-08-24
  2084. * 功能:转换身份证号(无提示信息)
  2085. * 参数意义:str 身份证号码
  2086. * 返回值:身份证号码 或
  2087. * 0 传入参数str为null
  2088. * -1 公民身份证长度不是15或18位
  2089. * -1 15位公民身份证不是数字
  2090. * -3 18位公民身份证前17位不是数字
  2091. * -4 没有通过18位校验
  2092. * 使用方法: transformSfzh_na("123456789");
  2093. */
  2094. function transformSfzh_na(str){
  2095. var newstr="new";
  2096. if ((isNull(str)) || (str == "null") || (str == "")){
  2097. return 0;
  2098. }
  2099. if (str.length!=15 && str.length !=18){
  2100. //alert("公民身份证长度不正确应该为15或18位!");
  2101. return -1;
  2102. }
  2103. if (str.length==15){
  2104. if (isNaN(str)==true){
  2105. //alert("15位公民身份证应该为数字!");
  2106. return -2;
  2107. }
  2108. newstr = transact_na(str);
  2109. }
  2110. if (str.length==18){
  2111. if (isNaN(str.substr(0,17))==true){
  2112. //alert("18位公民身份证前17位应该为数字!");
  2113. return -3;
  2114. }
  2115. newstr = str;
  2116. }
  2117. if (IDCard_validate(newstr)==true){
  2118. return newstr;
  2119. }else{
  2120. return -4;
  2121. }
  2122. }
  2123. function OpenHelp(url){
  2124. var w=600;
  2125. var h=400;
  2126. var l = (screen.Width-w)/2;
  2127. var t = (screen.Height-h)/2;
  2128. window.open(url,"","top=" +t+ ", left=" + l+",width="+w+",height="+h+",toolbar=no,resizable=yes,status=no");
  2129. }
  2130. /**
  2131. *
  2132. * 父下拉框 parentOBJ
  2133. * 子录入框 childOBJ
  2134. * 功能描述: 证件类型的处理 选择了证件类型为身份证号码后,录入的证件号码
  2135. */
  2136. function zjlx(parentOBJ,childOBJ){
  2137. FWzjlx(parentOBJ,childOBJ);
  2138. }
  2139. /**功能描述:多记录列表数据显示完毕后调用
  2140. *入参 :
  2141. * ListID 多记录表的配置ID名称
  2142. * FunName 自定义的函数名
  2143. * 应用的方式:
  2144. * jQuery(function(){
  2145. * onListLoad('fw_blank_bulletin','myfun');
  2146. * });
  2147. * function myfun(){}
  2148. * **/
  2149. function onListLoad(ListID,FunName){
  2150. FWonListLoad(ListID,FunName);
  2151. }
  2152. /**功能描述:双击多记录列表数据后调用自定义函数
  2153. *入参 :
  2154. * ListID 多记录表的配置ID名称
  2155. * FunName 自定义的函数名,必须有入参 rowIndex,rowData
  2156. *应用的方式:
  2157. *jQuery(function(){
  2158. *onDblClickListRow('fw_blank_bulletin','myfun');
  2159. *});
  2160. *function myfun(rowIndex,rowData){}
  2161. * **/
  2162. function onDblClickListRow(ListID,FunName){
  2163. FWonDblClickListRow(ListID,FunName);
  2164. }
  2165. /**功能描述:单击多记录列表数据后调用自定义函数
  2166. *入参 :
  2167. *ListID 多记录表的配置ID名称
  2168. *FunName 自定义的函数名,必须有入参 rowIndex,rowData
  2169. *应用的方式:
  2170. *jQuery(function(){
  2171. *onClickListRow('fw_blank_bulletin','myfun');
  2172. *});
  2173. *function myfun(rowIndex,rowData){}
  2174. * **/
  2175. function onClickListRow(ListID,FunName){
  2176. FWonClickListRow(ListID,FunName);
  2177. }
  2178. /**功能描述:where条件修改后,重新刷新多记录表的数据
  2179. *入参 :
  2180. *ListID 多记录表的配置ID名称
  2181. *Where 新的查询条件
  2182. *pageNum 为刷新列表后显示第几页的数据,-1表示当前页,默认为1
  2183. *应用的方式:
  2184. *getListData('fw_blank_todolist'," OPERID='23' ");
  2185. **/
  2186. function getListData(ListID,Where,pageNum){
  2187. FWgetListData(ListID,Where,pageNum);
  2188. }
  2189. //form内部控件的设置和获取
  2190. /**从html的form里面提取控件的值,用object表示,属性名是控件的名称,属性值是控件的值。
  2191. * 如果form里面有重名控件,那么属性值是个数组。另外,checkbox和可以多选的下拉列表的值
  2192. * 总是数组。
  2193. */
  2194. function GetForm(form){
  2195. return FWGetForm(form);
  2196. }
  2197. /**设置form内各个控件的值
  2198. * 与GetForm相对应,values是一个object,具体要求请参阅FWGetForm
  2199. */
  2200. function SetForm(form,values){
  2201. return FWSetForm(form,values);
  2202. }
  2203. /**
  2204. *
  2205. * @param obj 下拉框对象
  2206. * @param val 值
  2207. * 功能说明:因为下拉框经过封装,在JS脚本内赋值给下拉框时,
  2208. * 下拉框会没有反应,需要调用此函数来赋值
  2209. */
  2210. function setCombVal(combox,val){
  2211. FWsetCombVal(combox,val);
  2212. }
  2213. /**
  2214. *
  2215. * @param obj 多记录表单内配置的对象
  2216. * @param 第几行
  2217. * 功能说明:一个多记录表格中,每一行记录有一个控件例如 checkbox,radion,超链接等
  2218. * 使用方法 <input type="checkbox" onclick="myFun(this)"/>
  2219. * <a href="#" onclick="myFun(this)" >测试</a>
  2220. * function myFun(obj){
  2221. * var rownum = getGridRowIndex(obj);
  2222. * }
  2223. */
  2224. function getGridRowIndex(obj){
  2225. var tr = $(obj).parent().parent();
  2226. var rownum = tr.attr('fwdatagrid-row-index');
  2227. rownum = parseInt(rownum,10);
  2228. return rownum;
  2229. }
  2230. /**
  2231. *
  2232. * @param configID 配置表单的ID
  2233. * @param query 查询的入参 例如 XB=1
  2234. * 功能说明:查询多记录表单中符合查询条件的记录所在的行号,从0开始算
  2235. * 若查询不到则返回-1
  2236. * 举例:var i = getGridRowIndexBS('bxgx_cbgx_rydj','JFRYLB=22');
  2237. * 多个查询条件
  2238. * var i = getGridRowIndexBS('bxgx_cbgx_rydj','XM=张小小&&XB=9');
  2239. */
  2240. function getGridRowIndexBS(configID,query){
  2241. var rows = $('#'+configID).fwdatagrid('getRows');
  2242. var array = query.split("&&");
  2243. var index = -1;
  2244. if(rows==null){
  2245. FWalert("配置表单不存在!");
  2246. return index;
  2247. }
  2248. if(query==''||query==null){
  2249. FWalert("查询条件不能为空!");
  2250. return index;
  2251. }
  2252. for(var i=0;i<rows.length;i++){
  2253. var data = rows[i];
  2254. var b1 = false;
  2255. var b2 = true;
  2256. for(var j=0;j<array.length;j++){
  2257. var search = array[j].split("=");
  2258. var col = search[0];
  2259. var val = search[1];
  2260. b1 = true;
  2261. if(data[col]!=val){
  2262. b2 = false;
  2263. break;
  2264. }
  2265. }
  2266. if(b1&&b2){
  2267. index = i;
  2268. break;
  2269. }
  2270. }
  2271. return index;
  2272. }
  2273. /**
  2274. *
  2275. * @form form对象
  2276. * 功能说明:检验不能为空时会给录入框值为空的边框和底部加颜色
  2277. * 此函数负责把颜色去掉,恢复原来的正常色
  2278. */
  2279. function reNullShow(form){
  2280. var ele;
  2281. var readOnly;
  2282. for (i = 0; i < form.elements.length; i ++){//遍历form中的字段
  2283. ele = form.elements[i];
  2284. readOnly = form.elements[i].readOnly;
  2285. if (ele.vldStr==null){
  2286. continue;
  2287. }
  2288. if (ele.vldStr==''){
  2289. continue;
  2290. }
  2291. if(readOnly&&ele.type!='select-one'){
  2292. continue;
  2293. }
  2294. if($(ele).css("background-color")=="#ffffcc"){
  2295. $(ele).css("background","white");
  2296. $(ele).css("border","#B5B8C8 1px solid");
  2297. }
  2298. //处理下拉框的情况
  2299. if(ele.type=='select-one'){
  2300. if($.data(ele, 'fwcombox')!=null){
  2301. var span = jQuery.data(ele, 'fwcombox').fwcombox;
  2302. var input = jQuery('.fwcombox-text',span);
  2303. if(input.css("background-color")=="#ffffcc"){
  2304. input.css({background:'white'});
  2305. span.css({border:'#B5B8C8 1px solid'});
  2306. }
  2307. }
  2308. }
  2309. }//for
  2310. }
  2311. /**
  2312. * @obj 控件对象
  2313. * 功能说明:撤销掉控件的只读属性
  2314. */
  2315. function reObjReadOnly(obj){
  2316. var ele = obj;
  2317. var qObj = $(obj);
  2318. if(qObj.hasClass('searchgridbox')){
  2319. qObj.searchgrid('disabled',false);
  2320. obj.readOnly = false;
  2321. }else if(qObj.hasClass('bankaccounthid')){
  2322. enablePrimitiveInput($("input[name=_HID_" + qObj.attr("name") + "]",qObj.parent()).get(0));
  2323. }else if($.data(ele, 'fwcombox')!=null){
  2324. qObj.fwcombox('disabled',false);
  2325. }else if (obj.type == 'checkbox' ||obj.type == 'radio'){
  2326. enablePrimitiveInput(obj);
  2327. }else{
  2328. enablePrimitiveInput(obj);
  2329. }
  2330. }
  2331. /**
  2332. * @form form对象
  2333. * @fields : FORM 中的输入框名字 string 如:'GMSFHM',有多个的写法:['XM','GMSFHM']
  2334. * @flag : -1 表示,除了指定的fields之外
  2335. * 功能说明:撤销掉form内所有对象的只读属性
  2336. */
  2337. function reFormReadOnly(form,fields,flag){
  2338. if (typeof theForm == 'string') {
  2339. var formStr = " var theForm = document."+theForm+" ;";
  2340. eval(formStr);
  2341. }
  2342. //需处理的字段的j集合,无论前台是什么类型,一律转成object集合
  2343. var fieldsSet ={};
  2344. if(fields==null ||fields == ''){
  2345. //全集
  2346. for(i=0;i<form.elements.length;i++){
  2347. fieldsSet[form.elements[i].name]=true;
  2348. }
  2349. }else if(typeof fields==='string'){
  2350. //单元素集合
  2351. fieldsSet[fields]=true;
  2352. }else if($.isArray(fields)){
  2353. //部分集合
  2354. for(i=0;i<fields.length;i++){
  2355. fieldsSet[fields[i]]=true;
  2356. }
  2357. }
  2358. //反向选择
  2359. if(flag ==-1){
  2360. var revertSet = {};
  2361. for(i=0;i<form.elements.length;i++){
  2362. var name = form.elements[i].name;
  2363. if(fieldsSet[name]!==true){
  2364. revertSet[name]=true;
  2365. }
  2366. }
  2367. fieldsSet = revertSet;
  2368. }
  2369. //遍历form中的字段
  2370. for (i = 0; i < form.elements.length; i ++){
  2371. var name = form.elements[i].name;
  2372. if(name == '' || true!==fieldsSet[name]){
  2373. //过滤无需处理的控件
  2374. continue;
  2375. }
  2376. reObjReadOnly(form.elements[i]);
  2377. }
  2378. }
  2379. /**
  2380. * @tableId 配置单记录表单的ID字符
  2381. * 功能说明:撤销掉单记录表内所有对象的只读属性
  2382. */
  2383. function reTableReadOnly(tableId){
  2384. jQuery('#'+tableId+' :input').each(function(){
  2385. reObjReadOnly(this);
  2386. });
  2387. jQuery('#'+tableId+' a[class^=buttonlink]').each(function(){
  2388. $(this).linkbutton('enable');
  2389. });
  2390. }
  2391. /**
  2392. * @tableId 配置多记录表单的ID字符
  2393. * 功能说明:获取可编辑多记录表的数据集
  2394. */
  2395. function getEditGridData(tableId){
  2396. var rows = $("#"+tableId).fweditgrid("getRows");
  2397. return rows;
  2398. }
  2399. /**
  2400. * 功能说明:给可编辑多记录表的增加一行数据
  2401. * @param tableId 配置多记录表单的ID字符
  2402. * @param rows 新增行的行数据,具体入参请参考fweditgrid("addRows",rows)
  2403. * @returns int 添加后当前页面的总行数
  2404. */
  2405. function addEditGridRow(tableId,rows){
  2406. return $("#"+tableId).fweditgrid("addRows",rows);
  2407. }
  2408. /**
  2409. * 功能说明:删除可编辑多记录表的一行或多行数据
  2410. * @tableId 配置多记录表单的ID字符
  2411. * @row 行号,具体入参请参考fweditgrid("removeRows",rows)
  2412. */
  2413. function delEditGridRow(tableId,row){
  2414. $("#"+tableId).fweditgrid("removeRows",row);
  2415. }
  2416. /**
  2417. * 计算两个年月之间的相差月数
  2418. *
  2419. * @param strDateBegin YYYYMM
  2420. * @param strDateEnd YYYYMM
  2421. * @return 无
  2422. */
  2423. function getMonthsBetween(strDateBegin, strDateEnd) {
  2424. var strOut;
  2425. if(!isNY(strDateBegin)){
  2426. FWalert('年月:' + strDateBegin +' 格式不正确或数值不正确');
  2427. return 0;
  2428. }
  2429. if(!isNY(strDateEnd)){
  2430. FWalert('年月:' + strDateEnd +' 格式不正确或数值不正确');
  2431. return 0;
  2432. }
  2433. var iB = parseInt(strDateBegin.substring(0,4),10)* 12 + parseInt(strDateBegin.substring(4, 6),10);
  2434. var iE = parseInt(strDateEnd.substring(0, 4),10) * 12 + parseInt(strDateEnd.substring(4, 6),10);
  2435. strOut = iE - iB;
  2436. return strOut;
  2437. }
  2438. /**
  2439. * 计算日期间隔的天数
  2440. * @param strBeginDate
  2441. * 开始日期 字符串 格式 yyyy-mm-dd
  2442. * @param strEndDate
  2443. * 结束日期 字符串 格式 yyyy-mm-dd
  2444. * @return 无
  2445. */
  2446. function getDaysBetween(strBeginDate, strEndDate) {
  2447. if(!isDate2(strBeginDate)){
  2448. FWalert('日期字符串:' + strBeginDate +' 格式不正确或数值不正确');
  2449. return 0;
  2450. }
  2451. if(!isDate2(strEndDate)){
  2452. FWalert('日期字符串:' + strEndDate +' 格式不正确或数值不正确');
  2453. return 0;
  2454. }
  2455. var arryB = strBeginDate.split("-");
  2456. var arryE = strEndDate.split("-");
  2457. var iY = parseInt(arryB[0],10);
  2458. var iM = parseInt(arryB[1],10);
  2459. var iD = parseInt(arryB[2],10);
  2460. var dateB = new Date(iY, iM - 1, iD);
  2461. iY = parseInt(arryE[0],10);
  2462. iM = parseInt(arryE[1],10);
  2463. iD = parseInt(arryE[2],10);
  2464. var dateE = new Date(iY, iM - 1, iD);
  2465. var iDay = (dateE - dateB )/(1000*60*60*24);
  2466. return iDay;
  2467. }
  2468. /**
  2469. * 计算间隔天数后的日期
  2470. * date != null
  2471. * @param strDate 日期 字符串 格式 yyyy-mm-dd
  2472. * @param days 间隔的天数
  2473. * @return 格式 yyyy-mm-dd
  2474. */
  2475. function addDayToDate(strDate, days){
  2476. if(!isDate2(strDate)){
  2477. FWalert('日期字符串:' + strBeginDate +' 格式不正确或数值不正确');
  2478. return 0;
  2479. }
  2480. var monthString, monthString, dateString;
  2481. var arry = strDate.split("-");
  2482. var iY = parseInt(arry[0],10);
  2483. var iM = parseInt(arry[1],10);
  2484. var iD = parseInt(arry[2],10);
  2485. var mdate = new Date(iY, iM - 1, iD);
  2486. var num = parseInt(days,10);
  2487. mdate.setDate(mdate.getDate()+num);
  2488. //如果月份长度少于2,则前加 0 补位
  2489. if((mdate.getMonth() + 1).toString().length == 1) {
  2490. monthString = 0 + "" + (mdate.getMonth() + 1).toString();
  2491. } else {
  2492. monthString = (mdate.getMonth() + 1).toString();
  2493. }
  2494. //如果天数长度少于2,则前加 0 补位
  2495. if (mdate.getDate().toString().length == 1) {
  2496. dayString = 0 + "" + mdate.getDate().toString();
  2497. } else {
  2498. dayString = mdate.getDate().toString();
  2499. }
  2500. dateString = mdate.getFullYear() + "-" + monthString + "-" + dayString;
  2501. return dateString;
  2502. }
  2503. /**
  2504. * 计算月份指定累加或减少月数后的月份
  2505. *
  2506. * @param strDate
  2507. * 初始年月 YYYYMM
  2508. * @param months
  2509. * 增加或减少的数量
  2510. * @return YYYYMM
  2511. */
  2512. function addMonthToYM(strDate, months){
  2513. if(!isNY(strDate)){
  2514. FWalert('年月:' + strDate +' 格式不正确或数值不正确');
  2515. return '0';
  2516. }
  2517. var iY = parseInt(strDate.substring(0,4),10);
  2518. var iM = parseInt(strDate.substring(4,6),10);
  2519. var mdate = new Date(iY, iM - 1, 1);
  2520. var num = parseInt(months+"",10);
  2521. mdate.setMonth(mdate.getMonth() + num);
  2522. //如果月份长度少于2,则前加 0 补位
  2523. if((mdate.getMonth() + 1).toString().length == 1) {
  2524. mth = 0 + "" + (mdate.getMonth() + 1).toString();
  2525. } else {
  2526. mth = (mdate.getMonth() + 1).toString();
  2527. }
  2528. var str = mdate.getFullYear() + "" + mth;
  2529. return str;
  2530. }
  2531. /**
  2532. * 获取应用服务器时间
  2533. *
  2534. * @param formate
  2535. * 日期的格式
  2536. * @return 无
  2537. */
  2538. function getCurDate(formate){
  2539. var str = "";
  2540. $.ajax({
  2541. url:contextPath+'/jsp/framework/sysdate.jsp'
  2542. ,data:{FORMATE:formate}
  2543. ,cache:false
  2544. ,type:'post'
  2545. ,async:false
  2546. ,error:function (request, textStatus, errorThrown){alert("获取系统时间出错!");}
  2547. ,success:function (data, textStatus){
  2548. if("1"!=data.FHZ){//出错了,弹出错误提醒
  2549. if("CSRF" == data.FHZ){
  2550. showMsg(data.MSG||'',3);
  2551. return;
  2552. }
  2553. }
  2554. str = jQuery.trim(data);
  2555. }
  2556. ,beforeSend:function(XMLHttpRequest ){var cToken = $.cookie(headtoken) || token;XMLHttpRequest.setRequestHeader(headtoken,cToken); }
  2557. });
  2558. return str;
  2559. }
  2560. /**
  2561. * 获取下拉框中字典项值对应的字典文本
  2562. *@parm obj
  2563. *@return 返回字典文本
  2564. *使用方法 getComText(aform.XB)
  2565. */
  2566. function getComText(obj){
  2567. var value = obj.value;
  2568. var s ="";
  2569. $('>option', obj).each(function(){
  2570. var v = $(this).attr('value');
  2571. if(v == value){
  2572. s = $(this).html();
  2573. return false;
  2574. }
  2575. });
  2576. return s;
  2577. }
  2578. /**
  2579. *将包含在form内的单记录表格的信息复制到多记录表格内
  2580. * @param theform 为form对象
  2581. * @param configID 多记录表单的配置ID
  2582. * @return void
  2583. * 使用方法 formToGird(aform,"zzy_t2");
  2584. */
  2585. function formToGird(theform,configID){
  2586. var rst = GetForm(theform);
  2587. jQuery('select',theform).each(function(){
  2588. var txt="";
  2589. if(this.value!=''){
  2590. txt = getComText(this);
  2591. }
  2592. rst['_DIC_'+this.name]=txt;
  2593. });
  2594. var target =$('#'+configID).get(0);
  2595. var headers = $.data(target, 'fwdatagrid').options.data.headers;
  2596. var datas={};
  2597. for(var i=0;i<headers.length;i++){
  2598. if(typeof rst[headers[i]] !='undefined'){
  2599. datas[headers[i]]=rst[headers[i]];
  2600. }
  2601. if(typeof rst['_DIC_'+headers[i]] !='undefined'){
  2602. datas['_DIC_'+headers[i]]=rst['_DIC_'+headers[i]];
  2603. }
  2604. }
  2605. $('#'+configID).fwdatagrid('addRows',datas);
  2606. }
  2607. /**
  2608. *函数用于将list对象中str1里面字段的值包含str2替换为str3
  2609. *list:所要处理的list对象
  2610. *colNames:字段拼串字符串对象,如"AAE005,AAE006"
  2611. *str2:指定字段值包含的字符串,需要替换的字符串
  2612. *str3:替换的字符串,将str2替换成str3
  2613. *
  2614. */
  2615. function replaceListValue(list,colNames,str1,str2){
  2616. var a = colNames.split(','); //将字符串str转换为数组对象
  2617. var aLen = a.length; //获取数组a的长度
  2618. var rLen = list.length; //获取list对象的长度
  2619. for(var j = 0; j < aLen; j++){
  2620. for(var i = 0; i < rLen ; i++){
  2621. var str = list[i][a[j]];
  2622. var tmp="str = str.replace(/"+str1+"/g, str2)";
  2623. eval(tmp);
  2624. list[i][a[j]] = str; //将替换后的值重新保存到list中
  2625. }
  2626. }
  2627. return list;
  2628. }
  2629. /**
  2630. *将list对象中指定字段的值设为strV
  2631. *使用方法:list = setListValue(rows,'GMSFHM','X');
  2632. */
  2633. function setListValue(list,colName,strV){
  2634. var rLength = list.length; //list对象的行数
  2635. for(var i = 0 ; i < rLength; i++){ //对list的每行循环
  2636. list[i][colName] = strV; //给第i行的str1字段赋值strV
  2637. }
  2638. return list;
  2639. }
  2640. /**
  2641. * 设置控件的焦点
  2642. * 入参obj 为控件对象
  2643. * 使用方法:
  2644. * 方法1:setFocus(djspForm.AAC002);
  2645. * 方法2:setFocus($('#bxgx_comm_cxtj [name=AAC002]'));
  2646. * bxgx_comm_cxtj 为单记录表单ID
  2647. */
  2648. function setFocus(obj){
  2649. var input;
  2650. var tmpObj = $(obj);
  2651. var textLen = 0;
  2652. if(!tmpObj.hasClass('buttonlink')){
  2653. if(jQuery.data(obj,"fwcombox")!=null){
  2654. var span = jQuery.data(obj,'fwcombox').fwcombox;
  2655. input = span.find('input.fwcombox-text');
  2656. }else{
  2657. input = tmpObj;
  2658. }
  2659. input.focus() ; //获取焦点
  2660. try{
  2661. textLen = input.val().length ;//获取当前文字对象长度
  2662. }catch(e){
  2663. textLen=0;
  2664. }
  2665. var rng = document.selection.createRange(); //获取焦点区域
  2666. rng.moveStart("character",textLen) ;//向后移动指定长度
  2667. rng.select();
  2668. }else{
  2669. input = $(obj);
  2670. input.focus() ; //获取焦点
  2671. }
  2672. }
  2673. /**
  2674. * 判断比例是否在0至100范围内,并自动四舍五入保留小数后两位
  2675. * @param obj 控件的对象
  2676. * @returns 空
  2677. */
  2678. function blpd(obj){
  2679. /*取数值*/
  2680. var val = obj.value;
  2681. if(val != null && (val > 100 || val < 0)){
  2682. obj.value='';
  2683. FWalert("比例必需在0至100范围内");
  2684. setTimeout(function(){obj.focus();},0);
  2685. }
  2686. /*自动四舍五入保留小数后两位*/
  2687. else{
  2688. var valNew = Math.round(val*100)/100;
  2689. obj.value=valNew;
  2690. }
  2691. }
  2692. /**
  2693. * 日期格式转换
  2694. * @param str 日期字符串
  2695. * @param ft1 当前的日期格式
  2696. * @param ft2 转换后的日期格式
  2697. * @returns 转换后的日期
  2698. * 使用方法:var sDate = formateDateStr('20110131','yyyymmdd','yyyy-mm-dd');
  2699. */
  2700. function formateDateStr(str,ft1,ft2){
  2701. var sYear ="";
  2702. var sMm ="";
  2703. var sDd ="";
  2704. var sDate="";
  2705. var ft_1 = ft1.toLowerCase();
  2706. var ft_2 = ft2.toLowerCase();
  2707. var iY=0,iM=0,iD=0;
  2708. iY = ft_2.indexOf('yyyy');
  2709. iM = ft_2.indexOf('mm');
  2710. iD = ft_2.indexOf('dd');
  2711. if(iY==-1||iM==-1||iD==-1){
  2712. alert(ft2+' 格式不正确!');
  2713. return '';
  2714. }
  2715. iY = ft_1.indexOf('yyyy');
  2716. iM = ft_1.indexOf('mm');
  2717. iD = ft_1.indexOf('dd');
  2718. if(iY==-1||iM==-1||iD==-1){
  2719. alert(ft1+' 格式不正确!');
  2720. return '';
  2721. }
  2722. sYear = str.substr(iY,4);
  2723. sMm = str.substr(iM,2);
  2724. sDd = str.substr(iD,2);
  2725. sDate=ft_2.replace(/yyyy/gi,sYear);
  2726. sDate=sDate.replace(/mm/gi,sMm);
  2727. sDate=sDate.replace(/dd/gi,sDd);
  2728. return sDate;
  2729. }
  2730. /**
  2731. * 日期比较函数
  2732. * 判断如果date1大于date2就给出msg提示
  2733. * @param date1 开始日期
  2734. * @param date2 终止日期日期
  2735. * @param msg 自定义的提示信息
  2736. * 日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd
  2737. * 使用方法:compareDate('2011-01-01','2011-01-02','日期比较失败');
  2738. */
  2739. function compareDate(date1,date2,msg){
  2740. var sYear ='';
  2741. var sMonth='';
  2742. var sDay ='';
  2743. var sDate1='';
  2744. var sDate2='';
  2745. var arry;
  2746. var s='';
  2747. var i=0,j=0,iDate1=0,iDate2=0;
  2748. var b1 = isDate(date1);
  2749. var b2 = isDate(date2);
  2750. if(!b1){
  2751. alert(date1+' 日期不正确!');
  2752. return false;
  2753. }
  2754. if(!b2){
  2755. alert(date2+' 日期不正确!');
  2756. return false;
  2757. }
  2758. i = date1.indexOf('-');
  2759. if(i>0){
  2760. s="-";
  2761. }
  2762. i = date1.indexOf('/');
  2763. if(i>0){
  2764. s="/";
  2765. }
  2766. if(s==''){
  2767. sDate1 = date1;
  2768. }else{
  2769. arry = date1.split(s);
  2770. sYear =arry[0];
  2771. sMonth =arry[1];
  2772. sDay =arry[2];
  2773. sDate1 =sYear+sMonth+sDay;
  2774. }
  2775. s="";
  2776. i = date2.indexOf('-');
  2777. if(i>0){
  2778. s="-";
  2779. }
  2780. i = date2.indexOf('/');
  2781. if(i>0){
  2782. s="/";
  2783. }
  2784. if(s==''){
  2785. sDate2 = date2;
  2786. }else{
  2787. arry = date2.split(s);
  2788. sYear =arry[0];
  2789. sMonth =arry[1];
  2790. sDay =arry[2];
  2791. sDate2 =sYear+sMonth+sDay;
  2792. }
  2793. iDate1 = parseInt(sDate1,10);
  2794. iDate2 = parseInt(sDate2,10);
  2795. if(iDate1<=iDate2){
  2796. return true;
  2797. }else{
  2798. alert(msg);
  2799. return false;
  2800. }
  2801. return false;
  2802. }
  2803. /**
  2804. * 日期比较函数
  2805. * 判断如果date1大于date2就给出msg提示,并光标自动定位到obj控件上
  2806. * @param date1 开始日期
  2807. * @param date2 终止日期日期
  2808. * @param msg 自定义的提示信息
  2809. * 日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd
  2810. * 使用方法:compareDate2(aform.test,'2011-01-01','2011-01-02','日期比较失败');
  2811. */
  2812. function compareDate2(obj,date1,date2,msg){
  2813. var b = compareDate(date1,date2,msg);
  2814. var inp = $(obj);
  2815. if(!b){
  2816. setTimeout(function(){inp.focus();},0);
  2817. }
  2818. return b;
  2819. }
  2820. /**
  2821. * 行选择函数
  2822. * 改变选中行的颜色或是单击某行记录的任何地方进行勾选
  2823. * 主要是配合 onClickListRow、onDblClickListRow 使用
  2824. * @param idstr 只读多记录表单的配置ID
  2825. * @param rowindex 行序号(从0开始)
  2826. * @param type 应用的类型字符串例如:row=s|input=checkbox
  2827. * 其中 row 属性表示行的颜色需要改变
  2828. * 若 row=n 表示不需要改变行颜色
  2829. * 若 row=s 表示单选行只改变选中行的颜色
  2830. * 若 row=m 表示只要选中都改变颜色
  2831. * input 属性表示选择行后勾选框的勾选上
  2832. * 若 input=checkbox 表示多选框
  2833. * 若 input=radio 表示单选框
  2834. *使用方法:
  2835. * 1.改变行颜色而且是单选行,若列表有勾选框不自动勾选
  2836. * var sMark='row=s'
  2837. * gridRowSelected('zhcx_grjbzltest3',0,sMark);
  2838. * 2.改变行颜色,若列表有勾选框自动勾选
  2839. * var sMark='row=s|input=checkbox'
  2840. * gridRowSelected('zhcx_grjbzltest3',0,sMark);
  2841. */
  2842. function gridRowSelected(idstr,rowindex,type){
  2843. var grid =$('#'+idstr);
  2844. var tmp,chk,arry1,arry2,sRow='',sInput='';
  2845. var str = type.toLowerCase();
  2846. if(str==''||str==null){
  2847. str='row=s|input=checkbox';
  2848. }
  2849. arry1 = str.split('|');
  2850. for(var i=0;i<arry1.length;i++){
  2851. tmp = arry1[i];
  2852. arry2 = tmp.split('=');
  2853. if(arry2[0]=='row'){sRow=arry2[1];}
  2854. if(arry2[0]=='input'){sInput=arry2[1];}
  2855. }
  2856. //执行单行选择并改变颜色时,需要去掉已选的颜色
  2857. if(sRow=='s'){
  2858. $('.fwdatagrid-view tbody tr[class*=fwdatagrid-row-selected]', grid).each(function(){
  2859. $(this).removeClass('fwdatagrid-row-selected');
  2860. });
  2861. }
  2862. $('.fwdatagrid-view tbody tr[fwdatagrid-row-index='+rowindex+']', grid).each(function(){
  2863. //单行或是多行选择
  2864. if(sRow=='s'||sRow=='m'){
  2865. $(this).addClass('fwdatagrid-row-selected');
  2866. }
  2867. //需要对选择框做处理
  2868. if(sInput!=''){
  2869. chk = $('[type="'+sInput+'"]',$(this)).attr("checked");
  2870. if(!chk){
  2871. $('[type="'+sInput+'"]',$(this)).attr("checked",true);
  2872. }//else{
  2873. // $('[type="'+sInput+'"]',$(this)).attr("checked",false);
  2874. //}
  2875. }
  2876. });
  2877. }
  2878. /**
  2879. * 取消行选择函数
  2880. * 改变选取消行的颜色或是单击某行记录的任何地方取消勾选
  2881. * 主要是配合 onClickListRow、onDblClickListRow 使用
  2882. * @param idstr 只读多记录表单的配置ID
  2883. * @param rowindex 行序号(从0开始)
  2884. * @param type 应用的类型字符串例如:row=s|input=checkbox
  2885. * 其中 row 属性表示行需要取消选中颜色,如果只是想处理勾选框此参数也不能少
  2886. * 若 row=s 表示单选行只取消选中行的颜色
  2887. * 若 row=a 表示全部取消选中行的颜色
  2888. * input 属性表示取消勾选状态的控件类型
  2889. * 若 input=checkbox 表示多选框
  2890. * 若 input=radio 表示单选框
  2891. *使用方法:
  2892. * 1.改变行颜色而且是单选行,若列表有勾选框不自动取消勾选
  2893. * var sMark='row=s'
  2894. * gridRowUnSelected('zhcx_grjbzltest3',0,sMark);
  2895. * 2.取消选中行颜色,若列表有勾选框全部取消勾选
  2896. * var sMark='row=a|input=checkbox'
  2897. * gridRowUnSelected('zhcx_grjbzltest3',0,sMark);
  2898. */
  2899. function gridRowUnSelected(idstr,rowindex,type){
  2900. var grid =$('#'+idstr);
  2901. var tmp,chk,arry1,arry2,sRow='',sInput='';
  2902. var str = type.toLowerCase();
  2903. if(str==''||str==null){
  2904. str='row=a|input=checkbox';
  2905. }
  2906. arry1 = str.split('|');
  2907. for(var i=0;i<arry1.length;i++){
  2908. tmp = arry1[i];
  2909. arry2 = tmp.split('=');
  2910. if(arry2[0]=='row'){sRow=arry2[1];}
  2911. if(arry2[0]=='input'){sInput=arry2[1];}
  2912. }
  2913. //全部去掉选择行的颜色
  2914. if(sRow=='a'||sRow=='m'){
  2915. $('.fwdatagrid-view tbody tr[class*=fwdatagrid-row-selected]', grid).each(function(){
  2916. $(this).removeClass('fwdatagrid-row-selected');
  2917. if(sInput!=''){
  2918. $('[type="'+sInput+'"]',$(this)).attr("checked",false);
  2919. }
  2920. });
  2921. }
  2922. //只去掉指定选择行的颜色
  2923. if(sRow=='s'){
  2924. $('.fwdatagrid-view tbody tr[fwdatagrid-row-index='+rowindex+']', grid).each(function(){
  2925. $(this).removeClass('fwdatagrid-row-selected');
  2926. if(sInput!=''){
  2927. $('[type="'+sInput+'"]',$(this)).attr("checked",false);
  2928. }
  2929. });
  2930. }
  2931. //去掉全部勾选
  2932. if(sRow=='a'&&sInput!=''){
  2933. $('[type="'+sInput+'"]',$(this)).attr("checked",false);
  2934. }
  2935. }
  2936. /**
  2937. * 获取单记录表单的所有字段并自动按指定的分隔符拼成串
  2938. * @param idstr 单记录表单的ID
  2939. * @param separator 分隔符
  2940. * @param noParam 不需要拼接的字段数组
  2941. * @returns 返还拼接后的串
  2942. * 使用方法:
  2943. * var noParam = new Array('XB','BZ');
  2944. * var str = spliceStr('gentbl_test','\x03',noParam);
  2945. * 以上的例子分隔符为chr(3)
  2946. */
  2947. function spliceStr(idstr,separator,noParam){
  2948. var k,i,j=0,tmp='';
  2949. var bMark = false;
  2950. var tags = new Array();
  2951. var gtObj = $('#'+idstr).get(0);
  2952. if(separator==''||separator==null){
  2953. alert('分隔符不能为空');
  2954. return;
  2955. }
  2956. $(':input',gtObj).each(function(){
  2957. //在此处停止,执行下一个循环
  2958. if(this.name==null||this.name==''){return true;}
  2959. bMark=false;
  2960. for(k=0;k<noParam.length; k++){
  2961. if(noParam[k]==this.name){
  2962. bMark = true;
  2963. break;
  2964. }
  2965. }
  2966. if(!bMark){
  2967. tags[j] = this.name+"="+this.value;
  2968. j++;
  2969. }
  2970. });
  2971. tmp = tags.join(separator);
  2972. return tmp;
  2973. }
  2974. /**
  2975. * 设置按钮按钮的可用或只读控制
  2976. * @param btn 单按钮的NAME或是存放多个按钮名称的数组
  2977. * @param status 固定值:true 或是 false
  2978. * @returns 没有返回值
  2979. * 使用方法1:
  2980. * 设置按钮name="btnQuery" 和 name="btnCls" 只读
  2981. * var arrBtn = new Array('btn','btn2');
  2982. * btnStatus(arrBtn,false);
  2983. *
  2984. * 使用方法2:
  2985. * 设置按钮name="btnQuery" 可用
  2986. * btnStatus('btnQuery',true);
  2987. */
  2988. function btnStatus(btn,status){
  2989. //判断是否为数组
  2990. if(typeof btn == 'object' && typeof btn.sort == 'function' && typeof btn.length == 'number'){
  2991. for(var i=0;i<btn.length;i++){
  2992. $('a[name="'+btn[i]+'"]')[0].disabled=!status;
  2993. }
  2994. }else{
  2995. $('a[name="'+btn+'"]')[0].disabled=!status;
  2996. }
  2997. }
  2998. /**
  2999. * 组装查询条件函数
  3000. * @param idStr 单记录表单的配置ID名称
  3001. * @param ColRow 特殊字段的设置的JSON数组
  3002. * @returns 返回组装后的查询条件串
  3003. * 使用方法1:
  3004. * 没有任何特殊的设置
  3005. * var con = spliceWhere('ybdy_spdjcx_sqxd_cxtj','');
  3006. * 使用方法2:
  3007. * var row = [{'colname':'CXRQ','type':'DATE','begin':'KSCXRQ','end':'ZZCXRQ'},
  3008. * {'colname':'SHNY','type':'STRING','begin':'KSSHNY','end':'ZZSHNY','exp':'<,>'},
  3009. * {'colname':'CSRQ','type':'DATE','exp':'>='},
  3010. * {'colname':'JBRQ','type':'DATETIME'},
  3011. * {'colname':'JE','type':'NUMBER'},
  3012. * {'colname':'ZJBH','type':'STRING','begin':'','end':'%','exp':'like'},
  3013. * {'colname':'YWLSH','type':''}
  3014. * ];
  3015. * var con = spliceWhere('ybdy_spdjcx_sqxd_cxtj',row);
  3016. * 具体的含义详见开发手册
  3017. */
  3018. function spliceWhere(idStr,ColRow){
  3019. var row = [];
  3020. var b = false;
  3021. var arrCol=[];
  3022. var strWhere='',j=0;
  3023. var myobj = $('#'+idStr).get(0);
  3024. if(typeof ColRow =='object' && typeof ColRow.sort == 'function' && typeof ColRow.length == 'number'){
  3025. row = ColRow;
  3026. }
  3027. //找出有特别设置的字段
  3028. for(var i=0;i<row.length;i++){
  3029. var item = row[i];
  3030. var exp ='=';//表达式默认为等号
  3031. var exp1='', exp2='';//有区间判断的表达式符合,例如 <、>
  3032. var colname ='',colvalue='';
  3033. var begin='', end='', tmp='', type='STRING';
  3034. var date1='', date2='', iLen=0, iPos=0;
  3035. if(row[i]['colname']==null){
  3036. continue;
  3037. }
  3038. colname = row[i]['colname'];
  3039. //判断是否存在值 有时需要查询的字段不在界面上 开始日期、终止日期对应的字段XXX日期等
  3040. if(typeof $('[NAME="'+colname+'"]',myobj).get(0)=='object'){
  3041. //取相应字段的值
  3042. colvalue =$('[NAME="'+colname+'"]',myobj).get(0).value;
  3043. if(colvalue==''||colvalue==null){
  3044. continue;
  3045. }
  3046. }
  3047. if(row[i]['begin']!=null){begin=row[i]['begin'];}
  3048. if(row[i]['end']!=null){end=row[i]['end'];}
  3049. type=row[i]['type'];
  3050. arrCol[j]=colname;//放入数组的目的是为了下面过滤掉,不要重复组合
  3051. j++;
  3052. //处理需要过滤不组合到WHERE内的字段
  3053. if(type==null||type==''){
  3054. continue;
  3055. }
  3056. //是否配置了表达式
  3057. if(row[i]['exp']!=null){
  3058. exp = row[i]['exp'];
  3059. exp = exp.toLowerCase();
  3060. iPos = exp.indexOf(','); //检查是否配置了 <,> 等表达式
  3061. if(iPos>0){
  3062. var arrExp = exp.split(',');
  3063. exp='=';
  3064. exp1 = arrExp[0];
  3065. exp2 = arrExp[1];
  3066. }
  3067. }
  3068. if(strWhere==''){
  3069. strWhere =' ' + colname;
  3070. }else{
  3071. strWhere = strWhere + ' and ' + colname;
  3072. }
  3073. //拼接上表达式
  3074. strWhere += ' ' + exp +' ';
  3075. if(exp!='like'){
  3076. //调用内部函数组合查询条件
  3077. strWhere = dt(myobj,strWhere,type,colname,colvalue,begin,end,exp1,exp2);
  3078. if(begin!=''){ arrCol[j]=begin; j++;}
  3079. if(end!=''){arrCol[j]=end;j++;}
  3080. }
  3081. if(exp=='like'){
  3082. if((begin==''&&end=='')||(begin=='%'&&end=='%')){
  3083. strWhere += "'%" + colvalue + "%'";
  3084. }
  3085. if(begin=='%'&&end==''){
  3086. strWhere += "'%" + colvalue + "'";
  3087. }
  3088. if(begin==''&&end=='%'){
  3089. strWhere += "'" + colvalue + "%'";
  3090. }
  3091. }
  3092. }//for end here
  3093. //下面开始处理没有特别设置的字段
  3094. jQuery(':input',myobj).each(function(){
  3095. b=false;
  3096. if(this.name==null|| this.name==''||this.name=='_multiple'){
  3097. return true; //循环下一个相当于FOR循环continue
  3098. }
  3099. //过滤掉已经特殊处理过的字段
  3100. for(var k=0; k<arrCol.length;k++){
  3101. if(arrCol[k]== this.name){
  3102. b=true;
  3103. break;
  3104. }
  3105. }
  3106. if(b){
  3107. return true; //循环下一个相当于FOR循环continue
  3108. }
  3109. if(this.value==''){
  3110. return true; //循环下一个相当于FOR循环continue
  3111. }
  3112. if(strWhere==''){
  3113. strWhere =' ' + this.name + '=';
  3114. }else{
  3115. strWhere = strWhere + ' and ' + this.name + '=';
  3116. }
  3117. strWhere += "'" + this.value + "' ";
  3118. });
  3119. return strWhere;
  3120. //定义内部函数
  3121. function dt(obj,sW,ty,cln,clv,bg,en,e1,e2){
  3122. var d1,d2,iL,tp;
  3123. if(e1==''){e1='>=';} //若没有配则设置默认值
  3124. if(e2==''){e2='<=';}
  3125. if(bg==''&&en==''){
  3126. if(ty=='NUMBER'){sW += clv;}
  3127. if(ty=='STRING'){sW += "'" + clv + "'";}
  3128. if(ty=='DATE'){sW += "to_date('" + clv + "','yyyy-mm-dd')"; }
  3129. if(ty=='DATETIME'){sW += "to_date('" + clv + "','yyyy-mm-dd hh24:mi:ss')"; }
  3130. if(ty=='DATETONUM6'){
  3131. clv = clv.replace(/-/gi, "");
  3132. if(clv.length>6){
  3133. clv = clv.substr(0,6);
  3134. }
  3135. sW += clv;
  3136. }
  3137. if(ty=='DATETONUM8'){
  3138. clv = clv.replace(/-/gi, "");
  3139. sW += clv;
  3140. }
  3141. if(ty=='DATETONUM14'){
  3142. clv = clv.replace(/-/gi, "");
  3143. clv = clv.replace(/:/gi, "");
  3144. clv = clv.replace(/ /gi, "");
  3145. var iL = clv.length;
  3146. while(iL<14){
  3147. clv+='0';
  3148. iL = clv.length;
  3149. }
  3150. sW += clv;
  3151. }
  3152. return sW;
  3153. }
  3154. //说明是有开始字段跟终止字段
  3155. if(bg!=''&&en!=''){
  3156. if(typeof $('[NAME="'+bg+'"]',obj).get(0)!='object'){
  3157. alert('字段='+bg+' 不存在!');
  3158. return '';
  3159. }
  3160. if(typeof $('[NAME="'+en+'"]',obj).get(0)!='object'){
  3161. alert('字段='+en+' 不存在!');
  3162. return '';
  3163. }
  3164. d1=$('[NAME="'+bg+'"]',obj).get(0).value;
  3165. d2=$('[NAME="'+en+'"]',obj).get(0).value;
  3166. iL = sW.length-2;
  3167. sW = sW.substr(0,iL); //去掉=号
  3168. //开始字段录入值
  3169. if(d1!=''){
  3170. if(ty=='NUMBER'){sW += " "+e1+d1;}
  3171. if(ty=='STRING'){sW += " "+e1+"'"+d1+"'";}
  3172. if(ty=='DATE'){ sW += " "+e1+" to_date('" + d1 + "','yyyy-mm-dd')";};
  3173. if(ty=='DATETIME'){sW += " "+e1+" to_date('" + d1 + "','yyyy-mm-dd hh24:mi:ss')";};
  3174. if(ty=='DATETONUM6'){
  3175. d1 = d1.replace(/-/gi, "");
  3176. if(d1.length>6){
  3177. d1 = d1.substr(0,6);
  3178. }
  3179. sW += " "+e1 + " " + d1;
  3180. }
  3181. if(ty=='DATETONUM8'){
  3182. d1 = d1.replace(/-/gi, "");
  3183. sW += " "+e1 + " " + d1;
  3184. }
  3185. if(ty=='DATETONUM14'){
  3186. d1 = d1.replace(/-/gi, "");
  3187. d1 = d1.replace(/:/gi, "");
  3188. d1 = d1.replace(/ /gi, "");
  3189. var iL = d1.length;
  3190. while(iL<14){
  3191. d1+='0';
  3192. iL = d1.length;
  3193. }
  3194. sW += " "+e1 + " " + d1;
  3195. }
  3196. if(d2!=''){
  3197. sW += " and " + cln;
  3198. }
  3199. }
  3200. //终止字段录入值
  3201. if(d2!=''){
  3202. if(ty=='NUMBER'){ sW += " "+e2+" " + d2;};
  3203. if(ty=='STRING'){ sW += " "+e2+" '" + d2 + "'";};
  3204. if(ty=='DATE'){ sW += " "+e2+" to_date('" + d2 + "','yyyy-mm-dd')";};
  3205. if(ty=='DATETIME'){sW += " "+e2+" to_date('" + d2 + "','yyyy-mm-dd hh24:mi:ss')";};
  3206. if(ty=='DATETONUM6'){
  3207. d2 = d2.replace(/-/gi, "");
  3208. if(d2.length>6){
  3209. d2 = d2.substr(0,6);
  3210. }
  3211. sW += " "+e2 + " " + d2;
  3212. }
  3213. if(ty=='DATETONUM8'){
  3214. d2 = d2.replace(/-/gi, "");
  3215. sW += " "+e2 + " " + d2;
  3216. }
  3217. if(ty=='DATETONUM14'){
  3218. d2 = d2.replace(/-/gi, "");
  3219. d2 = d2.replace(/:/gi, "");
  3220. d2 = d2.replace(/ /gi, "");
  3221. var iL = d2.length;
  3222. if(iL==8){
  3223. d2+='235959';//23:59:59
  3224. }else{
  3225. while(iL<14){
  3226. d2+='0';
  3227. iL = d2.length;
  3228. }
  3229. }
  3230. sW += " "+e2 + " " + d2;
  3231. }
  3232. }
  3233. //若开始字段和终止字段都没有录入值
  3234. if(d1==''&&d2==''){
  3235. tp = 'and ' + cln;
  3236. iP = sW.indexOf(tp);
  3237. sW = sW.substr(0,iP); //去掉and 和列名
  3238. }
  3239. }
  3240. return sW;
  3241. }//dt
  3242. }
  3243. /**
  3244. *判断是否为正数,负数
  3245. *event :事件对象
  3246. *author :youyizhong
  3247. *date :20110824
  3248. */
  3249. function zfpd(obj, flag){
  3250. var val = obj.value;
  3251. var vldStr = obj.vldStr;
  3252. var arr = vldStr.split("=");
  3253. var name = arr[0];
  3254. /*不能为负数*/
  3255. if(flag == 1){
  3256. if(val < 0){
  3257. obj.value = '';
  3258. FWalert(name+"不能为负数");
  3259. setTimeout(function(){obj.focus();},0);
  3260. }
  3261. }
  3262. /*不能为正数*/
  3263. if(flag == -1){
  3264. if(val > 0){
  3265. obj.value = '';
  3266. FWalert(name+"不能为正数");
  3267. setTimeout(function(){obj.focus();},0);
  3268. }
  3269. }
  3270. }
  3271. /**
  3272. * 通用报表打印函数
  3273. * @param cfgId 报表配置ID,应用fw_report_conf 内的ID
  3274. * @param form 对象
  3275. * @param ndp (true/false)是否显示直接调用默认的打印机打印的按钮
  3276. * @param nsp (true/false)暂时没有用
  3277. * @param target 指定报表显示方式 可以是 blank、_self、iframe.name
  3278. * @param needSaveAsExcel 是否需要显示导出EXCEL按钮
  3279. * @param excelPageStyle 导出EXCEL是否需要分页
  3280. * 主要的功能是根据配置ID,查询fw_report_conf表的REPORTPARM字段的值
  3281. * 即报表的全部入参。根据入参的名称查询form中相同名称的录入值,自动匹配
  3282. * 后传给报表作为查询数据的条件,最后生成报表的预览。
  3283. * 使用方法:
  3284. * reportGenerate('bxgx_rydj_grjbzl_rpt',aform,false,true,'blank',true,false);
  3285. * 具体的使用说明详见手册
  3286. */
  3287. function reportGenerate(cfgId,form,ndp,nsp,target,needSaveAsExcel,excelPageStyle){
  3288. var _needSaveAsExcel = needSaveAsExcel||false;
  3289. var _excelPageStyle = excelPageStyle||false;
  3290. if(cfgId==''||cfgId==null){
  3291. FWalert("入参报表的配置ID不能为空!");
  3292. return;
  3293. }
  3294. //执行AJAX获取该ID对应的配置
  3295. new Service().appendQuery([{
  3296. configId:'FW_CONFIG.FW_REPORT_CONF_Q',
  3297. parameters:{ID:cfgId},
  3298. transform:'firstRow'
  3299. }]).sentAjax(function(data){//处理成功的函数
  3300. _rpt_1(cfgId,data,form,ndp,nsp,target,_needSaveAsExcel,_excelPageStyle);
  3301. return true;
  3302. },function(XMLHttpRequest, textStatus, errorThrown){//处理失败的函数
  3303. var tipMsg = XMLHttpRequest.responseText;
  3304. FWalert("错误信息:" + tipMsg);
  3305. if(window['fwReportGentBack']){
  3306. //调用回调函数
  3307. fwReportGentBack();
  3308. }
  3309. });
  3310. //内置函数
  3311. function _rpt_1(cfgId,data,dataForm,ndp,nsp,target,needSaveAsExcel,excelPageStyle){
  3312. var frms = document.getElementsByTagName("form");
  3313. var iLen = frms.length;
  3314. var params = data[0]["REPORTPARM"];
  3315. var commService = data[0]["COMMSERVICE"];
  3316. var commProc = data[0]["COMMPROC"];
  3317. var arrParams;
  3318. var tmp="";
  3319. var fw_id="";
  3320. var fwparams="";
  3321. var fwmap = {};
  3322. //找出已经存在相同的form删掉
  3323. for(var i=0;i<iLen;i++){
  3324. if(frms[i].name=='fwrptForm'){
  3325. document.body.removeChild(frms[i]);
  3326. break;
  3327. }
  3328. }
  3329. var sfc = '1'; //是否重新生成报表数据,默认1为重新生成
  3330. try{
  3331. sfc =dataForm['FWSFCXSC'].value;
  3332. }catch(e){}
  3333. tmp+=" <input type=\"hidden\" name=\"FWSFCXSC\" value="+sfc+">";
  3334. var where = ''; //WHERE条件
  3335. try{
  3336. where =dataForm['FWWHERE'].value;
  3337. }catch(e){}
  3338. tmp+=" <input type=\"hidden\" name=\"FWWHERE\" value="+where+">";
  3339. var btnBack ='YES'; //显示返回按钮
  3340. try{
  3341. btnBack =dataForm['FWBTNBACK'].value;
  3342. }catch(e){}
  3343. tmp+=" <input type=\"hidden\" name=\"FWBTNBACK\" value="+btnBack+">";
  3344. var btnClose ='YES'; //显示关闭按钮
  3345. try{
  3346. btnClose =dataForm['FWBTNCLOSE'].value;
  3347. }catch(e){}
  3348. tmp+=" <input type=\"hidden\" name=\"FWBTNCLOSE\" value="+btnClose+">";
  3349. arrParams = params.split("|");
  3350. iLen = arrParams.length;
  3351. if(iLen==0){
  3352. FWalert("报表入参不能为空!");
  3353. return false;
  3354. }
  3355. for(var i=0;i<iLen;i++){
  3356. var n = arrParams[i];
  3357. var s = '';
  3358. if(typeof dataForm[n]=='object'){
  3359. s = dataForm[n].value;
  3360. }
  3361. tmp+=" <input type=\"hidden\" name=\""+n+"\" value="+s+"> ";
  3362. if(fwparams==''){
  3363. fwparams = n+'='+s;
  3364. }else{
  3365. fwparams+='***'+n+'='+s;
  3366. }
  3367. fwmap[n] = s;
  3368. }
  3369. fwmap["FWPARAMS"] = fwparams;
  3370. fwmap["REPORTID"] = cfgId;
  3371. fwmap["COMMPROC"] = commProc;
  3372. fwmap["FWSFCXSC"] = sfc;
  3373. fwmap["FWWHERE"] = where;
  3374. if(commService==''||commService==null){
  3375. _rpt_2(cfgId,fw_id,fwparams,tmp,ndp,nsp,target,needSaveAsExcel,excelPageStyle);
  3376. }else{
  3377. var arrP = commService.split(".");
  3378. //执行AJAX获取该ID对应的配置
  3379. new Service({
  3380. serviceId:arrP[0],method:arrP[1],
  3381. parameters:fwmap
  3382. }).sentAjax(function(data){//处理成功的函数
  3383. var t = data[0]["PO_FHZ"];
  3384. if(t!=null){
  3385. if(t!='1'){
  3386. var msg = data[0]["PO_MSG"];
  3387. FWalert("错误信息:" + msg);
  3388. if(window['fwReportGentBack']){
  3389. //调用回调函数
  3390. fwReportGentBack(t);
  3391. }
  3392. return true;
  3393. }
  3394. }
  3395. fw_id = data[0]["FW_ID"];
  3396. _rpt_2(cfgId,fw_id,fwparams,tmp,ndp,nsp,target,needSaveAsExcel,excelPageStyle);
  3397. return true;
  3398. },function(XMLHttpRequest, textStatus, errorThrown){//处理失败的函数
  3399. var tipMsg = XMLHttpRequest.responseText;
  3400. FWalert("错误信息:" + tipMsg);
  3401. if(window['fwReportGentBack']){
  3402. //调用回调函数
  3403. fwReportGentBack();
  3404. }
  3405. });
  3406. }
  3407. }
  3408. function _rpt_2(cfgId,fw_id,fwparams,tmp,ndp,nsp,tg,needSaveAsExcel,excelPageStyle){
  3409. //动态创建报表form
  3410. var frag = document.createDocumentFragment();
  3411. var form = document.createElement("form");
  3412. form.name="fwrptForm";
  3413. form.action="${ctx}/report.do";
  3414. if(tg==''||tg==null){
  3415. tg = "blank";
  3416. }
  3417. form.target=tg;
  3418. var str =" <input type=\"hidden\" name=\"configId\" value=\""+cfgId+"\"> ";
  3419. str+=" <input type=\"hidden\" name=\"needDirectPrint\" value=\""+ndp+"\"> ";
  3420. str+=" <input type=\"hidden\" name=\"needSelectPrinter\" value=\""+nsp+"\"> ";
  3421. str+=" <input type=\"hidden\" name=\"ID\" value=\""+fw_id+"\"> ";
  3422. str+=" <input type=\"hidden\" name=\"FWPARAMS\" value=\""+fwparams+"\"> ";
  3423. str+=" <input type=\"hidden\" name=\"needSaveAsExcel\" value=\""+needSaveAsExcel+"\"> ";
  3424. str+=" <input type=\"hidden\" name=\"excelPageStyle\" value=\""+excelPageStyle+"\"> ";
  3425. str+=tmp;
  3426. form.innerHTML=str;
  3427. frag.appendChild(form);
  3428. document.body.appendChild(frag);
  3429. form.submit();
  3430. if(window['fwReportGentBack']){
  3431. //调用回调函数
  3432. fwReportGentBack();
  3433. }
  3434. return true;
  3435. }
  3436. }
  3437. /**
  3438. * 设置按钮按钮的可显示或不可显示
  3439. * @param btn 单按钮的NAME或是存放多个按钮名称的数组
  3440. * @param status 固定值:true 或是 false
  3441. * @returns 没有返回值
  3442. * 使用方法1:
  3443. * 设置按钮name="btnQuery" 和 name="btnCls" 不可显示
  3444. * var arrBtn = new Array('btn','btn2');
  3445. * btnDisplay (arrBtn,false);
  3446. *
  3447. * 使用方法2:
  3448. * 设置按钮name="btnQuery" 可显示
  3449. * btnDisplay ('btnQuery',true);
  3450. */
  3451. function btnDisplay(btn,status){
  3452. if(status){status = '';}
  3453. else{status = 'none';}
  3454. //判断是否为数组
  3455. if(typeof btn == 'object' && typeof btn.sort == 'function' && typeof btn.length == 'number'){
  3456. for(var i=0;i<btn.length;i++){
  3457. $('a[name="'+btn[i]+'"]')[0].style.display=status;
  3458. }
  3459. }else{
  3460. $('a[name="'+btn+'"]')[0].style.display =status;
  3461. }
  3462. }
  3463. /**
  3464. * 单记录表格保存函数
  3465. * @param idStr 单记录表配置ID
  3466. * @param servFun Service名和方法
  3467. * @param arrMapID MapperXML的数组
  3468. * @param arrTypes 需要转换的字段JSON对象,若不需要转换可以为空,目前只支持INT、STRING、DOUBLE转换
  3469. * @param callback 回调函数
  3470. * 实现对单记录表格的保存,在保存前可以调用service进行校验
  3471. * 使用方法:
  3472. * var mappid = new Array('GRJBZL.JBXX_I','GRJBZL.JBXX_U');
  3473. * var types =[{'name':'GRSXH','type':'INT'}, {'name':'SBGZ','type':'DOUBLE'}];
  3474. * saveGentTable('bxgx_rydj_grjbzl','bxgxRydjService.ryxxJY',mappid,types,function(data){
  3475. * alert('保存成功');
  3476. * });
  3477. * 具体的使用说明详见手册
  3478. */
  3479. function saveGentTable(idStr,servFun,arrMapID,arrTypes,callback){
  3480. var arrUDI = new Array();
  3481. if(arrTypes == undefined || arrTypes == null || !$.isArray(arrTypes)){
  3482. arrTypes = [];
  3483. }
  3484. if(!$.isArray(arrMapID)){
  3485. alert('MapperID不能为空而且必须为数组!');
  3486. return false;
  3487. }
  3488. for(var i=0;i<arrMapID.length;i++){
  3489. var tmp = arrMapID[i];
  3490. var ar = tmp.split('_');
  3491. var len = ar.length;
  3492. var udi = ar[len-1];
  3493. var iPos = "UDI".indexOf(udi);
  3494. if(iPos==-1){
  3495. alert(tmp+' 配置不正确,后缀必须为_U、_D、_I等格式! ');
  3496. return false;
  3497. }
  3498. arrUDI[i] = udi;
  3499. }
  3500. var fwmap = {};
  3501. var myobj = $('#'+idStr).get(0);
  3502. //获取单记录表单的数据
  3503. jQuery(':input',myobj).each(function(){
  3504. if(this.name==null|| this.name==''||this.name=='_multiple'){
  3505. return true;
  3506. }
  3507. fwmap[this.name] = this.value;
  3508. });
  3509. //按要求将格式转换成预定义的格式
  3510. for(var i=0;i<arrTypes.length;i++){
  3511. var val,tmp='';
  3512. var type = arrTypes[i]["type"];
  3513. var name = arrTypes[i]["name"];
  3514. tmp = fwmap[name];
  3515. if(type=='DOUBLE'||type=='INT'){
  3516. tmp = tmp.replace(/-/gi, "");
  3517. tmp = tmp.replace(/,/gi, "");
  3518. }
  3519. if(type=='INT'){
  3520. val = parseInt(tmp,10);
  3521. }
  3522. if(type=='DOUBLE'){
  3523. val = parseFloat(tmp,10);
  3524. }
  3525. if(type=='STRING'){
  3526. val = tmp+'';
  3527. }
  3528. fwmap[name] = val;
  3529. }
  3530. if(servFun!=''){
  3531. var arrP = servFun.split(".");
  3532. new Service({
  3533. serviceId:arrP[0],method:arrP[1],
  3534. parameters:fwmap
  3535. }).sentAjax(function(data){//处理成功的函数
  3536. _a_b(arrMapID,fwmap,data);
  3537. return true;
  3538. },function(XMLHttpRequest, textStatus, errorThrown){//处理失败的函数
  3539. var tipMsg = XMLHttpRequest.responseText;
  3540. FWalert("错误信息:" + tipMsg);
  3541. });
  3542. }else{
  3543. _a_d(arrMapID,fwmap,idStr);
  3544. }
  3545. function _a_b(arrMapID,fwmap,data){
  3546. var row = data[0];
  3547. var po_fhz = row["PO_FHZ"];
  3548. var po_msg = row["PO_MSG"];
  3549. //执行SERVICE校验成功后把传回的参数写入到MAP内供更新表使用
  3550. if(po_fhz=='1'){
  3551. for(key in row){
  3552. var val = row[key];
  3553. if(key!='PO_FHZ' && key !='PO_MSG'){
  3554. fwmap[key] = val;
  3555. }
  3556. }
  3557. _a_d(arrMapID,fwmap,idStr);
  3558. }else{
  3559. alert(po_msg);
  3560. }
  3561. }
  3562. function _a_d(Mp,fm,id){
  3563. var Se = new Service();
  3564. for(var i=0;i<Mp.length;i++){
  3565. Se.appendQuery({
  3566. configId:Mp[i],
  3567. parameters:fm,
  3568. transform:'firstRow'
  3569. });
  3570. }
  3571. Se.sentAjax('数据更新',function(data){
  3572. if(callback && $.isFunction(callback)){
  3573. callback(data);
  3574. }
  3575. },function(XMLHttpRequest, textStatus, errorThrown){//处理失败的函数
  3576. var tipMsg = XMLHttpRequest.responseText;
  3577. FWalert("错误信息:" + tipMsg);
  3578. });
  3579. return true;
  3580. }
  3581. return true;
  3582. }
  3583. /**
  3584. * 获取单记录表获取指定列的JSON数据
  3585. * @param gltId 单记录表单ID名称。
  3586. * @param names 输入域名数组, 如:["XM","XB","CSRQ"]
  3587. * @param dictZh 是否附加字典中文。指定true的效果{"XM":"XXX","XB":"2","CSRQ":"20119015","_DIC_XB":"男"}
  3588. * 不指定或者指定为false的效果是{"XM":"XXX","XB":"2","CSRQ":"20119015"}
  3589. * @return 返回JSON对象如: {"XM":"XXXX","XB":"2","CSRQ":"20119015","_DIC_XB":"男"}
  3590. * 使用方法:
  3591. * var params = ["XM","XB","CSRQ"];
  3592. * getGentData(idStr,params,dictZh);
  3593. */
  3594. function getGentData(gltId, names,dictZh){
  3595. names.push("_multiple");
  3596. var rst = {};
  3597. var gltObj = document.getElementById(gltId);
  3598. if(!dictZh){
  3599. dictZh = false;
  3600. }
  3601. //字符串转数组
  3602. if("string" == typeof names){
  3603. names = names.split(",");
  3604. }
  3605. names.push("_multiple");
  3606. var rst = {};
  3607. for(var i in names){
  3608. var name = $.trim(names[i]);
  3609. //如果names数组中的name有重复的话,那重复的不再执行下面代码
  3610. if(rst[name] == null){
  3611. var $item = $("[name='"+name+"']",gltObj);
  3612. //页面只有一个这样的元素,直接赋值
  3613. if($item.size() == 1){
  3614. rst[name] = $item.val();
  3615. }
  3616. //页面多个name相同的元素,创建数组赋值
  3617. else if($item.size() > 1 ){
  3618. rst[name] = [];
  3619. $item.each(function(){
  3620. rst[name].push($(this).val());
  3621. });
  3622. }
  3623. }
  3624. }
  3625. //字典中文的处理
  3626. if(true == dictZh){
  3627. //combox字典项的处理
  3628. $(".combobox,.incombox,.dbcombox,.ldcombox",gltObj).each(function(){
  3629. var $this = $(this);
  3630. //如果rst[this.name]不是null的话,就查找字典项
  3631. if(rst[this.name]!=null){
  3632. var textName = "_DIC_"+ this.name;
  3633. var textValue = $this.fwcombox("text");
  3634. //新的字段
  3635. if(rst[textName] == null){
  3636. rst[textName] = textValue;
  3637. }
  3638. //多个同名字段
  3639. else{
  3640. //这是第一个同名字段,则将此数组元素改成数组
  3641. if(!$.isArray(rst[textName])){
  3642. rst[textName] = [rst[textName]];
  3643. }
  3644. rst[textName].push(textValue);
  3645. }
  3646. }
  3647. });
  3648. //searchgridbox字典项的处理
  3649. $(".searchgridbox", gltObj).each(function(){
  3650. var $this = $(this);
  3651. if(rst[this.name]!=null){
  3652. var textName = "_DIC_"+ this.name;
  3653. var textValue = $this.searchgrid("text");
  3654. //新的字段
  3655. if(rst[textName] == undefined || rst[textName] == null){
  3656. rst[textName] = textValue;
  3657. }
  3658. //多个同名字段
  3659. else{
  3660. //这是第一个同名字段,则将此数组元素改成数组
  3661. if(!$.isArray(rst[textName])){
  3662. rst[textName] = [rst[textName]];
  3663. }
  3664. rst[textName].push(textValue);
  3665. }
  3666. }
  3667. });
  3668. }
  3669. //_multiple的处理
  3670. if(rst["_multiple"]!=null && rst["_multiple"]!=""){
  3671. if(!$.isArray(rst["_multiple"])){
  3672. rst["_multiple"] = [rst["_multiple"]];
  3673. }
  3674. var multipleNames = rst["_multiple"].join(",").split(",");
  3675. for(var i in multipleNames){
  3676. var mName = $.trim(multipleNames[i]);
  3677. if(mName != "" && null != rst[mName]){
  3678. if(!$.isArray(rst[mName])){
  3679. rst[mName] = [rst[mName]];
  3680. }
  3681. var dname = "_DIC_"+mName;
  3682. if(null != rst[dname] && undefined != rst[dname] && !$.isArray(rst[dname])){
  3683. rst[dname] = [rst[dname]];
  3684. }
  3685. }
  3686. }
  3687. }
  3688. //移除对后台没有用处的_multiple
  3689. delete rst["_multiple"];
  3690. return rst;
  3691. }
  3692. /**
  3693. * 获取多记录表指定列的JSON数据
  3694. * @param gltId 多记录表配置ID字符串。 如:'cbgx_grzlgl_l'。
  3695. * @param names 输入列名数组, 如:["GRBH","XB","XM"]
  3696. * @return 指定列数据JSON对象,如:[{"ROWNUM_":"1","GRBH":"aaabbbccc","XB":"1","_DIC_XB":"女","XM":"姓名1114"},
  3697. * {"ROWNUM_":"2","GRBH":"1231","XB":"2","_DIC_XB":"男","XM":"asdf123123123"}]
  3698. * 使用方法:
  3699. * var cols = ["XM","XB","CSRQ"];
  3700. * getGltData('cbgx_grzlgl_l',cols);
  3701. */
  3702. function getGltData(gltId, cols){
  3703. var rst = [];
  3704. //获取多记录表元素
  3705. var glt = document.getElementById(gltId);
  3706. if(!glt){
  3707. return rst;
  3708. }
  3709. var GridData = $.data(glt, 'fwdatagrid');
  3710. var gridType ='fwdatagrid';
  3711. if(GridData==null){
  3712. GridData = $.data(glt, 'fweditgrid');
  3713. }
  3714. //获取多记录表元素绑定的JSON数据
  3715. var rows= $.extend(true,[],GridData.options.data.rows);
  3716. if(!rows){
  3717. return rst;
  3718. }
  3719. //按行数设置返回的数组
  3720. for(var c=0,len=rows.length;c<len;c++){
  3721. rst.push({});
  3722. }
  3723. //把指定列数据拷贝到返回数组里面
  3724. for(var i in cols){
  3725. var name = cols[i];
  3726. for(var j in rows){
  3727. //拷贝行号
  3728. rst[j]["ROWNUM_"]=rows[j]["ROWNUM_"];
  3729. //拷贝列数据
  3730. if(null != rows[j][name]){
  3731. rst[j][name]=rows[j][name];
  3732. }
  3733. //拷贝字典
  3734. var dname = "_DIC_"+name;
  3735. if(null != rows[j][dname]){
  3736. rst[j][dname]=rows[j][dname];
  3737. }
  3738. }
  3739. }
  3740. return rst;
  3741. }
  3742. /**
  3743. * 多数据表单一次保存
  3744. * @param params 数组,包含JSON数据元素,如上面例子所示。JSON数据元素的结构如下
  3745. * 1 configId MAPPER配置ID。如"BATCHSAVE.BATCHSAVE_DW_I"
  3746. * 2 data: 表单数据
  3747. * @param callback 回调函数,后台执行完成后调用该函数。
  3748. * @return data
  3749. * 使用方法:
  3750. * var fields = ["XM", "YDDH", "GRSXH", "DWSXH", "GMSFHM"];
  3751. * var grxxData= getGentData('cbdj_grjbzl_grxx',fields,true);
  3752. * var params = [];
  3753. * var cbxxData={'XM':'张三', 'YDDH':13233424242, 'SBGZ':3000.00,'GRSXH':231113};
  3754. * params.push({configId:"CBDJ_GRJBZL.GRXX_DJ_I",data:grxxData});
  3755. * params.push({configId:"CBDJ_GRJBZL.CBXX_GX_U",data:cbxxData});
  3756. * saveTables(params,function(data){
  3757. * alert("批量保存成功");
  3758. * });
  3759. */
  3760. function saveTables(params,callback){
  3761. if(!$.isArray(params) || 0==params.length){
  3762. return;
  3763. }
  3764. var service = new Service();
  3765. for(var i=0, len=params.length; i<len; i++){
  3766. var p = params[i];
  3767. var configId = p.configId;
  3768. var parameters =p.data;
  3769. service.appendQuery({
  3770. "configId":configId,
  3771. "parameters":parameters,
  3772. "transfrom":"firstRow"});
  3773. }//for
  3774. service.sentAjax("批量保存",function(data){
  3775. if(callback && $.isFunction(callback)){
  3776. callback(data);
  3777. }
  3778. },function(XMLHttpRequest, textStatus, errorThrown){//处理失败的函数
  3779. var tipMsg = XMLHttpRequest.responseText;
  3780. FWalert("错误信息:" + tipMsg);
  3781. });
  3782. return true;
  3783. }
  3784. /**
  3785. * JS动态刷新单记录表单内容
  3786. * 情况1:如果返回数据,则将返回值更新到单记录表
  3787. * 情况2:如果没有返回数据,则单记录表保持不变
  3788. * @param form 表单对象
  3789. * @param dsId 数据源配置ID 即表FW_QUERYSQL的配置
  3790. * @param whereCls where语句字符串
  3791. * @returns
  3792. * 使用方法
  3793. var whereCls=" AAC002='425511198006171280'";
  3794. * setGtData(aform, 'bxgx_ylstzhwh_ryjyzl', whereCls,function(data){
  3795. * alert('执行成功!');
  3796. * });
  3797. */
  3798. function setGtData(form,dsId,whereCls,callback){
  3799. if(whereCls == null || $.trim(whereCls) == ""){
  3800. alert("没有配置where语句");
  3801. return false;
  3802. }
  3803. new Service().appendQuery({
  3804. //从fw_querysql中获取到select语句
  3805. configId:'FW_CONFIG.FW_QUERYSQL_Q',
  3806. parameters:{ID:dsId},
  3807. transform: 'firstRow',
  3808. shareResults:{'SELECTSTR':'SELECTSTR'}
  3809. }).appendQuery({
  3810. //执行共享结果中的sql语句,
  3811. configId:'FW_CONFIG.SELECTSTR_Q',
  3812. useShare:{'SELECTSTR':'SELECTSTR'},
  3813. parameters:{WHERECLS:whereCls},
  3814. transfrom:'firstRow',
  3815. shareNotNull:true
  3816. }).sentAjax('正在更新表单', function(data){
  3817. if(undefined != data[1][0]){
  3818. FWSetForm(form, data[1][0]);
  3819. if(callback && $.isFunction(callback)){
  3820. callback(data[1][0]);
  3821. }
  3822. }else{
  3823. if(callback && $.isFunction(callback)){
  3824. callback(null);
  3825. }else{
  3826. alert("没有查询到符合条件的数据!");
  3827. }
  3828. return false;
  3829. }
  3830. });
  3831. }
  3832. /**
  3833. *
  3834. * @param param 上传的参数,例子:
  3835. * var parameters = {
  3836. * configId:'bxgx_cbgl_plxgzsfs_xgmd_i',//必填项目,FW_IMPEXP的配置ID
  3837. * filePath:'C:/Documents and Settings/liguocai/桌面/excel643657087605952371.xls'//必填项目,上传文件的路径
  3838. * _commDo:'workflowProxyService.doWork',//非必填项目,上传的后续服务
  3839. * } ;
  3840. * @param uploadEvents JSON类型,包含上传过程中的回调函数,例如,上传前的校验onStart,上传完成后的回调函数onComplete,
  3841. * 上传过程中发生错误的回调函数onFail等等,后面可能会扩充更多的事件。
  3842. * 例子:{onComplete:'myFunction1',
  3843. * onFail:'myFunction2',
  3844. * onStart:'myFunction3'}
  3845. * 格式就是 事件名:函数名
  3846. * 各个事件的解析:
  3847. * 1. onComplete,如果上传成功完毕,调用该函数
  3848. * 2. onFail,如果上传过程发生异常,调用该函数
  3849. * 3. onStart,上传之前的检验函数,返回true往下执行applet,返回false直接返回,不往下执行
  3850. *
  3851. * @returns
  3852. */
  3853. function initUploadApplet(uploadEvents,appletId){
  3854. var uploadFileAppletId = appletId||'UploadFileApplet';
  3855. var attributes = {id : uploadFileAppletId,
  3856. code:'UploadFileApplet',
  3857. archive: contextPath+'/applet/UploadFileApplet.jar',
  3858. width:710,
  3859. height:40,
  3860. align:'middle'};
  3861. var parameters = { url: _getUrl(),
  3862. MAYSCRIPT:true,
  3863. onGetJsessionid:uploadEvents.onGetJsessionid,
  3864. onGetParams:uploadEvents.onGetParams,
  3865. onStart:uploadEvents.onStart,
  3866. onFail:uploadEvents.onFail,
  3867. onComplete:uploadEvents.onComplete,
  3868. cache_option:"NO"
  3869. } ;
  3870. _setParameters(parameters);
  3871. //要求JDK版本1.5或以上
  3872. var version = '1.5';
  3873. deployJava.runApplet(attributes, parameters, version);
  3874. //获取上传的URL
  3875. function _getUrl(){
  3876. var url = window.location.toString();
  3877. var count = 0;
  3878. var pos = 0;
  3879. for(var i=0;i<url.length;i++){
  3880. if(url.charAt(i) == "/"){
  3881. count++;
  3882. }
  3883. if(count == 4){
  3884. pos = i;
  3885. break;
  3886. }
  3887. }
  3888. return url.substring(0,pos) + "/CommUpload.do";
  3889. }
  3890. function _setParameters(params){
  3891. for(var key in params){
  3892. if(null == params[key]){
  3893. delete params[key];
  3894. }
  3895. }
  3896. }
  3897. }
  3898. function setProgressBar(num, id){
  3899. if(num<0 || num>100){
  3900. return;
  3901. }
  3902. var uploadAppletId = id || 'UploadFileApplet';
  3903. document.getElementById(uploadAppletId).setProgressBar(num);
  3904. }
  3905. /**
  3906. * 把JSON对象的里面值转换成字符串,供applet上传使用
  3907. * @param obj JSON对象
  3908. * @returns
  3909. */
  3910. function setJSONAllStr(obj){
  3911. for(var key in obj){
  3912. if((typeof obj[key])!='string'){
  3913. obj[key] = obj[key].toString();
  3914. }
  3915. }
  3916. return obj;
  3917. }
  3918. /**
  3919. * 功能:从初始化文件(.ini)中读取字符串型设置值
  3920. * @param filename 字符串,必填,指定初始化文件的名称,包含路径
  3921. * @param section 字符串,必填,指定要得到的值所在的节
  3922. * @param key 字符串,必填,指定要得到的值的名称,不用区分大小写
  3923. * @param defaultValue 字符串,必填,当指定的文件、节名、项目名不存在时,函数返回该参数指定的值返回值
  3924. * @param id 字符串,非必填,applet的id,缺省为'UploadFileApplet'
  3925. * @returns 函数执行成功时,在指定的文件、节名、项目名不存在任何错误的情况下,函数返回相应项的值;
  3926. * 如果指定的文件、节名、项目名不存在,函数返回default参数指定的缺省值;
  3927. * 如果发生错误,函数返回空字符串;
  3928. * 如果任何参数的值为NULL,ProfileString()函数返回NULL。
  3929. */
  3930. function ProfileString ( filename, section, key, defaultValue,id) {
  3931. //如果任何参数的值为NULL,ProfileString()函数返回NULL
  3932. if(null == filename || null == section || null == key || null == defaultValue){
  3933. return null;
  3934. }
  3935. var applet = null;
  3936. if(null == id){
  3937. applet = _getReadWriteApplet();
  3938. }else{
  3939. applet = document.getElementById(id);
  3940. }
  3941. if(null == applet){
  3942. alert("找不到applet,无法读写文件");
  3943. return "";
  3944. }
  3945. //文件不存在返回默认值
  3946. if(false == applet.isFileExists(filename)){
  3947. return defaultValue;
  3948. }
  3949. var lines = applet.readFile(filename);
  3950. //读文件出错返回空字符串
  3951. if(null == lines){
  3952. return "";
  3953. }
  3954. var myCRLF = "_SINOBESTCRLF_";
  3955. lines = lines.split(myCRLF);
  3956. var DIVIDER = "_SINOBESTPARSEFILEDIVIDER_";
  3957. var data = _parseFile(lines);
  3958. //JSON的KEY都是大写格式,转换成大写查询数据
  3959. if(null == data[section+DIVIDER+key.toUpperCase()]){
  3960. //如果指定的文件、节名、项目名不存在,函数返回default参数指定的缺省值
  3961. return defaultValue;
  3962. }else{
  3963. //函数执行成功时,在指定的文件、节名、项目名不存在任何错误的情况下,函数返回相应项的值
  3964. return data[section+DIVIDER+key.toUpperCase()];
  3965. }
  3966. //将ini文件转换成JSON对象
  3967. function _parseFile(lines){
  3968. var posSectionBeg = 0;
  3969. var posSectionEnd = 0;
  3970. var posEqual = 0;
  3971. var section = "";
  3972. var key = "";
  3973. var value = "";
  3974. var rtn = {};
  3975. for(var i=0,len=lines.length;i<len;i++){
  3976. posSectionBeg = lines[i].indexOf("[");
  3977. posSectionEnd = lines[i].indexOf("]");
  3978. posEqual = lines[i].indexOf("=");
  3979. if(-1!=posSectionBeg && -1!=posSectionEnd){
  3980. section = lines[i].substring(posSectionBeg+1,posSectionEnd);
  3981. }else if(-1 != posEqual){
  3982. key = $.trim(lines[i].substring(0,posEqual));
  3983. value = $.trim(lines[i].substring(posEqual+1));
  3984. rtn[section+DIVIDER+key.toUpperCase()] = value;//key作为大写保存
  3985. }
  3986. }
  3987. return rtn;
  3988. }
  3989. /**
  3990. * 功能:获取有读写本地文件能力的Applet
  3991. * @returns 如果找到,则返回相应的applet对象,否则返回null
  3992. */
  3993. function _getReadWriteApplet(){
  3994. //有读写本地文件能力的applet列表
  3995. var appletIds = ["UploadFileApplet","DownloadFileApplet"];
  3996. var applet = null;
  3997. for(var i=0,len=appletIds.length;i<len;i++){
  3998. if(null != document.getElementById(appletIds[i])){
  3999. applet = document.getElementById(appletIds[i]);
  4000. break;
  4001. }
  4002. }
  4003. return applet;
  4004. }
  4005. }
  4006. /***
  4007. * 功能:设置初始化文件中指定项的值。
  4008. * @param filename 字符串,必填,指定初始化文件的名称,可以包括路径,省略路径时,该函数按操作系统的标准路径搜索指定文件
  4009. * @param section 字符串,必填,指定要设置的值所在的节
  4010. * @param key 字符串,必填,指定要设置的值的名称,不用区分大小写
  4011. * @param value 字符串,必填,指定要设置项的值
  4012. * @param id 字符串,非必填,applet的id,缺省为'UploadFileApplet'
  4013. * @returns 返回值 数字
  4014. * 函数执行成功时返回1,
  4015. * 指定的文件未找到或指定的文件不能访问时函数返回-1。
  4016. * 如果任何参数的值为NULL,SetProfileString()函数返回NULL
  4017. */
  4018. function SetProfileString(filename, section, key,value,id){
  4019. if(null == filename || null == section || null == key || null == value){
  4020. return null;
  4021. }
  4022. var applet = null;
  4023. if(null == id){
  4024. applet = _getReadWriteApplet();
  4025. }else{
  4026. applet = document.getElementById(id);
  4027. }
  4028. if(null == applet){
  4029. alert("找不到applet,无法读写文件");
  4030. return "";
  4031. }
  4032. //applet返回一个字符串数组,但这个数组只能访问length属性,元素,但是不能使用splice等函数
  4033. //这个数组其实JAVA中数组,所以没有JS数组的方法。
  4034. var lines = applet.readFile(filename);
  4035. if(null == lines){
  4036. return -1;
  4037. }
  4038. //转换为JS的数组
  4039. var myCRLF = "_SINOBESTCRLF_";
  4040. var arrLines = lines.split(myCRLF);
  4041. var head = "[" + section + "]";
  4042. var newLine = key + " = " + value;
  4043. var isSectionExist = false;
  4044. var posSection = -1;
  4045. var pos = -1;
  4046. //判断section 是否存在,如果存在则获取所在行数写入posHead
  4047. for(var i=0,len=arrLines.length;i<len;i++){
  4048. pos = arrLines[i].indexOf(head);
  4049. if(-1 != pos){
  4050. posSection = i;
  4051. isSectionExist = true;
  4052. break;
  4053. }
  4054. }
  4055. if(true == isSectionExist){
  4056. var tKey;
  4057. var posEqual = -1;
  4058. var posSectionBeg = -1;
  4059. var posSectionEnd = -1;
  4060. var isKeyExist = false;
  4061. var posKey = -1;
  4062. //判断KEY是否已经存在
  4063. for(var i=posSection+1,len=arrLines.length;i<len;i++){
  4064. //先判断是否到达了下一个section
  4065. posSectionBeg = arrLines[i].indexOf('[');
  4066. posSectionEnd = arrLines[i].indexOf(']');
  4067. posEqual = arrLines[i].indexOf('=');
  4068. if(-1 != posSectionBeg && -1 != posSectionEnd){
  4069. isKeyExist = false;
  4070. break;
  4071. }else if(-1 != posEqual){
  4072. tKey = $.trim((arrLines[i].split('='))[0]);
  4073. if(tKey.toUpperCase() == key.toUpperCase()){
  4074. isKeyExist = true;
  4075. posKey = i;
  4076. break;
  4077. }
  4078. }
  4079. }
  4080. if(true == isKeyExist){
  4081. arrLines[posKey] = newLine;
  4082. }else if(false == isKeyExist){
  4083. arrLines.splice(posSection + 1, 0, newLine);
  4084. }
  4085. }else if(false == isSectionExist){
  4086. arrLines.push("");
  4087. arrLines.push(head);
  4088. arrLines.push(newLine);
  4089. }
  4090. return applet.writeFile(filename,arrLines);
  4091. /**
  4092. * 功能:获取有读写本地文件能力的Applet
  4093. * @returns 如果找到,则返回相应的applet对象,否则返回null
  4094. */
  4095. function _getReadWriteApplet(){
  4096. //有读写本地文件能力的applet列表
  4097. var appletIds = ["UploadFileApplet","DownloadFileApplet"];
  4098. var applet = null;
  4099. for(var i=0,len=appletIds.length;i<len;i++){
  4100. if(null != document.getElementById(appletIds[i])){
  4101. applet = document.getElementById(appletIds[i]);
  4102. break;
  4103. }
  4104. }
  4105. return applet;
  4106. }
  4107. }
  4108. /**
  4109. * 判断拼音是否匹配中文,支持常用中文字,支持多音字。
  4110. * 原理在于将字符串中的中文的的字符转换成英文字符,再用indexOf判断是否匹配。
  4111. * 例如:
  4112. * isPinyinMatch('我爱你','wo'),返回是true
  4113. * isPinyinMatch('1-单位','1-da'),返回是true
  4114. * isPinyinMatch('1-单位','wei'),返回是true
  4115. * isPinyinMatch('1-单位','dw'),返回是false,不支持中文首字母搜索,需要完整拼音
  4116. * isPinyinMatch('着急','zhe'),返回是true,因为“着”是多音字,
  4117. * @param itemText 需要被匹配的含有中文的字符串
  4118. * @param query 拼音
  4119. * @returns 如果拼音匹配则返回true,否则为false
  4120. */
  4121. function isPinyinMatch(itemText,query){
  4122. if(itemText==''||itemText==null){return false;}
  4123. //获取存放在左侧树页面的拼音字典
  4124. if(null == PINYIN_DICT_CACHE){
  4125. var twindow = window;
  4126. while(twindow.dialogArguments!=null){
  4127. twindow = twindow.dialogArguments;
  4128. }
  4129. try{
  4130. PINYIN_DICT_CACHE = twindow.top.opener.top.frames['TreeMenu'].PINYIN_DICT_CACHE;
  4131. }catch(e){
  4132. if(null == twindow.top.frames['TreeMenu']){
  4133. return false;
  4134. }
  4135. PINYIN_DICT_CACHE = twindow.top.frames['TreeMenu'].PINYIN_DICT_CACHE;
  4136. if(null == PINYIN_DICT_CACHE){
  4137. return false;
  4138. }
  4139. }
  4140. }
  4141. query = query.toLowerCase();
  4142. var itemTextPinyin = _getPinyin(itemText);
  4143. var bPinyinMatch = false;
  4144. for(var i=0,len=itemTextPinyin.length;i<len;i++){
  4145. if((itemTextPinyin[i].toLowerCase()).indexOf(query)!=-1){
  4146. bPinyinMatch = true;
  4147. break;
  4148. }
  4149. }
  4150. return bPinyinMatch;
  4151. //获取字符串的拼音
  4152. function _getPinyin(hans){
  4153. //多音字的话,会有多种结果,所以用数组保存
  4154. var rst = [];
  4155. var len=hans.length;
  4156. //r是一个二维数组,每个元素数组,存放一个字符的拼音,多音字的拼音有多个
  4157. var r = [];
  4158. var curChar;
  4159. for(var i=0;i<len;i++){
  4160. curChar = hans.charAt(i);
  4161. var pattern = /^([\u4E00-\u9FA5])$/gi;
  4162. var isCh = pattern.test(curChar);
  4163. //如果是汉字
  4164. if(true==isCh){
  4165. //r.push(PINYIN_DICT_CACHE[curChar]);
  4166. r.push(PINYIN_DICT_CACHE[curChar]==null?[""]:PINYIN_DICT_CACHE[curChar]);
  4167. }else{
  4168. r.push([curChar]);
  4169. }
  4170. }//for
  4171. //计算笛卡尔积
  4172. rst = _descartes(r);
  4173. return rst;
  4174. }
  4175. //计算笛卡尔积,arr是二维数组,数组的每个元素都是是一个包含一个或多个字符串的数组
  4176. function _descartes(arr){
  4177. var len=arr.length;
  4178. if(1 == len){
  4179. return arr[0];
  4180. }
  4181. var d = _descartesTwo(arr[0],arr[1]);
  4182. for(var i=2;i<len;i++){
  4183. d = _descartesTwo(d,arr[i]);
  4184. }
  4185. return d;
  4186. }
  4187. //计算两个一维数组的笛卡尔积
  4188. function _descartesTwo(arr1,arr2){
  4189. var rst = [];
  4190. for(var i=0,len1=arr1.length;i<len1;i++){
  4191. for(var j=0,len2=arr2.length;j<len2;j++){
  4192. rst.push(arr1[i]+arr2[j]);
  4193. }
  4194. }
  4195. return rst;
  4196. }
  4197. }
  4198. /**
  4199. * 功能:指定hnisi:tabPanel第N个TAB换行
  4200. * @param tabId 字符串,必填,指定hnisi:tabPanel的id
  4201. * @param index 数字,或者数字数组,必填,指定要换行的TAB的序号
  4202. * @returns
  4203. * 例子1:指定id为mypanel的tabPanel第5个标签后换行
  4204. * setTabHeader('mypanel',5);
  4205. * 例子2:指定id为mypanel的tabPanel第5和第10个标签后换行
  4206. * setTabHeader('mypanel',[5,10]);
  4207. *
  4208. */
  4209. function setTabHeader(tabId,index){
  4210. if(!$.isArray(index)){
  4211. index = [index];
  4212. }
  4213. var $lis = $("#"+ tabId +" ul li");
  4214. for(var i=0,len=index.length;i<len;i++){
  4215. var $li = $lis.eq(index[i]-1);
  4216. if(0 == i){
  4217. $li.after("<LI id='crlf' style='font-size:40%; visibility:visible;float:none;clear:left;'></LI>");
  4218. }else{
  4219. $li.after("<LI id='crlf' style='font-size:50%; visibility:visible;float:none;clear:left;'></LI>");
  4220. }
  4221. }
  4222. }
  4223. /**
  4224. * 功能
  4225. * @param filePath 字符串,必填项,删除文件的路径
  4226. * @param id 字符串,非必填项,有删除功能applet id,不填则程序会查找页面可用的applet
  4227. * @returns 返回1,表示删除成功,返回-1表示删除失败,返回0,表示指定文件不存在
  4228. */
  4229. function appletDeleteFile(filePath,id){
  4230. var applet = null;
  4231. if(null == id){
  4232. applet = _getDeleteFileApplet();
  4233. }else{
  4234. applet = document.getElementById(id);
  4235. }
  4236. if(null == applet){
  4237. alert("找不到applet,无法删除文件");
  4238. return "";
  4239. }
  4240. return applet.deleteFile(filePath);
  4241. function _getDeleteFileApplet(){
  4242. var applet = null;
  4243. var appletIds = ["DownloadFileApplet"];
  4244. for(var i=0,len=appletIds.length;i<len;i++){
  4245. if(null != document.getElementById(appletIds[i])){
  4246. applet = document.getElementById(appletIds[i]);
  4247. break;
  4248. }
  4249. }
  4250. return applet;
  4251. }
  4252. }
  4253. /**
  4254. * 功能:初始化下载applet
  4255. * @param downloadEvents JSON对象,必填项,指定事件响应函数
  4256. * 例子:
  4257. * var downloadEvents = {
  4258. * onGetParams : 'onGetParams',//获取参数
  4259. * onFail : 'onFail'//错误响应
  4260. * };
  4261. * @param appletId 字符串,非必填项,applet的id,默认为'DownloadFileApplet'
  4262. * @returns
  4263. */
  4264. function initDownloadApplet(downloadEvents,appletId){
  4265. var downloadAppletId = appletId||'DownloadFileApplet';
  4266. var attributes = { id: downloadAppletId,
  4267. code:'DownloadFileApplet',
  4268. archive: contextPath+'/applet/DownloadFileApplet.jar',
  4269. width: 0,
  4270. height: 0
  4271. };
  4272. var parameters = { url: _getUrl(),
  4273. onFail: downloadEvents.onFail,
  4274. onGetParams: downloadEvents.onGetParams,
  4275. onGetmyxxid: downloadEvents.onGetmyxxid,
  4276. cache_option:"NO",
  4277. MAYSCRIPT:true
  4278. };
  4279. _setParameters(parameters);
  4280. //要求JDK版本1.5或以上
  4281. var version = '1.5';
  4282. deployJava.runApplet(attributes,parameters,version);
  4283. function _getUrl(){
  4284. var url = window.location.toString();
  4285. var count = 0;
  4286. var pos = 0;
  4287. for(var i=0;i<url.length;i++){
  4288. if(url.charAt(i) == "/"){
  4289. count++;
  4290. }
  4291. if(count == 4){
  4292. pos = i;
  4293. break;
  4294. }
  4295. }
  4296. return url.substring(0,pos) + "/downFile.do";
  4297. }
  4298. function _setParameters(params){
  4299. for(var key in params){
  4300. if(null == params[key]){
  4301. delete params[key];
  4302. }
  4303. }
  4304. }
  4305. }
  4306. /**
  4307. * 功能:提供给DownloadFileApplet调用的JS函数,用作拼接请求字符串
  4308. * @param obj JSON对象,必填项,DownloadFileApplet的下载配置参数
  4309. * @returns
  4310. */
  4311. function downloadAppletGetRquestString(obj){
  4312. result = "";
  4313. var DIVIDER = "_SINOBESTFILEPATHDIVIDER_";
  4314. var filePath = obj["filePath"];
  4315. for(var key in obj){
  4316. if("filePath" != key){
  4317. if('string' != obj[key]){
  4318. obj[key] = obj[key].toString();
  4319. }
  4320. result += (encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]) + "&");
  4321. }
  4322. }
  4323. var len = result.length;
  4324. if(0 == len){
  4325. return "" + DIVIDER + filePath;
  4326. }else{
  4327. return result.substring(0,len-1) + DIVIDER + filePath;
  4328. }
  4329. }
  4330. /**
  4331. * 功能:使用DownloadFileApplet下载文件
  4332. * @param appletId 字符串,非必填项,默认为'DownloadFileApplet'
  4333. * @returns 返回值为1, 表示下载成功,
  4334. * 返回值为-1,表示下载失败
  4335. */
  4336. function appletDownload(appletId){
  4337. var downloadAppletId = appletId||'DownloadFileApplet';
  4338. var applet = document.getElementById(downloadAppletId);
  4339. return applet.download();
  4340. }
  4341. /**
  4342. * js 除法函数
  4343. * @param arg1
  4344. * @param arg2
  4345. * @returns
  4346. */
  4347. function div(arg1,arg2){
  4348. var t1=0,t2=0,r1,r2,v,r;
  4349. try{t1=arg1.toString().split(".")[1].length;}catch(e){}
  4350. try{t2=arg2.toString().split(".")[1].length;}catch(e){}
  4351. with(Math){
  4352. r1=Number(arg1.toString().replace(".",""));
  4353. r2=Number(arg2.toString().replace(".",""));
  4354. v =(r1/r2)*pow(10,t2-t1);
  4355. }
  4356. return v;
  4357. }
  4358. /**
  4359. * js 乘法函数
  4360. * @param arg1
  4361. * @param arg2
  4362. * @returns
  4363. */
  4364. function mult(arg1,arg2){
  4365. var i,j,v,t;
  4366. arg1=String(arg1);
  4367. arg2=String(arg2);
  4368. i=arg1.length-arg1.indexOf(".")-1;
  4369. i=(i>=arg1.length)?0:i;
  4370. j=arg2.length-arg2.indexOf(".")-1;
  4371. j=(j>=arg2.length)?0:j;
  4372. v=arg1.replace(".","")*arg2.replace(".","")/Math.pow(10,i+j);
  4373. return v;
  4374. }
  4375. /**
  4376. * js 加法函数
  4377. * @param arg1
  4378. * @param arg2
  4379. * @returns
  4380. */
  4381. function add(arg1,arg2){
  4382. var r1,r2,m,v,r,t;
  4383. try{r1=arg1.toString().split(".")[1].length;}catch(e){r1=0;}
  4384. try{r2=arg2.toString().split(".")[1].length;}catch(e){r2=0;}
  4385. m = Math.pow(10,Math.max(r1,r2));
  4386. v = (arg1*m+arg2*m)/m;
  4387. if(v==0){return v;}
  4388. r = Math.max(r1,r2);
  4389. if(r!=0){
  4390. v = v+0.000000001; //需要进行特殊处理 例如 135.67 + 1.2=136.869999999999998
  4391. }
  4392. t = v.toString();
  4393. if(r!=0){
  4394. var iPos = t.indexOf(".");
  4395. var re = t.substr(0,iPos + r + 1);
  4396. t = re;
  4397. }
  4398. return t;
  4399. }
  4400. /**
  4401. * 生成批量打印按钮。每个页面只能有一个"批量打印"按钮。
  4402. */
  4403. function genBatchPrintBtn(){
  4404. if(0 < document.getElementsByName('batchPrintForm').length){
  4405. alert("生成批量打印按钮出错:一个页面只能有一个批量打印按钮");
  4406. return;
  4407. }
  4408. var appRoot = _getUrl();
  4409. var ctx = contextPath;
  4410. var codebase = appRoot + "/j2re-1_4_1-windows-i586-i.exe#Version=1,4,1,0";
  4411. var archive = ctx + "/runqianReport4Applet.jar";
  4412. function _getUrl(){
  4413. var url = window.location.toString();
  4414. var count = 0;
  4415. var pos = 0;
  4416. for(var i=0;i<url.length;i++){
  4417. if(url.charAt(i) == "/"){
  4418. count++;
  4419. }
  4420. if(count == 4){
  4421. pos = i;
  4422. break;
  4423. }
  4424. }
  4425. //返回类似 "http://127.0.0.1:8080/fw"
  4426. return url.substring(0,pos);
  4427. }
  4428. var html = '<form name="batchPrintForm" >' +
  4429. '<input type="hidden" name="reportStr" value=""/>'+
  4430. '<input type="hidden" name="jy" value=""/>'+
  4431. '<p align="center"><object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" '+
  4432. 'id="report1_directPrintApplet" width="80" height="20" style="vertical-align: middle" ' +
  4433. 'codebase="'+ codebase + '"' +
  4434. ' >'+
  4435. '<param name="name" value="report1_directPrintApplet">'+
  4436. '<param name="code" value="com.runqian.report4.view.applet.DirectPrintApplet.class">'+
  4437. '<param name="archive" value="'+archive+'">'+
  4438. '<param name="type" value="application/x-java-applet;version=1.4">'+
  4439. '<param name="appRoot" value="'+appRoot+'">'+
  4440. '<param name="dataServlet" value="/reportServlet?action=1">'+
  4441. '<param name="srcType" value="file">'+
  4442. '<param name="fontFace" value="宋体">'+
  4443. '<param name="fontSize" value="18pt">'+
  4444. '<param name="fontColor" value="#0000FF">'+
  4445. '<param name="backColor" value="#12632256">'+
  4446. '<param name="label" value="批量打印">'+
  4447. '<param name="savePrintSetup" value="yes"> '+
  4448. '<param name="needPrintPrompt" value="no">'+
  4449. '<param name="scriptable" value="true">'+
  4450. '</object></p>'+
  4451. '</form>'+
  4452. '<script>'+
  4453. 'function runqian_getPrintReports() {'+
  4454. ' var jyFunc = batchPrintForm.jy.value;'+
  4455. ' if(jyFunc!="" && window[jyFunc]!=null){'+
  4456. ' if(false==eval(jyFunc+"()")){'+
  4457. 'return "";'+
  4458. '}'+
  4459. ' }'+
  4460. ' return batchPrintForm.reportStr.value;'+
  4461. '}' + '</script'+'>';
  4462. document.write(html);
  4463. }//generateBatchPrintBtn() end
  4464. /**
  4465. * 功能:设置批量打印按钮,指定打印那些报表,传进什么参数。
  4466. * 注意点1:可以多次调用该API,调用之后, "批量打印"按钮打印根据设置的字符串打印出相应的报表。
  4467. * 注意点2:如果不想打印任何报表,请设置setBatchPrintBtn("");
  4468. *
  4469. * reportStr:字符串,必填项。
  4470. * 格式为:"{无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}..."
  4471. * jy : 字符串,可选项。点击批量打印按钮调用的校验函数,如果检验函数返回false,则不打印,否则,继续打印。
  4472. * 例子,打印三份报表 "{test.raq}{test2.raq(ID=2;DWSXH=3;)}{test2.raq(ID=3;DWSXH=4;)}"
  4473. * {}花括号包含一个报表模板,()小括号包含报表模板的入参,入参分号;隔开,开发人员根据实际情况构造reportStr。
  4474. */
  4475. function setBatchPrintBtn(reportStr,jy){
  4476. batchPrintForm.jy.value = jy||"";
  4477. batchPrintForm.reportStr.value = reportStr;
  4478. }
  4479. /**
  4480. * 功能:通过指定配置ID数组,报表参数FORM,初始化批量打印按钮
  4481. * @param cfgIds 字符串数组,必填项,配置ID字符串,例子
  4482. * ["ybdy_yyqt_cyjs_jsjg","ybdy_yyqt_cyjs_ylfyjsd","ybdy_yyqt_cyjs_grzfxmqd","ybdy_yyqt_cyjs_ylzfxmqd"]
  4483. * @param printForm FORM对象,必填项,包含报表参数
  4484. * @param jy 字符串,可选项。点击批量打印按钮调用的校验函数,如果检验函数返回false,则不打印,否则,继续打印。
  4485. * @returns
  4486. * 代码解析:关键就是组装好如下格式的字符串"{报表1(参数1=参数值1;参数2=参数值2;)}{报 表2}",
  4487. * 一个花括号包住一个报表模板,如果模板带有入参,则需要加个小括号,在小括号里边写参数。
  4488. * 例如"{test.raq}{test2.raq(ID=2;DWSXH=3;)}{test2.raq(ID=3;DWSXH=4;)}"。
  4489. * 润乾applet通过读取该字符串,批量打印报表
  4490. */
  4491. function initBatchReport(cfgIds,printForm,jy){
  4492. var ajaxQuerys = [];
  4493. for(var i=0,len=cfgIds.length;i<len;i++){
  4494. ajaxQuerys.push({
  4495. configId:'FW_CONFIG.FW_REPORT_CONF_Q',
  4496. parameters:{ID:cfgIds[i]},
  4497. transform:'firstRow'
  4498. });
  4499. }
  4500. new Service().appendQuery(ajaxQuerys).sentAjax('设置批量打印参数',function(data){
  4501. //设置成"{test.raq}{test2.raq(ID=2;DWSXH=3;)}{test2.raq(ID=3;DWSXH=4;)}"的格式
  4502. var reportStr = "";
  4503. for(var i=0,len=data.length;i<len;i++){
  4504. reportStr += "{";
  4505. reportStr += data[i].TEMPLATEFILE;
  4506. var reportParm = data[i].REPORTPARM;
  4507. if(reportParm != "" && reportParm !=null){
  4508. reportStr += _getParamsString(reportParm,printForm);
  4509. }
  4510. reportStr += "}";
  4511. }
  4512. setBatchPrintBtn(reportStr,jy||"");
  4513. },null,false);//同步执行
  4514. //参数字符串,形式为(参数1=参数值1;参数2=参数值2;)
  4515. function _getParamsString(reportParm,printForm){
  4516. var rst = "";
  4517. rst+="(";
  4518. params = reportParm.split('|');
  4519. for(var i=0,len=params.length;i<len;i++){
  4520. rst += params[i] + "=" + (printForm[params[i]] ? printForm[params[i]].value : '')+ ";";
  4521. }
  4522. rst+=")";
  4523. return rst;
  4524. }//_getParamsString
  4525. }//initBatchReport
  4526. /**
  4527. * 功能:动态按需加载script脚本
  4528. * @param opts JSON对象,必填项
  4529. * 格式是:{url:xxx,beforeFunc:function(){XXX},afterFunc:function(script)}
  4530. * url是要加载js文件的地址,
  4531. * beforeFunc是校验函数,只有返回true的时候才加载脚本,
  4532. * afterFunc(script)是回调函数,可以自定以脚本加载完成后的动作,
  4533. * 其中script参数是加载完毕的script元素对象
  4534. * @returns
  4535. * 例子:按顺序加载encrypt.js文件和encrypt2文件
  4536. * loadScript({
  4537. url:curSerUrl + "/js/fw/encrypt.js",
  4538. beforeFunc: function(){return null==document.getElementById("fwencrypt");},//返回true的时候才载入脚本
  4539. afterFunc: function(script){
  4540. if(null != script){
  4541. script.id = "fwencrypt";
  4542. }
  4543. loadScript({
  4544. url:curSerUrl + "/js/fw/encrypt2.js",
  4545. beforeFunc: function(){return null==document.getElementById("fwencrypt2");},//返回true的时候才载入脚本
  4546. afterFunc: function(script){
  4547. if(null != script){
  4548. script.id = "fwencrypt2";
  4549. }
  4550. }
  4551. });
  4552. }
  4553. });
  4554. */
  4555. function loadScript(opt){
  4556. var url = opt.url || "";
  4557. var afterFunc = opt.afterFunc || function(){};
  4558. var beforeFunc = opt.beforeFunc || function(){return true};
  4559. if('[object Function]' != Object.prototype.toString.call(beforeFunc)){
  4560. beforeFunc = function(){return true};
  4561. }
  4562. if('[object Function]' != Object.prototype.toString.call(afterFunc)){
  4563. afterFunc = function(){};
  4564. }
  4565. //校验不通过,直接调用回调函数
  4566. if(false == beforeFunc()){
  4567. afterFunc();
  4568. return;
  4569. }
  4570. //校验通过,则下载script,并且下载执行完毕后调用afterFunc,并且把script作为参数传递
  4571. var script = document.createElement('script');
  4572. script.src = url;
  4573. script.type= 'text/javascript';
  4574. if(script.readyState){
  4575. script.onreadystatechange = function(){
  4576. if('complete' == this.readyState || 'loaded' == this.readyState){
  4577. this.onreadystatechange = null;
  4578. afterFunc(script);
  4579. }
  4580. }
  4581. }else{
  4582. script.onload = function(){
  4583. afterFunc(script);
  4584. }
  4585. }
  4586. document.getElementsByTagName("head")[0].appendChild(script);
  4587. }
  4588. /**
  4589. * <pre>
  4590. * 动态异步加载单记录表,多记录表或者JSP到当前页面的目标DIV中
  4591. * @param divId 字符串,必填项,目标DIV的id值
  4592. * @param type 字符串,必填项,加载的类型,值为'gt','glt','jsp'其中之一。
  4593. * @param idOrJsp 字符串,必填项,值为加载gt的id,glt的id,或者是jsp路径。
  4594. * 如果是jsp路径,为安全起见,路径后不能包含?a=xx&b=xx的字符串。参数请放在下面的data参数。
  4595. * @param data JSON对象,选填项,用作指定gt,glt,jsp的参数.
  4596. * 1. gt的参数仅支持defV
  4597. * 2. glt的参数支持whereCls,height,width,showContent,editable,expBtns,
  4598. * hasPage,pageSize,hasTitle
  4599. * 如果gt,glt的参数没有在上述列出,请联系框架组改进,或者使用jsp方式动态加载
  4600. * gt,glt方式仅仅用于动态产生简单的单记录表和多记录表,如果需要动态产生复杂的记录表,
  4601. * 请编写jsp文件,用jsp方式动态载入
  4602. * 3. jsp的参数无限制,与一般请求JSP的参数一样。
  4603. * 动态载入JSP,对JSP文件的要求如下: (其实与hnisi:tabPanel下的hnisi:tab的要求类似)
  4604. * 3.1 要动态载入的jsp文件,文件头部不能有这么一行
  4605. * <%@ include file="/jsp/framework/head.jsp"%>
  4606. * 需要将这一行改成
  4607. * <%@ include file="/jsp/framework/taglib.jsp"%>
  4608. * 从而避免重复导入js文件,
  4609. * 3.2 jsp文件里面不要包含<html/>,<head/>,<body/>标签,因为动态载入会载入JSP所有内容
  4610. * 如果被动态载入的JSP文件包含了<html/>,<head/>,<body/>那么载入后的页面会包含多个
  4611. * <html/>,<head/>,<body/>
  4612. *
  4613. * 例子:
  4614. * jsp页面:
  4615. *
  4616. * <!--动态内容将被加载到这个DIV中-->
  4617. * <div id="dynDiv>
  4618. * </div>
  4619. *
  4620. * js代码
  4621. * //1. 动态加载ID=fw_operauth_oper_operator_q的单记录表
  4622. * FWDynDiv('dynDiv','gt','fw_operauth_oper_operator_q'"});
  4623. * FWDynDiv('dynDiv','gt','fw_operauth_oper_operator_q',{defV:"#{'OPERTYPE':'2','LOGINID':'test_jc1'}"});
  4624. * //2.动态加载多记录表
  4625. * FWDynDiv('dynDiv','glt','fw_operauth_oper_operator_list',{whereCls:"1=1"});
  4626. * FWDynDiv('dynDiv','glt','fw_authmngr_role',{whereCls:"1=2",showContent:"false"});
  4627. * 动态加载多记录表支持参数
  4628. * //3.动态加载jsp页面
  4629. * FWDynDiv('dynDiv','jsp','/jsp/sysmngr/web/operauth/oper/operator_right.jsp',{OPERTYPE:'2',BAE001:'441901'});
  4630. * </pre>
  4631. */
  4632. function FWDynDiv(divId,type,idOrJsp,data){
  4633. data = data || {};
  4634. var type = type.toLowerCase();
  4635. var url = "";
  4636. var serverUrl = _getServerURL();
  4637. if('jsp' == type){
  4638. if(idOrJsp.indexOf('?') != -1){
  4639. alert("出于安全考虑,不允许在URL上附带参数。请将参数写在函数的data入参。");
  4640. return false;
  4641. }
  4642. url = serverUrl + idOrJsp;
  4643. }else if('gt' == type){
  4644. var gtId = idOrJsp;
  4645. url = serverUrl + "/jsp/framework/gt.jsp";
  4646. data.id = gtId;
  4647. }else if('glt' == type){
  4648. var gltId = idOrJsp;
  4649. url = serverUrl + "/jsp/framework/glt.jsp";
  4650. data.id = gltId;
  4651. }
  4652. $("#"+divId).html("<span><img style=\"vertical-align:bottom;\" src=\"" + contextPath + "/js/ui/fwwindow/images/panel_loading.gif\"/></span>" +
  4653. "<span>&nbsp;&nbsp;</span>" +
  4654. "<span>loading...</span>");
  4655. $("#"+divId).load(url,data,function(responseText,status,xhr){
  4656. if (status == "error") {
  4657. $("#"+divId).html("<span style='color:red;'>动态加载失败: " + xhr.status + " " + xhr.statusText + "</span><br>" + responseText);
  4658. }
  4659. });
  4660. function _getServerURL(){
  4661. var href = window.location.href;
  4662. var count = 0;
  4663. var i=0;
  4664. var pos = -1;
  4665. for(;i<href.length;i++){
  4666. var c = href.charAt(i);
  4667. if('/' == c){
  4668. count++ ;
  4669. }
  4670. if(4 == count){
  4671. pos = i;
  4672. break;
  4673. }
  4674. }
  4675. return href.substring(0,pos);
  4676. }
  4677. }
  4678. /**
  4679. * 功能:构造一个form,发送HTTP请求。发送请求后,构造的form会被删除。
  4680. *
  4681. * @param action 字符串,必填项,form的action属性。
  4682. * @param data 字符串,必填项,form的字段名值对。
  4683. * @param method 字符串,非必填项,form的method属性,默认值是POST。
  4684. * 为安全起见,尽可能使用post方法,而不是get方法
  4685. * @returns
  4686. *
  4687. * 例子
  4688. * var param = {"listWhereCls":" AAE100 ='1' and BAE001 like '4419%'",
  4689. * "configId":"fw_authmngr_geneauth_list1",
  4690. * "serviceId":"gltExcelService",
  4691. * "method":"exportGlt"
  4692. * };
  4693. * sendRequest(contextPath + '/downFile.do',param);
  4694. */
  4695. function sendRequest(action,data,method){
  4696. method = method || 'post';
  4697. var div = document.createElement("div");
  4698. var html = "<form method=\""+method+"\" action=\""+action+"\">";
  4699. for(var key in data){
  4700. var value = data[key];
  4701. html += "<input type=\"hidden\" name=\""+key+"\" value=\""+value+"\"/>"
  4702. }
  4703. html += "</form>";
  4704. div.innerHTML=html;
  4705. var form = div.getElementsByTagName("form")[0];
  4706. document.body.appendChild(form);
  4707. form.submit();
  4708. document.body.removeChild(form);
  4709. }
  4710. /**
  4711. * 功能:非流程业务影像资料资料上传
  4712. *
  4713. * @param ywbh 业务编号(统一业务中区分不同笔业务的唯一键值)
  4714. * @param ywlb (可选)业务类别(当传入的编号与其他业务的业务编号无法区分时,此字段必录)
  4715. * @returns
  4716. *
  4717. * 例子
  4718. *
  4719. * flcYxzl("2222","HDSQ");
  4720. */
  4721. function flcYxzl(ywbh,ywlb) {
  4722. if(isNull(ywbh)){
  4723. FWalert('业务编号为空,请核实!');
  4724. return;
  4725. }
  4726. var ywlsh=isNull(ywlb)?ywbh:(ywlb+ywbh);
  4727. var url=contextPath + "/framework/web/uploadyx.do?ywlsh="+ywlsh;
  4728. window.open (url, "newwindow", "height=300, width=800, toolbar =no, menubar=no, scrollbars=yes, resizable=no, location=no, status=no")
  4729. }