UU跑腿标准版

ligerui.all.js 725KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598
  1. /**
  2. * jQuery ligerUI 1.2.4
  3. *
  4. * http://ligerui.com
  5. *
  6. * Author daomi 2014 [ gd_star@163.com ]
  7. *
  8. */
  9. (function ($)
  10. {
  11. //ligerui 继承方法
  12. Function.prototype.ligerExtend = function (parent, overrides)
  13. {
  14. if (typeof parent != 'function') return this;
  15. //保存对父类的引用
  16. this.base = parent.prototype;
  17. this.base.constructor = parent;
  18. //继承
  19. var f = function () { };
  20. f.prototype = parent.prototype;
  21. this.prototype = new f();
  22. this.prototype.constructor = this;
  23. //附加属性方法
  24. if (overrides) $.extend(this.prototype, overrides);
  25. };
  26. //延时加载
  27. Function.prototype.ligerDefer = function (o, defer, args)
  28. {
  29. var fn = this;
  30. return setTimeout(function () { fn.apply(o, args || []); }, defer);
  31. };
  32. // 核心对象
  33. window.liger = $.ligerui = {
  34. version: 'V1.2.0',
  35. managerCount: 0,
  36. //组件管理器池
  37. managers: {},
  38. managerIdPrev: 'ligerui',
  39. //管理器id已经存在时自动创建新的
  40. autoNewId: true,
  41. //错误提示
  42. error: {
  43. managerIsExist: '管理器id已经存在'
  44. },
  45. pluginPrev: 'liger',
  46. getId: function (prev)
  47. {
  48. prev = prev || this.managerIdPrev;
  49. var id = prev + (1000 + this.managerCount);
  50. this.managerCount++;
  51. return id;
  52. },
  53. add: function (manager)
  54. {
  55. if (arguments.length == 2)
  56. {
  57. var m = arguments[1];
  58. m.id = m.id || m.options.id || arguments[0].id;
  59. this.addManager(m);
  60. return;
  61. }
  62. if (!manager.id) manager.id = this.getId(manager.__idPrev());
  63. if (this.managers[manager.id]) manager.id = this.getId(manager.__idPrev());
  64. if (this.managers[manager.id])
  65. {
  66. throw new Error(this.error.managerIsExist);
  67. }
  68. this.managers[manager.id] = manager;
  69. },
  70. remove: function (arg)
  71. {
  72. if (typeof arg == "string" || typeof arg == "number")
  73. {
  74. delete liger.managers[arg];
  75. }
  76. else if (typeof arg == "object")
  77. {
  78. if (arg instanceof liger.core.Component)
  79. {
  80. delete liger.managers[arg.id];
  81. }
  82. else
  83. {
  84. if (!$(arg).attr(this.idAttrName)) return false;
  85. delete liger.managers[$(arg).attr(this.idAttrName)];
  86. }
  87. }
  88. },
  89. //获取ligerui对象
  90. //1,传入ligerui ID
  91. //2,传入Dom Object
  92. get: function (arg, idAttrName)
  93. {
  94. idAttrName = idAttrName || "ligeruiid";
  95. if (typeof arg == "string" || typeof arg == "number")
  96. {
  97. return liger.managers[arg];
  98. }
  99. else if (typeof arg == "object")
  100. {
  101. var domObj = arg.length ? arg[0] : arg;
  102. var id = domObj[idAttrName] || $(domObj).attr(idAttrName);
  103. if (!id) return null;
  104. return liger.managers[id];
  105. }
  106. return null;
  107. },
  108. //根据类型查找某一个对象
  109. find: function (type)
  110. {
  111. var arr = [];
  112. for (var id in this.managers)
  113. {
  114. var manager = this.managers[id];
  115. if (type instanceof Function)
  116. {
  117. if (manager instanceof type)
  118. {
  119. arr.push(manager);
  120. }
  121. }
  122. else if (type instanceof Array)
  123. {
  124. if ($.inArray(manager.__getType(), type) != -1)
  125. {
  126. arr.push(manager);
  127. }
  128. }
  129. else
  130. {
  131. if (manager.__getType() == type)
  132. {
  133. arr.push(manager);
  134. }
  135. }
  136. }
  137. return arr;
  138. },
  139. //$.fn.liger{Plugin} 和 $.fn.ligerGet{Plugin}Manager
  140. //会调用这个方法,并传入作用域(this)
  141. //parm [plugin] 插件名
  142. //parm [args] 参数(数组)
  143. //parm [ext] 扩展参数,定义命名空间或者id属性名
  144. run: function (plugin, args, ext)
  145. {
  146. if (!plugin) return;
  147. ext = $.extend({
  148. defaultsNamespace: 'ligerDefaults',
  149. methodsNamespace: 'ligerMethods',
  150. controlNamespace: 'controls',
  151. idAttrName: 'ligeruiid',
  152. isStatic: false,
  153. hasElement: true, //是否拥有element主体(比如drag、resizable等辅助性插件就不拥有)
  154. propertyToElemnt: null //链接到element的属性名
  155. }, ext || {});
  156. plugin = plugin.replace(/^ligerGet/, '');
  157. plugin = plugin.replace(/^liger/, '');
  158. if (this == null || this == window || ext.isStatic)
  159. {
  160. if (!liger.plugins[plugin])
  161. {
  162. liger.plugins[plugin] = {
  163. fn: $[liger.pluginPrev + plugin],
  164. isStatic: true
  165. };
  166. }
  167. return new $.ligerui[ext.controlNamespace][plugin]($.extend({}, $[ext.defaultsNamespace][plugin] || {}, $[ext.defaultsNamespace][plugin + 'String'] || {}, args.length > 0 ? args[0] : {}));
  168. }
  169. if (!liger.plugins[plugin])
  170. {
  171. liger.plugins[plugin] = {
  172. fn: $.fn[liger.pluginPrev + plugin],
  173. isStatic: false
  174. };
  175. }
  176. if (/Manager$/.test(plugin)) return liger.get(this, ext.idAttrName);
  177. this.each(function ()
  178. {
  179. if (this[ext.idAttrName] || $(this).attr(ext.idAttrName))
  180. {
  181. var manager = liger.get(this[ext.idAttrName] || $(this).attr(ext.idAttrName));
  182. if (manager && args.length > 0) manager.set(args[0]);
  183. //已经执行过
  184. return;
  185. }
  186. if (args.length >= 1 && typeof args[0] == 'string') return;
  187. //只要第一个参数不是string类型,都执行组件的实例化工作
  188. var options = args.length > 0 ? args[0] : null;
  189. var p = $.extend({}, $[ext.defaultsNamespace][plugin], $[ext.defaultsNamespace][plugin + 'String'], options);
  190. if (ext.propertyToElemnt) p[ext.propertyToElemnt] = this;
  191. if (ext.hasElement)
  192. {
  193. new $.ligerui[ext.controlNamespace][plugin](this, p);
  194. }
  195. else
  196. {
  197. new $.ligerui[ext.controlNamespace][plugin](p);
  198. }
  199. });
  200. if (this.length == 0) return null;
  201. if (args.length == 0) return liger.get(this, ext.idAttrName);
  202. if (typeof args[0] == 'object') return liger.get(this, ext.idAttrName);
  203. if (typeof args[0] == 'string')
  204. {
  205. var manager = liger.get(this, ext.idAttrName);
  206. if (manager == null) return;
  207. if (args[0] == "option")
  208. {
  209. if (args.length == 2)
  210. return manager.get(args[1]); //manager get
  211. else if (args.length >= 3)
  212. return manager.set(args[1], args[2]); //manager set
  213. }
  214. else
  215. {
  216. var method = args[0];
  217. if (!manager[method]) return; //不存在这个方法
  218. var parms = Array.apply(null, args);
  219. parms.shift();
  220. return manager[method].apply(manager, parms); //manager method
  221. }
  222. }
  223. return null;
  224. },
  225. //扩展
  226. //1,默认参数
  227. //2,本地化扩展
  228. defaults: {},
  229. //3,方法接口扩展
  230. methods: {},
  231. //命名空间
  232. //核心控件,封装了一些常用方法
  233. core: {},
  234. //命名空间
  235. //组件的集合
  236. controls: {},
  237. //plugin 插件的集合
  238. plugins: {}
  239. };
  240. //扩展对象
  241. $.ligerDefaults = {};
  242. //扩展对象
  243. $.ligerMethos = {};
  244. //关联起来
  245. liger.defaults = $.ligerDefaults;
  246. liger.methods = $.ligerMethos;
  247. //获取ligerui对象
  248. //parm [plugin] 插件名,可为空
  249. $.fn.liger = function (plugin)
  250. {
  251. if (plugin)
  252. {
  253. return liger.run.call(this, plugin, arguments);
  254. }
  255. else
  256. {
  257. return liger.get(this);
  258. }
  259. };
  260. //组件基类
  261. //1,完成定义参数处理方法和参数属性初始化的工作
  262. //2,完成定义事件处理方法和事件属性初始化的工作
  263. liger.core.Component = function (options)
  264. {
  265. //事件容器
  266. this.events = this.events || {};
  267. //配置参数
  268. this.options = options || {};
  269. //子组件集合索引
  270. this.children = {};
  271. };
  272. $.extend(liger.core.Component.prototype, {
  273. __getType: function ()
  274. {
  275. return 'liger.core.Component';
  276. },
  277. __idPrev: function ()
  278. {
  279. return 'ligerui';
  280. },
  281. //设置属性
  282. // arg 属性名 value 属性值
  283. // arg 属性/值 value 是否只设置事件
  284. set: function (arg, value)
  285. {
  286. if (!arg) return;
  287. if (typeof arg == 'object')
  288. {
  289. var tmp;
  290. if (this.options != arg)
  291. {
  292. $.extend(this.options, arg);
  293. tmp = arg;
  294. }
  295. else
  296. {
  297. tmp = $.extend({}, arg);
  298. }
  299. if (value == undefined || value == true)
  300. {
  301. for (var p in tmp)
  302. {
  303. if (p.indexOf('on') == 0)
  304. this.set(p, tmp[p]);
  305. }
  306. }
  307. if (value == undefined || value == false)
  308. {
  309. for (var p in tmp)
  310. {
  311. if (p.indexOf('on') != 0)
  312. this.set(p, tmp[p]);
  313. }
  314. }
  315. return;
  316. }
  317. var name = arg;
  318. //事件参数
  319. if (name.indexOf('on') == 0)
  320. {
  321. if (typeof value == 'function')
  322. this.bind(name.substr(2), value);
  323. return;
  324. }
  325. if (!this.options) this.options = {};
  326. if (this.trigger('propertychange', [arg, value]) == false) return;
  327. this.options[name] = value;
  328. var pn = '_set' + name.substr(0, 1).toUpperCase() + name.substr(1);
  329. if (this[pn])
  330. {
  331. this[pn].call(this, value);
  332. }
  333. this.trigger('propertychanged', [arg, value]);
  334. },
  335. //获取属性
  336. get: function (name)
  337. {
  338. var pn = '_get' + name.substr(0, 1).toUpperCase() + name.substr(1);
  339. if (this[pn])
  340. {
  341. return this[pn].call(this, name);
  342. }
  343. return this.options[name];
  344. },
  345. hasBind: function (arg)
  346. {
  347. var name = arg.toLowerCase();
  348. var event = this.events[name];
  349. if (event && event.length) return true;
  350. return false;
  351. },
  352. //触发事件
  353. //data (可选) Array(可选)传递给事件处理函数的附加参数
  354. trigger: function (arg, data)
  355. {
  356. if (!arg) return;
  357. var name = arg.toLowerCase();
  358. var event = this.events[name];
  359. if (!event) return;
  360. data = data || [];
  361. if ((data instanceof Array) == false)
  362. {
  363. data = [data];
  364. }
  365. for (var i = 0; i < event.length; i++)
  366. {
  367. var ev = event[i];
  368. if (ev.handler.apply(ev.context, data) == false)
  369. return false;
  370. }
  371. },
  372. //绑定事件
  373. bind: function (arg, handler, context)
  374. {
  375. if (typeof arg == 'object')
  376. {
  377. for (var p in arg)
  378. {
  379. this.bind(p, arg[p]);
  380. }
  381. return;
  382. }
  383. if (typeof handler != 'function') return false;
  384. var name = arg.toLowerCase();
  385. var event = this.events[name] || [];
  386. context = context || this;
  387. event.push({ handler: handler, context: context });
  388. this.events[name] = event;
  389. },
  390. //取消绑定
  391. unbind: function (arg, handler)
  392. {
  393. if (!arg)
  394. {
  395. this.events = {};
  396. return;
  397. }
  398. var name = arg.toLowerCase();
  399. var event = this.events[name];
  400. if (!event || !event.length) return;
  401. if (!handler)
  402. {
  403. delete this.events[name];
  404. }
  405. else
  406. {
  407. for (var i = 0, l = event.length; i < l; i++)
  408. {
  409. if (event[i].handler == handler)
  410. {
  411. event.splice(i, 1);
  412. break;
  413. }
  414. }
  415. }
  416. },
  417. destroy: function ()
  418. {
  419. liger.remove(this);
  420. }
  421. });
  422. //界面组件基类,
  423. //1,完成界面初始化:设置组件id并存入组件管理器池,初始化参数
  424. //2,渲染的工作,细节交给子类实现
  425. //parm [element] 组件对应的dom element对象
  426. //parm [options] 组件的参数
  427. liger.core.UIComponent = function (element, options)
  428. {
  429. liger.core.UIComponent.base.constructor.call(this, options);
  430. var extendMethods = this._extendMethods();
  431. if (extendMethods) $.extend(this, extendMethods);
  432. this.element = element;
  433. this._init();
  434. this._preRender();
  435. this.trigger('render');
  436. this._render();
  437. this.trigger('rendered');
  438. this._rendered();
  439. };
  440. liger.core.UIComponent.ligerExtend(liger.core.Component, {
  441. __getType: function ()
  442. {
  443. return 'liger.core.UIComponent';
  444. },
  445. //扩展方法
  446. _extendMethods: function ()
  447. {
  448. },
  449. _init: function ()
  450. {
  451. this.type = this.__getType();
  452. if (!this.element)
  453. {
  454. this.id = this.options.id || liger.getId(this.__idPrev());
  455. }
  456. else
  457. {
  458. this.id = this.options.id || this.element.id || liger.getId(this.__idPrev());
  459. }
  460. //存入管理器池
  461. liger.add(this);
  462. if (!this.element) return;
  463. //读取attr方法,并加载到参数,比如['url']
  464. var attributes = this.attr();
  465. if (attributes && attributes instanceof Array)
  466. {
  467. for (var i = 0; i < attributes.length; i++)
  468. {
  469. var name = attributes[i];
  470. this.options[name] = $(this.element).attr(name);
  471. }
  472. }
  473. //读取ligerui这个属性,并加载到参数,比如 ligerui = "width:120,heigth:100"
  474. var p = this.options;
  475. if ($(this.element).attr("ligerui"))
  476. {
  477. try
  478. {
  479. var attroptions = $(this.element).attr("ligerui");
  480. if (attroptions.indexOf('{') != 0) attroptions = "{" + attroptions + "}";
  481. eval("attroptions = " + attroptions + ";");
  482. if (attroptions) $.extend(p, attroptions);
  483. }
  484. catch (e) { }
  485. }
  486. },
  487. //预渲染,可以用于继承扩展
  488. _preRender: function ()
  489. {
  490. },
  491. _render: function ()
  492. {
  493. },
  494. _rendered: function ()
  495. {
  496. if (this.element)
  497. {
  498. $(this.element).attr("ligeruiid", this.id);
  499. }
  500. },
  501. _setCls: function (value)
  502. {
  503. if (this.element && value)
  504. {
  505. $(this.element).addClass(value);
  506. }
  507. },
  508. //返回要转换成ligerui参数的属性,比如['url']
  509. attr: function ()
  510. {
  511. return [];
  512. },
  513. destroy: function ()
  514. {
  515. if (this.element)
  516. {
  517. $(this.element).remove();
  518. }
  519. this.options = null;
  520. liger.remove(this);
  521. }
  522. });
  523. //表单控件基类
  524. liger.controls.Input = function (element, options)
  525. {
  526. liger.controls.Input.base.constructor.call(this, element, options);
  527. };
  528. liger.controls.Input.ligerExtend(liger.core.UIComponent, {
  529. __getType: function ()
  530. {
  531. return 'liger.controls.Input';
  532. },
  533. attr: function ()
  534. {
  535. return ['nullText'];
  536. },
  537. setValue: function (value)
  538. {
  539. return this.set('value', value);
  540. },
  541. getValue: function ()
  542. {
  543. return this.get('value');
  544. },
  545. //设置只读
  546. _setReadonly: function (readonly)
  547. {
  548. var wrapper = this.wrapper || this.text;
  549. if (!wrapper || !wrapper.hasClass("l-text")) return;
  550. var inputText = this.inputText;
  551. if (readonly)
  552. {
  553. if (inputText) inputText.attr("readonly", "readonly");
  554. wrapper.addClass("l-text-readonly");
  555. } else
  556. {
  557. if (inputText) inputText.removeAttr("readonly");
  558. wrapper.removeClass("l-text-readonly");
  559. }
  560. },
  561. setEnabled: function ()
  562. {
  563. return this.set('disabled', false);
  564. },
  565. setDisabled: function ()
  566. {
  567. return this.set('disabled', true);
  568. },
  569. updateStyle: function ()
  570. {
  571. },
  572. resize: function (width, height)
  573. {
  574. this.set({ width: width, height: height + 2 });
  575. }
  576. });
  577. //全局窗口对象
  578. liger.win = {
  579. //顶端显示
  580. top: false,
  581. //遮罩
  582. mask: function (win)
  583. {
  584. function setHeight()
  585. {
  586. if (!liger.win.windowMask) return;
  587. var h = $(window).height() + $(window).scrollTop();
  588. liger.win.windowMask.height(h);
  589. }
  590. if (!this.windowMask)
  591. {
  592. this.windowMask = $("<div class='l-window-mask' style='display: block;'></div>").appendTo('body');
  593. $(window).bind('resize.ligeruiwin', setHeight);
  594. $(window).bind('scroll', setHeight);
  595. }
  596. this.windowMask.show();
  597. setHeight();
  598. this.masking = true;
  599. },
  600. //取消遮罩
  601. unmask: function (win)
  602. {
  603. var jwins = $("body > .l-dialog:visible,body > .l-window:visible");
  604. for (var i = 0, l = jwins.length; i < l; i++)
  605. {
  606. var winid = jwins.eq(i).attr("ligeruiid");
  607. if (win && win.id == winid) continue;
  608. //获取ligerui对象
  609. var winmanager = liger.get(winid);
  610. if (!winmanager) continue;
  611. //是否模态窗口
  612. var modal = winmanager.get('modal');
  613. //如果存在其他模态窗口,那么不会取消遮罩
  614. if (modal) return;
  615. }
  616. if (this.windowMask)
  617. this.windowMask.hide();
  618. this.masking = false;
  619. },
  620. //显示任务栏
  621. createTaskbar: function ()
  622. {
  623. if (!this.taskbar)
  624. {
  625. this.taskbar = $('<div class="l-taskbar"><div class="l-taskbar-tasks"></div><div class="l-clear"></div></div>').appendTo('body');
  626. if (this.top) this.taskbar.addClass("l-taskbar-top");
  627. this.taskbar.tasks = $(".l-taskbar-tasks:first", this.taskbar);
  628. this.tasks = {};
  629. }
  630. this.taskbar.show();
  631. this.taskbar.animate({ bottom: 0 });
  632. return this.taskbar;
  633. },
  634. //关闭任务栏
  635. removeTaskbar: function ()
  636. {
  637. var self = this;
  638. self.taskbar.animate({ bottom: -32 }, function ()
  639. {
  640. self.taskbar.remove();
  641. self.taskbar = null;
  642. });
  643. },
  644. activeTask: function (win)
  645. {
  646. for (var winid in this.tasks)
  647. {
  648. var t = this.tasks[winid];
  649. if (winid == win.id)
  650. {
  651. t.addClass("l-taskbar-task-active");
  652. }
  653. else
  654. {
  655. t.removeClass("l-taskbar-task-active");
  656. }
  657. }
  658. },
  659. //获取任务
  660. getTask: function (win)
  661. {
  662. var self = this;
  663. if (!self.taskbar) return;
  664. if (self.tasks[win.id]) return self.tasks[win.id];
  665. return null;
  666. },
  667. //增加任务
  668. addTask: function (win)
  669. {
  670. var self = this;
  671. if (!self.taskbar) self.createTaskbar();
  672. if (self.tasks[win.id]) return self.tasks[win.id];
  673. var title = win.get('title');
  674. var task = self.tasks[win.id] = $('<div class="l-taskbar-task"><div class="l-taskbar-task-icon"></div><div class="l-taskbar-task-content">' + title + '</div></div>');
  675. self.taskbar.tasks.append(task);
  676. self.activeTask(win);
  677. task.bind('click', function ()
  678. {
  679. self.activeTask(win);
  680. if (win.actived)
  681. win.min();
  682. else
  683. win.active();
  684. }).hover(function ()
  685. {
  686. $(this).addClass("l-taskbar-task-over");
  687. }, function ()
  688. {
  689. $(this).removeClass("l-taskbar-task-over");
  690. });
  691. return task;
  692. },
  693. hasTask: function ()
  694. {
  695. for (var p in this.tasks)
  696. {
  697. if (this.tasks[p])
  698. return true;
  699. }
  700. return false;
  701. },
  702. //移除任务
  703. removeTask: function (win)
  704. {
  705. var self = this;
  706. if (!self.taskbar) return;
  707. if (self.tasks[win.id])
  708. {
  709. self.tasks[win.id].unbind();
  710. self.tasks[win.id].remove();
  711. delete self.tasks[win.id];
  712. }
  713. if (!self.hasTask())
  714. {
  715. self.removeTaskbar();
  716. }
  717. },
  718. //前端显示
  719. setFront: function (win)
  720. {
  721. var wins = liger.find(liger.core.Win);
  722. for (var i in wins)
  723. {
  724. var w = wins[i];
  725. if (w == win)
  726. {
  727. $(w.element).css("z-index", "9200");
  728. this.activeTask(w);
  729. }
  730. else
  731. {
  732. $(w.element).css("z-index", "9100");
  733. }
  734. }
  735. }
  736. };
  737. //窗口基类 window、dialog
  738. liger.core.Win = function (element, options)
  739. {
  740. liger.core.Win.base.constructor.call(this, element, options);
  741. };
  742. liger.core.Win.ligerExtend(liger.core.UIComponent, {
  743. __getType: function ()
  744. {
  745. return 'liger.controls.Win';
  746. },
  747. mask: function ()
  748. {
  749. if (this.options.modal)
  750. liger.win.mask(this);
  751. },
  752. unmask: function ()
  753. {
  754. if (this.options.modal)
  755. liger.win.unmask(this);
  756. },
  757. min: function ()
  758. {
  759. },
  760. max: function ()
  761. {
  762. },
  763. active: function ()
  764. {
  765. }
  766. });
  767. liger.draggable = {
  768. dragging: false
  769. };
  770. liger.resizable = {
  771. reszing: false
  772. };
  773. liger.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o)
  774. {
  775. var f = function (n)
  776. {
  777. return n < 10 ? '0' + n : n;
  778. },
  779. escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
  780. quote = function (value)
  781. {
  782. escapable.lastIndex = 0;
  783. return escapable.test(value) ?
  784. '"' + value.replace(escapable, function (a)
  785. {
  786. var c = meta[a];
  787. return typeof c === 'string' ? c :
  788. '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
  789. }) + '"' :
  790. '"' + value + '"';
  791. };
  792. if (o === null) return 'null';
  793. var type = typeof o;
  794. if (type === 'undefined') return undefined;
  795. if (type === 'string') return quote(o);
  796. if (type === 'number' || type === 'boolean') return '' + o;
  797. if (type === 'object')
  798. {
  799. if (typeof o.toJSON === 'function')
  800. {
  801. return liger.toJSON(o.toJSON());
  802. }
  803. if (o.constructor === Date)
  804. {
  805. return isFinite(this.valueOf()) ?
  806. this.getUTCFullYear() + '-' +
  807. f(this.getUTCMonth() + 1) + '-' +
  808. f(this.getUTCDate()) + 'T' +
  809. f(this.getUTCHours()) + ':' +
  810. f(this.getUTCMinutes()) + ':' +
  811. f(this.getUTCSeconds()) + 'Z' : null;
  812. }
  813. var pairs = [];
  814. if (o.constructor === Array)
  815. {
  816. for (var i = 0, l = o.length; i < l; i++)
  817. {
  818. pairs.push(liger.toJSON(o[i]) || 'null');
  819. }
  820. return '[' + pairs.join(',') + ']';
  821. }
  822. var name, val;
  823. for (var k in o)
  824. {
  825. type = typeof k;
  826. if (type === 'number')
  827. {
  828. name = '"' + k + '"';
  829. } else if (type === 'string')
  830. {
  831. name = quote(k);
  832. } else
  833. {
  834. continue;
  835. }
  836. type = typeof o[k];
  837. if (type === 'function' || type === 'undefined')
  838. {
  839. continue;
  840. }
  841. val = liger.toJSON(o[k]);
  842. pairs.push(name + ':' + val);
  843. }
  844. return '{' + pairs.join(',') + '}';
  845. }
  846. };
  847. //获取 默认的编辑构造器
  848. liger.getEditor = function (e)
  849. {
  850. var type = e.type, control = e.control, master = e.master;
  851. if (!type) return null;
  852. if (control) control = control.substr(0, 1).toUpperCase() + control.substr(1);
  853. return $.extend({
  854. create: function (container, editParm, controlOptions)
  855. {
  856. //field in form , column in grid
  857. var field = editParm.field || editParm.column, options = controlOptions || {};
  858. var isInGrid = editParm.column ? true : false;
  859. var p = $.extend({}, e.options);
  860. var inputType = "text";
  861. if ($.inArray(type, ["password", "file"]) != -1) inputType = type;
  862. if (e.password) inputType = "password";
  863. var inputBody = $("<input type='" + inputType + "'/>");
  864. if (e.body)
  865. {
  866. inputBody = e.body.clone();
  867. }
  868. inputBody.appendTo(container);
  869. if (editParm.field)
  870. {
  871. var txtInputName = field.name;
  872. var prefixID = $.isFunction(options.prefixID) ? options.prefixID(master) : (options.prefixID || "");
  873. p.id = field.id || (prefixID + field.name);
  874. if ($.inArray(type, ["select", "combobox", "autocomplete", "popup"]) != -1)
  875. {
  876. txtInputName = field.textField || field.comboboxName;
  877. if (field.comboboxName && !field.id)
  878. p.id = (options.prefixID || "") + field.comboboxName;
  879. }
  880. if ($.inArray(type, ["select", "combobox", "autocomplete", "popup", "radiolist", "checkboxlist", "listbox"]) != -1)
  881. {
  882. p.valueFieldID = prefixID + field.name;
  883. }
  884. if (!e.body)
  885. {
  886. var inputName = prefixID + txtInputName;
  887. var inputId = new Date().getTime();
  888. inputBody.attr($.extend({
  889. id: inputId,
  890. name: inputName
  891. }, field.attr));
  892. if (field.cssClass)
  893. {
  894. inputBody.addClass(field.cssClass);
  895. }
  896. if (field.validate && !master.options.unSetValidateAttr)
  897. {
  898. inputBody.attr('validate', liger.toJSON(field.validate));
  899. }
  900. }
  901. $.extend(p, field.options);
  902. }
  903. if (field.editor)
  904. {
  905. $.extend(p, field.editor.options);
  906. if (field.editor.valueColumnName) p.valueField = field.editor.valueColumnName;
  907. if (field.editor.displayColumnName) p.textField = field.editor.displayColumnName;
  908. if (control)
  909. {
  910. var defaults = liger.defaults[control];
  911. for (var proName in defaults)
  912. {
  913. if (proName in field.editor)
  914. {
  915. p[proName] = field.editor[proName];
  916. }
  917. }
  918. }
  919. //可扩展参数,支持动态加载
  920. var ext = field.editor.p || field.editor.ext;
  921. ext = typeof (ext) == 'function' ? ext(editParm) : ext;
  922. $.extend(p, ext);
  923. }
  924. //返回的是ligerui对象
  925. var lobj = inputBody['liger' + control](p);
  926. if (isInGrid)
  927. {
  928. setTimeout(function () { inputBody.focus(); }, 100);
  929. }
  930. return lobj;
  931. },
  932. getValue: function (editor, editParm)
  933. {
  934. if (editor.getValue)
  935. {
  936. return editor.getValue();
  937. }
  938. },
  939. setValue: function (editor, value, editParm)
  940. {
  941. if (editor.setValue)
  942. {
  943. editor.setValue(value);
  944. }
  945. },
  946. getText: function (editor, editParm)
  947. {
  948. if (editor.getText)
  949. {
  950. return editor.getText();
  951. }
  952. },
  953. setText: function (editor, value, editParm)
  954. {
  955. if (editor.setText)
  956. {
  957. editor.setText(value);
  958. }
  959. },
  960. getSelected: function (editor, editParm)
  961. {
  962. if (editor.getSelected)
  963. {
  964. return editor.getSelected();
  965. }
  966. },
  967. resize: function (editor, width, height, editParm)
  968. {
  969. if (editParm.field) width = width - 2;
  970. if (editor.resize) editor.resize(width, height);
  971. },
  972. destroy: function (editor, editParm)
  973. {
  974. if (editor.destroy) editor.destroy();
  975. }
  976. }, e);
  977. }
  978. //几个默认的编辑器构造函数
  979. liger.editors = {
  980. "text": {
  981. control: 'TextBox'
  982. },
  983. "date": {
  984. control: 'DateEditor',
  985. setValue: function (editor, value, editParm)
  986. {
  987. // /Date(1328423451489)/
  988. if (typeof value == "string" && /^\/Date/.test(value))
  989. {
  990. value = value.replace(/^\//, "new ").replace(/\/$/, "");
  991. eval("value = " + value);
  992. }
  993. editor.setValue(value);
  994. }
  995. },
  996. "combobox": {
  997. control: 'ComboBox'
  998. },
  999. "spinner": {
  1000. control: 'Spinner'
  1001. },
  1002. "checkbox": {
  1003. control: 'CheckBox'
  1004. },
  1005. "checkboxlist": {
  1006. control: 'CheckBoxList',
  1007. body: $('<div></div>'),
  1008. resize: function (editor, width, height, editParm)
  1009. {
  1010. editor.set('width', width - 2);
  1011. }
  1012. },
  1013. "radiolist": {
  1014. control: 'RadioList',
  1015. body: $('<div></div>'),
  1016. resize: function (editor, width, height, editParm)
  1017. {
  1018. editor.set('width', width - 2);
  1019. }
  1020. },
  1021. "listbox": {
  1022. control: 'ListBox',
  1023. body: $('<div></div>'),
  1024. resize: function (editor, width, height, editParm)
  1025. {
  1026. editor.set('width', width - 2);
  1027. }
  1028. },
  1029. "popup": {
  1030. control: 'PopupEdit'
  1031. },
  1032. "number": {
  1033. control: 'TextBox',
  1034. options: { number: true }
  1035. },
  1036. "currency": {
  1037. control: 'TextBox',
  1038. options: { currency: true }
  1039. },
  1040. "digits": {
  1041. control: 'TextBox',
  1042. options: { digits: true }
  1043. },
  1044. "password": {
  1045. control: 'TextBox',
  1046. password: true
  1047. }
  1048. };
  1049. liger.editors["string"] = liger.editors["text"];
  1050. liger.editors["select"] = liger.editors["combobox"];
  1051. liger.editors["int"] = liger.editors["digits"];
  1052. liger.editors["float"] = liger.editors["number"];
  1053. liger.editors["chk"] = liger.editors["checkbox"];
  1054. liger.editors["popupedit"] = liger.editors["popup"];
  1055. //jQuery version fix
  1056. $.fn.live = $.fn.on ? $.fn.on : $.fn.live;
  1057. if (!$.browser)
  1058. {
  1059. var userAgent = navigator.userAgent.toLowerCase();
  1060. $.browser = {
  1061. version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, '0'])[1],
  1062. safari: /webkit/.test(userAgent),
  1063. opera: /opera/.test(userAgent),
  1064. msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
  1065. mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
  1066. };
  1067. }
  1068. })(jQuery);/**
  1069. * jQuery ligerUI 1.2.4
  1070. *
  1071. * http://ligerui.com
  1072. *
  1073. * Author daomi 2014 [ gd_star@163.com ]
  1074. *
  1075. */
  1076. (function ($)
  1077. {
  1078. /*
  1079. 以html的方式加载组件
  1080. 程序会查询以 liger-插件名 类名的Dom,从dom加载相应的参数并调用插件
  1081. 比如遇到 .liger-grid 的dom,会找到 liger.defaults.Grid 加载需要的参数
  1082. 而在config.Grid中配置了这些参数的类型,会动态得加载data,而columns会设置为数组
  1083. 参数处理的优先级为:
  1084. 1,ignores 忽略不处理的参数
  1085. 2,dom存在 {属性名} 的类名 ,比如 <ul class="columns"></ul> ,便会将这个参数设置为复杂属性(object或array):找到相应的defaults和config来加载
  1086. defaults是先找$.liger.inject.defaults,找不到再找liger.defaults的
  1087. config为{父配置}.{属性名},比如 config.Grid.columns
  1088. 3,直接读取 data-{属性名} 或者 {属性名} 的dom属性
  1089. */
  1090. liger.inject = {
  1091. prev: 'liger-',
  1092. /*
  1093. 命名规则:插件名_属性名(包括第N级的属性) (插件名首字母大写,属性名首字母小写)
  1094. 获取规则:获取default时会先找这里,找不到再找liger.defaults,比如 liger.defaults.Grid_columns
  1095. 备注:这里只定义了参数的列表
  1096. */
  1097. defaults: {
  1098. Grid_detail: {
  1099. height: null,
  1100. onShowDetail: null
  1101. },
  1102. Grid_editor: 'ComboBox,DateEditor,Spinner,TextBox,PopupEdit,CheckBoxList,RadioList,Grid_editor',
  1103. Grid_popup: 'PopupEdit',
  1104. Grid_grid: 'Grid',
  1105. Grid_condition: 'Form',
  1106. Grid_toolbar: 'Toolbar',
  1107. Grid_fields: 'Form_fields',
  1108. Form_editor: 'ComboBox,DateEditor,Spinner,TextBox,PopupEdit,CheckBoxList,RadioList,Form_editor',
  1109. Form_grid: 'Grid',
  1110. Form_columns: 'Grid_columns',
  1111. Form_condition: 'Form',
  1112. Form_popup: 'PopupEdit',
  1113. Form_buttons: 'Button',
  1114. Portal_panel:'Panel'
  1115. },
  1116. /*
  1117. config里面配置了某插件参数或者复杂属性参数的类型(动态加载、数组、默认参数)
  1118. */
  1119. config: {
  1120. Grid: {
  1121. //动态
  1122. dynamics: 'data,isChecked,detail,rowDraggingRender,toolbar,columns',
  1123. //数组
  1124. arrays: 'columns',
  1125. //复杂属性columns
  1126. columns: {
  1127. dynamics: 'render,totalSummary,headerRender,columns,editor,columns',
  1128. arrays: 'columns',
  1129. textProperty: 'display',
  1130. columns: 'liger.inject.config.Grid.columns',
  1131. editor: {
  1132. dynamics: 'data,columns,render,renderItem,grid,condition,ext',
  1133. grid: 'liger.inject.config.Grid',
  1134. condition: 'liger.inject.config.Form'
  1135. }
  1136. },
  1137. toolbar: {
  1138. arrays: 'items'
  1139. }
  1140. },
  1141. Form: {
  1142. dynamics: 'validate,fields,buttons',
  1143. arrays: 'fields,buttons',
  1144. fields: {
  1145. textProperty: 'label',
  1146. dynamics: 'validate,editor',
  1147. editor: {
  1148. dynamics: 'data,columns,render,renderItem,grid,condition,attr',
  1149. grid: 'liger.inject.config.Grid',
  1150. condition: 'liger.inject.config.Form'
  1151. }
  1152. },
  1153. buttons: 'liger.inject.config.Button'
  1154. },
  1155. PopupEdit: {
  1156. dynamics: 'grid,condition'
  1157. },
  1158. Button: {
  1159. textProperty: 'text',
  1160. dynamics: 'click'
  1161. },
  1162. ComboBox: {
  1163. dynamics: 'columns,data,tree,grid,condition,render,parms,renderItem'
  1164. },
  1165. ListBox: {
  1166. dynamics: 'columns,data,render,parms'
  1167. },
  1168. RadioList: {
  1169. dynamics: 'data,parms'
  1170. },
  1171. CheckBoxList: {
  1172. dynamics: 'data,parms'
  1173. },
  1174. Panel: {
  1175. },
  1176. Portal: {
  1177. //动态
  1178. dynamics: 'rows,columns',
  1179. //数组
  1180. arrays: 'rows,columns',
  1181. //复杂属性 columns
  1182. columns: {
  1183. dynamics: 'panels',
  1184. arrays: 'panels'
  1185. },
  1186. //复杂属性 rows
  1187. rows: {
  1188. dynamics: 'panels',
  1189. arrays: 'panels'
  1190. },
  1191. toolbar: {
  1192. arrays: 'items'
  1193. }
  1194. }
  1195. },
  1196. parse: function (code)
  1197. {
  1198. try
  1199. {
  1200. if (code == null) return null;
  1201. return new Function("return " + code + ";")();
  1202. } catch (e)
  1203. {
  1204. return null;
  1205. }
  1206. },
  1207. parseDefault: function (value)
  1208. {
  1209. var g = this;
  1210. if (!value) return value;
  1211. var result = {};
  1212. $(value.split(',')).each(function (index, name)
  1213. {
  1214. if (!name) return;
  1215. name = name.substr(0, 1).toUpperCase() + name.substr(1);
  1216. $.extend(result, g.parse("liger.defaults." + name));
  1217. });
  1218. return result;
  1219. },
  1220. fotmatValue: function (value, type)
  1221. {
  1222. if (type == "boolean")
  1223. return value == "true" || value == "1";
  1224. if (type == "number" && value)
  1225. return parseFloat(value.toString());
  1226. return value;
  1227. },
  1228. getOptions: function (e)
  1229. {
  1230. var jelement = e.jelement, defaults = e.defaults, config = e.config;
  1231. config = $.extend({
  1232. ignores: "",
  1233. dynamics: "",
  1234. arrays: ""
  1235. }, config);
  1236. var g = this, options = {}, value;
  1237. if (config.textProperty) options[config.textProperty] = jelement.text();
  1238. for (var proName in defaults)
  1239. {
  1240. var className = proName.toLowerCase();
  1241. var subElement = $("> ." + className, jelement);
  1242. //忽略
  1243. if ($.inArray(proName, config.ignores.split(',')) != -1) continue;
  1244. //判断子节点 (复杂属性)
  1245. if (subElement.length)
  1246. {
  1247. var defaultName = e.controlName + "_" + proName;
  1248. var subDefaults = g.defaults[defaultName] || liger.defaults[defaultName], subConfig = config[proName];
  1249. if (typeof (subDefaults) == "string") subDefaults = g.parseDefault(subDefaults);
  1250. else if (typeof (subDefaults) == "funcion") subDefaults = subDefaults();
  1251. if (typeof (subConfig) == "string") subConfig = g.parse(subConfig);
  1252. else if (typeof (subConfig) == "funcion") subConfig = subConfig();
  1253. if (subDefaults)
  1254. {
  1255. if ($.inArray(proName, config.arrays.split(',')) != -1)
  1256. {
  1257. value = [];
  1258. $(">div,>li,>input", subElement).each(function ()
  1259. {
  1260. value.push(g.getOptions({
  1261. defaults: subDefaults,
  1262. controlName: e.controlName,
  1263. config: subConfig,
  1264. jelement: $(this)
  1265. }));
  1266. });
  1267. options[proName] = value;
  1268. } else
  1269. {
  1270. options[proName] = g.getOptions({
  1271. defaults: subDefaults,
  1272. controlName: e.controlName,
  1273. config: subConfig,
  1274. jelement: subElement
  1275. });
  1276. }
  1277. }
  1278. subElement.remove();
  1279. }
  1280. //动态值
  1281. else if ($.inArray(proName, config.dynamics.split(',')) != -1 || proName.indexOf('on') == 0)
  1282. {
  1283. value = g.parse(jelement.attr("data-" + proName) || jelement.attr(proName));
  1284. if (value)
  1285. {
  1286. options[proName] = g.fotmatValue(value, typeof (defaults[proName]));
  1287. }
  1288. }
  1289. //默认处理
  1290. else
  1291. {
  1292. value = jelement.attr("data-" + proName) || jelement.attr(proName);
  1293. if (value)
  1294. {
  1295. options[proName] = g.fotmatValue(value, typeof (defaults[proName]));
  1296. }
  1297. }
  1298. }
  1299. var dataOptions = jelement.attr("data-options") || jelement.attr("data-property");
  1300. if (dataOptions) dataOptions = g.parse("{" + dataOptions + "}");
  1301. if (dataOptions) $.extend(options, dataOptions);
  1302. return options;
  1303. },
  1304. init: function ()
  1305. {
  1306. var g = this, configs = this.config;
  1307. for (var name in g.defaults)
  1308. {
  1309. if (typeof (g.defaults[name]) == "string")
  1310. {
  1311. g.defaults[name] = g.parseDefault(g.defaults[name]);
  1312. }
  1313. }
  1314. for (var controlName in liger.controls)
  1315. {
  1316. var config = configs[controlName] || {};
  1317. var className = g.prev + controlName.toLowerCase();
  1318. $("." + className).each(function ()
  1319. {
  1320. var jelement = $(this), value;
  1321. var defaults = $.extend({
  1322. onrender: null,
  1323. onrendered : null
  1324. }, liger.defaults[controlName]);
  1325. var options = g.getOptions({
  1326. defaults: defaults,
  1327. controlName: controlName,
  1328. config: config,
  1329. jelement: jelement
  1330. });
  1331. jelement[liger.pluginPrev + controlName](options);
  1332. });
  1333. }
  1334. }
  1335. }
  1336. $(function ()
  1337. {
  1338. liger.inject.init();
  1339. });
  1340. })(jQuery);/**
  1341. * jQuery ligerUI 1.2.4
  1342. *
  1343. * http://ligerui.com
  1344. *
  1345. * Author daomi 2014 [ gd_star@163.com ]
  1346. *
  1347. */
  1348. (function ($)
  1349. {
  1350. $.fn.ligerAccordion = function (options)
  1351. {
  1352. return $.ligerui.run.call(this, "ligerAccordion", arguments);
  1353. };
  1354. $.fn.ligerGetAccordionManager = function ()
  1355. {
  1356. return $.ligerui.get(this);
  1357. };
  1358. $.ligerDefaults.Accordion = {
  1359. height: null,
  1360. speed: "normal",
  1361. changeHeightOnResize: false,
  1362. heightDiff: 0 // 高度补差
  1363. };
  1364. $.ligerMethos.Accordion = {};
  1365. $.ligerui.controls.Accordion = function (element, options)
  1366. {
  1367. $.ligerui.controls.Accordion.base.constructor.call(this, element, options);
  1368. };
  1369. $.ligerui.controls.Accordion.ligerExtend($.ligerui.core.UIComponent, {
  1370. __getType: function ()
  1371. {
  1372. return 'Accordion';
  1373. },
  1374. __idPrev: function ()
  1375. {
  1376. return 'Accordion';
  1377. },
  1378. _extendMethods: function ()
  1379. {
  1380. return $.ligerMethos.Accordion;
  1381. },
  1382. _render: function ()
  1383. {
  1384. var g = this, p = this.options;
  1385. g.accordion = $(g.element);
  1386. if (!g.accordion.hasClass("l-accordion-panel")) g.accordion.addClass("l-accordion-panel");
  1387. var selectedIndex = 0;
  1388. if ($("> div[lselected=true]", g.accordion).length > 0)
  1389. selectedIndex = $("> div", g.accordion).index($("> div[lselected=true]", g.accordion));
  1390. $("> div", g.accordion).each(function (i, box)
  1391. {
  1392. var header = $('<div class="l-accordion-header"><div class="l-accordion-toggle"></div><div class="l-accordion-header-inner"></div></div>');
  1393. if (i == selectedIndex)
  1394. $(".l-accordion-toggle", header).addClass("l-accordion-toggle-open");
  1395. if ($(box).attr("title"))
  1396. {
  1397. $(".l-accordion-header-inner", header).html($(box).attr("title"));
  1398. $(box).attr("title", "");
  1399. }
  1400. $(box).before(header);
  1401. if (!$(box).hasClass("l-accordion-content")) $(box).addClass("l-accordion-content");
  1402. });
  1403. $(".l-accordion-header", g.accordion).removeClass("l-accordion-header-downfirst");
  1404. $(".l-accordion-content:visible", g.accordion).next(".l-accordion-header:first").addClass("l-accordion-header-downfirst");
  1405. //add Even
  1406. $(".l-accordion-toggle", g.accordion).each(function ()
  1407. {
  1408. if (!$(this).hasClass("l-accordion-toggle-open") && !$(this).hasClass("l-accordion-toggle-close"))
  1409. {
  1410. $(this).addClass("l-accordion-toggle-close");
  1411. }
  1412. if ($(this).hasClass("l-accordion-toggle-close"))
  1413. {
  1414. $(this).parent().next(".l-accordion-content:visible").hide();
  1415. }
  1416. });
  1417. $(".l-accordion-header", g.accordion).hover(function ()
  1418. {
  1419. $(this).addClass("l-accordion-header-over");
  1420. }, function ()
  1421. {
  1422. $(this).removeClass("l-accordion-header-over");
  1423. });
  1424. $(".l-accordion-toggle", g.accordion).hover(function ()
  1425. {
  1426. if ($(this).hasClass("l-accordion-toggle-open"))
  1427. $(this).addClass("l-accordion-toggle-open-over");
  1428. else if ($(this).hasClass("l-accordion-toggle-close"))
  1429. $(this).addClass("l-accordion-toggle-close-over");
  1430. }, function ()
  1431. {
  1432. if ($(this).hasClass("l-accordion-toggle-open"))
  1433. $(this).removeClass("l-accordion-toggle-open-over");
  1434. else if ($(this).hasClass("l-accordion-toggle-close"))
  1435. $(this).removeClass("l-accordion-toggle-close-over");
  1436. });
  1437. $(">.l-accordion-header", g.accordion).click(function ()
  1438. {
  1439. var togglebtn = $(".l-accordion-toggle:first", this);
  1440. if (togglebtn.hasClass("l-accordion-toggle-close"))
  1441. {
  1442. togglebtn.removeClass("l-accordion-toggle-close")
  1443. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
  1444. togglebtn.addClass("l-accordion-toggle-open");
  1445. $(this).next(".l-accordion-content")
  1446. .show(p.speed)
  1447. .siblings(".l-accordion-content:visible").hide(p.speed);
  1448. $(this).siblings(".l-accordion-header").find(".l-accordion-toggle").removeClass("l-accordion-toggle-open").addClass("l-accordion-toggle-close");
  1449. }
  1450. else
  1451. {
  1452. togglebtn.removeClass("l-accordion-toggle-open")
  1453. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
  1454. .addClass("l-accordion-toggle-close");
  1455. $(this).next(".l-accordion-content").hide(p.speed);
  1456. }
  1457. $(".l-accordion-header", g.accordion).removeClass("l-accordion-header-downfirst");
  1458. $(".l-accordion-content:visible", g.accordion).next(".l-accordion-header:first").addClass("l-accordion-header-downfirst");
  1459. });
  1460. //init
  1461. g.headerHoldHeight = 0;
  1462. $("> .l-accordion-header", g.accordion).each(function ()
  1463. {
  1464. g.headerHoldHeight += $(this).height();
  1465. });
  1466. if (p.height && typeof (p.height) == 'string' && p.height.indexOf('%') > 0)
  1467. {
  1468. g.onResize();
  1469. if (p.changeHeightOnResize)
  1470. {
  1471. $(window).resize(function ()
  1472. {
  1473. g.onResize();
  1474. });
  1475. }
  1476. }
  1477. else
  1478. {
  1479. if (p.height)
  1480. {
  1481. g.height = p.heightDiff + p.height;
  1482. g.accordion.height(g.height);
  1483. g.setHeight(p.height);
  1484. }
  1485. else
  1486. {
  1487. g.header = g.accordion.height();
  1488. }
  1489. }
  1490. g.set(p);
  1491. },
  1492. onResize: function ()
  1493. {
  1494. var g = this, p = this.options;
  1495. if (!p.height || typeof (p.height) != 'string' || p.height.indexOf('%') == -1) return false;
  1496. //set accordion height
  1497. if (g.accordion.parent()[0].tagName.toLowerCase() == "body")
  1498. {
  1499. var windowHeight = $(window).height();
  1500. windowHeight -= parseInt(g.layout.parent().css('paddingTop'));
  1501. windowHeight -= parseInt(g.layout.parent().css('paddingBottom'));
  1502. g.height = p.heightDiff + windowHeight * parseFloat(g.height) * 0.01;
  1503. }
  1504. else
  1505. {
  1506. g.height = p.heightDiff + (g.accordion.parent().height() * parseFloat(p.height) * 0.01);
  1507. }
  1508. g.accordion.height(g.height);
  1509. g.setContentHeight(g.height - g.headerHoldHeight);
  1510. },
  1511. setHeight: function (height)
  1512. {
  1513. var g = this, p = this.options;
  1514. g.accordion.height(height);
  1515. height -= g.headerHoldHeight;
  1516. $("> .l-accordion-content", g.accordion).height(height);
  1517. }
  1518. });
  1519. })(jQuery);/**
  1520. * jQuery ligerUI 1.2.4
  1521. *
  1522. * http://ligerui.com
  1523. *
  1524. * Author daomi 2014 [ gd_star@163.com ]
  1525. *
  1526. */
  1527. (function ($)
  1528. {
  1529. $.fn.ligerButton = function (options)
  1530. {
  1531. return $.ligerui.run.call(this, "ligerButton", arguments);
  1532. };
  1533. $.fn.ligerGetButtonManager = function ()
  1534. {
  1535. return $.ligerui.run.call(this, "ligerGetButtonManager", arguments);
  1536. };
  1537. $.ligerDefaults.Button = {
  1538. width: 60,
  1539. text: 'Button',
  1540. disabled: false,
  1541. click: null,
  1542. icon : null
  1543. };
  1544. $.ligerMethos.Button = {};
  1545. $.ligerui.controls.Button = function (element, options)
  1546. {
  1547. $.ligerui.controls.Button.base.constructor.call(this, element, options);
  1548. };
  1549. $.ligerui.controls.Button.ligerExtend($.ligerui.controls.Input, {
  1550. __getType: function ()
  1551. {
  1552. return 'Button';
  1553. },
  1554. __idPrev: function ()
  1555. {
  1556. return 'Button';
  1557. },
  1558. _extendMethods: function ()
  1559. {
  1560. return $.ligerMethos.Button;
  1561. },
  1562. _render: function ()
  1563. {
  1564. var g = this, p = this.options;
  1565. g.button = $(g.element);
  1566. g.button.addClass("l-button");
  1567. g.button.append('<div class="l-button-l"></div><div class="l-button-r"></div><span></span>');
  1568. g.button.hover(function () {
  1569. if (p.disabled) return;
  1570. g.button.addClass("l-button-over");
  1571. }, function () {
  1572. if (p.disabled) return;
  1573. g.button.removeClass("l-button-over");
  1574. });
  1575. p.click && g.button.click(function ()
  1576. {
  1577. if (!p.disabled)
  1578. p.click();
  1579. });
  1580. g.set(p);
  1581. },
  1582. _setIcon : function(url)
  1583. {
  1584. var g = this;
  1585. if (!url)
  1586. {
  1587. g.button.removeClass("l-button-hasicon");
  1588. g.button.find('img').remove();
  1589. } else
  1590. {
  1591. g.button.addClass("l-button-hasicon");
  1592. g.button.append('<img src="' + url + '" />');
  1593. }
  1594. },
  1595. _setEnabled: function (value)
  1596. {
  1597. if (value)
  1598. this.button.removeClass("l-button-disabled");
  1599. },
  1600. _setDisabled: function (value)
  1601. {
  1602. if (value) {
  1603. this.button.addClass("l-button-disabled");
  1604. this.options.disabled = true;
  1605. } else {
  1606. this.button.removeClass("l-button-disabled");
  1607. this.options.disabled = false;
  1608. }
  1609. },
  1610. _setWidth: function (value)
  1611. {
  1612. this.button.width(value);
  1613. },
  1614. _setText: function (value)
  1615. {
  1616. $("span", this.button).html(value);
  1617. },
  1618. setValue: function (value)
  1619. {
  1620. this.set('text', value);
  1621. },
  1622. getValue: function ()
  1623. {
  1624. return this.options.text;
  1625. },
  1626. setEnabled: function ()
  1627. {
  1628. this.set('disabled', false);
  1629. },
  1630. setDisabled: function ()
  1631. {
  1632. this.set('disabled', true);
  1633. }
  1634. });
  1635. })(jQuery);/**
  1636. * jQuery ligerUI 1.2.4
  1637. *
  1638. * http://ligerui.com
  1639. *
  1640. * Author daomi 2014 [ gd_star@163.com ]
  1641. *
  1642. */
  1643. (function ($)
  1644. {
  1645. $.fn.ligerCheckBox = function (options)
  1646. {
  1647. return $.ligerui.run.call(this, "ligerCheckBox", arguments);
  1648. };
  1649. $.fn.ligerGetCheckBoxManager = function ()
  1650. {
  1651. return $.ligerui.run.call(this, "ligerGetCheckBoxManager", arguments);
  1652. };
  1653. $.ligerDefaults.CheckBox = {
  1654. disabled: false,
  1655. readonly : false //只读
  1656. };
  1657. $.ligerMethos.CheckBox = {};
  1658. $.ligerui.controls.CheckBox = function (element, options)
  1659. {
  1660. $.ligerui.controls.CheckBox.base.constructor.call(this, element, options);
  1661. };
  1662. $.ligerui.controls.CheckBox.ligerExtend($.ligerui.controls.Input, {
  1663. __getType: function ()
  1664. {
  1665. return 'CheckBox';
  1666. },
  1667. __idPrev: function ()
  1668. {
  1669. return 'CheckBox';
  1670. },
  1671. _extendMethods: function ()
  1672. {
  1673. return $.ligerMethos.CheckBox;
  1674. },
  1675. _render: function ()
  1676. {
  1677. var g = this, p = this.options;
  1678. g.input = $(g.element);
  1679. g.link = $('<a class="l-checkbox"></a>');
  1680. g.wrapper = g.input.addClass('l-hidden').wrap('<div class="l-checkbox-wrapper"></div>').parent();
  1681. g.wrapper.prepend(g.link);
  1682. g.link.click(function ()
  1683. {
  1684. if (g.input.attr('disabled') || g.input.attr('readonly')) { return false; }
  1685. if (p.disabled || p.readonly) return false;
  1686. if (g.trigger('beforeClick', [g.element]) == false) return false;
  1687. if ($(this).hasClass("l-checkbox-checked"))
  1688. {
  1689. g._setValue(false);
  1690. }
  1691. else
  1692. {
  1693. g._setValue(true);
  1694. }
  1695. g.input.trigger("change");
  1696. });
  1697. g.wrapper.hover(function ()
  1698. {
  1699. if (!p.disabled)
  1700. $(this).addClass("l-over");
  1701. }, function ()
  1702. {
  1703. $(this).removeClass("l-over");
  1704. });
  1705. this.set(p);
  1706. this.updateStyle();
  1707. },
  1708. _setCss: function (value)
  1709. {
  1710. this.wrapper.css(value);
  1711. },
  1712. _setValue: function (value)
  1713. {
  1714. var g = this, p = this.options;
  1715. if (!value)
  1716. {
  1717. g.input[0].checked = false;
  1718. g.link.removeClass('l-checkbox-checked');
  1719. }
  1720. else
  1721. {
  1722. g.input[0].checked = true;
  1723. g.link.addClass('l-checkbox-checked');
  1724. }
  1725. },
  1726. _setDisabled: function (value)
  1727. {
  1728. if (value)
  1729. {
  1730. this.input.attr('disabled', true);
  1731. this.wrapper.addClass("l-disabled");
  1732. }
  1733. else
  1734. {
  1735. this.input.attr('disabled', false);
  1736. this.wrapper.removeClass("l-disabled");
  1737. }
  1738. },
  1739. _getValue: function ()
  1740. {
  1741. return this.element.checked;
  1742. },
  1743. updateStyle: function ()
  1744. {
  1745. if (this.input.attr('disabled'))
  1746. {
  1747. this.wrapper.addClass("l-disabled");
  1748. this.options.disabled = true;
  1749. }
  1750. if (this.input[0].checked)
  1751. {
  1752. this.link.addClass('l-checkbox-checked');
  1753. }
  1754. else
  1755. {
  1756. this.link.removeClass('l-checkbox-checked');
  1757. }
  1758. }
  1759. });
  1760. })(jQuery);/**
  1761. * jQuery ligerUI 1.2.4
  1762. *
  1763. * http://ligerui.com
  1764. *
  1765. * Author daomi 2014 [ gd_star@163.com ]
  1766. *
  1767. */
  1768. (function ($)
  1769. {
  1770. $.fn.ligerCheckBoxList = function (options)
  1771. {
  1772. return $.ligerui.run.call(this, "ligerCheckBoxList", arguments);
  1773. };
  1774. $.ligerDefaults.CheckBoxList = {
  1775. rowSize: 3, //每行显示元素数
  1776. valueField: 'id', //值成员
  1777. textField: 'text', //显示成员
  1778. valueFieldID:null, //隐藏域
  1779. name : null, //表单名
  1780. split: ";", //分隔符
  1781. data: null, //数据
  1782. parms: null, //ajax提交表单
  1783. url: null, //数据源URL(需返回JSON)
  1784. onSuccess: null,
  1785. onError: null,
  1786. css: null, //附加css
  1787. value: null, //值
  1788. valueFieldCssClass : null
  1789. };
  1790. //扩展方法
  1791. $.ligerMethos.CheckBoxList = $.ligerMethos.CheckBoxList || {};
  1792. $.ligerui.controls.CheckBoxList = function (element, options)
  1793. {
  1794. $.ligerui.controls.CheckBoxList.base.constructor.call(this, element, options);
  1795. };
  1796. $.ligerui.controls.CheckBoxList.ligerExtend($.ligerui.controls.Input, {
  1797. __getType: function ()
  1798. {
  1799. return 'CheckBoxList';
  1800. },
  1801. _extendMethods: function ()
  1802. {
  1803. return $.ligerMethos.CheckBoxList;
  1804. },
  1805. _init: function ()
  1806. {
  1807. $.ligerui.controls.CheckBoxList.base._init.call(this);
  1808. },
  1809. _render: function ()
  1810. {
  1811. var g = this, p = this.options;
  1812. g.data = p.data;
  1813. g.valueField = null; //隐藏域(保存值)
  1814. if (p.valueFieldID)
  1815. {
  1816. g.valueField = $("#" + p.valueFieldID + ":input,[name=" + p.valueFieldID + "]:input");
  1817. if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
  1818. g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
  1819. }
  1820. else
  1821. {
  1822. g.valueField = $('<input type="hidden"/>');
  1823. g.valueField[0].id = g.valueField[0].name = g.id + "_val";
  1824. }
  1825. if (g.valueField[0].name == null) g.valueField[0].name = g.valueField[0].id;
  1826. if (p.valueFieldCssClass)
  1827. {
  1828. g.valueField.addClass(p.valueFieldCssClass);
  1829. }
  1830. g.valueField.attr("data-ligerid", g.id);
  1831. g.checkboxList = $(this.element);
  1832. g.checkboxList.html('<div class="l-checkboxlist-inner"><table cellpadding="0" cellspacing="0" border="0" class="l-checkboxlist-table"></table></div>').addClass("l-checkboxlist").append(g.valueField);
  1833. g.checkboxList.table = $("table:first", g.checkboxList);
  1834. g.set(p);
  1835. g._addClickEven();
  1836. },
  1837. destroy: function ()
  1838. {
  1839. if (this.checkboxList) this.checkboxList.remove();
  1840. this.options = null;
  1841. $.ligerui.remove(this);
  1842. },
  1843. clear : function()
  1844. {
  1845. this._changeValue("");
  1846. this.trigger('clear');
  1847. },
  1848. _setCss : function(css)
  1849. {
  1850. if (css) {
  1851. this.checkboxList.addClass(css);
  1852. }
  1853. },
  1854. _setDisabled: function (value)
  1855. {
  1856. //禁用样式
  1857. if (value)
  1858. {
  1859. this.checkboxList.addClass('l-checkboxlist-disabled');
  1860. $("input:checkbox", this.radioList).attr("disabled", true);
  1861. } else
  1862. {
  1863. this.checkboxList.removeClass('l-checkboxlist-disabled');
  1864. $("input:checkbox", this.radioList).removeAttr("disabled");
  1865. }
  1866. },
  1867. _setWidth: function (value)
  1868. {
  1869. this.checkboxList.width(value);
  1870. },
  1871. _setHeight: function (value)
  1872. {
  1873. this.checkboxList.height(value);
  1874. },
  1875. indexOf : function(item)
  1876. {
  1877. var g = this, p = this.options;
  1878. if (!g.data) return -1;
  1879. for (var i = 0, l = g.data.length; i < l; i++)
  1880. {
  1881. if (typeof (item) == "object")
  1882. {
  1883. if (g.data[i] == item) return i;
  1884. } else
  1885. {
  1886. if (g.data[i][p.valueField].toString() == item.toString()) return i;
  1887. }
  1888. }
  1889. return -1;
  1890. },
  1891. removeItems : function(items)
  1892. {
  1893. var g = this;
  1894. if (!g.data) return;
  1895. $(items).each(function (i,item)
  1896. {
  1897. var index = g.indexOf(item);
  1898. if (index == -1) return;
  1899. g.data.splice(index, 1);
  1900. });
  1901. g.refresh();
  1902. },
  1903. removeItem: function (item)
  1904. {
  1905. if (!this.data) return;
  1906. var index = this.indexOf(item);
  1907. if (index == -1) return;
  1908. this.data.splice(index, 1);
  1909. this.refresh();
  1910. },
  1911. insertItem: function (item,index)
  1912. {
  1913. var g = this;
  1914. if (!g.data) g.data = [];
  1915. g.data.splice(index, 0, item);
  1916. g.refresh();
  1917. },
  1918. addItems: function (items)
  1919. {
  1920. var g = this;
  1921. if (!g.data) g.data = [];
  1922. $(items).each(function (i, item)
  1923. {
  1924. g.data.push(item);
  1925. });
  1926. g.refresh();
  1927. },
  1928. addItem: function (item)
  1929. {
  1930. var g = this;
  1931. if (!g.data) g.data = [];
  1932. g.data.push(item);
  1933. g.refresh();
  1934. },
  1935. _setValue: function (value)
  1936. {
  1937. var g = this, p = this.options;
  1938. p.value = value;
  1939. g.valueField.val(p.value);
  1940. this._dataInit();
  1941. },
  1942. setValue: function (value)
  1943. {
  1944. this._setValue(value);
  1945. },
  1946. _setUrl: function (url) {
  1947. if (!url) return;
  1948. var g = this, p = this.options;
  1949. var parms = $.isFunction(p.parms) ? p.parms() : p.parms;
  1950. $.ajax({
  1951. type: 'post',
  1952. url: url,
  1953. data: parms,
  1954. cache: false,
  1955. dataType: 'json',
  1956. success: function (data) {
  1957. g.setData(data);
  1958. g.trigger('success', [data]);
  1959. },
  1960. error: function (XMLHttpRequest, textStatus) {
  1961. g.trigger('error', [XMLHttpRequest, textStatus]);
  1962. }
  1963. });
  1964. },
  1965. setUrl: function (url) {
  1966. return this._setUrl(url);
  1967. },
  1968. setParm: function (name, value) {
  1969. if (!name) return;
  1970. var g = this;
  1971. var parms = g.get('parms');
  1972. if (!parms) parms = {};
  1973. parms[name] = value;
  1974. g.set('parms', parms);
  1975. },
  1976. clearContent: function ()
  1977. {
  1978. var g = this, p = this.options;
  1979. $("table", g.checkboxList).html("");
  1980. },
  1981. _setData : function(data)
  1982. {
  1983. this.setData(data);
  1984. },
  1985. setData: function (data)
  1986. {
  1987. var g = this, p = this.options;
  1988. if (!data || !data.length) return;
  1989. g.data = data;
  1990. g.refresh();
  1991. g.updateStyle();
  1992. },
  1993. refresh:function()
  1994. {
  1995. var g = this, p = this.options, data = this.data;
  1996. this.clearContent();
  1997. if (!data) return;
  1998. var out = [], rowSize = p.rowSize, appendRowStart = false, name = p.name || g.id;
  1999. for (var i = 0; i < data.length; i++)
  2000. {
  2001. var val = data[i][p.valueField], txt = data[i][p.textField], id = g.id + "-" + i;
  2002. var newRow = i % rowSize == 0;
  2003. //0,5,10
  2004. if (newRow)
  2005. {
  2006. if (appendRowStart) out.push('</tr>');
  2007. out.push("<tr>");
  2008. appendRowStart = true;
  2009. }
  2010. out.push("<td><input type='checkbox' name='" + name + "' value='" + val + "' id='" + id + "'/><label for='" + id + "'>" + txt + "</label></td>");
  2011. }
  2012. if (appendRowStart) out.push('</tr>');
  2013. g.checkboxList.table.append(out.join(''));
  2014. },
  2015. _getValue: function ()
  2016. {
  2017. var g = this, p = this.options, name = p.name || g.id;
  2018. var values = [];
  2019. $('input:checkbox[name="' + name + '"]:checked').each(function ()
  2020. {
  2021. values.push(this.value);
  2022. });
  2023. if (!values.length) return null;
  2024. return values.join(p.split);
  2025. },
  2026. getValue: function ()
  2027. {
  2028. //获取值
  2029. return this._getValue();
  2030. },
  2031. updateStyle: function ()
  2032. {
  2033. this._dataInit();
  2034. },
  2035. _dataInit: function ()
  2036. {
  2037. var g = this, p = this.options;
  2038. var value = g.valueField.val();
  2039. g._changeValue(value);
  2040. },
  2041. //设置值到 隐藏域
  2042. _changeValue: function (value)
  2043. {
  2044. var g = this, p = this.options, name = p.name || g.id;
  2045. var valueArr = value ? value.split(p.split) : [];
  2046. $("input:checkbox[name='" + name + "']", g.checkboxList).each(function ()
  2047. {
  2048. this.checked = $.inArray(this.value, valueArr) > -1;
  2049. });
  2050. g.valueField.val(value);
  2051. g.selectedValue = value;
  2052. },
  2053. _addClickEven: function ()
  2054. {
  2055. var g = this, p = this.options;
  2056. //选项点击
  2057. g.checkboxList.click(function (e)
  2058. {
  2059. var value = g.getValue();
  2060. if (value) g.valueField.val(value);
  2061. });
  2062. }
  2063. });
  2064. })(jQuery);/**
  2065. * jQuery ligerUI 1.2.4
  2066. *
  2067. * http://ligerui.com
  2068. *
  2069. * Author daomi 2014 [ gd_star@163.com ]
  2070. *
  2071. */
  2072. (function ($)
  2073. {
  2074. $.fn.ligerComboBox = function (options)
  2075. {
  2076. return $.ligerui.run.call(this, "ligerComboBox", arguments);
  2077. };
  2078. $.fn.ligerGetComboBoxManager = function ()
  2079. {
  2080. return $.ligerui.run.call(this, "ligerGetComboBoxManager", arguments);
  2081. };
  2082. $.ligerDefaults.ComboBox = {
  2083. resize: true, //是否调整大小
  2084. isMultiSelect: false, //是否多选
  2085. isShowCheckBox: false, //是否选择复选框
  2086. columns: null, //表格状态
  2087. selectBoxWidth: null, //宽度
  2088. selectBoxHeight: 120, //高度
  2089. onBeforeSelect: false, //选择前事件
  2090. onSelected: null, //选择值事件
  2091. initValue: null,
  2092. initText: null,
  2093. valueField: 'id',
  2094. textField: 'text',
  2095. valueFieldID: null,
  2096. slide: false, //是否以动画的形式显示
  2097. split: ";",
  2098. data: null,
  2099. tree: null, //下拉框以树的形式显示,tree的参数跟LigerTree的参数一致
  2100. treeLeafOnly: true, //是否只选择叶子
  2101. condition: null, //列表条件搜索 参数同 ligerForm
  2102. grid: null, //表格 参数同 ligerGrid
  2103. onStartResize: null,
  2104. onEndResize: null,
  2105. hideOnLoseFocus: true,
  2106. hideGridOnLoseFocus : false,
  2107. url: null, //数据源URL(需返回JSON)
  2108. emptyText: null, //空行
  2109. addRowButton: '新增', //新增按钮
  2110. addRowButtonClick: null, //新增事件
  2111. triggerIcon : null, //
  2112. onSuccess: null,
  2113. onError: null,
  2114. onBeforeOpen: null, //打开下拉框前事件,可以通过return false来阻止继续操作,利用这个参数可以用来调用其他函数,比如打开一个新窗口来选择值
  2115. onButtonClick: null, //右侧图标按钮事件,可以通过return false来阻止继续操作,利用这个参数可以用来调用其他函数,比如打开一个新窗口来选择值
  2116. render: null, //文本框显示html函数
  2117. absolute: true, //选择框是否在附加到body,并绝对定位
  2118. cancelable: true, //可取消选择
  2119. css: null, //附加css
  2120. parms: null, //ajax提交表单
  2121. renderItem : null, //选项自定义函数
  2122. autocomplete: false, //自动完成
  2123. highLight : false, //自动完成是否匹配字符高亮显示
  2124. readonly: false, //是否只读
  2125. ajaxType: 'post',
  2126. alwayShowInTop: false, //下拉框是否一直显示在上方
  2127. valueFieldCssClass : null
  2128. };
  2129. $.ligerDefaults.ComboBoxString = {
  2130. Search : "搜索"
  2131. };
  2132. //扩展方法
  2133. $.ligerMethos.ComboBox = $.ligerMethos.ComboBox || {};
  2134. $.ligerui.controls.ComboBox = function (element, options)
  2135. {
  2136. $.ligerui.controls.ComboBox.base.constructor.call(this, element, options);
  2137. };
  2138. $.ligerui.controls.ComboBox.ligerExtend($.ligerui.controls.Input, {
  2139. __getType: function ()
  2140. {
  2141. return 'ComboBox';
  2142. },
  2143. _extendMethods: function ()
  2144. {
  2145. return $.ligerMethos.ComboBox;
  2146. },
  2147. _init: function ()
  2148. {
  2149. $.ligerui.controls.ComboBox.base._init.call(this);
  2150. var p = this.options;
  2151. if (p.columns)
  2152. {
  2153. p.isShowCheckBox = true;
  2154. }
  2155. if (p.isMultiSelect)
  2156. {
  2157. p.isShowCheckBox = true;
  2158. }
  2159. },
  2160. _render: function ()
  2161. {
  2162. var g = this, p = this.options;
  2163. g.data = p.data;
  2164. g.inputText = null;
  2165. g.select = null;
  2166. g.textFieldID = "";
  2167. g.valueFieldID = "";
  2168. g.valueField = null; //隐藏域(保存值)
  2169. //文本框初始化
  2170. if (this.element.tagName.toLowerCase() == "input")
  2171. {
  2172. this.element.readOnly = true;
  2173. g.inputText = $(this.element);
  2174. g.textFieldID = this.element.id;
  2175. }
  2176. else if (this.element.tagName.toLowerCase() == "select")
  2177. {
  2178. $(this.element).hide();
  2179. g.select = $(this.element);
  2180. p.isMultiSelect = false;
  2181. p.isShowCheckBox = false;
  2182. p.cancelable = false;
  2183. g.textFieldID = this.element.id + "_txt";
  2184. g.inputText = $('<input type="text" readonly="true"/>');
  2185. g.inputText.attr("id", g.textFieldID).insertAfter($(this.element));
  2186. }
  2187. if (g.inputText[0].name == undefined) g.inputText[0].name = g.textFieldID;
  2188. //隐藏域初始化
  2189. g.valueField = null;
  2190. if (p.valueFieldID)
  2191. {
  2192. g.valueField = $("#" + p.valueFieldID + ":input,[name=" + p.valueFieldID + "]:input").filter("input:hidden");
  2193. if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
  2194. g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
  2195. }
  2196. else
  2197. {
  2198. g.valueField = $('<input type="hidden"/>');
  2199. g.valueField[0].id = g.valueField[0].name = g.textFieldID + "_val";
  2200. }
  2201. if (p.valueFieldCssClass)
  2202. {
  2203. g.valueField.addClass(p.valueFieldCssClass);
  2204. }
  2205. if (g.valueField[0].name == undefined) g.valueField[0].name = g.valueField[0].id;
  2206. //update by superzoc 增加初始值
  2207. if (p.initValue != null) g.valueField[0].value = p.initValue;
  2208. g.valueField.attr("data-ligerid", g.id);
  2209. //开关
  2210. g.link = $('<div class="l-trigger"><div class="l-trigger-icon"></div></div>');
  2211. if (p.triggerIcon) g.link.find("div:first").addClass(p.triggerIcon);
  2212. //下拉框
  2213. g.selectBox = $('<div class="l-box-select" style="display:none"><div class="l-box-select-inner"><table cellpadding="0" cellspacing="0" border="0" class="l-box-select-table"></table></div></div>');
  2214. g.selectBox.table = $("table:first", g.selectBox);
  2215. g.selectBoxInner = g.selectBox.find(".l-box-select-inner:first");
  2216. //外层
  2217. g.wrapper = g.inputText.wrap('<div class="l-text l-text-combobox"></div>').parent();
  2218. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  2219. g.wrapper.append(g.link);
  2220. //添加个包裹,
  2221. g.textwrapper = g.wrapper.wrap('<div class="l-text-wrapper"></div>').parent();
  2222. if (p.absolute)
  2223. g.selectBox.appendTo('body').addClass("l-box-select-absolute");
  2224. else
  2225. g.textwrapper.append(g.selectBox);
  2226. g.textwrapper.append(g.valueField);
  2227. g.inputText.addClass("l-text-field");
  2228. if (p.isShowCheckBox && !g.select)
  2229. {
  2230. $("table", g.selectBox).addClass("l-table-checkbox");
  2231. } else
  2232. {
  2233. p.isShowCheckBox = false;
  2234. $("table", g.selectBox).addClass("l-table-nocheckbox");
  2235. }
  2236. //开关 事件
  2237. g.link.hover(function ()
  2238. {
  2239. if (p.disabled || p.readonly) return;
  2240. this.className = "l-trigger-hover";
  2241. }, function ()
  2242. {
  2243. if (p.disabled || p.readonly) return;
  2244. this.className = "l-trigger";
  2245. }).mousedown(function ()
  2246. {
  2247. if (p.disabled || p.readonly) return;
  2248. this.className = "l-trigger-pressed";
  2249. }).mouseup(function ()
  2250. {
  2251. if (p.disabled || p.readonly) return;
  2252. this.className = "l-trigger-hover";
  2253. }).click(function ()
  2254. {
  2255. if (p.disabled || p.readonly) return;
  2256. if (g.trigger('buttonClick') == false) return false;
  2257. if (g.trigger('beforeOpen') == false) return false;
  2258. g._toggleSelectBox(g.selectBox.is(":visible"));
  2259. });
  2260. g.inputText.click(function ()
  2261. {
  2262. if (p.disabled || p.readonly) return;
  2263. if (g.trigger('beforeOpen') == false) return false;
  2264. g._toggleSelectBox(g.selectBox.is(":visible"));
  2265. }).blur(function ()
  2266. {
  2267. if (p.disabled) return;
  2268. g.wrapper.removeClass("l-text-focus");
  2269. }).focus(function ()
  2270. {
  2271. if (p.disabled || p.readonly) return;
  2272. g.wrapper.addClass("l-text-focus");
  2273. });
  2274. g.wrapper.hover(function ()
  2275. {
  2276. if (p.disabled || p.readonly) return;
  2277. g.wrapper.addClass("l-text-over");
  2278. }, function ()
  2279. {
  2280. if (p.disabled || p.readonly) return;
  2281. g.wrapper.removeClass("l-text-over");
  2282. });
  2283. g.resizing = false;
  2284. g.selectBox.hover(null, function (e)
  2285. {
  2286. if (p.hideOnLoseFocus && g.selectBox.is(":visible") && !g.boxToggling && !g.resizing)
  2287. {
  2288. g._toggleSelectBox(true);
  2289. }
  2290. });
  2291. //下拉框内容初始化
  2292. g.bulidContent();
  2293. g.set(p);
  2294. //下拉框宽度、高度初始化
  2295. if (p.selectBoxWidth)
  2296. {
  2297. g.selectBox.width(p.selectBoxWidth);
  2298. }
  2299. else
  2300. {
  2301. g.selectBox.css('width', g.wrapper.css('width'));
  2302. }
  2303. if (p.grid) {
  2304. g.bind('show', function () {
  2305. if (!g.grid) {
  2306. g.setGrid(p.grid);
  2307. g.set('SelectBoxHeight', p.selectBoxHeight);
  2308. }
  2309. });
  2310. }
  2311. g.updateSelectBoxPosition();
  2312. $(document).bind("click.combobox", function (e)
  2313. {
  2314. var tag = (e.target || e.srcElement).tagName.toLowerCase();
  2315. if (tag == "html" || tag == "body")
  2316. {
  2317. g._toggleSelectBox(true);
  2318. }
  2319. });
  2320. },
  2321. destroy: function ()
  2322. {
  2323. if (this.wrapper) this.wrapper.remove();
  2324. if (this.selectBox) this.selectBox.remove();
  2325. this.options = null;
  2326. $.ligerui.remove(this);
  2327. },
  2328. clear : function()
  2329. {
  2330. this._changeValue("", "");
  2331. $("a.l-checkbox-checked", this.selectBox).removeClass("l-checkbox-checked");
  2332. $("td.l-selected", this.selectBox).removeClass("l-selected");
  2333. $(":checkbox", this.selectBox).each(function () { this.checked = false; });
  2334. this.trigger('clear');
  2335. },
  2336. _setSelectBoxHeight: function (height)
  2337. {
  2338. if (!height) return;
  2339. var g = this, p = this.options;
  2340. if (p.grid) {
  2341. g.grid && g.grid.set('height', g.getGridHeight(height));
  2342. } else
  2343. {
  2344. var itemsleng = $("tr", g.selectBox.table).length;
  2345. if (!p.selectBoxHeight && itemsleng < 8) p.selectBoxHeight = itemsleng * 30;
  2346. if (p.selectBoxHeight)
  2347. {
  2348. if (itemsleng < 8)
  2349. {
  2350. g.selectBoxInner.height('auto');
  2351. } else
  2352. {
  2353. g.selectBoxInner.height(p.selectBoxHeight);
  2354. }
  2355. }
  2356. }
  2357. },
  2358. _setCss : function(css)
  2359. {
  2360. if (css) {
  2361. this.wrapper.addClass(css);
  2362. }
  2363. },
  2364. //取消选择
  2365. _setCancelable: function (value)
  2366. {
  2367. var g = this, p = this.options;
  2368. if (!value && g.unselect) {
  2369. g.unselect.remove();
  2370. g.unselect = null;
  2371. }
  2372. if (!value && !g.unselect) return;
  2373. g.unselect = $('<div class="l-trigger l-trigger-cancel"><div class="l-trigger-icon"></div></div>').hide();
  2374. g.wrapper.hover(function () {
  2375. g.unselect.show();
  2376. }, function () {
  2377. g.unselect.hide();
  2378. })
  2379. if (!p.disabled && !p.readonly && p.cancelable) {
  2380. g.wrapper.append(g.unselect);
  2381. }
  2382. g.unselect.hover(function () {
  2383. this.className = "l-trigger-hover l-trigger-cancel";
  2384. }, function () {
  2385. this.className = "l-trigger l-trigger-cancel";
  2386. }).click(function () {
  2387. g.clear();
  2388. });
  2389. },
  2390. _setDisabled: function (value)
  2391. {
  2392. //禁用样式
  2393. if (value)
  2394. {
  2395. this.wrapper.addClass('l-text-disabled');
  2396. } else
  2397. {
  2398. this.wrapper.removeClass('l-text-disabled');
  2399. }
  2400. },
  2401. _setReadonly: function (readonly)
  2402. {
  2403. if (readonly)
  2404. {
  2405. this.wrapper.addClass("l-text-readonly");
  2406. } else
  2407. {
  2408. this.wrapper.removeClass("l-text-readonly");
  2409. }
  2410. },
  2411. _setLable: function (label)
  2412. {
  2413. var g = this, p = this.options;
  2414. if (label)
  2415. {
  2416. if (g.labelwrapper)
  2417. {
  2418. g.labelwrapper.find(".l-text-label:first").html(label + ':&nbsp');
  2419. }
  2420. else
  2421. {
  2422. g.labelwrapper = g.textwrapper.wrap('<div class="l-labeltext"></div>').parent();
  2423. g.labelwrapper.prepend('<div class="l-text-label" style="float:left;display:inline;">' + label + ':&nbsp</div>');
  2424. g.textwrapper.css('float', 'left');
  2425. }
  2426. if (!p.labelWidth)
  2427. {
  2428. p.labelWidth = $('.l-text-label', g.labelwrapper).outerWidth();
  2429. }
  2430. else
  2431. {
  2432. $('.l-text-label', g.labelwrapper).outerWidth(p.labelWidth);
  2433. }
  2434. $('.l-text-label', g.labelwrapper).width(p.labelWidth);
  2435. $('.l-text-label', g.labelwrapper).height(g.wrapper.height());
  2436. g.labelwrapper.append('<br style="clear:both;" />');
  2437. if (p.labelAlign)
  2438. {
  2439. $('.l-text-label', g.labelwrapper).css('text-align', p.labelAlign);
  2440. }
  2441. g.textwrapper.css({ display: 'inline' });
  2442. g.labelwrapper.width(g.wrapper.outerWidth() + p.labelWidth + 2);
  2443. }
  2444. },
  2445. _setWidth: function (value)
  2446. {
  2447. var g = this, p = this.options;
  2448. if (value > 20)
  2449. {
  2450. g.wrapper.css({ width: value });
  2451. g.inputText.css({ width: value - 20 });
  2452. if (!p.selectBoxWidth) {
  2453. g.selectBox.css({ width: value });
  2454. }
  2455. }
  2456. },
  2457. _setHeight: function (value)
  2458. {
  2459. var g = this;
  2460. if (value > 10)
  2461. {
  2462. g.wrapper.height(value);
  2463. g.inputText.height(value - 2);
  2464. }
  2465. },
  2466. _setResize: function (resize)
  2467. {
  2468. var g = this, p = this.options;
  2469. if (p.columns) {
  2470. return;
  2471. }
  2472. //调整大小支持
  2473. if (resize && $.fn.ligerResizable)
  2474. {
  2475. var handles = p.selectBoxHeight ? 'e' : 'se,s,e';
  2476. g.selectBox.ligerResizable({
  2477. handles: handles, onStartResize: function ()
  2478. {
  2479. g.resizing = true;
  2480. g.trigger('startResize');
  2481. }, onEndResize: function ()
  2482. {
  2483. g.resizing = false;
  2484. if (g.trigger('endResize') == false)
  2485. return false;
  2486. }, onStopResize: function (current, e) {
  2487. if (g.grid) {
  2488. if (current.newWidth) {
  2489. g.selectBox.width(current.newWidth);
  2490. }
  2491. if (current.newHeight) {
  2492. g.set({ selectBoxHeight: current.newHeight });
  2493. }
  2494. g.grid.refreshSize();
  2495. g.trigger('endResize');
  2496. return false;
  2497. }
  2498. return true;
  2499. }
  2500. });
  2501. g.selectBox.append("<div class='l-btn-nw-drop'></div>");
  2502. }
  2503. },
  2504. //查找Text,适用多选和单选
  2505. findTextByValue: function (value)
  2506. {
  2507. var g = this, p = this.options;
  2508. if (value == null) return "";
  2509. var texts = "";
  2510. var contain = function (checkvalue)
  2511. {
  2512. var targetdata = value.toString().split(p.split);
  2513. for (var i = 0; i < targetdata.length; i++)
  2514. {
  2515. if (targetdata[i] == checkvalue) return true;
  2516. }
  2517. return false;
  2518. };
  2519. $(g.data).each(function (i, item)
  2520. {
  2521. var val = item[p.valueField];
  2522. var txt = item[p.textField];
  2523. if (contain(val))
  2524. {
  2525. texts += txt + p.split;
  2526. }
  2527. });
  2528. if (texts.length > 0) texts = texts.substr(0, texts.length - 1);
  2529. return texts;
  2530. },
  2531. //查找Value,适用多选和单选
  2532. findValueByText: function (text)
  2533. {
  2534. var g = this, p = this.options;
  2535. if (!text && text == "") return "";
  2536. var contain = function (checkvalue)
  2537. {
  2538. var targetdata = text.toString().split(p.split);
  2539. for (var i = 0; i < targetdata.length; i++)
  2540. {
  2541. if (targetdata[i] == checkvalue) return true;
  2542. }
  2543. return false;
  2544. };
  2545. var values = "";
  2546. $(g.data).each(function (i, item)
  2547. {
  2548. var val = item[p.valueField];
  2549. var txt = item[p.textField];
  2550. if (contain(txt))
  2551. {
  2552. values += val + p.split;
  2553. }
  2554. });
  2555. if (values.length > 0) values = values.substr(0, values.length - 1);
  2556. return values;
  2557. },
  2558. insertItem: function (data,index)
  2559. {
  2560. var g = this, p = this.options;
  2561. g.data = g.data || [];
  2562. g.data.splice(index, 0, data);
  2563. g.setData(g.data);
  2564. },
  2565. addItem: function (data)
  2566. {
  2567. var g = this, p = this.options;
  2568. g.insertItem(data, (g.data || []).length);
  2569. },
  2570. _setValue: function (value,text)
  2571. {
  2572. var g = this, p = this.options;
  2573. text = g.findTextByValue(value);
  2574. if (p.tree)
  2575. {
  2576. g.selectValueByTree(value);
  2577. }
  2578. else if (!p.isMultiSelect)
  2579. {
  2580. g._changeValue(value, text);
  2581. $("tr[value='" + value + "'] td", g.selectBox).addClass("l-selected");
  2582. $("tr[value!='" + value + "'] td", g.selectBox).removeClass("l-selected");
  2583. }
  2584. else
  2585. {
  2586. g._changeValue(value, text);
  2587. if (value != null) {
  2588. var targetdata = value.toString().split(p.split);
  2589. $("table.l-table-checkbox :checkbox", g.selectBox).each(function () { this.checked = false; });
  2590. for (var i = 0; i < targetdata.length; i++) {
  2591. $("table.l-table-checkbox tr[value=" + targetdata[i] + "] :checkbox", g.selectBox).each(function () { this.checked = true; });
  2592. }
  2593. }
  2594. }
  2595. },
  2596. selectValue: function (value)
  2597. {
  2598. this._setValue(value);
  2599. },
  2600. bulidContent: function ()
  2601. {
  2602. var g = this, p = this.options;
  2603. this.clearContent();
  2604. if (g.select)
  2605. {
  2606. g.setSelect();
  2607. }
  2608. else if (p.tree)
  2609. {
  2610. g.setTree(p.tree);
  2611. }
  2612. },
  2613. reload: function ()
  2614. {
  2615. var g = this, p = this.options;
  2616. if (p.url)
  2617. {
  2618. g.set('url', p.url);
  2619. }
  2620. else if (g.grid)
  2621. {
  2622. g.grid.reload();
  2623. }
  2624. },
  2625. _setUrl: function (url) {
  2626. if (!url) return;
  2627. var g = this, p = this.options;
  2628. var parms = $.isFunction(p.parms) ? p.parms() : p.parms;
  2629. $.ajax({
  2630. type: p.ajaxType,
  2631. url: url,
  2632. data: parms,
  2633. cache: false,
  2634. dataType: 'json',
  2635. success: function (data) {
  2636. g.setData(data);
  2637. g.trigger('success', [data]);
  2638. },
  2639. error: function (XMLHttpRequest, textStatus) {
  2640. g.trigger('error', [XMLHttpRequest, textStatus]);
  2641. }
  2642. });
  2643. },
  2644. setUrl: function (url) {
  2645. return this._setUrl(url);
  2646. },
  2647. setParm: function (name, value) {
  2648. if (!name) return;
  2649. var g = this;
  2650. var parms = g.get('parms');
  2651. if (!parms) parms = {};
  2652. parms[name] = value;
  2653. g.set('parms', parms);
  2654. },
  2655. clearContent: function ()
  2656. {
  2657. var g = this, p = this.options;
  2658. $("table", g.selectBox).html("");
  2659. //g.inputText.val("");
  2660. //g.valueField.val("");
  2661. },
  2662. setSelect: function ()
  2663. {
  2664. var g = this, p = this.options;
  2665. this.clearContent();
  2666. $('option', g.select).each(function (i)
  2667. {
  2668. var val = $(this).val();
  2669. var txt = $(this).html();
  2670. var tr = $("<tr><td index='" + i + "' value='" + val + "' text='" + txt + "'>" + txt + "</td>");
  2671. $("table.l-table-nocheckbox", g.selectBox).append(tr);
  2672. $("td", tr).hover(function ()
  2673. {
  2674. $(this).addClass("l-over");
  2675. }, function ()
  2676. {
  2677. $(this).removeClass("l-over");
  2678. });
  2679. });
  2680. $('td:eq(' + g.select[0].selectedIndex + ')', g.selectBox).each(function ()
  2681. {
  2682. if ($(this).hasClass("l-selected"))
  2683. {
  2684. g.selectBox.hide();
  2685. return;
  2686. }
  2687. $(".l-selected", g.selectBox).removeClass("l-selected");
  2688. $(this).addClass("l-selected");
  2689. if (g.select[0].selectedIndex != $(this).attr('index') && g.select[0].onchange)
  2690. {
  2691. g.select[0].selectedIndex = $(this).attr('index'); g.select[0].onchange();
  2692. }
  2693. var newIndex = parseInt($(this).attr('index'));
  2694. g.select[0].selectedIndex = newIndex;
  2695. g.select.trigger("change");
  2696. g.selectBox.hide();
  2697. var value = $(this).attr("value");
  2698. var text = $(this).html();
  2699. if (p.render)
  2700. {
  2701. g.inputText.val(p.render(value, text));
  2702. }
  2703. else
  2704. {
  2705. g.inputText.val(text);
  2706. }
  2707. });
  2708. g._addClickEven();
  2709. },
  2710. _setData : function(data)
  2711. {
  2712. this.setData(data);
  2713. },
  2714. setData: function (data)
  2715. {
  2716. var g = this, p = this.options;
  2717. if (g.select) return;
  2718. if (!data || !data.length) data = [];
  2719. if (g.data != data) g.data = data;
  2720. this.clearContent();
  2721. if (p.columns)
  2722. {
  2723. g.selectBox.table.headrow = $("<tr class='l-table-headerow'><td width='18px'></td></tr>");
  2724. g.selectBox.table.append(g.selectBox.table.headrow);
  2725. g.selectBox.table.addClass("l-box-select-grid");
  2726. for (var j = 0; j < p.columns.length; j++)
  2727. {
  2728. var headrow = $("<td columnindex='" + j + "' columnname='" + p.columns[j].name + "'>" + p.columns[j].header + "</td>");
  2729. if (p.columns[j].width)
  2730. {
  2731. headrow.width(p.columns[j].width);
  2732. }
  2733. g.selectBox.table.headrow.append(headrow);
  2734. }
  2735. }
  2736. var out = [];
  2737. if (p.emptyText && !g.emptyRow && (data.length == 0 || data[0][p.textField] != p.emptyText))
  2738. {
  2739. g.emptyRow = {};
  2740. g.emptyRow[p.textField] = p.emptyText;
  2741. g.emptyRow[p.valueField] = null;
  2742. data.splice(0, 0, g.emptyRow);
  2743. }
  2744. for (var i = 0; i < data.length; i++)
  2745. {
  2746. var val = data[i][p.valueField];
  2747. var txt = data[i][p.textField];
  2748. if (!p.columns)
  2749. {
  2750. out.push("<tr value='" + val + "'>");
  2751. if(p.isShowCheckBox){
  2752. out.push("<td style='width:18px;' index='" + i + "' value='" + val + "' text='" + txt + "' ><input type='checkbox' /></td>");
  2753. }
  2754. var itemHtml = txt;
  2755. if (p.renderItem) {
  2756. itemHtml = p.renderItem.call(g, {
  2757. data: data[i],
  2758. value: val,
  2759. text: txt,
  2760. key: g.inputText.val()
  2761. });
  2762. } else if (p.autocomplete && p.highLight)
  2763. {
  2764. itemHtml = g._highLight(txt, g.inputText.val());
  2765. }
  2766. out.push("<td index='" + i + "' value='" + val + "' text='" + txt + "' align='left'>" + itemHtml + "</td></tr>");
  2767. } else
  2768. {
  2769. out.push("<tr value='" + val + "'><td style='width:18px;' index='" + i + "' value='" + val + "' text='" + txt + "' ><input type='checkbox' /></td>");
  2770. for (var j = 0; j < p.columns.length; j++) {
  2771. var columnname = p.columns[j].name;
  2772. out.push("<td>" + data[i][columnname] + "</td>");
  2773. }
  2774. out.push('</tr>');
  2775. }
  2776. }
  2777. if (!p.columns) {
  2778. if (p.isShowCheckBox) {
  2779. $("table.l-table-checkbox", g.selectBox).append(out.join(''));
  2780. }else{
  2781. $("table.l-table-nocheckbox", g.selectBox).append(out.join(''));
  2782. }
  2783. } else {
  2784. g.selectBox.table.append(out.join(''));
  2785. }
  2786. if (p.addRowButton && p.addRowButtonClick && !g.addRowButton)
  2787. {
  2788. g.addRowButton = $('<div class="l-box-select-add"><a href="javascript:void(0)" class="link"><div class="icon"></div></a></div>');
  2789. g.addRowButton.find(".link").append(p.addRowButton).click(p.addRowButtonClick);
  2790. g.selectBoxInner.after(g.addRowButton);
  2791. }
  2792. g.set('selectBoxHeight', p.selectBoxHeight);
  2793. //自定义复选框支持
  2794. if (p.isShowCheckBox && $.fn.ligerCheckBox)
  2795. {
  2796. $("table input:checkbox", g.selectBox).ligerCheckBox();
  2797. }
  2798. $(".l-table-checkbox input:checkbox", g.selectBox).change(function ()
  2799. {
  2800. if (this.checked && g.hasBind('beforeSelect'))
  2801. {
  2802. var parentTD = null;
  2803. if ($(this).parent().get(0).tagName.toLowerCase() == "div")
  2804. {
  2805. parentTD = $(this).parent().parent();
  2806. } else
  2807. {
  2808. parentTD = $(this).parent();
  2809. }
  2810. if (parentTD != null && g.trigger('beforeSelect', [parentTD.attr("value"), parentTD.attr("text")]) == false)
  2811. {
  2812. g.selectBox.slideToggle("fast");
  2813. return false;
  2814. }
  2815. }
  2816. if (!p.isMultiSelect)
  2817. {
  2818. if (this.checked)
  2819. {
  2820. $("input:checked", g.selectBox).not(this).each(function ()
  2821. {
  2822. this.checked = false;
  2823. $(".l-checkbox-checked", $(this).parent()).removeClass("l-checkbox-checked");
  2824. });
  2825. g.selectBox.slideToggle("fast");
  2826. }
  2827. }
  2828. g._checkboxUpdateValue();
  2829. });
  2830. $("table.l-table-nocheckbox td", g.selectBox).hover(function ()
  2831. {
  2832. $(this).addClass("l-over");
  2833. }, function ()
  2834. {
  2835. $(this).removeClass("l-over");
  2836. });
  2837. g._addClickEven();
  2838. //选择项初始化
  2839. if (!p.autocomplete) {
  2840. g.updateStyle();
  2841. }
  2842. },
  2843. //树
  2844. setTree: function (tree)
  2845. {
  2846. var g = this, p = this.options;
  2847. this.clearContent();
  2848. g.selectBox.table.remove();
  2849. if (tree.checkbox != false)
  2850. {
  2851. tree.onCheck = function ()
  2852. {
  2853. var nodes = g.treeManager.getChecked();
  2854. var value = [];
  2855. var text = [];
  2856. $(nodes).each(function (i, node)
  2857. {
  2858. if (p.treeLeafOnly && node.data.children) return;
  2859. value.push(node.data[p.valueField]);
  2860. text.push(node.data[p.textField]);
  2861. });
  2862. g._changeValue(value.join(p.split), text.join(p.split));
  2863. };
  2864. }
  2865. else
  2866. {
  2867. tree.onSelect = function (node)
  2868. {
  2869. if (g.trigger('BeforeSelect'[node]) == false) return;
  2870. if (p.treeLeafOnly && node.data.children) return;
  2871. var value = node.data[p.valueField];
  2872. var text = node.data[p.textField];
  2873. g._changeValue(value, text);
  2874. };
  2875. tree.onCancelSelect = function (node)
  2876. {
  2877. g._changeValue("", "");
  2878. };
  2879. }
  2880. tree.onAfterAppend = function (domnode, nodedata)
  2881. {
  2882. if (!g.treeManager) return;
  2883. var value = null;
  2884. if (p.initValue) value = p.initValue;
  2885. else if (g.valueField.val() != "") value = g.valueField.val();
  2886. g.selectValueByTree(value);
  2887. };
  2888. g.tree = $("<ul></ul>");
  2889. $("div:first", g.selectBox).append(g.tree);
  2890. g.tree.ligerTree(tree);
  2891. g.treeManager = g.tree.ligerGetTreeManager();
  2892. },
  2893. selectValueByTree: function (value)
  2894. {
  2895. var g = this, p = this.options;
  2896. if (value != null)
  2897. {
  2898. var text = "";
  2899. var valuelist = value.toString().split(p.split);
  2900. $(valuelist).each(function (i, item)
  2901. {
  2902. g.treeManager.selectNode(item.toString());
  2903. text += g.treeManager.getTextByID(item);
  2904. if (i < valuelist.length - 1) text += p.split;
  2905. });
  2906. g._changeValue(value, text);
  2907. }
  2908. },
  2909. //表格
  2910. setGrid: function (grid)
  2911. {
  2912. var g = this, p = this.options;
  2913. if (g.grid) return;
  2914. p.hideOnLoseFocus = p.hideGridOnLoseFocus ? true : false;
  2915. this.clearContent();
  2916. g.selectBox.addClass("l-box-select-lookup");
  2917. g.selectBox.table.remove();
  2918. var panel = $("div:first", g.selectBox);
  2919. var conditionPanel = $("<div></div>").appendTo(panel);
  2920. var gridPanel = $("<div></div>").appendTo(panel);
  2921. g.conditionPanel = conditionPanel;
  2922. //搜索框
  2923. if (p.condition) {
  2924. var conditionParm = $.extend({
  2925. labelWidth: 60,
  2926. space: 20,
  2927. width: p.selectBoxWidth
  2928. }, p.condition);
  2929. g.condition = conditionPanel.ligerForm(conditionParm);
  2930. } else {
  2931. conditionPanel.remove();
  2932. }
  2933. //列表
  2934. grid = $.extend({
  2935. columnWidth: 120,
  2936. alternatingRow: false,
  2937. frozen: true,
  2938. rownumbers: true,
  2939. allowUnSelectRow:true
  2940. }, grid, {
  2941. width: "100%",
  2942. height: g.getGridHeight(),
  2943. inWindow: false,
  2944. parms : p.parms,
  2945. isChecked: function (rowdata) {
  2946. var value = g.getValue();
  2947. if (!value) return false;
  2948. if (!p.valueField || !rowdata[p.valueField]) return false;
  2949. return $.inArray(rowdata[p.valueField].toString(), value.split(p.split)) != -1;
  2950. }
  2951. });
  2952. g.grid = g.gridManager = gridPanel.ligerGrid(grid);
  2953. g.grid.bind('afterShowData', function ()
  2954. {
  2955. g.updateSelectBoxPosition();
  2956. });
  2957. var selecteds = [], onGridSelect = function () {
  2958. var value = [], text = [];
  2959. $(selecteds).each(function (i, rowdata) {
  2960. value.push(rowdata[p.valueField]);
  2961. text.push(rowdata[p.textField]);
  2962. });
  2963. if (grid.checkbox)
  2964. g.selected = selecteds;
  2965. else if (selecteds.length)
  2966. g.selected = selecteds[0];
  2967. else
  2968. g.selected = null;
  2969. g._changeValue(value.join(p.split), text.join(p.split));
  2970. g.trigger('gridSelect', {
  2971. value: value.join(p.split),
  2972. text: text.join(p.split),
  2973. data: selecteds
  2974. });
  2975. }, removeSelected = function (rowdata) {
  2976. for (var i = selecteds.length - 1; i >= 0; i--) {
  2977. if (selecteds[i][p.valueField] == rowdata[p.valueField]) {
  2978. selecteds.splice(i, 1);
  2979. }
  2980. }
  2981. }, addSelected = function (rowdata) {
  2982. for (var i = selecteds.length - 1; i >= 0; i--) {
  2983. if (selecteds[i][p.valueField] == rowdata[p.valueField]) {
  2984. return;
  2985. }
  2986. }
  2987. selecteds.push(rowdata);
  2988. };
  2989. if (grid.checkbox)
  2990. {
  2991. var onCheckRow = function (checked, rowdata) {
  2992. checked && addSelected(rowdata);
  2993. !checked && removeSelected(rowdata);
  2994. };
  2995. g.grid.bind('CheckAllRow', function (checked) {
  2996. $(g.grid.rows).each(function (rowdata) {
  2997. onCheckRow(checked, rowdata);
  2998. });
  2999. onGridSelect();
  3000. });
  3001. g.grid.bind('CheckRow', function (checked, rowdata) {
  3002. onCheckRow(checked, rowdata);
  3003. onGridSelect();
  3004. });
  3005. }
  3006. else
  3007. {
  3008. g.grid.bind('SelectRow', function (rowdata) {
  3009. selecteds = [rowdata];
  3010. onGridSelect();
  3011. g._toggleSelectBox(true);
  3012. });
  3013. g.grid.bind('UnSelectRow', function () {
  3014. selecteds = [];
  3015. onGridSelect();
  3016. });
  3017. }
  3018. g.bind('show', function () {
  3019. g.grid.refreshSize();
  3020. });
  3021. g.bind("clear", function () {
  3022. selecteds = [];
  3023. g.grid.selecteds = [];
  3024. g.grid._showData();
  3025. });
  3026. if (p.condition) {
  3027. var containerBtn1 = $('<li style="margin-right:9px"><div></div></li>');
  3028. var containerBtn2 = $('<li style="margin-right:9px;float:right"><div></div></li>');
  3029. $("ul:first", conditionPanel).append(containerBtn1).append(containerBtn2).after('<div class="l-clear"></div>');
  3030. $("div", containerBtn1).ligerButton({
  3031. text: p.Search, width: 40,
  3032. click: function () {
  3033. var rules = g.condition.toConditions();
  3034. g.grid.setParm(grid.conditionParmName || 'condition', $.ligerui.toJSON(rules));
  3035. g.grid.reload();
  3036. }
  3037. });
  3038. $("div", containerBtn2).ligerButton({
  3039. text: '关闭',width:40,
  3040. click: function () {
  3041. g.selectBox.hide();
  3042. }
  3043. });
  3044. }
  3045. g.grid.refreshSize();
  3046. },
  3047. getGridHeight: function (height) {
  3048. var g = this, p = this.options;
  3049. height = height || g.selectBox.height();
  3050. height -= g.conditionPanel.height();
  3051. return height;
  3052. },
  3053. _getValue: function ()
  3054. {
  3055. return $(this.valueField).val();
  3056. },
  3057. getValue: function ()
  3058. {
  3059. //获取值
  3060. return this._getValue();
  3061. },
  3062. getSelected : function()
  3063. {
  3064. return this.selected;
  3065. },
  3066. getText: function ()
  3067. {
  3068. return this.inputText.val();
  3069. },
  3070. setText: function (value) {
  3071. this.inputText.val(value);
  3072. },
  3073. updateStyle: function ()
  3074. {
  3075. var g = this, p = this.options;
  3076. p.initValue = g._getValue();
  3077. g._dataInit();
  3078. },
  3079. _dataInit: function ()
  3080. {
  3081. var g = this, p = this.options;
  3082. var value = null;
  3083. if (p.initValue != null && p.initText != null)
  3084. {
  3085. g._changeValue(p.initValue, p.initText);
  3086. }
  3087. //根据值来初始化
  3088. if (p.initValue != null)
  3089. {
  3090. value = p.initValue;
  3091. if (p.tree)
  3092. {
  3093. if(value)
  3094. g.selectValueByTree(value);
  3095. }
  3096. else if (g.data)
  3097. {
  3098. var text = g.findTextByValue(value);
  3099. g._changeValue(value, text);
  3100. }
  3101. }
  3102. else if (g.valueField.val() != "")
  3103. {
  3104. value = g.valueField.val();
  3105. if (p.tree)
  3106. {
  3107. if(value)
  3108. g.selectValueByTree(value);
  3109. }
  3110. else if(g.data)
  3111. {
  3112. var text = g.findTextByValue(value);
  3113. g._changeValue(value, text);
  3114. }
  3115. }
  3116. if (!p.isShowCheckBox)
  3117. {
  3118. $("table tr", g.selectBox).find("td:first").each(function ()
  3119. {
  3120. if (value != null && value == $(this).attr("value"))
  3121. {
  3122. $(this).addClass("l-selected");
  3123. } else
  3124. {
  3125. $(this).removeClass("l-selected");
  3126. }
  3127. });
  3128. }
  3129. else
  3130. {
  3131. $(":checkbox", g.selectBox).each(function ()
  3132. {
  3133. var parentTD = null;
  3134. var checkbox = $(this);
  3135. if (checkbox.parent().get(0).tagName.toLowerCase() == "div")
  3136. {
  3137. parentTD = checkbox.parent().parent();
  3138. } else
  3139. {
  3140. parentTD = checkbox.parent();
  3141. }
  3142. if (parentTD == null) return;
  3143. $(".l-checkbox", parentTD).removeClass("l-checkbox-checked");
  3144. checkbox[0].checked = false;
  3145. var valuearr = (value || "").toString().split(p.split);
  3146. $(valuearr).each(function (i, item)
  3147. {
  3148. if (value != null && item == parentTD.attr("value"))
  3149. {
  3150. $(".l-checkbox", parentTD).addClass("l-checkbox-checked");
  3151. checkbox[0].checked = true;
  3152. }
  3153. });
  3154. });
  3155. }
  3156. },
  3157. //设置值到 文本框和隐藏域
  3158. _changeValue: function (newValue, newText)
  3159. {
  3160. var g = this, p = this.options;
  3161. g.valueField.val(newValue);
  3162. if (p && p.render)
  3163. {
  3164. g.inputText.val(p.render(newValue, newText));
  3165. }
  3166. else
  3167. {
  3168. g.inputText.val(newText);
  3169. }
  3170. g.selectedValue = newValue;
  3171. g.selectedText = newText;
  3172. g.inputText.trigger("change").focus();
  3173. g.trigger('selected', [newValue, newText]);
  3174. },
  3175. //更新选中的值(复选框)
  3176. _checkboxUpdateValue: function ()
  3177. {
  3178. var g = this, p = this.options;
  3179. var valueStr = "";
  3180. var textStr = "";
  3181. $("input:checked", g.selectBox).each(function ()
  3182. {
  3183. var parentTD = null;
  3184. if ($(this).parent().get(0).tagName.toLowerCase() == "div")
  3185. {
  3186. parentTD = $(this).parent().parent();
  3187. } else
  3188. {
  3189. parentTD = $(this).parent();
  3190. }
  3191. if (!parentTD) return;
  3192. valueStr += parentTD.attr("value") + p.split;
  3193. textStr += parentTD.attr("text") + p.split;
  3194. });
  3195. if (valueStr.length > 0) valueStr = valueStr.substr(0, valueStr.length - 1);
  3196. if (textStr.length > 0) textStr = textStr.substr(0, textStr.length - 1);
  3197. g._changeValue(valueStr, textStr);
  3198. },
  3199. _addClickEven: function ()
  3200. {
  3201. var g = this, p = this.options;
  3202. //选项点击
  3203. $(".l-table-nocheckbox td", g.selectBox).click(function ()
  3204. {
  3205. var value = $(this).attr("value");
  3206. var index = parseInt($(this).attr('index'));
  3207. var text = $(this).attr("text");
  3208. if (g.hasBind('beforeSelect') && g.trigger('beforeSelect', [value, text]) == false)
  3209. {
  3210. if (p.slide) g.selectBox.slideToggle("fast");
  3211. else g.selectBox.hide();
  3212. return false;
  3213. }
  3214. if ($(this).hasClass("l-selected"))
  3215. {
  3216. if (p.slide) g.selectBox.slideToggle("fast");
  3217. else g.selectBox.hide();
  3218. return;
  3219. }
  3220. $(".l-selected", g.selectBox).removeClass("l-selected");
  3221. $(this).addClass("l-selected");
  3222. if (g.select)
  3223. {
  3224. if (g.select[0].selectedIndex != index)
  3225. {
  3226. g.select[0].selectedIndex = index;
  3227. g.select.trigger("change");
  3228. }
  3229. }
  3230. if (p.slide)
  3231. {
  3232. g.boxToggling = true;
  3233. g.selectBox.hide("fast", function ()
  3234. {
  3235. g.boxToggling = false;
  3236. })
  3237. } else g.selectBox.hide();
  3238. g._changeValue(value, text);
  3239. });
  3240. },
  3241. updateSelectBoxPosition: function ()
  3242. {
  3243. var g = this, p = this.options;
  3244. if (p && p.absolute)
  3245. {
  3246. var contentHeight = $(document).height();
  3247. if (p.alwayShowInTop || Number(g.wrapper.offset().top + 1 + g.wrapper.outerHeight() + g.selectBox.height()) > contentHeight
  3248. && contentHeight > Number(g.selectBox.height() + 1))
  3249. {
  3250. //若下拉框大小超过当前document下边框,且当前document上留白大于下拉内容高度,下拉内容向上展现
  3251. g.selectBox.css({ left: g.wrapper.offset().left, top: g.wrapper.offset().top - 1 - g.selectBox.height() });
  3252. } else
  3253. {
  3254. g.selectBox.css({ left: g.wrapper.offset().left, top: g.wrapper.offset().top + 1 + g.wrapper.outerHeight() });
  3255. }
  3256. }
  3257. else
  3258. {
  3259. var topheight = g.wrapper.offset().top - $(window).scrollTop();
  3260. var selfheight = g.selectBox.height() + textHeight + 4;
  3261. if (topheight + selfheight > $(window).height() && topheight > selfheight)
  3262. {
  3263. g.selectBox.css("marginTop", -1 * (g.selectBox.height() + textHeight + 5));
  3264. }
  3265. }
  3266. },
  3267. _toggleSelectBox: function (isHide)
  3268. {
  3269. var g = this, p = this.options;
  3270. if (!g || !p) return;
  3271. var textHeight = g.wrapper.height();
  3272. g.boxToggling = true;
  3273. if (isHide)
  3274. {
  3275. if (p.slide)
  3276. {
  3277. g.selectBox.slideToggle('fast', function ()
  3278. {
  3279. g.boxToggling = false;
  3280. });
  3281. }
  3282. else
  3283. {
  3284. g.selectBox.hide();
  3285. g.boxToggling = false;
  3286. }
  3287. }
  3288. else
  3289. {
  3290. g.updateSelectBoxPosition();
  3291. if (p.slide)
  3292. {
  3293. g.selectBox.slideToggle('fast', function ()
  3294. {
  3295. g.boxToggling = false;
  3296. if (!p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0)
  3297. {
  3298. var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top);
  3299. $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet });
  3300. }
  3301. });
  3302. }
  3303. else
  3304. {
  3305. g.selectBox.show();
  3306. g.boxToggling = false;
  3307. if (!g.tree && !g.grid && !p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0)
  3308. {
  3309. var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top);
  3310. $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet });
  3311. }
  3312. }
  3313. }
  3314. g.isShowed = g.selectBox.is(":visible");
  3315. g.trigger('toggle', [isHide]);
  3316. g.trigger(isHide ? 'hide' : 'show');
  3317. },
  3318. _highLight: function (str, key)
  3319. {
  3320. if (!str) return str;
  3321. var index = str.indexOf(key);
  3322. if (index == -1) return str;
  3323. return str.substring(0, index) + "<span class='l-highLight'>" + key + "</span>" + str.substring(key.length + index);
  3324. },
  3325. _setAutocomplete: function (value) {
  3326. var g = this, p = this.options;
  3327. if (!value) return;
  3328. g.inputText.removeAttr("readonly");
  3329. var lastText = g.inputText.val();
  3330. g.inputText.keyup(function ()
  3331. {
  3332. setTimeout(function ()
  3333. {
  3334. if (lastText == g.inputText.val()) return;
  3335. p.initValue = "";
  3336. g.valueField.val("");
  3337. if (p.url)
  3338. {
  3339. g.setParm('key', g.inputText.val());
  3340. g.set('url', p.url);
  3341. g.selectBox.show();
  3342. } else if (p.grid)
  3343. {
  3344. g.grid.setParm('key', g.inputText.val());
  3345. g.grid.reload();
  3346. }
  3347. lastText = g.inputText.val();
  3348. }, 1);
  3349. });
  3350. }
  3351. });
  3352. $.ligerui.controls.ComboBox.prototype.setValue = $.ligerui.controls.ComboBox.prototype.selectValue;
  3353. //设置文本框和隐藏控件的值
  3354. $.ligerui.controls.ComboBox.prototype.setInputValue = $.ligerui.controls.ComboBox.prototype._changeValue;
  3355. })(jQuery);/**
  3356. * jQuery ligerUI 1.2.4
  3357. *
  3358. * http://ligerui.com
  3359. *
  3360. * Author daomi 2014 [ gd_star@163.com ]
  3361. *
  3362. */
  3363. (function ($)
  3364. {
  3365. $.fn.ligerDateEditor = function ()
  3366. {
  3367. return $.ligerui.run.call(this, "ligerDateEditor", arguments);
  3368. };
  3369. $.fn.ligerGetDateEditorManager = function ()
  3370. {
  3371. return $.ligerui.run.call(this, "ligerGetDateEditorManager", arguments);
  3372. };
  3373. $.ligerDefaults.DateEditor = {
  3374. format: "yyyy-MM-dd hh:mm",
  3375. width : null,
  3376. showTime: false,
  3377. onChangeDate: false,
  3378. absolute: true, //选择框是否在附加到body,并绝对定位
  3379. cancelable: true, //可取消选择
  3380. readonly: false //是否只读
  3381. };
  3382. $.ligerDefaults.DateEditorString = {
  3383. dayMessage: ["日", "一", "二", "三", "四", "五", "六"],
  3384. monthMessage: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
  3385. todayMessage: "今天",
  3386. closeMessage: "关闭"
  3387. };
  3388. $.ligerMethos.DateEditor = {};
  3389. $.ligerui.controls.DateEditor = function (element, options)
  3390. {
  3391. $.ligerui.controls.DateEditor.base.constructor.call(this, element, options);
  3392. };
  3393. $.ligerui.controls.DateEditor.ligerExtend($.ligerui.controls.Input, {
  3394. __getType: function ()
  3395. {
  3396. return 'DateEditor';
  3397. },
  3398. __idPrev: function ()
  3399. {
  3400. return 'DateEditor';
  3401. },
  3402. _extendMethods: function ()
  3403. {
  3404. return $.ligerMethos.DateEditor;
  3405. },
  3406. _render: function ()
  3407. {
  3408. var g = this, p = this.options;
  3409. if (!p.showTime && p.format.indexOf(" hh:mm") > -1)
  3410. p.format = p.format.replace(" hh:mm", "");
  3411. if (this.element.tagName.toLowerCase() != "input" || this.element.type != "text")
  3412. return;
  3413. g.inputText = $(this.element);
  3414. if (!g.inputText.hasClass("l-text-field"))
  3415. g.inputText.addClass("l-text-field");
  3416. g.link = $('<div class="l-trigger"><div class="l-trigger-icon"></div></div>');
  3417. g.text = g.inputText.wrap('<div class="l-text l-text-date"></div>').parent();
  3418. g.text.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  3419. g.text.append(g.link);
  3420. //添加个包裹,
  3421. g.textwrapper = g.text.wrap('<div class="l-text-wrapper"></div>').parent();
  3422. var dateeditorHTML = "";
  3423. dateeditorHTML += "<div class='l-box-dateeditor' style='display:none'>";
  3424. dateeditorHTML += " <div class='l-box-dateeditor-header'>";
  3425. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-prevyear'><span></span></div>";
  3426. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-prevmonth'><span></span></div>";
  3427. dateeditorHTML += " <div class='l-box-dateeditor-header-text'><a class='l-box-dateeditor-header-month'></a> , <a class='l-box-dateeditor-header-year'></a></div>";
  3428. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-nextmonth'><span></span></div>";
  3429. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-nextyear'><span></span></div>";
  3430. dateeditorHTML += " </div>";
  3431. dateeditorHTML += " <div class='l-box-dateeditor-body'>";
  3432. dateeditorHTML += " <table cellpadding='0' cellspacing='0' border='0' class='l-box-dateeditor-calendar'>";
  3433. dateeditorHTML += " <thead>";
  3434. dateeditorHTML += " <tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr>";
  3435. dateeditorHTML += " </thead>";
  3436. dateeditorHTML += " <tbody>";
  3437. dateeditorHTML += " <tr class='l-first'><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr>";
  3438. dateeditorHTML += " </tbody>";
  3439. dateeditorHTML += " </table>";
  3440. dateeditorHTML += " <ul class='l-box-dateeditor-monthselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  3441. dateeditorHTML += " <ul class='l-box-dateeditor-yearselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  3442. dateeditorHTML += " <ul class='l-box-dateeditor-hourselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  3443. dateeditorHTML += " <ul class='l-box-dateeditor-minuteselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  3444. dateeditorHTML += " </div>";
  3445. dateeditorHTML += " <div class='l-box-dateeditor-toolbar'>";
  3446. dateeditorHTML += " <div class='l-box-dateeditor-time'></div>";
  3447. dateeditorHTML += " <div class='l-button l-button-today'></div>";
  3448. dateeditorHTML += " <div class='l-button l-button-close'></div>";
  3449. dateeditorHTML += " <div class='l-clear'></div>";
  3450. dateeditorHTML += " </div>";
  3451. dateeditorHTML += "</div>";
  3452. g.dateeditor = $(dateeditorHTML);
  3453. if (p.absolute)
  3454. g.dateeditor.appendTo('body').addClass("l-box-dateeditor-absolute");
  3455. else
  3456. g.textwrapper.append(g.dateeditor);
  3457. g.header = $(".l-box-dateeditor-header", g.dateeditor);
  3458. g.body = $(".l-box-dateeditor-body", g.dateeditor);
  3459. g.toolbar = $(".l-box-dateeditor-toolbar", g.dateeditor);
  3460. g.body.thead = $("thead", g.body);
  3461. g.body.tbody = $("tbody", g.body);
  3462. g.body.monthselector = $(".l-box-dateeditor-monthselector", g.body);
  3463. g.body.yearselector = $(".l-box-dateeditor-yearselector", g.body);
  3464. g.body.hourselector = $(".l-box-dateeditor-hourselector", g.body);
  3465. g.body.minuteselector = $(".l-box-dateeditor-minuteselector", g.body);
  3466. g.toolbar.time = $(".l-box-dateeditor-time", g.toolbar);
  3467. g.toolbar.time.hour = $("<a></a>");
  3468. g.toolbar.time.minute = $("<a></a>");
  3469. g.buttons = {
  3470. btnPrevYear: $(".l-box-dateeditor-header-prevyear", g.header),
  3471. btnNextYear: $(".l-box-dateeditor-header-nextyear", g.header),
  3472. btnPrevMonth: $(".l-box-dateeditor-header-prevmonth", g.header),
  3473. btnNextMonth: $(".l-box-dateeditor-header-nextmonth", g.header),
  3474. btnYear: $(".l-box-dateeditor-header-year", g.header),
  3475. btnMonth: $(".l-box-dateeditor-header-month", g.header),
  3476. btnToday: $(".l-button-today", g.toolbar),
  3477. btnClose: $(".l-button-close", g.toolbar)
  3478. };
  3479. var nowDate = new Date();
  3480. g.now = {
  3481. year: nowDate.getFullYear(),
  3482. month: nowDate.getMonth() + 1, //注意这里
  3483. day: nowDate.getDay(),
  3484. date: nowDate.getDate(),
  3485. hour: nowDate.getHours(),
  3486. minute: nowDate.getMinutes()
  3487. };
  3488. //当前的时间
  3489. g.currentDate = {
  3490. year: nowDate.getFullYear(),
  3491. month: nowDate.getMonth() + 1,
  3492. day: nowDate.getDay(),
  3493. date: nowDate.getDate(),
  3494. hour: nowDate.getHours(),
  3495. minute: nowDate.getMinutes()
  3496. };
  3497. //选择的时间
  3498. g.selectedDate = null;
  3499. //使用的时间
  3500. g.usedDate = null;
  3501. //初始化数据
  3502. //设置周日至周六
  3503. $("td", g.body.thead).each(function (i, td)
  3504. {
  3505. $(td).html(p.dayMessage[i]);
  3506. });
  3507. //设置一月到十一二月
  3508. $("li", g.body.monthselector).each(function (i, li)
  3509. {
  3510. $(li).html(p.monthMessage[i]);
  3511. });
  3512. //设置按钮
  3513. g.buttons.btnToday.html(p.todayMessage);
  3514. g.buttons.btnClose.html(p.closeMessage);
  3515. //设置时间
  3516. if (p.showTime)
  3517. {
  3518. g.toolbar.time.show();
  3519. g.toolbar.time.append(g.toolbar.time.hour).append(":").append(g.toolbar.time.minute);
  3520. $("li", g.body.hourselector).each(function (i, item)
  3521. {
  3522. var str = i;
  3523. if (i < 10) str = "0" + i.toString();
  3524. $(this).html(str);
  3525. });
  3526. $("li", g.body.minuteselector).each(function (i, item)
  3527. {
  3528. var str = i;
  3529. if (i < 10) str = "0" + i.toString();
  3530. $(this).html(str);
  3531. });
  3532. }
  3533. //设置主体
  3534. g.bulidContent();
  3535. //初始化
  3536. //初始值
  3537. if (p.initValue)
  3538. {
  3539. g.inputText.val(p.initValue);
  3540. }
  3541. if (g.inputText.val() != "")
  3542. {
  3543. g.onTextChange();
  3544. }
  3545. /**************
  3546. **bulid evens**
  3547. *************/
  3548. g.dateeditor.hover(null, function (e)
  3549. {
  3550. if (g.dateeditor.is(":visible") && !g.editorToggling)
  3551. {
  3552. g.toggleDateEditor(true);
  3553. }
  3554. });
  3555. //toggle even
  3556. g.link.hover(function ()
  3557. {
  3558. if (p.disabled) return;
  3559. this.className = "l-trigger-hover";
  3560. }, function ()
  3561. {
  3562. if (p.disabled) return;
  3563. this.className = "l-trigger";
  3564. }).mousedown(function ()
  3565. {
  3566. if (p.disabled) return;
  3567. this.className = "l-trigger-pressed";
  3568. }).mouseup(function ()
  3569. {
  3570. if (p.disabled) return;
  3571. this.className = "l-trigger-hover";
  3572. }).click(function ()
  3573. {
  3574. if (p.disabled) return;
  3575. g.bulidContent();
  3576. g.toggleDateEditor(g.dateeditor.is(":visible"));
  3577. });
  3578. //不可用属性时处理
  3579. if (p.disabled)
  3580. {
  3581. g.inputText.attr("readonly", "readonly");
  3582. g.text.addClass('l-text-disabled');
  3583. }
  3584. g.buttons.btnClose.click(function ()
  3585. {
  3586. g.toggleDateEditor(true);
  3587. });
  3588. //日期 点击
  3589. $("td", g.body.tbody).hover(function ()
  3590. {
  3591. if ($(this).hasClass("l-box-dateeditor-today")) return;
  3592. $(this).addClass("l-box-dateeditor-over");
  3593. }, function ()
  3594. {
  3595. $(this).removeClass("l-box-dateeditor-over");
  3596. }).click(function ()
  3597. {
  3598. $(".l-box-dateeditor-selected", g.body.tbody).removeClass("l-box-dateeditor-selected");
  3599. if (!$(this).hasClass("l-box-dateeditor-today"))
  3600. $(this).addClass("l-box-dateeditor-selected");
  3601. g.currentDate.date = parseInt($(this).html());
  3602. g.currentDate.day = new Date(g.currentDate.year, g.currentDate.month - 1, 1).getDay();
  3603. if ($(this).hasClass("l-box-dateeditor-out"))
  3604. {
  3605. if ($("tr", g.body.tbody).index($(this).parent()) == 0)
  3606. {
  3607. if (--g.currentDate.month == 0)
  3608. {
  3609. g.currentDate.month = 12;
  3610. g.currentDate.year--;
  3611. }
  3612. } else
  3613. {
  3614. if (++g.currentDate.month == 13)
  3615. {
  3616. g.currentDate.month = 1;
  3617. g.currentDate.year++;
  3618. }
  3619. }
  3620. }
  3621. g.selectedDate = {
  3622. year: g.currentDate.year,
  3623. month: g.currentDate.month,
  3624. date: g.currentDate.date
  3625. };
  3626. g.showDate();
  3627. g.editorToggling = true;
  3628. g.dateeditor.slideToggle('fast', function ()
  3629. {
  3630. g.editorToggling = false;
  3631. });
  3632. });
  3633. $(".l-box-dateeditor-header-btn", g.header).hover(function ()
  3634. {
  3635. $(this).addClass("l-box-dateeditor-header-btn-over");
  3636. }, function ()
  3637. {
  3638. $(this).removeClass("l-box-dateeditor-header-btn-over");
  3639. });
  3640. //选择年份
  3641. g.buttons.btnYear.click(function ()
  3642. {
  3643. //build year list
  3644. if (!g.body.yearselector.is(":visible"))
  3645. {
  3646. $("li", g.body.yearselector).each(function (i, item)
  3647. {
  3648. var currentYear = g.currentDate.year + (i - 4);
  3649. if (currentYear == g.currentDate.year)
  3650. $(this).addClass("l-selected");
  3651. else
  3652. $(this).removeClass("l-selected");
  3653. $(this).html(currentYear);
  3654. });
  3655. }
  3656. g.body.yearselector.slideToggle();
  3657. });
  3658. g.body.yearselector.hover(function () { }, function ()
  3659. {
  3660. $(this).slideUp();
  3661. });
  3662. $("li", g.body.yearselector).click(function ()
  3663. {
  3664. g.currentDate.year = parseInt($(this).html());
  3665. g.body.yearselector.slideToggle();
  3666. g.bulidContent();
  3667. });
  3668. //select month
  3669. g.buttons.btnMonth.click(function ()
  3670. {
  3671. $("li", g.body.monthselector).each(function (i, item)
  3672. {
  3673. //add selected style
  3674. if (g.currentDate.month == i + 1)
  3675. $(this).addClass("l-selected");
  3676. else
  3677. $(this).removeClass("l-selected");
  3678. });
  3679. g.body.monthselector.slideToggle();
  3680. });
  3681. g.body.monthselector.hover(function () { }, function ()
  3682. {
  3683. $(this).slideUp("fast");
  3684. });
  3685. $("li", g.body.monthselector).click(function ()
  3686. {
  3687. var index = $("li", g.body.monthselector).index(this);
  3688. g.currentDate.month = index + 1;
  3689. g.body.monthselector.slideToggle();
  3690. g.bulidContent();
  3691. });
  3692. //选择小时
  3693. g.toolbar.time.hour.click(function ()
  3694. {
  3695. $("li", g.body.hourselector).each(function (i, item)
  3696. {
  3697. //add selected style
  3698. if (g.currentDate.hour == i)
  3699. $(this).addClass("l-selected");
  3700. else
  3701. $(this).removeClass("l-selected");
  3702. });
  3703. g.body.hourselector.slideToggle();
  3704. });
  3705. g.body.hourselector.hover(function () { }, function ()
  3706. {
  3707. $(this).slideUp("fast");
  3708. });
  3709. $("li", g.body.hourselector).click(function ()
  3710. {
  3711. var index = $("li", g.body.hourselector).index(this);
  3712. g.currentDate.hour = index;
  3713. g.body.hourselector.slideToggle();
  3714. g.bulidContent();
  3715. g.showDate();
  3716. });
  3717. //选择分钟
  3718. g.toolbar.time.minute.click(function ()
  3719. {
  3720. $("li", g.body.minuteselector).each(function (i, item)
  3721. {
  3722. //add selected style
  3723. if (g.currentDate.minute == i)
  3724. $(this).addClass("l-selected");
  3725. else
  3726. $(this).removeClass("l-selected");
  3727. });
  3728. g.body.minuteselector.slideToggle("fast", function ()
  3729. {
  3730. var index = $("li", this).index($('li.l-selected', this));
  3731. if (index > 29)
  3732. {
  3733. var offSet = ($('li.l-selected', this).offset().top - $(this).offset().top);
  3734. $(this).animate({ scrollTop: offSet });
  3735. }
  3736. });
  3737. });
  3738. g.body.minuteselector.hover(function () { }, function ()
  3739. {
  3740. $(this).slideUp("fast");
  3741. });
  3742. $("li", g.body.minuteselector).click(function ()
  3743. {
  3744. var index = $("li", g.body.minuteselector).index(this);
  3745. g.currentDate.minute = index;
  3746. g.body.minuteselector.slideToggle("fast");
  3747. g.bulidContent();
  3748. g.showDate();
  3749. });
  3750. //上个月
  3751. g.buttons.btnPrevMonth.click(function ()
  3752. {
  3753. if (--g.currentDate.month == 0)
  3754. {
  3755. g.currentDate.month = 12;
  3756. g.currentDate.year--;
  3757. }
  3758. g.bulidContent();
  3759. });
  3760. //下个月
  3761. g.buttons.btnNextMonth.click(function ()
  3762. {
  3763. if (++g.currentDate.month == 13)
  3764. {
  3765. g.currentDate.month = 1;
  3766. g.currentDate.year++;
  3767. }
  3768. g.bulidContent();
  3769. });
  3770. //上一年
  3771. g.buttons.btnPrevYear.click(function ()
  3772. {
  3773. g.currentDate.year--;
  3774. g.bulidContent();
  3775. });
  3776. //下一年
  3777. g.buttons.btnNextYear.click(function ()
  3778. {
  3779. g.currentDate.year++;
  3780. g.bulidContent();
  3781. });
  3782. //今天
  3783. g.buttons.btnToday.click(function ()
  3784. {
  3785. g.currentDate = {
  3786. year: g.now.year,
  3787. month: g.now.month,
  3788. day: g.now.day,
  3789. date: g.now.date
  3790. };
  3791. g.selectedDate = {
  3792. year: g.now.year,
  3793. month: g.now.month,
  3794. day: g.now.day,
  3795. date: g.now.date
  3796. };
  3797. g.showDate();
  3798. g.dateeditor.slideToggle("fast");
  3799. });
  3800. //文本框
  3801. g.inputText.change(function ()
  3802. {
  3803. g.onTextChange();
  3804. }).blur(function ()
  3805. {
  3806. g.text.removeClass("l-text-focus");
  3807. }).focus(function ()
  3808. {
  3809. g.text.addClass("l-text-focus");
  3810. });
  3811. g.text.hover(function ()
  3812. {
  3813. g.text.addClass("l-text-over");
  3814. }, function ()
  3815. {
  3816. g.text.removeClass("l-text-over");
  3817. });
  3818. //LEABEL 支持
  3819. if (p.label)
  3820. {
  3821. g.labelwrapper = g.textwrapper.wrap('<div class="l-labeltext"></div>').parent();
  3822. g.labelwrapper.prepend('<div class="l-text-label" style="float:left;display:inline;">' + p.label + ':&nbsp</div>');
  3823. g.textwrapper.css('float', 'left');
  3824. if (!p.labelWidth)
  3825. {
  3826. p.labelWidth = $('.l-text-label', g.labelwrapper).outerWidth();
  3827. } else
  3828. {
  3829. $('.l-text-label', g.labelwrapper).outerWidth(p.labelWidth);
  3830. }
  3831. $('.l-text-label', g.labelwrapper).width(p.labelWidth);
  3832. $('.l-text-label', g.labelwrapper).height(g.text.height());
  3833. g.labelwrapper.append('<br style="clear:both;" />');
  3834. if (p.labelAlign)
  3835. {
  3836. $('.l-text-label', g.labelwrapper).css('text-align', p.labelAlign);
  3837. }
  3838. g.textwrapper.css({ display: 'inline' });
  3839. g.labelwrapper.width(g.text.outerWidth() + p.labelWidth + 2);
  3840. }
  3841. g.set(p);
  3842. },
  3843. destroy: function ()
  3844. {
  3845. if (this.textwrapper) this.textwrapper.remove();
  3846. if (this.dateeditor) this.dateeditor.remove();
  3847. this.options = null;
  3848. $.ligerui.remove(this);
  3849. },
  3850. bulidContent: function ()
  3851. {
  3852. var g = this, p = this.options;
  3853. //当前月第一天星期
  3854. var thismonthFirstDay = new Date(g.currentDate.year, g.currentDate.month - 1, 1).getDay();
  3855. //当前月天数
  3856. var nextMonth = g.currentDate.month;
  3857. var nextYear = g.currentDate.year;
  3858. if (++nextMonth == 13)
  3859. {
  3860. nextMonth = 1;
  3861. nextYear++;
  3862. }
  3863. var monthDayNum = new Date(nextYear, nextMonth - 1, 0).getDate();
  3864. //当前上个月天数
  3865. var prevMonthDayNum = new Date(g.currentDate.year, g.currentDate.month - 1, 0).getDate();
  3866. g.buttons.btnMonth.html(p.monthMessage[g.currentDate.month - 1]);
  3867. g.buttons.btnYear.html(g.currentDate.year);
  3868. g.toolbar.time.hour.html(g.currentDate.hour);
  3869. g.toolbar.time.minute.html(g.currentDate.minute);
  3870. if (g.toolbar.time.hour.html().length == 1)
  3871. g.toolbar.time.hour.html("0" + g.toolbar.time.hour.html());
  3872. if (g.toolbar.time.minute.html().length == 1)
  3873. g.toolbar.time.minute.html("0" + g.toolbar.time.minute.html());
  3874. $("td", this.body.tbody).each(function () { this.className = "" });
  3875. $("tr", this.body.tbody).each(function (i, tr)
  3876. {
  3877. $("td", tr).each(function (j, td)
  3878. {
  3879. var id = i * 7 + (j - thismonthFirstDay);
  3880. var showDay = id + 1;
  3881. if (g.selectedDate && g.currentDate.year == g.selectedDate.year &&
  3882. g.currentDate.month == g.selectedDate.month &&
  3883. id + 1 == g.selectedDate.date)
  3884. {
  3885. if (j == 0 || j == 6)
  3886. {
  3887. $(td).addClass("l-box-dateeditor-holiday")
  3888. }
  3889. $(td).addClass("l-box-dateeditor-selected");
  3890. $(td).siblings().removeClass("l-box-dateeditor-selected");
  3891. }
  3892. else if (g.currentDate.year == g.now.year &&
  3893. g.currentDate.month == g.now.month &&
  3894. id + 1 == g.now.date)
  3895. {
  3896. if (j == 0 || j == 6)
  3897. {
  3898. $(td).addClass("l-box-dateeditor-holiday")
  3899. }
  3900. $(td).addClass("l-box-dateeditor-today");
  3901. }
  3902. else if (id < 0)
  3903. {
  3904. showDay = prevMonthDayNum + showDay;
  3905. $(td).addClass("l-box-dateeditor-out")
  3906. .removeClass("l-box-dateeditor-selected");
  3907. }
  3908. else if (id > monthDayNum - 1)
  3909. {
  3910. showDay = showDay - monthDayNum;
  3911. $(td).addClass("l-box-dateeditor-out")
  3912. .removeClass("l-box-dateeditor-selected");
  3913. }
  3914. else if (j == 0 || j == 6)
  3915. {
  3916. $(td).addClass("l-box-dateeditor-holiday")
  3917. .removeClass("l-box-dateeditor-selected");
  3918. }
  3919. else
  3920. {
  3921. td.className = "";
  3922. }
  3923. $(td).html(showDay);
  3924. });
  3925. });
  3926. },
  3927. updateSelectBoxPosition: function ()
  3928. {
  3929. var g = this, p = this.options;
  3930. if (p.absolute)
  3931. {
  3932. var contentHeight = $(document).height();
  3933. if (Number(g.text.offset().top + 1 + g.text.outerHeight() + g.dateeditor.height()) > contentHeight
  3934. && contentHeight > Number(g.dateeditor.height() + 1))
  3935. {
  3936. //若下拉框大小超过当前document下边框,且当前document上留白大于下拉内容高度,下拉内容向上展现
  3937. g.dateeditor.css({ left: g.text.offset().left, top: g.text.offset().top - 1 - g.dateeditor.height() });
  3938. } else
  3939. {
  3940. g.dateeditor.css({ left: g.text.offset().left, top: g.text.offset().top + 1 + g.text.outerHeight() });
  3941. }
  3942. }
  3943. else
  3944. {
  3945. if (g.text.offset().top + 4 > g.dateeditor.height() && g.text.offset().top + g.dateeditor.height() + textHeight + 4 - $(window).scrollTop() > $(window).height())
  3946. {
  3947. g.dateeditor.css("marginTop", -1 * (g.dateeditor.height() + textHeight + 5));
  3948. g.showOnTop = true;
  3949. }
  3950. else
  3951. {
  3952. g.showOnTop = false;
  3953. }
  3954. }
  3955. },
  3956. toggleDateEditor: function (isHide)
  3957. {
  3958. var g = this, p = this.options;
  3959. var textHeight = g.text.height();
  3960. g.editorToggling = true;
  3961. if (isHide)
  3962. {
  3963. g.dateeditor.hide('fast', function ()
  3964. {
  3965. g.editorToggling = false;
  3966. });
  3967. }
  3968. else
  3969. {
  3970. g.updateSelectBoxPosition();
  3971. g.dateeditor.slideDown('fast', function ()
  3972. {
  3973. g.editorToggling = false;
  3974. });
  3975. }
  3976. },
  3977. showDate: function ()
  3978. {
  3979. var g = this, p = this.options;
  3980. if (!this.currentDate) return;
  3981. this.currentDate.hour = parseInt(g.toolbar.time.hour.html(), 10);
  3982. this.currentDate.minute = parseInt(g.toolbar.time.minute.html(), 10);
  3983. var dateStr = this.currentDate.year + '/' + this.currentDate.month + '/' + this.currentDate.date + ' ' + this.currentDate.hour + ':' + this.currentDate.minute;
  3984. var myDate = new Date(dateStr);
  3985. dateStr = g.getFormatDate(myDate);
  3986. this.inputText.val(dateStr);
  3987. this.onTextChange();
  3988. },
  3989. isDateTime: function (dateStr)
  3990. {
  3991. var g = this, p = this.options;
  3992. var r = dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  3993. if (r == null) return false;
  3994. var d = new Date(r[1], r[3] - 1, r[4]);
  3995. if (d == "NaN") return false;
  3996. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
  3997. },
  3998. isLongDateTime: function (dateStr)
  3999. {
  4000. var g = this, p = this.options;
  4001. var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
  4002. var r = dateStr.match(reg);
  4003. if (r == null) return false;
  4004. var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6]);
  4005. if (d == "NaN") return false;
  4006. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6]);
  4007. },
  4008. getFormatDate: function (date)
  4009. {
  4010. var g = this, p = this.options;
  4011. if (date == "NaN") return null;
  4012. var format = p.format;
  4013. var o = {
  4014. "M+": date.getMonth() + 1,
  4015. "d+": date.getDate(),
  4016. "h+": date.getHours(),
  4017. "m+": date.getMinutes(),
  4018. "s+": date.getSeconds(),
  4019. "q+": Math.floor((date.getMonth() + 3) / 3),
  4020. "S": date.getMilliseconds()
  4021. }
  4022. if (/(y+)/.test(format))
  4023. {
  4024. format = format.replace(RegExp.$1, (date.getFullYear() + "")
  4025. .substr(4 - RegExp.$1.length));
  4026. }
  4027. for (var k in o)
  4028. {
  4029. if (new RegExp("(" + k + ")").test(format))
  4030. {
  4031. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
  4032. : ("00" + o[k]).substr(("" + o[k]).length));
  4033. }
  4034. }
  4035. return format;
  4036. },
  4037. clear: function ()
  4038. {
  4039. this.set('value', '');
  4040. this.usedDate = null;
  4041. },
  4042. //取消选择
  4043. _setCancelable: function (value)
  4044. {
  4045. var g = this, p = this.options;
  4046. if (!value && g.unselect)
  4047. {
  4048. g.unselect.remove();
  4049. g.unselect = null;
  4050. }
  4051. if (!value && !g.unselect) return;
  4052. g.unselect = $('<div class="l-trigger l-trigger-cancel"><div class="l-trigger-icon"></div></div>').hide();
  4053. g.text.hover(function ()
  4054. {
  4055. g.unselect.show();
  4056. }, function ()
  4057. {
  4058. g.unselect.hide();
  4059. })
  4060. if (!p.disabled && p.cancelable)
  4061. {
  4062. g.text.append(g.unselect);
  4063. }
  4064. g.unselect.hover(function ()
  4065. {
  4066. this.className = "l-trigger-hover l-trigger-cancel";
  4067. }, function ()
  4068. {
  4069. this.className = "l-trigger l-trigger-cancel";
  4070. }).click(function ()
  4071. {
  4072. if (p.readonly) return;
  4073. g.clear();
  4074. });
  4075. },
  4076. //恢复
  4077. _rever: function ()
  4078. {
  4079. var g = this, p = this.options;
  4080. if (!g.usedDate)
  4081. {
  4082. g.inputText.val("");
  4083. } else
  4084. {
  4085. g.inputText.val(g.getFormatDate(g.usedDate));
  4086. }
  4087. },
  4088. _getMatch: function (format)
  4089. {
  4090. var r = [-1, -1, -1, -1, -1, -1], groupIndex = 0, regStr = "^", str = format || this.options.format;
  4091. while (true)
  4092. {
  4093. var tmp_r = str.match(/^yyyy|MM|dd|mm|hh|HH|ss|-|\/|:|\s/);
  4094. if (tmp_r)
  4095. {
  4096. var c = tmp_r[0].charAt(0);
  4097. var mathLength = tmp_r[0].length;
  4098. var index = 'yMdhms'.indexOf(c);
  4099. if (index != -1)
  4100. {
  4101. r[index] = groupIndex + 1;
  4102. regStr += "(\\d{1," + mathLength + "})";
  4103. } else
  4104. {
  4105. var st = c == ' ' ? '\\s' : c;
  4106. regStr += "(" + st + ")";
  4107. }
  4108. groupIndex++;
  4109. if (mathLength == str.length)
  4110. {
  4111. regStr += "$";
  4112. break;
  4113. }
  4114. str = str.substring(mathLength);
  4115. } else
  4116. {
  4117. return null;
  4118. }
  4119. }
  4120. return { reg: new RegExp(regStr), position: r };
  4121. },
  4122. _bulidDate: function (dateStr)
  4123. {
  4124. var g = this, p = this.options;
  4125. var r = this._getMatch();
  4126. if (!r) return null;
  4127. var t = dateStr.match(r.reg);
  4128. if (!t) return null;
  4129. var tt = {
  4130. y: r.position[0] == -1 ? 1900 : t[r.position[0]],
  4131. M: r.position[1] == -1 ? 0 : parseInt(t[r.position[1]], 10) - 1,
  4132. d: r.position[2] == -1 ? 1 : parseInt(t[r.position[2]], 10),
  4133. h: r.position[3] == -1 ? 0 : parseInt(t[r.position[3]], 10),
  4134. m: r.position[4] == -1 ? 0 : parseInt(t[r.position[4]], 10),
  4135. s: r.position[5] == -1 ? 0 : parseInt(t[r.position[5]], 10)
  4136. };
  4137. if (tt.M < 0 || tt.M > 11 || tt.d < 0 || tt.d > 31) return null;
  4138. var d = new Date(tt.y, tt.M, tt.d);
  4139. if (p.showTime)
  4140. {
  4141. if (tt.m < 0 || tt.m > 59 || tt.h < 0 || tt.h > 23 || tt.s < 0 || tt.s > 59) return null;
  4142. d.setHours(tt.h);
  4143. d.setMinutes(tt.m);
  4144. d.setSeconds(tt.s);
  4145. }
  4146. return d;
  4147. },
  4148. updateStyle: function ()
  4149. {
  4150. this.onTextChange();
  4151. },
  4152. onTextChange: function ()
  4153. {
  4154. var g = this, p = this.options;
  4155. var val = g.inputText.val();
  4156. if (!val)
  4157. {
  4158. g.selectedDate = null;
  4159. return true;
  4160. }
  4161. var newDate = g._bulidDate(val);
  4162. if (!newDate)
  4163. {
  4164. g._rever();
  4165. return;
  4166. }
  4167. else
  4168. {
  4169. g.usedDate = newDate;
  4170. }
  4171. g.selectedDate = {
  4172. year: g.usedDate.getFullYear(),
  4173. month: g.usedDate.getMonth() + 1, //注意这里
  4174. day: g.usedDate.getDay(),
  4175. date: g.usedDate.getDate(),
  4176. hour: g.usedDate.getHours(),
  4177. minute: g.usedDate.getMinutes()
  4178. };
  4179. g.currentDate = {
  4180. year: g.usedDate.getFullYear(),
  4181. month: g.usedDate.getMonth() + 1, //注意这里
  4182. day: g.usedDate.getDay(),
  4183. date: g.usedDate.getDate(),
  4184. hour: g.usedDate.getHours(),
  4185. minute: g.usedDate.getMinutes()
  4186. };
  4187. var formatVal = g.getFormatDate(newDate);
  4188. g.inputText.val(formatVal);
  4189. g.trigger('changeDate', [formatVal]);
  4190. if ($(g.dateeditor).is(":visible"))
  4191. g.bulidContent();
  4192. },
  4193. _setHeight: function (value)
  4194. {
  4195. var g = this;
  4196. if (value > 4)
  4197. {
  4198. g.text.css({ height: value });
  4199. g.inputText.css({ height: value });
  4200. g.textwrapper.css({ height: value });
  4201. }
  4202. },
  4203. _setWidth: function (value)
  4204. {
  4205. var g = this;
  4206. if (value > 20)
  4207. {
  4208. g.text.css({ width: value });
  4209. g.inputText.css({ width: value - 20 });
  4210. g.textwrapper.css({ width: value });
  4211. }
  4212. },
  4213. _setValue: function (value)
  4214. {
  4215. var g = this;
  4216. if (!value) g.inputText.val('');
  4217. if (typeof value == "string")
  4218. {
  4219. if (/^\/Date/.test(value))
  4220. {
  4221. value = value.replace(/^\//, "new ").replace(/\/$/, "");
  4222. eval("value = " + value);
  4223. }
  4224. else
  4225. {
  4226. g.inputText.val(value);
  4227. }
  4228. }
  4229. if (typeof value == "object")
  4230. {
  4231. if (value instanceof Date)
  4232. {
  4233. g.inputText.val(g.getFormatDate(value));
  4234. g.onTextChange();
  4235. }
  4236. }
  4237. },
  4238. _getValue: function ()
  4239. {
  4240. return this.usedDate;
  4241. },
  4242. setEnabled: function ()
  4243. {
  4244. var g = this, p = this.options;
  4245. this.inputText.removeAttr("readonly");
  4246. this.text.removeClass('l-text-disabled');
  4247. p.disabled = false;
  4248. },
  4249. setDisabled: function ()
  4250. {
  4251. var g = this, p = this.options;
  4252. this.inputText.attr("readonly", "readonly");
  4253. this.text.addClass('l-text-disabled');
  4254. p.disabled = true;
  4255. }
  4256. });
  4257. })(jQuery);/**
  4258. * jQuery ligerUI 1.2.4
  4259. *
  4260. * http://ligerui.com
  4261. *
  4262. * Author daomi 2014 [ gd_star@163.com ]
  4263. *
  4264. */
  4265. (function ($)
  4266. {
  4267. var l = $.ligerui;
  4268. //全局事件
  4269. $(".l-dialog-btn").live('mouseover', function ()
  4270. {
  4271. $(this).addClass("l-dialog-btn-over");
  4272. }).live('mouseout', function ()
  4273. {
  4274. $(this).removeClass("l-dialog-btn-over");
  4275. });
  4276. $(".l-dialog-tc .l-dialog-close").live('mouseover', function ()
  4277. {
  4278. $(this).addClass("l-dialog-close-over");
  4279. }).live('mouseout', function ()
  4280. {
  4281. $(this).removeClass("l-dialog-close-over");
  4282. });
  4283. $.ligerDialog = function ()
  4284. {
  4285. return l.run.call(null, "ligerDialog", arguments, { isStatic: true });
  4286. };
  4287. //dialog 图片文件夹的路径 预加载
  4288. $.ligerui.DialogImagePath = "../../lib/ligerUI/skins/Aqua/images/win/";
  4289. function prevImage(paths)
  4290. {
  4291. for (var i in paths)
  4292. {
  4293. $('<img />').attr('src', l.DialogImagePath + paths[i]);
  4294. }
  4295. }
  4296. //prevImage(['dialog.gif', 'dialog-winbtns.gif', 'dialog-bc.gif', 'dialog-tc.gif']);
  4297. $.ligerDefaults.Dialog = {
  4298. cls: null, //给dialog附加css class
  4299. id: null, //给dialog附加id
  4300. buttons: null, //按钮集合
  4301. isDrag: true, //是否拖动
  4302. width: 280, //宽度
  4303. height: null, //高度,默认自适应
  4304. content: '', //内容
  4305. target: null, //目标对象,指定它将以appendTo()的方式载入
  4306. url: null, //目标页url,默认以iframe的方式载入
  4307. load: false, //是否以load()的方式加载目标页的内容
  4308. type: 'none', //类型 warn、success、error、question
  4309. left: null, //位置left
  4310. top: null, //位置top
  4311. modal: true, //是否模态对话框
  4312. data: null, //传递数据容器
  4313. name: null, //创建iframe时 作为iframe的name和id
  4314. isResize: false, // 是否调整大小
  4315. allowClose: true, //允许关闭
  4316. opener: null,
  4317. timeParmName: null, //是否给URL后面加上值为new Date().getTime()的参数,如果需要指定一个参数名即可
  4318. closeWhenEnter: null, //回车时是否关闭dialog
  4319. isHidden: true, //关闭对话框时是否只是隐藏,还是销毁对话框
  4320. show: true, //初始化时是否马上显示
  4321. title: '提示', //头部
  4322. showMax: false, //是否显示最大化按钮
  4323. showToggle: false, //是否显示收缩窗口按钮
  4324. showMin: false, //是否显示最小化按钮
  4325. slide: $.browser.msie ? false : true, //是否以动画的形式显示
  4326. fixedType: null, //在固定的位置显示, 可以设置的值有n, e, s, w, ne, se, sw, nw
  4327. showType: null, //显示类型,可以设置为slide(固定显示时有效)
  4328. onLoaded: null,
  4329. onExtend: null,
  4330. onExtended: null,
  4331. onCollapse: null,
  4332. onCollapseed: null,
  4333. onContentHeightChange: null,
  4334. onClose: null,
  4335. onClosed: null,
  4336. onStopResize: null
  4337. };
  4338. $.ligerDefaults.DialogString = {
  4339. titleMessage: '提示', //提示文本标题
  4340. ok: '确定',
  4341. yes: '是',
  4342. no: '否',
  4343. cancel: '取消',
  4344. waittingMessage: '正在等待中,请稍候...'
  4345. };
  4346. $.ligerMethos.Dialog = $.ligerMethos.Dialog || {};
  4347. l.controls.Dialog = function (options)
  4348. {
  4349. l.controls.Dialog.base.constructor.call(this, null, options);
  4350. };
  4351. l.controls.Dialog.ligerExtend(l.core.Win, {
  4352. __getType: function ()
  4353. {
  4354. return 'Dialog';
  4355. },
  4356. __idPrev: function ()
  4357. {
  4358. return 'Dialog';
  4359. },
  4360. _extendMethods: function ()
  4361. {
  4362. return $.ligerMethos.Dialog;
  4363. },
  4364. _render: function ()
  4365. {
  4366. var g = this, p = this.options;
  4367. var tmpId = "";
  4368. g.set(p, true);
  4369. var dialog = $('<div class="l-dialog"><table class="l-dialog-table" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="l-dialog-tl"></td><td class="l-dialog-tc"><div class="l-dialog-tc-inner"><div class="l-dialog-icon"></div><div class="l-dialog-title"></div><div class="l-dialog-winbtns"><div class="l-dialog-winbtn l-dialog-close"></div></div></div></td><td class="l-dialog-tr"></td></tr><tr><td class="l-dialog-cl"></td><td class="l-dialog-cc"><div class="l-dialog-body"><div class="l-dialog-image"></div> <div class="l-dialog-content"></div><div class="l-dialog-buttons"><div class="l-dialog-buttons-inner"></div></td><td class="l-dialog-cr"></td></tr><tr><td class="l-dialog-bl"></td><td class="l-dialog-bc"></td><td class="l-dialog-br"></td></tr></tbody></table></div>');
  4370. $('body').append(dialog);
  4371. g.dialog = dialog;
  4372. g.element = dialog[0];
  4373. g.dialog.body = $(".l-dialog-body:first", g.dialog);
  4374. g.dialog.header = $(".l-dialog-tc-inner:first", g.dialog);
  4375. g.dialog.winbtns = $(".l-dialog-winbtns:first", g.dialog.header);
  4376. g.dialog.buttons = $(".l-dialog-buttons:first", g.dialog);
  4377. g.dialog.content = $(".l-dialog-content:first", g.dialog);
  4378. g.set(p, false);
  4379. if (p.allowClose == false) $(".l-dialog-close", g.dialog).remove();
  4380. if (p.target || p.url || p.type == "none")
  4381. {
  4382. p.type = null;
  4383. g.dialog.addClass("l-dialog-win");
  4384. }
  4385. if (p.cls) g.dialog.addClass(p.cls);
  4386. if (p.id) g.dialog.attr("id", p.id);
  4387. //设置锁定屏幕、拖动支持 和设置图片
  4388. g.mask();
  4389. if (p.isDrag)
  4390. g._applyDrag();
  4391. if (p.isResize)
  4392. g._applyResize();
  4393. if (p.type)
  4394. g._setImage();
  4395. else
  4396. {
  4397. $(".l-dialog-image", g.dialog).remove();
  4398. g.dialog.content.addClass("l-dialog-content-noimage");
  4399. }
  4400. if (!p.show)
  4401. {
  4402. g.unmask();
  4403. g.dialog.hide();
  4404. }
  4405. //设置主体内容
  4406. if (p.target)
  4407. {
  4408. g.dialog.content.prepend(p.target);
  4409. $(p.target).show();
  4410. }
  4411. else if (p.url)
  4412. {
  4413. if (p.timeParmName)
  4414. {
  4415. p.url += p.url.indexOf('?') == -1 ? "?" : "&";
  4416. p.url += p.timeParmName + "=" + new Date().getTime();
  4417. }
  4418. if (p.load)
  4419. {
  4420. g.dialog.body.load(p.url, function ()
  4421. {
  4422. g._saveStatus();
  4423. g.trigger('loaded');
  4424. });
  4425. }
  4426. else
  4427. {
  4428. g.jiframe = $("<iframe frameborder='0'></iframe>");
  4429. var framename = p.name ? p.name : "ligerwindow" + new Date().getTime();
  4430. g.jiframe.attr("name", framename);
  4431. g.jiframe.attr("id", framename);
  4432. g.dialog.content.prepend(g.jiframe);
  4433. g.dialog.content.addClass("l-dialog-content-nopadding l-dialog-content-frame");
  4434. setTimeout(function ()
  4435. {
  4436. if (g.dialog.body.find(".l-dialog-loading:first").length == 0)
  4437. g.dialog.body.append("<div class='l-dialog-loading' style='display:block;'></div>");
  4438. var iframeloading = $(".l-dialog-loading:first", g.dialog.body);
  4439. g.jiframe[0].dialog = g;//增加窗口对dialog对象的引用
  4440. /*
  4441. 可以在子窗口这样使用:
  4442. var dialog = frameElement.dialog;
  4443. var dialogData = dialog.get('data');//获取data参数
  4444. dialog.set('title','新标题'); //设置标题
  4445. dialog.close();//关闭dialog
  4446. */
  4447. g.jiframe.attr("src", p.url).bind('load.dialog', function ()
  4448. {
  4449. iframeloading.hide();
  4450. g.trigger('loaded');
  4451. });
  4452. g.frame = window.frames[g.jiframe.attr("name")];
  4453. }, 0);
  4454. // 为了解决ie下对含有iframe的div窗口销毁不正确,进而导致第二次打开时焦点不在当前图层的问题
  4455. // 加入以下代码
  4456. tmpId = 'jquery_ligerui_' + new Date().getTime();
  4457. g.tmpInput = $("<input></input>");
  4458. g.tmpInput.attr("id", tmpId);
  4459. g.dialog.content.prepend(g.tmpInput);
  4460. }
  4461. }
  4462. if (p.opener) g.dialog.opener = p.opener;
  4463. //设置按钮
  4464. if (p.buttons)
  4465. {
  4466. $(p.buttons).each(function (i, item)
  4467. {
  4468. var btn = $('<div class="l-dialog-btn"><div class="l-dialog-btn-l"></div><div class="l-dialog-btn-r"></div><div class="l-dialog-btn-inner"></div></div>');
  4469. $(".l-dialog-btn-inner", btn).html(item.text);
  4470. $(".l-dialog-buttons-inner", g.dialog.buttons).prepend(btn);
  4471. item.width && btn.width(item.width);
  4472. item.onclick && btn.click(function () { item.onclick(item, g, i) });
  4473. item.cls && btn.addClass(item.cls);
  4474. });
  4475. } else
  4476. {
  4477. g.dialog.buttons.remove();
  4478. }
  4479. $(".l-dialog-buttons-inner", g.dialog.buttons).append("<div class='l-clear'></div>");
  4480. $(".l-dialog-title", g.dialog)
  4481. .bind("selectstart", function () { return false; });
  4482. g.dialog.click(function ()
  4483. {
  4484. l.win.setFront(g);
  4485. });
  4486. //设置事件
  4487. $(".l-dialog-tc .l-dialog-close", g.dialog).click(function ()
  4488. {
  4489. if (p.isHidden)
  4490. g.hide();
  4491. else
  4492. g.close();
  4493. });
  4494. if (!p.fixedType)
  4495. {
  4496. if (p.width == 'auto')
  4497. {
  4498. setTimeout(function ()
  4499. {
  4500. resetPos()
  4501. }, 100);
  4502. } else
  4503. {
  4504. resetPos();
  4505. }
  4506. }
  4507. function resetPos()
  4508. {
  4509. //位置初始化
  4510. var left = 0;
  4511. var top = 0;
  4512. var width = p.width || g.dialog.width();
  4513. if (p.slide == true) p.slide = 'fast';
  4514. if (p.left != null) left = p.left;
  4515. else p.left = left = 0.5 * ($(window).width() - width);
  4516. if (p.top != null) top = p.top;
  4517. else p.top = top = 0.5 * ($(window).height() - g.dialog.height()) + $(window).scrollTop() - 10;
  4518. if (left < 0) p.left = left = 0;
  4519. if (top < 0) p.top = top = 0;
  4520. g.dialog.css({ left: left, top: top });
  4521. }
  4522. g.show();
  4523. $('body').bind('keydown.dialog', function (e)
  4524. {
  4525. var key = e.which;
  4526. if (key == 13)
  4527. {
  4528. g.enter();
  4529. }
  4530. else if (key == 27)
  4531. {
  4532. g.esc();
  4533. }
  4534. });
  4535. g._updateBtnsWidth();
  4536. g._saveStatus();
  4537. g._onReisze();
  4538. if (tmpId != "")
  4539. {
  4540. $("#" + tmpId).focus();
  4541. $("#" + tmpId).remove();
  4542. }
  4543. },
  4544. _borderX: 12,
  4545. _borderY: 32,
  4546. doMax: function (slide)
  4547. {
  4548. var g = this, p = this.options;
  4549. var width = $(window).width(), height = $(window).height(), left = 0, top = 0;
  4550. if (l.win.taskbar)
  4551. {
  4552. height -= l.win.taskbar.outerHeight();
  4553. if (l.win.top) top += l.win.taskbar.outerHeight();
  4554. }
  4555. if (slide)
  4556. {
  4557. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  4558. g.dialog.animate({ left: left, top: top }, p.slide);
  4559. g.dialog.content.animate({ height: height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  4560. {
  4561. g._onReisze();
  4562. });
  4563. }
  4564. else
  4565. {
  4566. g.set({ width: width, height: height, left: left, top: top });
  4567. g._onReisze();
  4568. }
  4569. },
  4570. //最大化
  4571. max: function ()
  4572. {
  4573. var g = this, p = this.options;
  4574. if (g.winmax)
  4575. {
  4576. g.winmax.addClass("l-dialog-recover");
  4577. g.doMax(p.slide);
  4578. if (g.wintoggle)
  4579. {
  4580. if (g.wintoggle.hasClass("l-dialog-extend"))
  4581. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-extend-disabled");
  4582. else
  4583. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-collapse-disabled");
  4584. }
  4585. if (g.resizable) g.resizable.set({ disabled: true });
  4586. if (g.draggable) g.draggable.set({ disabled: true });
  4587. g.maximum = true;
  4588. $(window).bind('resize.dialogmax', function ()
  4589. {
  4590. g.doMax(false);
  4591. });
  4592. }
  4593. },
  4594. //恢复
  4595. recover: function ()
  4596. {
  4597. var g = this, p = this.options;
  4598. if (g.winmax)
  4599. {
  4600. g.winmax.removeClass("l-dialog-recover");
  4601. if (p.slide)
  4602. {
  4603. g.dialog.body.animate({ width: g._width - g._borderX }, p.slide);
  4604. g.dialog.animate({ left: g._left, top: g._top }, p.slide);
  4605. g.dialog.content.animate({ height: g._height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  4606. {
  4607. g._onReisze();
  4608. });
  4609. }
  4610. else
  4611. {
  4612. g.set({ width: g._width, height: g._height, left: g._left, top: g._top });
  4613. g._onReisze();
  4614. }
  4615. if (g.wintoggle)
  4616. {
  4617. g.wintoggle.removeClass("l-dialog-toggle-disabled l-dialog-extend-disabled l-dialog-collapse-disabled");
  4618. }
  4619. $(window).unbind('resize.dialogmax');
  4620. }
  4621. if (this.resizable) this.resizable.set({ disabled: false });
  4622. if (g.draggable) g.draggable.set({ disabled: false });
  4623. g.maximum = false;
  4624. },
  4625. //最小化
  4626. min: function ()
  4627. {
  4628. var g = this, p = this.options;
  4629. var task = l.win.getTask(this);
  4630. if (p.slide)
  4631. {
  4632. g.dialog.body.animate({ width: 1 }, p.slide);
  4633. task.y = task.offset().top + task.height();
  4634. task.x = task.offset().left + task.width() / 2;
  4635. g.dialog.animate({ left: task.x, top: task.y }, p.slide, function ()
  4636. {
  4637. g.dialog.hide();
  4638. });
  4639. }
  4640. else
  4641. {
  4642. g.dialog.hide();
  4643. }
  4644. g.unmask();
  4645. g.minimize = true;
  4646. g.actived = false;
  4647. },
  4648. active: function ()
  4649. {
  4650. var g = this, p = this.options;
  4651. if (g.minimize)
  4652. {
  4653. var width = g._width, height = g._height, left = g._left, top = g._top;
  4654. if (g.maximum)
  4655. {
  4656. width = $(window).width();
  4657. height = $(window).height();
  4658. left = top = 0;
  4659. if (l.win.taskbar)
  4660. {
  4661. height -= l.win.taskbar.outerHeight();
  4662. if (l.win.top) top += l.win.taskbar.outerHeight();
  4663. }
  4664. }
  4665. if (p.slide)
  4666. {
  4667. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  4668. g.dialog.animate({ left: left, top: top }, p.slide);
  4669. }
  4670. else
  4671. {
  4672. g.set({ width: width, height: height, left: left, top: top });
  4673. }
  4674. }
  4675. g.actived = true;
  4676. g.minimize = false;
  4677. l.win.setFront(g);
  4678. g.show();
  4679. },
  4680. //展开 收缩
  4681. toggle: function ()
  4682. {
  4683. var g = this, p = this.options;
  4684. if (!g.wintoggle) return;
  4685. if (g.wintoggle.hasClass("l-dialog-extend"))
  4686. g.extend();
  4687. else
  4688. g.collapse();
  4689. },
  4690. //收缩
  4691. collapse: function ()
  4692. {
  4693. var g = this, p = this.options;
  4694. if (!g.wintoggle) return;
  4695. if (p.slide)
  4696. g.dialog.content.animate({ height: 1 }, p.slide);
  4697. else
  4698. g.dialog.content.height(1);
  4699. if (this.resizable) this.resizable.set({ disabled: true });
  4700. },
  4701. //展开
  4702. extend: function ()
  4703. {
  4704. var g = this, p = this.options;
  4705. if (!g.wintoggle) return;
  4706. var contentHeight = g._height - g._borderY - g.dialog.buttons.outerHeight();
  4707. if (p.slide)
  4708. g.dialog.content.animate({ height: contentHeight }, p.slide);
  4709. else
  4710. g.dialog.content.height(contentHeight);
  4711. if (this.resizable) this.resizable.set({ disabled: false });
  4712. },
  4713. _updateBtnsWidth: function ()
  4714. {
  4715. var g = this;
  4716. var btnscount = $(">div", g.dialog.winbtns).length;
  4717. g.dialog.winbtns.width(22 * btnscount);
  4718. },
  4719. _setLeft: function (value)
  4720. {
  4721. if (!this.dialog) return;
  4722. if (value != null)
  4723. this.dialog.css({ left: value });
  4724. },
  4725. _setTop: function (value)
  4726. {
  4727. if (!this.dialog) return;
  4728. if (value != null)
  4729. this.dialog.css({ top: value });
  4730. },
  4731. _setWidth: function (value)
  4732. {
  4733. if (!this.dialog) return;
  4734. if (value >= this._borderX)
  4735. {
  4736. this.dialog.body.width(value - this._borderX);
  4737. }
  4738. },
  4739. _setHeight: function (value)
  4740. {
  4741. var g = this, p = this.options;
  4742. if (!this.dialog) return;
  4743. if (value == "auto")
  4744. {
  4745. g.dialog.content.height('auto');
  4746. }else if (value >= this._borderY)
  4747. {
  4748. var height = value - this._borderY - g.dialog.buttons.outerHeight();
  4749. if (g.trigger('ContentHeightChange', [height]) == false) return;
  4750. g.dialog.content.height(height);
  4751. g.trigger('ContentHeightChanged', [height]);
  4752. }
  4753. },
  4754. _setShowMax: function (value)
  4755. {
  4756. var g = this, p = this.options;
  4757. if (value)
  4758. {
  4759. if (!g.winmax)
  4760. {
  4761. g.winmax = $('<div class="l-dialog-winbtn l-dialog-max"></div>').appendTo(g.dialog.winbtns)
  4762. .hover(function ()
  4763. {
  4764. if ($(this).hasClass("l-dialog-recover"))
  4765. $(this).addClass("l-dialog-recover-over");
  4766. else
  4767. $(this).addClass("l-dialog-max-over");
  4768. }, function ()
  4769. {
  4770. $(this).removeClass("l-dialog-max-over l-dialog-recover-over");
  4771. }).click(function ()
  4772. {
  4773. if ($(this).hasClass("l-dialog-recover"))
  4774. g.recover();
  4775. else
  4776. g.max();
  4777. });
  4778. }
  4779. }
  4780. else if (g.winmax)
  4781. {
  4782. g.winmax.remove();
  4783. g.winmax = null;
  4784. }
  4785. g._updateBtnsWidth();
  4786. },
  4787. _setShowMin: function (value)
  4788. {
  4789. var g = this, p = this.options;
  4790. if (value)
  4791. {
  4792. if (!g.winmin)
  4793. {
  4794. g.winmin = $('<div class="l-dialog-winbtn l-dialog-min"></div>').appendTo(g.dialog.winbtns)
  4795. .hover(function ()
  4796. {
  4797. $(this).addClass("l-dialog-min-over");
  4798. }, function ()
  4799. {
  4800. $(this).removeClass("l-dialog-min-over");
  4801. }).click(function ()
  4802. {
  4803. g.min();
  4804. });
  4805. l.win.addTask(g);
  4806. }
  4807. }
  4808. else if (g.winmin)
  4809. {
  4810. g.winmin.remove();
  4811. g.winmin = null;
  4812. }
  4813. g._updateBtnsWidth();
  4814. },
  4815. _setShowToggle: function (value)
  4816. {
  4817. var g = this, p = this.options;
  4818. if (value)
  4819. {
  4820. if (!g.wintoggle)
  4821. {
  4822. g.wintoggle = $('<div class="l-dialog-winbtn l-dialog-collapse"></div>').appendTo(g.dialog.winbtns)
  4823. .hover(function ()
  4824. {
  4825. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  4826. if ($(this).hasClass("l-dialog-extend"))
  4827. $(this).addClass("l-dialog-extend-over");
  4828. else
  4829. $(this).addClass("l-dialog-collapse-over");
  4830. }, function ()
  4831. {
  4832. $(this).removeClass("l-dialog-extend-over l-dialog-collapse-over");
  4833. }).click(function ()
  4834. {
  4835. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  4836. if (g.wintoggle.hasClass("l-dialog-extend"))
  4837. {
  4838. if (g.trigger('extend') == false) return;
  4839. g.wintoggle.removeClass("l-dialog-extend");
  4840. g.extend();
  4841. g.trigger('extended');
  4842. }
  4843. else
  4844. {
  4845. if (g.trigger('collapse') == false) return;
  4846. g.wintoggle.addClass("l-dialog-extend");
  4847. g.collapse();
  4848. g.trigger('collapseed')
  4849. }
  4850. });
  4851. }
  4852. }
  4853. else if (g.wintoggle)
  4854. {
  4855. g.wintoggle.remove();
  4856. g.wintoggle = null;
  4857. }
  4858. },
  4859. //按下回车
  4860. enter: function ()
  4861. {
  4862. var g = this, p = this.options;
  4863. var isClose;
  4864. if (p.closeWhenEnter != undefined)
  4865. {
  4866. isClose = p.closeWhenEnter;
  4867. }
  4868. else if (p.type == "warn" || p.type == "error" || p.type == "success" || p.type == "question")
  4869. {
  4870. isClose = true;
  4871. }
  4872. if (isClose)
  4873. {
  4874. g.close();
  4875. }
  4876. },
  4877. esc: function ()
  4878. {
  4879. },
  4880. _removeDialog: function ()
  4881. {
  4882. var g = this, p = this.options;
  4883. if (p.showType && p.fixedType)
  4884. {
  4885. g.dialog.animate({ bottom: -1 * p.height }, function ()
  4886. {
  4887. remove();
  4888. });
  4889. }
  4890. else
  4891. {
  4892. remove();
  4893. }
  4894. function remove()
  4895. {
  4896. var jframe = $('iframe', g.dialog);
  4897. if (jframe.length)
  4898. {
  4899. var frame = jframe[0];
  4900. frame.src = "about:blank";
  4901. if (frame.contentWindow && frame.contentWindow.document)
  4902. {
  4903. frame.contentWindow.document.write('');
  4904. }
  4905. $.browser.msie && CollectGarbage();
  4906. jframe.remove();
  4907. }
  4908. g.dialog.remove();
  4909. }
  4910. },
  4911. close: function ()
  4912. {
  4913. var g = this, p = this.options;
  4914. if (g.trigger('Close') == false) return;
  4915. g.doClose();
  4916. if (g.trigger('Closed') == false) return;
  4917. },
  4918. doClose: function ()
  4919. {
  4920. var g = this;
  4921. l.win.removeTask(this);
  4922. $.ligerui.remove(this);
  4923. g.unmask();
  4924. g._removeDialog();
  4925. $('body').unbind('keydown.dialog');
  4926. },
  4927. _getVisible: function ()
  4928. {
  4929. return this.dialog.is(":visible");
  4930. },
  4931. _setUrl: function (url)
  4932. {
  4933. var g = this, p = this.options;
  4934. p.url = url;
  4935. if (p.load)
  4936. {
  4937. g.dialog.body.html("").load(p.url, function ()
  4938. {
  4939. g.trigger('loaded');
  4940. });
  4941. }
  4942. else if (g.jiframe)
  4943. {
  4944. g.jiframe.attr("src", p.url);
  4945. }
  4946. },
  4947. _setContent: function (content)
  4948. {
  4949. this.dialog.content.html(content);
  4950. },
  4951. _setTitle: function (value)
  4952. {
  4953. var g = this; var p = this.options;
  4954. if (value)
  4955. {
  4956. $(".l-dialog-title", g.dialog).html(value);
  4957. }
  4958. },
  4959. _hideDialog: function ()
  4960. {
  4961. var g = this, p = this.options;
  4962. if (p.showType && p.fixedType)
  4963. {
  4964. g.dialog.animate({ bottom: -1 * p.height }, function ()
  4965. {
  4966. g.dialog.hide();
  4967. });
  4968. } else
  4969. {
  4970. g.dialog.hide();
  4971. }
  4972. },
  4973. hidden: function ()
  4974. {
  4975. var g = this;
  4976. l.win.removeTask(g);
  4977. g.dialog.hide();
  4978. g.unmask();
  4979. },
  4980. show: function ()
  4981. {
  4982. var g = this, p = this.options;
  4983. g.mask();
  4984. if (p.fixedType)
  4985. {
  4986. if (p.showType)
  4987. {
  4988. g.dialog.css({ bottom: -1 * p.height }).addClass("l-dialog-fixed");
  4989. g.dialog.show().animate({ bottom: 0 });
  4990. }
  4991. else
  4992. {
  4993. g.dialog.show().css({ bottom: 0 });
  4994. }
  4995. }
  4996. else
  4997. {
  4998. g.dialog.show();
  4999. }
  5000. //前端显示
  5001. $.ligerui.win.setFront.ligerDefer($.ligerui.win, 100, [g]);
  5002. },
  5003. setUrl: function (url)
  5004. {
  5005. this._setUrl(url);
  5006. },
  5007. _saveStatus: function ()
  5008. {
  5009. var g = this;
  5010. g._width = g.dialog.body.width();
  5011. g._height = g.dialog.body.height();
  5012. var top = 0;
  5013. var left = 0;
  5014. if (!isNaN(parseInt(g.dialog.css('top'))))
  5015. top = parseInt(g.dialog.css('top'));
  5016. if (!isNaN(parseInt(g.dialog.css('left'))))
  5017. left = parseInt(g.dialog.css('left'));
  5018. g._top = top;
  5019. g._left = left;
  5020. },
  5021. _applyDrag: function ()
  5022. {
  5023. var g = this, p = this.options;
  5024. if ($.fn.ligerDrag)
  5025. {
  5026. g.draggable = g.dialog.ligerDrag({
  5027. handler: '.l-dialog-title', animate: false,
  5028. onStartDrag: function ()
  5029. {
  5030. l.win.setFront(g);
  5031. var mask = $("<div class='l-dragging-mask' style='display:block'></div>").height(g.dialog.height());
  5032. g.dialog.append(mask);
  5033. g.dialog.content.addClass('l-dialog-content-dragging');
  5034. },
  5035. onDrag: function (current, e)
  5036. {
  5037. var pageY = e.pageY || e.screenY;
  5038. if (pageY < 0) return false;
  5039. },
  5040. onStopDrag: function ()
  5041. {
  5042. g.dialog.find("div.l-dragging-mask:first").remove();
  5043. g.dialog.content.removeClass('l-dialog-content-dragging');
  5044. if (p.target)
  5045. {
  5046. var triggers1 = l.find($.ligerui.controls.DateEditor);
  5047. var triggers2 = l.find($.ligerui.controls.ComboBox);
  5048. //更新所有下拉选择框的位置
  5049. $($.merge(triggers1, triggers2)).each(function ()
  5050. {
  5051. if (this.updateSelectBoxPosition)
  5052. this.updateSelectBoxPosition();
  5053. });
  5054. }
  5055. g._saveStatus();
  5056. }
  5057. });
  5058. }
  5059. },
  5060. _onReisze: function ()
  5061. {
  5062. var g = this, p = this.options;
  5063. if (p.target)
  5064. {
  5065. var manager = $(p.target).liger();
  5066. if (!manager) manager = $(p.target).find(":first").liger();
  5067. if (!manager) return;
  5068. var contentHeight = g.dialog.content.height();
  5069. var contentWidth = g.dialog.content.width();
  5070. manager.trigger('resize', [{ width: contentWidth, height: contentHeight }]);
  5071. }
  5072. },
  5073. _applyResize: function ()
  5074. {
  5075. var g = this, p = this.options;
  5076. if ($.fn.ligerResizable)
  5077. {
  5078. g.resizable = g.dialog.ligerResizable({
  5079. onStopResize: function (current, e)
  5080. {
  5081. var top = 0;
  5082. var left = 0;
  5083. if (!isNaN(parseInt(g.dialog.css('top'))))
  5084. top = parseInt(g.dialog.css('top'));
  5085. if (!isNaN(parseInt(g.dialog.css('left'))))
  5086. left = parseInt(g.dialog.css('left'));
  5087. if (current.diffLeft)
  5088. {
  5089. g.set({ left: left + current.diffLeft });
  5090. }
  5091. if (current.diffTop)
  5092. {
  5093. g.set({ top: top + current.diffTop });
  5094. }
  5095. if (current.newWidth)
  5096. {
  5097. g.set({ width: current.newWidth });
  5098. g.dialog.body.css({ width: current.newWidth - g._borderX });
  5099. }
  5100. if (current.newHeight)
  5101. {
  5102. g.set({ height: current.newHeight });
  5103. }
  5104. g._onReisze();
  5105. g._saveStatus();
  5106. g.trigger('stopResize');
  5107. return false;
  5108. }, animate: false
  5109. });
  5110. }
  5111. },
  5112. _setImage: function ()
  5113. {
  5114. var g = this, p = this.options;
  5115. if (p.type)
  5116. {
  5117. if (p.type == 'success' || p.type == 'donne' || p.type == 'ok')
  5118. {
  5119. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-donne").show();
  5120. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  5121. }
  5122. else if (p.type == 'error')
  5123. {
  5124. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-error").show();
  5125. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  5126. }
  5127. else if (p.type == 'warn')
  5128. {
  5129. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-warn").show();
  5130. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  5131. }
  5132. else if (p.type == 'question')
  5133. {
  5134. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-question").show();
  5135. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 40 });
  5136. }
  5137. }
  5138. }
  5139. });
  5140. l.controls.Dialog.prototype.hide = l.controls.Dialog.prototype.hidden;
  5141. $.ligerDialog.open = function (p)
  5142. {
  5143. return $.ligerDialog(p);
  5144. };
  5145. $.ligerDialog.close = function ()
  5146. {
  5147. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  5148. for (var i in dialogs)
  5149. {
  5150. var d = dialogs[i];
  5151. d.destroy.ligerDefer(d, 5);
  5152. }
  5153. l.win.unmask();
  5154. };
  5155. $.ligerDialog.show = function (p)
  5156. {
  5157. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  5158. if (dialogs.length)
  5159. {
  5160. for (var i in dialogs)
  5161. {
  5162. dialogs[i].show();
  5163. return;
  5164. }
  5165. }
  5166. return $.ligerDialog(p);
  5167. };
  5168. $.ligerDialog.hide = function ()
  5169. {
  5170. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  5171. for (var i in dialogs)
  5172. {
  5173. var d = dialogs[i];
  5174. d.hide();
  5175. }
  5176. };
  5177. $.ligerDialog.tip = function (options)
  5178. {
  5179. options = $.extend({
  5180. showType: 'slide',
  5181. width: 240,
  5182. modal: false,
  5183. height: 100
  5184. }, options || {});
  5185. $.extend(options, {
  5186. fixedType: 'se',
  5187. type: 'none',
  5188. isDrag: false,
  5189. isResize: false,
  5190. showMax: false,
  5191. showToggle: false,
  5192. showMin: false
  5193. });
  5194. return $.ligerDialog.open(options);
  5195. };
  5196. $.ligerDialog.alert = function (content, title, type, callback)
  5197. {
  5198. content = content || "";
  5199. if (typeof (title) == "function")
  5200. {
  5201. callback = title;
  5202. type = null;
  5203. }
  5204. else if (typeof (type) == "function")
  5205. {
  5206. callback = type;
  5207. }
  5208. var btnclick = function (item, Dialog, index)
  5209. {
  5210. Dialog.close();
  5211. if (callback)
  5212. callback(item, Dialog, index);
  5213. };
  5214. p = {
  5215. content: content,
  5216. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick }]
  5217. };
  5218. if (typeof (title) == "string" && title != "") p.title = title;
  5219. if (typeof (type) == "string" && type != "") p.type = type;
  5220. $.extend(p, {
  5221. showMax: false,
  5222. showToggle: false,
  5223. showMin: false
  5224. });
  5225. return $.ligerDialog(p);
  5226. };
  5227. $.ligerDialog.confirm = function (content, title, callback)
  5228. {
  5229. if (typeof (title) == "function")
  5230. {
  5231. callback = title;
  5232. type = null;
  5233. }
  5234. var btnclick = function (item, Dialog)
  5235. {
  5236. Dialog.close();
  5237. if (callback)
  5238. {
  5239. callback(item.type == 'ok');
  5240. }
  5241. };
  5242. p = {
  5243. type: 'question',
  5244. content: content,
  5245. buttons: [{ text: $.ligerDefaults.DialogString.yes, onclick: btnclick, type: 'ok' }, { text: $.ligerDefaults.DialogString.no, onclick: btnclick, type: 'no' }]
  5246. };
  5247. if (typeof (title) == "string" && title != "") p.title = title;
  5248. $.extend(p, {
  5249. showMax: false,
  5250. showToggle: false,
  5251. showMin: false
  5252. });
  5253. return $.ligerDialog(p);
  5254. };
  5255. $.ligerDialog.warning = function (content, title, callback)
  5256. {
  5257. if (typeof (title) == "function")
  5258. {
  5259. callback = title;
  5260. type = null;
  5261. }
  5262. var btnclick = function (item, Dialog)
  5263. {
  5264. Dialog.close();
  5265. if (callback)
  5266. {
  5267. callback(item.type);
  5268. }
  5269. };
  5270. p = {
  5271. type: 'question',
  5272. content: content,
  5273. buttons: [{ text: $.ligerDefaults.DialogString.yes, onclick: btnclick, type: 'yes' }, { text: $.ligerDefaults.DialogString.no, onclick: btnclick, type: 'no' }, { text: $.ligerDefaults.DialogString.cancel, onclick: btnclick, type: 'cancel' }]
  5274. };
  5275. if (typeof (title) == "string" && title != "") p.title = title;
  5276. $.extend(p, {
  5277. showMax: false,
  5278. showToggle: false,
  5279. showMin: false
  5280. });
  5281. return $.ligerDialog(p);
  5282. };
  5283. $.ligerDialog.waitting = function (title)
  5284. {
  5285. title = title || $.ligerDefaults.Dialog.waittingMessage;
  5286. return $.ligerDialog.open({ cls: 'l-dialog-waittingdialog', type: 'none', content: '<div style="padding:4px">' + title + '</div>', allowClose: false });
  5287. };
  5288. $.ligerDialog.closeWaitting = function ()
  5289. {
  5290. var dialogs = l.find(l.controls.Dialog);
  5291. for (var i in dialogs)
  5292. {
  5293. var d = dialogs[i];
  5294. if (d.dialog.hasClass("l-dialog-waittingdialog"))
  5295. d.close();
  5296. }
  5297. };
  5298. $.ligerDialog.success = function (content, title, onBtnClick)
  5299. {
  5300. return $.ligerDialog.alert(content, title, 'success', onBtnClick);
  5301. };
  5302. $.ligerDialog.error = function (content, title, onBtnClick)
  5303. {
  5304. return $.ligerDialog.alert(content, title, 'error', onBtnClick);
  5305. };
  5306. $.ligerDialog.warn = function (content, title, onBtnClick)
  5307. {
  5308. return $.ligerDialog.alert(content, title, 'warn', onBtnClick);
  5309. };
  5310. $.ligerDialog.question = function (content, title)
  5311. {
  5312. return $.ligerDialog.alert(content, title, 'question');
  5313. };
  5314. $.ligerDialog.prompt = function (title, value, multi, callback)
  5315. {
  5316. var target = $('<input type="text" class="l-dialog-inputtext"/>');
  5317. if (typeof (multi) == "function")
  5318. {
  5319. callback = multi;
  5320. }
  5321. if (typeof (value) == "function")
  5322. {
  5323. callback = value;
  5324. }
  5325. else if (typeof (value) == "boolean")
  5326. {
  5327. multi = value;
  5328. }
  5329. if (typeof (multi) == "boolean" && multi)
  5330. {
  5331. target = $('<textarea class="l-dialog-textarea"></textarea>');
  5332. }
  5333. if (typeof (value) == "string" || typeof (value) == "int")
  5334. {
  5335. target.val(value);
  5336. }
  5337. var btnclick = function (item, Dialog, index)
  5338. {
  5339. Dialog.close();
  5340. if (callback)
  5341. {
  5342. callback(item.type == 'yes', target.val());
  5343. }
  5344. }
  5345. p = {
  5346. title: title,
  5347. target: target,
  5348. width: 320,
  5349. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick, type: 'yes' }, { text: $.ligerDefaults.DialogString.cancel, onclick: btnclick, type: 'cancel' }]
  5350. };
  5351. return $.ligerDialog(p);
  5352. };
  5353. })(jQuery);/**
  5354. * jQuery ligerUI 1.2.4
  5355. *
  5356. * http://ligerui.com
  5357. *
  5358. * Author daomi 2014 [ gd_star@163.com ]
  5359. *
  5360. */
  5361. (function ($)
  5362. {
  5363. var l = $.ligerui;
  5364. $.fn.ligerDrag = function (options)
  5365. {
  5366. return l.run.call(this, "ligerDrag", arguments,
  5367. {
  5368. idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
  5369. }
  5370. );
  5371. };
  5372. $.fn.ligerGetDragManager = function ()
  5373. {
  5374. return l.run.call(this, "ligerGetDragManager", arguments,
  5375. {
  5376. idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
  5377. });
  5378. };
  5379. $.ligerDefaults.Drag = {
  5380. onStartDrag: false,
  5381. onDrag: false,
  5382. onStopDrag: false,
  5383. handler: null,
  5384. //代理 拖动时的主体,可以是'clone'或者是函数,放回jQuery 对象
  5385. proxy: true,
  5386. revert: false,
  5387. animate: true,
  5388. onRevert: null,
  5389. onEndRevert: null,
  5390. //接收区域 jQuery对象或者jQuery选择字符
  5391. receive: null,
  5392. //进入区域
  5393. onDragEnter: null,
  5394. //在区域移动
  5395. onDragOver: null,
  5396. //离开区域
  5397. onDragLeave: null,
  5398. //在区域释放
  5399. onDrop: null,
  5400. disabled: false,
  5401. proxyX: null, //代理相对鼠标指针的位置,如果不设置则对应target的left
  5402. proxyY: null
  5403. };
  5404. l.controls.Drag = function (options)
  5405. {
  5406. l.controls.Drag.base.constructor.call(this, null, options);
  5407. };
  5408. l.controls.Drag.ligerExtend(l.core.UIComponent, {
  5409. __getType: function ()
  5410. {
  5411. return 'Drag';
  5412. },
  5413. __idPrev: function ()
  5414. {
  5415. return 'Drag';
  5416. },
  5417. _render: function ()
  5418. {
  5419. var g = this, p = this.options;
  5420. this.set(p);
  5421. g.cursor = "move";
  5422. g.handler.css('cursor', g.cursor);
  5423. g.handler.bind('mousedown.drag', function (e)
  5424. {
  5425. if (p.disabled) return;
  5426. if (e.button == 2) return;
  5427. g._start.call(g, e);
  5428. }).bind('mousemove.drag', function ()
  5429. {
  5430. if (p.disabled) return;
  5431. g.handler.css('cursor', g.cursor);
  5432. });
  5433. },
  5434. _rendered: function ()
  5435. {
  5436. this.options.target.ligeruidragid = this.id;
  5437. },
  5438. _start: function (e)
  5439. {
  5440. var g = this, p = this.options;
  5441. if (g.reverting) return;
  5442. if (p.disabled) return;
  5443. g.current = {
  5444. target: g.target,
  5445. left: g.target.offset().left,
  5446. top: g.target.offset().top,
  5447. startX: e.pageX || e.screenX,
  5448. startY: e.pageY || e.clientY
  5449. };
  5450. if (g.trigger('startDrag', [g.current, e]) == false) return false;
  5451. g.cursor = "move";
  5452. g._createProxy(p.proxy, e);
  5453. //代理没有创建成功
  5454. if (p.proxy && !g.proxy) return false;
  5455. (g.proxy || g.handler).css('cursor', g.cursor);
  5456. $(document).bind("selectstart.drag", function () { return false; });
  5457. $(document).bind('mousemove.drag', function ()
  5458. {
  5459. g._drag.apply(g, arguments);
  5460. });
  5461. l.draggable.dragging = true;
  5462. $(document).bind('mouseup.drag', function ()
  5463. {
  5464. l.draggable.dragging = false;
  5465. g._stop.apply(g, arguments);
  5466. });
  5467. },
  5468. _drag: function (e)
  5469. {
  5470. var g = this, p = this.options;
  5471. if (!g.current) return;
  5472. var pageX = e.pageX || e.screenX;
  5473. var pageY = e.pageY || e.screenY;
  5474. g.current.diffX = pageX - g.current.startX;
  5475. g.current.diffY = pageY - g.current.startY;
  5476. (g.proxy || g.handler).css('cursor', g.cursor);
  5477. if (g.receive)
  5478. {
  5479. g.receive.each(function (i, obj)
  5480. {
  5481. var receive = $(obj);
  5482. var xy = receive.offset();
  5483. if (pageX > xy.left && pageX < xy.left + receive.width()
  5484. && pageY > xy.top && pageY < xy.top + receive.height())
  5485. {
  5486. if (!g.receiveEntered[i])
  5487. {
  5488. g.receiveEntered[i] = true;
  5489. g.trigger('dragEnter', [obj, g.proxy || g.target, e]);
  5490. }
  5491. else
  5492. {
  5493. g.trigger('dragOver', [obj, g.proxy || g.target, e]);
  5494. }
  5495. }
  5496. else if (g.receiveEntered[i])
  5497. {
  5498. g.receiveEntered[i] = false;
  5499. g.trigger('dragLeave', [obj, g.proxy || g.target, e]);
  5500. }
  5501. });
  5502. }
  5503. if (g.hasBind('drag'))
  5504. {
  5505. if (g.trigger('drag', [g.current, e]) != false)
  5506. {
  5507. g._applyDrag();
  5508. }
  5509. else
  5510. {
  5511. if (g.proxy)
  5512. {
  5513. g._removeProxy();
  5514. } else
  5515. {
  5516. g._stop();
  5517. }
  5518. }
  5519. }
  5520. else
  5521. {
  5522. g._applyDrag();
  5523. }
  5524. },
  5525. _stop: function (e)
  5526. {
  5527. var g = this, p = this.options;
  5528. $(document).unbind('mousemove.drag');
  5529. $(document).unbind('mouseup.drag');
  5530. $(document).unbind("selectstart.drag");
  5531. if (g.receive)
  5532. {
  5533. g.receive.each(function (i, obj)
  5534. {
  5535. if (g.receiveEntered[i])
  5536. {
  5537. g.trigger('drop', [obj, g.proxy || g.target, e]);
  5538. }
  5539. });
  5540. }
  5541. if (g.proxy)
  5542. {
  5543. if (p.revert)
  5544. {
  5545. if (g.hasBind('revert'))
  5546. {
  5547. if (g.trigger('revert', [g.current, e]) != false)
  5548. g._revert(e);
  5549. else
  5550. g._removeProxy();
  5551. }
  5552. else
  5553. {
  5554. g._revert(e);
  5555. }
  5556. }
  5557. else
  5558. {
  5559. g._applyDrag(g.target);
  5560. g._removeProxy();
  5561. }
  5562. }
  5563. g.cursor = 'move';
  5564. g.trigger('stopDrag', [g.current, e]);
  5565. g.current = null;
  5566. g.handler.css('cursor', g.cursor);
  5567. },
  5568. _revert: function (e)
  5569. {
  5570. var g = this;
  5571. g.reverting = true;
  5572. g.proxy.animate({
  5573. left: g.current.left,
  5574. top: g.current.top
  5575. }, function ()
  5576. {
  5577. g.reverting = false;
  5578. g._removeProxy();
  5579. g.trigger('endRevert', [g.current, e]);
  5580. g.current = null;
  5581. });
  5582. },
  5583. _applyDrag: function (applyResultBody)
  5584. {
  5585. var g = this, p = this.options;
  5586. applyResultBody = applyResultBody || g.proxy || g.target;
  5587. var cur = {}, changed = false;
  5588. var noproxy = applyResultBody == g.target;
  5589. if (g.current.diffX)
  5590. {
  5591. if (noproxy || p.proxyX == null)
  5592. cur.left = g.current.left + g.current.diffX;
  5593. else
  5594. cur.left = g.current.startX + p.proxyX + g.current.diffX;
  5595. changed = true;
  5596. }
  5597. if (g.current.diffY)
  5598. {
  5599. if (noproxy || p.proxyY == null)
  5600. cur.top = g.current.top + g.current.diffY;
  5601. else
  5602. cur.top = g.current.startY + p.proxyY + g.current.diffY;
  5603. changed = true;
  5604. }
  5605. if (applyResultBody == g.target && g.proxy && p.animate)
  5606. {
  5607. g.reverting = true;
  5608. applyResultBody.animate(cur, function ()
  5609. {
  5610. g.reverting = false;
  5611. });
  5612. }
  5613. else
  5614. {
  5615. applyResultBody.css(cur);
  5616. }
  5617. },
  5618. _setReceive: function (receive)
  5619. {
  5620. this.receiveEntered = {};
  5621. if (!receive) return;
  5622. if (typeof receive == 'string')
  5623. this.receive = $(receive);
  5624. else
  5625. this.receive = receive;
  5626. },
  5627. _setHandler: function (handler)
  5628. {
  5629. var g = this, p = this.options;
  5630. if (!handler)
  5631. g.handler = $(p.target);
  5632. else
  5633. g.handler = (typeof handler == 'string' ? $(handler, p.target) : handler);
  5634. },
  5635. _setTarget: function (target)
  5636. {
  5637. this.target = $(target);
  5638. },
  5639. _setCursor: function (cursor)
  5640. {
  5641. this.cursor = cursor;
  5642. (this.proxy || this.handler).css('cursor', cursor);
  5643. },
  5644. _createProxy: function (proxy, e)
  5645. {
  5646. if (!proxy) return;
  5647. var g = this, p = this.options;
  5648. if (typeof proxy == 'function')
  5649. {
  5650. g.proxy = proxy.call(this.options.target, g, e);
  5651. }
  5652. else if (proxy == 'clone')
  5653. {
  5654. g.proxy = g.target.clone().css('position', 'absolute');
  5655. g.proxy.appendTo('body');
  5656. }
  5657. else
  5658. {
  5659. g.proxy = $("<div class='l-draggable'></div>");
  5660. g.proxy.width(g.target.width()).height(g.target.height())
  5661. g.proxy.attr("dragid", g.id).appendTo('body');
  5662. }
  5663. g.proxy.css({
  5664. left: p.proxyX == null ? g.current.left : g.current.startX + p.proxyX,
  5665. top: p.proxyY == null ? g.current.top : g.current.startY + p.proxyY
  5666. }).show();
  5667. },
  5668. _removeProxy: function ()
  5669. {
  5670. var g = this;
  5671. if (g.proxy)
  5672. {
  5673. g.proxy.remove();
  5674. g.proxy = null;
  5675. }
  5676. }
  5677. });
  5678. })(jQuery);/**
  5679. * jQuery ligerUI 1.2.4
  5680. *
  5681. * http://ligerui.com
  5682. *
  5683. * Author daomi 2014 [ gd_star@163.com ]
  5684. *
  5685. */
  5686. (function ($)
  5687. {
  5688. $.fn.ligerEasyTab = function ()
  5689. {
  5690. return $.ligerui.run.call(this, "ligerEasyTab", arguments);
  5691. };
  5692. $.fn.ligerGetEasyTabManager = function ()
  5693. {
  5694. return $.ligerui.run.call(this, "ligerGetEasyTabManager", arguments);
  5695. };
  5696. $.ligerDefaults.EasyTab = {};
  5697. $.ligerMethos.EasyTab = {};
  5698. $.ligerui.controls.EasyTab = function (element, options)
  5699. {
  5700. $.ligerui.controls.EasyTab.base.constructor.call(this, element, options);
  5701. };
  5702. $.ligerui.controls.EasyTab.ligerExtend($.ligerui.core.UIComponent, {
  5703. __getType: function ()
  5704. {
  5705. return 'EasyTab';
  5706. },
  5707. __idPrev: function ()
  5708. {
  5709. return 'EasyTab';
  5710. },
  5711. _extendMethods: function ()
  5712. {
  5713. return $.ligerMethos.EasyTab;
  5714. },
  5715. _render: function ()
  5716. {
  5717. var g = this, p = this.options;
  5718. g.tabs = $(this.element);
  5719. g.tabs.addClass("l-easytab");
  5720. var selectedIndex = 0;
  5721. if ($("> div[lselected=true]", g.tabs).length > 0)
  5722. selectedIndex = $("> div", g.tabs).index($("> div[lselected=true]", g.tabs));
  5723. g.tabs.ul = $('<ul class="l-easytab-header"></ul>');
  5724. $("> div", g.tabs).each(function (i, box)
  5725. {
  5726. var li = $('<li><span></span></li>');
  5727. if (i == selectedIndex)
  5728. $("span", li).addClass("l-selected");
  5729. if ($(box).attr("title"))
  5730. {
  5731. $("span", li).html($(box).attr("title"));
  5732. $(box).removeAttr("title");
  5733. }
  5734. g.tabs.ul.append(li);
  5735. if (!$(box).hasClass("l-easytab-panelbox")) $(box).addClass("l-easytab-panelbox");
  5736. });
  5737. g.tabs.ul.prependTo(g.tabs);
  5738. //init
  5739. $(".l-easytab-panelbox:eq(" + selectedIndex + ")", g.tabs).show().siblings(".l-easytab-panelbox").hide();
  5740. //add even
  5741. $("> ul:first span", g.tabs).click(function ()
  5742. {
  5743. if ($(this).hasClass("l-selected")) return;
  5744. var i = $("> ul:first span", g.tabs).index(this);
  5745. $(this).addClass("l-selected").parent().siblings().find("span.l-selected").removeClass("l-selected");
  5746. $(".l-easytab-panelbox:eq(" + i + ")", g.tabs).show().siblings(".l-easytab-panelbox").hide();
  5747. }).not("l-selected").hover(function ()
  5748. {
  5749. $(this).addClass("l-over");
  5750. }, function ()
  5751. {
  5752. $(this).removeClass("l-over");
  5753. });
  5754. g.set(p);
  5755. }
  5756. });
  5757. })(jQuery);/**
  5758. * jQuery ligerUI 1.2.4
  5759. *
  5760. * http://ligerui.com
  5761. *
  5762. * Author daomi 2014 [ gd_star@163.com ]
  5763. *
  5764. */
  5765. (function ($)
  5766. {
  5767. $.fn.ligerFilter = function ()
  5768. {
  5769. return $.ligerui.run.call(this, "ligerFilter", arguments);
  5770. };
  5771. $.fn.ligerGetFilterManager = function ()
  5772. {
  5773. return $.ligerui.run.call(this, "ligerGetFilterManager", arguments);
  5774. };
  5775. $.ligerDefaults.Filter = {
  5776. //字段列表
  5777. fields: [],
  5778. //字段类型 - 运算符 的对应关系
  5779. operators: {},
  5780. //自定义输入框(如下拉框、日期)
  5781. editors: {}
  5782. };
  5783. $.ligerDefaults.FilterString = {
  5784. strings: {
  5785. "and": "并且",
  5786. "or": "或者",
  5787. "equal": "相等",
  5788. "notequal": "不相等",
  5789. "startwith": "以..开始",
  5790. "endwith": "以..结束",
  5791. "like": "相似",
  5792. "greater": "大于",
  5793. "greaterorequal": "大于或等于",
  5794. "less": "小于",
  5795. "lessorequal": "小于或等于",
  5796. "in": "包括在...",
  5797. "notin": "不包括...",
  5798. "addgroup": "增加分组",
  5799. "addrule": "增加条件",
  5800. "deletegroup": "删除分组"
  5801. }
  5802. };
  5803. $.ligerDefaults.Filter.operators['string'] =
  5804. $.ligerDefaults.Filter.operators['text'] =
  5805. ["equal", "notequal", "startwith", "endwith", "like", "greater", "greaterorequal", "less", "lessorequal", "in", "notin"];
  5806. $.ligerDefaults.Filter.operators['number'] =
  5807. $.ligerDefaults.Filter.operators['int'] =
  5808. $.ligerDefaults.Filter.operators['float'] =
  5809. $.ligerDefaults.Filter.operators['date'] =
  5810. ["equal", "notequal", "greater", "greaterorequal", "less", "lessorequal", "in", "notin"];
  5811. $.ligerDefaults.Filter.editors['string'] =
  5812. {
  5813. create: function (container, field)
  5814. {
  5815. var input = $("<input type='text'/>");
  5816. container.append(input);
  5817. input.ligerTextBox(field.editor.options || {});
  5818. return input;
  5819. },
  5820. setValue: function (input, value)
  5821. {
  5822. input.val(value);
  5823. },
  5824. getValue: function (input)
  5825. {
  5826. return input.liger('option', 'value');
  5827. },
  5828. destroy: function (input)
  5829. {
  5830. input.liger('destroy');
  5831. }
  5832. };
  5833. $.ligerDefaults.Filter.editors['date'] =
  5834. {
  5835. create: function (container, field)
  5836. {
  5837. var input = $("<input type='text'/>");
  5838. container.append(input);
  5839. input.ligerDateEditor(field.editor.options || {});
  5840. return input;
  5841. },
  5842. setValue: function (input, value)
  5843. {
  5844. input.liger('option', 'value', value);
  5845. },
  5846. getValue: function (input, field)
  5847. {
  5848. return input.liger('option', 'value');
  5849. },
  5850. destroy: function (input)
  5851. {
  5852. input.liger('destroy');
  5853. }
  5854. };
  5855. $.ligerDefaults.Filter.editors['number'] =
  5856. {
  5857. create: function (container, field)
  5858. {
  5859. var input = $("<input type='text'/>");
  5860. container.append(input);
  5861. var options = {
  5862. minValue: field.editor.minValue,
  5863. maxValue: field.editor.maxValue
  5864. };
  5865. input.ligerSpinner($.extend(options, field.editor.options || {}));
  5866. return input;
  5867. },
  5868. setValue: function (input, value)
  5869. {
  5870. input.val(value);
  5871. },
  5872. getValue: function (input, field)
  5873. {
  5874. var isInt = field.editor.type == "int";
  5875. if (isInt)
  5876. return parseInt(input.val(), 10);
  5877. else
  5878. return parseFloat(input.val());
  5879. },
  5880. destroy: function (input)
  5881. {
  5882. input.liger('destroy');
  5883. }
  5884. };
  5885. $.ligerDefaults.Filter.editors['combobox'] =
  5886. {
  5887. create: function (container, field)
  5888. {
  5889. var input = $("<input type='text'/>");
  5890. container.append(input);
  5891. var options = {
  5892. data: field.data,
  5893. slide: false,
  5894. valueField: field.editor.valueField || field.editor.valueColumnName,
  5895. textField: field.editor.textField || field.editor.displayColumnName
  5896. };
  5897. $.extend(options, field.editor.options || {});
  5898. input.ligerComboBox(options);
  5899. return input;
  5900. },
  5901. setValue: function (input, value)
  5902. {
  5903. input.liger('option', 'value', value);
  5904. },
  5905. getValue: function (input)
  5906. {
  5907. return input.liger('option', 'value');
  5908. },
  5909. destroy: function (input)
  5910. {
  5911. input.liger('destroy');
  5912. }
  5913. };
  5914. //过滤器组件
  5915. $.ligerui.controls.Filter = function (element, options)
  5916. {
  5917. $.ligerui.controls.Filter.base.constructor.call(this, element, options);
  5918. };
  5919. $.ligerui.controls.Filter.ligerExtend($.ligerui.core.UIComponent, {
  5920. __getType: function ()
  5921. {
  5922. return 'Filter'
  5923. },
  5924. __idPrev: function ()
  5925. {
  5926. return 'Filter';
  5927. },
  5928. _init: function ()
  5929. {
  5930. $.ligerui.controls.Filter.base._init.call(this);
  5931. },
  5932. _render: function ()
  5933. {
  5934. var g = this, p = this.options;
  5935. g.set(p);
  5936. //事件:增加分组
  5937. $("#" + g.id + " .addgroup").live('click', function ()
  5938. {
  5939. var jtable = $(this).parent().parent().parent().parent();
  5940. g.addGroup(jtable);
  5941. });
  5942. //事件:删除分组
  5943. $("#" + g.id + " .deletegroup").live('click', function ()
  5944. {
  5945. var jtable = $(this).parent().parent().parent().parent();
  5946. g.deleteGroup(jtable);
  5947. });
  5948. //事件:增加条件
  5949. $("#" + g.id + " .addrule").live('click', function ()
  5950. {
  5951. var jtable = $(this).parent().parent().parent().parent();
  5952. g.addRule(jtable);
  5953. });
  5954. //事件:删除条件
  5955. $("#" + g.id + " .deleterole").live('click', function ()
  5956. {
  5957. var rulerow = $(this).parent().parent();
  5958. g.deleteRule(rulerow);
  5959. });
  5960. },
  5961. //设置字段列表
  5962. _setFields: function (fields)
  5963. {
  5964. var g = this, p = this.options;
  5965. if (g.group) g.group.remove();
  5966. g.group = $(g._bulidGroupTableHtml()).appendTo(g.element);
  5967. },
  5968. //输入框列表
  5969. editors: {},
  5970. //输入框计算器
  5971. editorCounter: 0,
  5972. //增加分组
  5973. //parm [jgroup] jQuery对象(主分组的table dom元素)
  5974. addGroup: function (jgroup)
  5975. {
  5976. var g = this, p = this.options;
  5977. jgroup = $(jgroup || g.group);
  5978. var lastrow = $(">tbody:first > tr:last", jgroup);
  5979. var groupHtmlArr = [];
  5980. groupHtmlArr.push('<tr class="l-filter-rowgroup"><td class="l-filter-cellgroup" colSpan="4">');
  5981. var altering = !jgroup.hasClass("l-filter-group-alt");
  5982. groupHtmlArr.push(g._bulidGroupTableHtml(altering, true));
  5983. groupHtmlArr.push('</td></tr>');
  5984. var row = $(groupHtmlArr.join(''));
  5985. lastrow.before(row);
  5986. return row.find("table:first");
  5987. },
  5988. //删除分组
  5989. deleteGroup: function (group)
  5990. {
  5991. var g = this, p = this.options;
  5992. $("td.l-filter-value", group).each(function ()
  5993. {
  5994. var rulerow = $(this).parent();
  5995. $("select.fieldsel", rulerow).unbind();
  5996. g.removeEditor(rulerow);
  5997. });
  5998. $(group).parent().parent().remove();
  5999. },
  6000. //删除编辑器
  6001. removeEditor: function (rulerow)
  6002. {
  6003. var g = this, p = this.options;
  6004. var type = $(rulerow).attr("editortype");
  6005. var id = $(rulerow).attr("editorid");
  6006. var editor = g.editors[id];
  6007. if (editor) p.editors[type].destroy(editor);
  6008. $("td.l-filter-value:first", rulerow).html("");
  6009. },
  6010. //设置规则
  6011. //parm [group] 分组数据
  6012. //parm [jgruop] 分组table dom jQuery对象
  6013. setData: function (group, jgroup)
  6014. {
  6015. var g = this, p = this.options;
  6016. jgroup = jgroup || g.group;
  6017. var lastrow = $(">tbody:first > tr:last", jgroup);
  6018. jgroup.find(">tbody:first > tr").not(lastrow).remove();
  6019. $("select:first", lastrow).val(group.op);
  6020. if (group.rules)
  6021. {
  6022. $(group.rules).each(function ()
  6023. {
  6024. var rulerow = g.addRule(jgroup);
  6025. rulerow.attr("fieldtype", this.type || "string");
  6026. $("select.opsel", rulerow).val(this.op);
  6027. $("select.fieldsel", rulerow).val(this.field).trigger('change');
  6028. var editorid = rulerow.attr("editorid");
  6029. if (editorid && g.editors[editorid])
  6030. {
  6031. var field = g.getField(this.field);
  6032. if (field && field.editor)
  6033. {
  6034. p.editors[field.editor.type].setValue(g.editors[editorid], this.value, field);
  6035. }
  6036. }
  6037. else
  6038. {
  6039. $(":text", rulerow).val(this.value);
  6040. }
  6041. });
  6042. }
  6043. if (group.groups)
  6044. {
  6045. $(group.groups).each(function ()
  6046. {
  6047. var subjgroup = g.addGroup(jgroup);
  6048. g.setData(this, subjgroup);
  6049. });
  6050. }
  6051. },
  6052. //增加一个条件
  6053. //parm [jgroup] 分组的jQuery对象
  6054. addRule: function (jgroup)
  6055. {
  6056. var g = this, p = this.options;
  6057. jgroup = jgroup || g.group;
  6058. var lastrow = $(">tbody:first > tr:last", jgroup);
  6059. var rulerow = $(g._bulidRuleRowHtml());
  6060. lastrow.before(rulerow);
  6061. if (p.fields.length)
  6062. {
  6063. //如果第一个字段启用了自定义输入框
  6064. g.appendEditor(rulerow, p.fields[0]);
  6065. }
  6066. //事件:字段列表改变时
  6067. $("select.fieldsel", rulerow).bind('change', function ()
  6068. {
  6069. var jopsel = $(this).parent().next().find("select:first");
  6070. var fieldName = $(this).val();
  6071. if (!fieldName) return;
  6072. var field = g.getField(fieldName);
  6073. //字段类型处理
  6074. var fieldType = field.type || "string";
  6075. var oldFieldtype = rulerow.attr("fieldtype");
  6076. if (fieldType != oldFieldtype)
  6077. {
  6078. jopsel.html(g._bulidOpSelectOptionsHtml(fieldType));
  6079. rulerow.attr("fieldtype", fieldType);
  6080. }
  6081. //当前的编辑器
  6082. var editorType = null;
  6083. //上一次的编辑器
  6084. var oldEditorType = rulerow.attr("editortype");
  6085. if (g.enabledEditor(field)) editorType = field.editor.type;
  6086. if (oldEditorType)
  6087. {
  6088. //如果存在旧的输入框
  6089. g.removeEditor(rulerow);
  6090. }
  6091. if (editorType)
  6092. {
  6093. //如果当前选择的字段定义了输入框
  6094. g.appendEditor(rulerow, field);
  6095. } else
  6096. {
  6097. rulerow.removeAttr("editortype").removeAttr("editorid");
  6098. $("td.l-filter-value:first", rulerow).html('<input type="text" class="valtxt" />');
  6099. }
  6100. });
  6101. return rulerow;
  6102. },
  6103. //删除一个条件
  6104. deleteRule: function (rulerow)
  6105. {
  6106. $("select.fieldsel", rulerow).unbind();
  6107. this.removeEditor(rulerow);
  6108. $(rulerow).remove();
  6109. },
  6110. //附加一个输入框
  6111. appendEditor: function (rulerow, field)
  6112. {
  6113. var g = this, p = this.options;
  6114. if (g.enabledEditor(field))
  6115. {
  6116. var cell = $("td.l-filter-value:first", rulerow).html("");
  6117. var editor = p.editors[field.editor.type];
  6118. g.editors[++g.editorCounter] = editor.create(cell, field);
  6119. rulerow.attr("editortype", field.editor.type).attr("editorid", g.editorCounter);
  6120. }
  6121. },
  6122. //获取分组数据
  6123. getData: function (group)
  6124. {
  6125. var g = this, p = this.options;
  6126. group = group || g.group;
  6127. var groupData = {};
  6128. $("> tbody > tr", group).each(function (i, row)
  6129. {
  6130. var rowlast = $(row).hasClass("l-filter-rowlast");
  6131. var rowgroup = $(row).hasClass("l-filter-rowgroup");
  6132. if (rowgroup)
  6133. {
  6134. var groupTable = $("> td:first > table:first", row);
  6135. if (groupTable.length)
  6136. {
  6137. if (!groupData.groups) groupData.groups = [];
  6138. groupData.groups.push(g.getData(groupTable));
  6139. }
  6140. }
  6141. else if (rowlast)
  6142. {
  6143. groupData.op = $(".groupopsel:first", row).val();
  6144. }
  6145. else
  6146. {
  6147. var fieldName = $("select.fieldsel:first", row).val();
  6148. var field = g.getField(fieldName);
  6149. var op = $(".opsel:first", row).val();
  6150. var value = g._getRuleValue(row, field);
  6151. var type = $(row).attr("fieldtype") || "string";
  6152. if (!groupData.rules) groupData.rules = [];
  6153. groupData.rules.push({
  6154. field: fieldName, op: op, value: value, type: type
  6155. });
  6156. }
  6157. });
  6158. return groupData;
  6159. },
  6160. _getRuleValue: function (rulerow, field)
  6161. {
  6162. var g = this, p = this.options;
  6163. var editorid = $(rulerow).attr("editorid");
  6164. var editortype = $(rulerow).attr("editortype");
  6165. var editor = g.editors[editorid];
  6166. if (editor)
  6167. return p.editors[editortype].getValue(editor, field);
  6168. return $(".valtxt:first", rulerow).val();
  6169. },
  6170. //判断某字段是否启用自定义的输入框
  6171. enabledEditor: function (field)
  6172. {
  6173. var g = this, p = this.options;
  6174. if (!field.editor || !field.editor.type) return false;
  6175. return (field.editor.type in p.editors);
  6176. },
  6177. //根据fieldName 获取 字段
  6178. getField: function (fieldname)
  6179. {
  6180. var g = this, p = this.options;
  6181. for (var i = 0, l = p.fields.length; i < l; i++)
  6182. {
  6183. var field = p.fields[i];
  6184. if (field.name == fieldname) return field;
  6185. }
  6186. return null;
  6187. },
  6188. //获取一个分组的html
  6189. _bulidGroupTableHtml: function (altering, allowDelete)
  6190. {
  6191. var g = this, p = this.options;
  6192. var tableHtmlArr = [];
  6193. tableHtmlArr.push('<table cellpadding="0" cellspacing="0" border="0" class="l-filter-group');
  6194. if (altering)
  6195. tableHtmlArr.push(' l-filter-group-alt');
  6196. tableHtmlArr.push('"><tbody>');
  6197. tableHtmlArr.push('<tr class="l-filter-rowlast"><td class="l-filter-rowlastcell" align="right" colSpan="4">');
  6198. //and or
  6199. tableHtmlArr.push('<select class="groupopsel">');
  6200. tableHtmlArr.push('<option value="and">' + p.strings['and'] + '</option>');
  6201. tableHtmlArr.push('<option value="or">' + p.strings['or'] + '</option>');
  6202. tableHtmlArr.push('</select>');
  6203. //add group
  6204. tableHtmlArr.push('<input type="button" value="' + p.strings['addgroup'] + '" class="addgroup">');
  6205. //add rule
  6206. tableHtmlArr.push('<input type="button" value="' + p.strings['addrule'] + '" class="addrule">');
  6207. if (allowDelete)
  6208. tableHtmlArr.push('<input type="button" value="' + p.strings['deletegroup'] + '" class="deletegroup">');
  6209. tableHtmlArr.push('</td></tr>');
  6210. tableHtmlArr.push('</tbody></table>');
  6211. return tableHtmlArr.join('');
  6212. },
  6213. //获取字段值规则的html
  6214. _bulidRuleRowHtml: function (fields)
  6215. {
  6216. var g = this, p = this.options;
  6217. fields = fields || p.fields;
  6218. var rowHtmlArr = [];
  6219. var fieldType = fields[0].type || "string";
  6220. rowHtmlArr.push('<tr fieldtype="' + fieldType + '"><td class="l-filter-column">');
  6221. rowHtmlArr.push('<select class="fieldsel">');
  6222. for (var i = 0, l = fields.length; i < l; i++)
  6223. {
  6224. var field = fields[i];
  6225. rowHtmlArr.push('<option value="' + field.name + '"');
  6226. if (i == 0) rowHtmlArr.push(" selected ");
  6227. rowHtmlArr.push('>');
  6228. rowHtmlArr.push(field.display);
  6229. rowHtmlArr.push('</option>');
  6230. }
  6231. rowHtmlArr.push("</select>");
  6232. rowHtmlArr.push('</td>');
  6233. rowHtmlArr.push('<td class="l-filter-op">');
  6234. rowHtmlArr.push('<select class="opsel">');
  6235. rowHtmlArr.push(g._bulidOpSelectOptionsHtml(fieldType));
  6236. rowHtmlArr.push('</select>');
  6237. rowHtmlArr.push('</td>');
  6238. rowHtmlArr.push('<td class="l-filter-value">');
  6239. rowHtmlArr.push('<input type="text" class="valtxt" />');
  6240. rowHtmlArr.push('</td>');
  6241. rowHtmlArr.push('<td>');
  6242. rowHtmlArr.push('<div class="l-icon-cross deleterole"></div>');
  6243. rowHtmlArr.push('</td>');
  6244. rowHtmlArr.push('</tr>');
  6245. return rowHtmlArr.join('');
  6246. },
  6247. //获取一个运算符选择框的html
  6248. _bulidOpSelectOptionsHtml: function (fieldType)
  6249. {
  6250. var g = this, p = this.options;
  6251. var ops = p.operators[fieldType];
  6252. var opHtmlArr = [];
  6253. for (var i = 0, l = ops.length; i < l; i++)
  6254. {
  6255. var op = ops[i];
  6256. opHtmlArr[opHtmlArr.length] = '<option value="' + op + '">';
  6257. opHtmlArr[opHtmlArr.length] = p.strings[op];
  6258. opHtmlArr[opHtmlArr.length] = '</option>';
  6259. }
  6260. return opHtmlArr.join('');
  6261. }
  6262. });
  6263. })(jQuery);/**
  6264. * jQuery ligerUI 1.2.4
  6265. *
  6266. * http://ligerui.com
  6267. *
  6268. * Author daomi 2014 [ gd_star@163.com ]
  6269. *
  6270. */
  6271. (function ($)
  6272. {
  6273. $.fn.ligerForm = function ()
  6274. {
  6275. return $.ligerui.run.call(this, "ligerForm", arguments);
  6276. };
  6277. $.ligerui.getConditions = function (form, options)
  6278. {
  6279. if (!form) return null;
  6280. form = liger.get($(form));
  6281. if (form && form.toConditions) return form.toConditions();
  6282. };
  6283. $.ligerDefaults = $.ligerDefaults || {};
  6284. $.ligerDefaults.Form = {
  6285. width: null, // 表单的宽度
  6286. //控件宽度
  6287. inputWidth: 180,
  6288. //标签宽度
  6289. labelWidth: 90,
  6290. //间隔宽度
  6291. space: 40,
  6292. rightToken: ':',
  6293. //标签对齐方式
  6294. labelAlign: 'left',
  6295. //控件对齐方式
  6296. align: 'left',
  6297. //字段
  6298. /*
  6299. 数组的集合,支持的类型包括在$.ligerDefaults.Form.editors,这个editors同Grid的editors继承于base.js中提供的编辑器集合,具体可以看liger.editors
  6300. 字段的参数参考 127行左右的 $.ligerDefaults.Form_fields,
  6301. ui内置的编辑表单元素都会调用ui的表单插件集合,所以这些字段都有属于自己的"liger对象",可以同liger.get("[ID]")的方式获取,这里的[ID]获取方式优先级如下:
  6302. 1,定义了field.id 则取field.id
  6303. 2,如果是下拉框和PopupEdit,并且定义了comboboxName,则取comboboxName(如果表单定义了prefixID,需要加上)
  6304. 3,默认取field.name(如果表单定义了prefixID,需要加上)
  6305. */
  6306. fields: [],
  6307. //创建的表单元素是否附加ID
  6308. appendID: true,
  6309. //生成表单元素ID、Name的前缀
  6310. prefixID: null,
  6311. //json解析函数
  6312. toJSON: $.ligerui.toJSON,
  6313. labelCss: null,
  6314. fieldCss: null,
  6315. spaceCss: null,
  6316. onAfterSetFields: null,
  6317. // 参数同 ligerButton
  6318. buttons: null, //按钮组
  6319. readonly: false, //是否只读
  6320. editors: {}, //编辑器集合,使用同$.ligerDefaults.Grid.editors
  6321. //验证
  6322. validate: null,
  6323. //不设置validate属性到inuput
  6324. unSetValidateAttr: false,
  6325. tab: null
  6326. };
  6327. $.ligerDefaults.FormString = {
  6328. invalidMessage: '存在{errorCount}个字段验证不通过,请检查!',
  6329. detailMessage: '详细',
  6330. okMessage: '确定'
  6331. };
  6332. $.ligerDefaults.Form.editors.textarea =
  6333. {
  6334. create: function (container, editParm, p)
  6335. {
  6336. var editor = $('<textarea class="l-textarea" />');
  6337. var id = (p.prefixID || "") + editParm.field.name;
  6338. if ($("#" + id).length)
  6339. {
  6340. editor = $("#" + id);
  6341. }
  6342. editor.attr({
  6343. id: id,
  6344. name: id
  6345. });
  6346. if (p.readonly) editor.attr("readonly", true);
  6347. container.append(editor);
  6348. return editor;
  6349. },
  6350. getValue: function (editor, editParm)
  6351. {
  6352. return editor.val();
  6353. },
  6354. setValue: function (editor, value, editParm)
  6355. {
  6356. editor.val(value);
  6357. },
  6358. resize: function (editor, width, height, editParm)
  6359. {
  6360. editor.css({
  6361. width: width - 2
  6362. }).parent().css("width", "auto");
  6363. }
  6364. };
  6365. $.ligerDefaults.Form.editors.hidden =
  6366. {
  6367. create: function (container, editParm, p)
  6368. {
  6369. var editor = $('<input type = "hidden" />');
  6370. var id = (p.prefixID || "") + editParm.field.name;
  6371. if ($("#" + id).length)
  6372. {
  6373. editor = $("#" + id);
  6374. }
  6375. editor.attr({
  6376. id: id,
  6377. name: id
  6378. });
  6379. container.append(editor);
  6380. return editor;
  6381. },
  6382. getValue: function (editor, editParm)
  6383. {
  6384. return editor.val();
  6385. },
  6386. setValue: function (editor, value, editParm)
  6387. {
  6388. editor.val(value);
  6389. }
  6390. };
  6391. $.ligerDefaults.Form_fields = {
  6392. name: null, //字段name
  6393. textField: null, //文本框name
  6394. type: null, //表单类型
  6395. editor: null, //编辑器扩展类型
  6396. label: null, //Label
  6397. hideSpace: true,
  6398. hideLabel: true,
  6399. rightToken: null, // :
  6400. newline: true, //换行显示
  6401. op: null, //操作符 附加到input
  6402. vt: null, //值类型 附加到input
  6403. attr: null, //属性列表 附加到input
  6404. validate: null //验证参数,比如required:true
  6405. };
  6406. $.ligerDefaults.Form_editor = {
  6407. };
  6408. //description 自动创建ligerui风格的表单-编辑器构造函数
  6409. //editorBulider -> editorBuilder 命名错误
  6410. //param {jinput} 表单元素jQuery对象 比如input、select、textarea
  6411. $.ligerDefaults.Form.editorBulider = function (jinput)
  6412. {
  6413. //这里this就是form的ligerui对象
  6414. var g = this, p = this.options;
  6415. var options = {}, ltype = jinput.attr("ltype"), field = {};
  6416. if (p.readonly) options.readonly = true;
  6417. options = $.extend({
  6418. width: (field.width || p.inputWidth) - 2
  6419. }, field.options, field.editor, options);
  6420. if (ltype == "autocomplete")
  6421. options.autocomplete = true;
  6422. if (jinput.is("select"))
  6423. {
  6424. jinput.ligerComboBox(options);
  6425. }
  6426. else if (jinput.is(":password"))
  6427. {
  6428. jinput.ligerTextBox(options);
  6429. }
  6430. else if (jinput.is(":text"))
  6431. {
  6432. switch (ltype)
  6433. {
  6434. case "select":
  6435. case "combobox":
  6436. case "autocomplete":
  6437. jinput.ligerComboBox(options);
  6438. break;
  6439. case "spinner":
  6440. jinput.ligerSpinner(options);
  6441. break;
  6442. case "date":
  6443. jinput.ligerDateEditor(options);
  6444. break;
  6445. case "popup":
  6446. jinput.ligerPopupEdit(options);
  6447. break;
  6448. case "currency":
  6449. options.currency = true;
  6450. case "float":
  6451. case "number":
  6452. options.number = true;
  6453. jinput.ligerTextBox(options);
  6454. break;
  6455. case "int":
  6456. case "digits":
  6457. options.digits = true;
  6458. default:
  6459. jinput.ligerTextBox(options);
  6460. break;
  6461. }
  6462. }
  6463. else if (jinput.is(":radio"))
  6464. {
  6465. jinput.ligerRadio(options);
  6466. }
  6467. else if (jinput.is(":checkbox"))
  6468. {
  6469. jinput.ligerCheckBox(options);
  6470. }
  6471. else if (jinput.is("textarea"))
  6472. {
  6473. jinput.addClass("l-textarea");
  6474. }
  6475. }
  6476. //表单组件
  6477. $.ligerui.controls.Form = function (element, options)
  6478. {
  6479. $.ligerui.controls.Form.base.constructor.call(this, element, options);
  6480. };
  6481. $.ligerui.controls.Form.ligerExtend($.ligerui.core.UIComponent, {
  6482. __getType: function ()
  6483. {
  6484. return 'Form'
  6485. },
  6486. __idPrev: function ()
  6487. {
  6488. return 'Form';
  6489. },
  6490. _init: function ()
  6491. {
  6492. var g = this, p = this.options;
  6493. $.ligerui.controls.Form.base._init.call(this);
  6494. //编辑构造器初始化
  6495. for (var type in liger.editors)
  6496. {
  6497. var editor = liger.editors[type];
  6498. //如果没有默认的或者已经定义
  6499. if (!editor || type in p.editors) continue;
  6500. p.editors[type] = liger.getEditor($.extend({
  6501. type: type,
  6502. master: g
  6503. }, editor));
  6504. }
  6505. },
  6506. _render: function ()
  6507. {
  6508. var g = this, p = this.options;
  6509. var jform = $(this.element);
  6510. g.form = jform.is("form") ? jform : jform.parents("form:first");
  6511. //生成ligerui表单样式
  6512. $("input,select,textarea", jform).each(function ()
  6513. {
  6514. p.editorBulider.call(g, $(this));
  6515. });
  6516. g.set(p);
  6517. g.initValidate();
  6518. if (p.buttons)
  6519. {
  6520. var jbuttons = $('<ul class="l-form-buttons"></ul>').appendTo(jform);
  6521. $(p.buttons).each(function ()
  6522. {
  6523. var jbutton = $('<li><div></div></li>').appendTo(jbuttons);
  6524. $("div:first", jbutton).ligerButton(this);
  6525. });
  6526. }
  6527. if (!g.element.id) g.element.id = g.id;
  6528. //分组 收缩/展开
  6529. $("#" + g.element.id + " .togglebtn").live('click', function ()
  6530. {
  6531. if ($(this).hasClass("togglebtn-down")) $(this).removeClass("togglebtn-down");
  6532. else $(this).addClass("togglebtn-down");
  6533. var boxs = $(this).parent().nextAll("ul,div");
  6534. for (var i = 0; i < boxs.length; i++)
  6535. {
  6536. var jbox = $(boxs[i]);
  6537. if (jbox.hasClass("l-group")) break;
  6538. if ($(this).hasClass("togglebtn-down"))
  6539. {
  6540. jbox.hide();
  6541. } else
  6542. {
  6543. jbox.show();
  6544. }
  6545. }
  6546. });
  6547. },
  6548. _setWidth: function (value)
  6549. {
  6550. var g = this, p = this.options;
  6551. if (value) g.form.width(value);
  6552. },
  6553. getEditor: function (name)
  6554. {
  6555. var g = this, p = this.options;
  6556. if (!g.editors) return;
  6557. for (var i = 0, l = p.fields.length; i < l; i++)
  6558. {
  6559. var field = p.fields[i];
  6560. if (field.name == name && g.editors[i])
  6561. {
  6562. return g.editors[i].control;
  6563. }
  6564. }
  6565. },
  6566. getField: function (index)
  6567. {
  6568. var g = this, p = this.options;
  6569. if (!p.fields) return null;
  6570. return p.fields[index];
  6571. },
  6572. toConditions: function ()
  6573. {
  6574. var g = this, p = this.options;
  6575. var conditions = [];
  6576. $(p.fields).each(function (fieldIndex, field)
  6577. {
  6578. var name = field.name, textField = field.textField, editor = g.editors[fieldIndex];
  6579. if (!editor || !name) return;
  6580. var value = editor.editor.getValue(editor.control, {
  6581. field: field
  6582. });
  6583. if (value != null && value !== "")
  6584. {
  6585. conditions.push({
  6586. op: field.operator || "like",
  6587. field: name,
  6588. value: value,
  6589. type: field.type || "string"
  6590. });
  6591. }
  6592. });
  6593. return conditions;
  6594. },
  6595. //预处理字段 , 处理分组
  6596. _preSetFields: function (fields)
  6597. {
  6598. var g = this, p = this.options, lastVisitedGroup = null, lastVisitedGroupIcon = null;
  6599. //分组: 先填充没有设置分组的字段
  6600. $(p.fields).each(function (i, field)
  6601. {
  6602. if (p.readonly || field.readonly || (field.editor && field.editor.readonly))
  6603. delete field.validate;
  6604. if (field.type == "hidden") return;
  6605. field.type = field.type || "text";
  6606. if (field.newline == null) field.newline = true;
  6607. if (lastVisitedGroup && !field.group)
  6608. {
  6609. field.group = lastVisitedGroup;
  6610. field.groupicon = lastVisitedGroupIcon;
  6611. }
  6612. if (field.group)
  6613. {
  6614. field.group = field.group.toString().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  6615. lastVisitedGroup = field.group;
  6616. lastVisitedGroupIcon = field.groupicon;
  6617. }
  6618. });
  6619. },
  6620. _setReadonly: function (readonly)
  6621. {
  6622. var g = this, p = this.options;
  6623. if (readonly && g.editors)
  6624. {
  6625. for (var index in g.editors)
  6626. {
  6627. var control = g.editors[index].control;
  6628. if (control && control._setReadonly) control._setReadonly(true);
  6629. }
  6630. }
  6631. },
  6632. _setFields: function (fields)
  6633. {
  6634. var g = this, p = this.options;
  6635. if ($.isFunction(p.prefixID)) p.prefixID = p.prefixID(g);
  6636. var jform = $(g.element).addClass("l-form");
  6637. g._initFieldsValidate({
  6638. fields: fields
  6639. });
  6640. g._initFieldsHtml({
  6641. panel: jform,
  6642. fields: fields
  6643. });
  6644. g._createEditors({
  6645. fields: fields
  6646. });
  6647. g.trigger('afterSetFields');
  6648. },
  6649. _initFieldsValidate : function(e)
  6650. {
  6651. var g = this, p = this.options;
  6652. var fields = e.fields;
  6653. g.validate = g.validate || {};
  6654. if (fields && fields.length)
  6655. {
  6656. $(fields).each(function (index, field)
  6657. {
  6658. var name = field.name,
  6659. readonly = (field.readonly || (field.editor && field.editor.readonly)) ? true : false,
  6660. txtInputName = (p.prefixID || "") + (field.textField || field.id || field.name);
  6661. if (field.validate && !readonly)
  6662. {
  6663. g.validate.rules = g.validate.rules || {};
  6664. g.validate.rules[txtInputName] = field.validate;
  6665. if (field.validateMessage)
  6666. {
  6667. g.validate.messages = g.validate.messages || {};
  6668. g.validate.messages[txtInputName] = field.validateMessage;
  6669. }
  6670. }
  6671. });
  6672. }
  6673. },
  6674. _initFieldsHtml : function(e)
  6675. {
  6676. var g = this, p = this.options;
  6677. var jform = e.panel,
  6678. fields = e.fields,
  6679. idPrev = e.idPrev || g.id;
  6680. $(">.l-form-container", jform).remove();
  6681. var lineWidth = 0, maxWidth = 0;
  6682. if (fields && fields.length)
  6683. {
  6684. g._preSetFields(fields);
  6685. var out = ['<div class="l-form-container">'],
  6686. appendULStartTag = false,
  6687. lastVisitedGroup = null,
  6688. groups = [];
  6689. $(fields).each(function (index, field)
  6690. {
  6691. if ($.inArray(field.group, groups) == -1)
  6692. groups.push(field.group);
  6693. });
  6694. $(groups).each(function (groupIndex, group)
  6695. {
  6696. $(fields).each(function (i, field)
  6697. {
  6698. if (field.group != group) return;
  6699. var index = $.inArray(field, fields);
  6700. var name = field.id || field.name, newline = field.newline;
  6701. var inputName = (p.prefixID || "") + (field.id || field.name);
  6702. if (!name) return;
  6703. if (field.type == "hidden")
  6704. {
  6705. if (!$("#" + inputName).length)
  6706. out.push('<div style="display:none" id="' + (idPrev + "|" + i) + '"></div>');
  6707. return;
  6708. }
  6709. var toAppendGroupRow = field.group && field.group != lastVisitedGroup;
  6710. if (index == 0 || toAppendGroupRow) newline = true;
  6711. if (newline)
  6712. {
  6713. lineWidth = 0;
  6714. if (appendULStartTag)
  6715. {
  6716. out.push('</ul>');
  6717. appendULStartTag = false;
  6718. }
  6719. if (toAppendGroupRow)
  6720. {
  6721. out.push('<div class="l-group');
  6722. if (field.groupicon)
  6723. out.push(' l-group-hasicon');
  6724. out.push('">');
  6725. if (field.groupicon)
  6726. out.push('<img src="' + field.groupicon + '" />');
  6727. out.push('<span>' + field.group + '</span></div>');
  6728. lastVisitedGroup = field.group;
  6729. }
  6730. out.push('<ul>');
  6731. appendULStartTag = true;
  6732. }
  6733. out.push('<li class="l-fieldcontainer');
  6734. if (newline)
  6735. {
  6736. out.push(' l-fieldcontainer-first');
  6737. }
  6738. out.push('"');
  6739. out.push(' fieldindex=' + index);
  6740. out.push('><ul>');
  6741. if (!field.hideLabel)
  6742. {
  6743. out.push(g._buliderLabelContainer(field, index));
  6744. }
  6745. //append input
  6746. out.push(g._buliderControlContainer(field, index, e.idPrev));
  6747. //append space
  6748. if (!field.hideSpace)
  6749. {
  6750. out.push(g._buliderSpaceContainer(field, index));
  6751. }
  6752. out.push('</ul></li>');
  6753. lineWidth += (field.width || p.inputWidth || 0);
  6754. lineWidth += (field.space || p.space || 0);
  6755. lineWidth += (field.labelWidth || p.labelWidth || 0);
  6756. if (lineWidth > maxWidth) maxWidth = lineWidth;
  6757. });
  6758. });
  6759. if (appendULStartTag)
  6760. {
  6761. out.push('</ul>');
  6762. appendULStartTag = false;
  6763. }
  6764. out.push('</div>');
  6765. jform.append(out.join(''));
  6766. if (!p.width || maxWidth > p.width)
  6767. {
  6768. //jform.width(maxWidth + 10);
  6769. }
  6770. $(".l-group .togglebtn", jform).remove();
  6771. $(".l-group", jform).width(jform.width() * 0.95).append("<div class='togglebtn'></div>");
  6772. }
  6773. },
  6774. _createEditors : function(e)
  6775. {
  6776. var g = this, p = this.options;
  6777. var fields = e.fields,
  6778. idPrev = e.idPrev || g.id,
  6779. editPrev = e.editPrev || "";
  6780. g.editors = g.editors || {};
  6781. $(fields).each(function (fieldIndex, field)
  6782. {
  6783. var container = document.getElementById(idPrev + "|" + fieldIndex),
  6784. editor = p.editors[field.type],
  6785. editId = editPrev + fieldIndex;
  6786. if (!container) return;
  6787. container = $(container);
  6788. var editorControl = g._createEditor(editor, container, {
  6789. field: field
  6790. }, container.width(), container.height());
  6791. if (!editorControl) return;
  6792. if (g.editors[editId] && g.editors[editId].control && g.editors[editId].control.destroy)
  6793. {
  6794. g.editors[editId].control.destroy();
  6795. }
  6796. g.editors[editId] = {
  6797. control: editorControl,
  6798. editor: editor
  6799. };
  6800. });
  6801. },
  6802. getData: function ()
  6803. {
  6804. var g = this, p = this.options;
  6805. g.data = {};
  6806. getFieldValueToData(p.fields);
  6807. if (p.tab && p.tab.items)
  6808. {
  6809. for (var i = 0; i < p.tab.items.length; i++)
  6810. {
  6811. var item = p.tab.items[i];
  6812. getFieldValueToData(item.fields, i);
  6813. }
  6814. }
  6815. function getFieldValueToData(fields, tabIndex)
  6816. {
  6817. $(fields).each(function (fieldIndex, field)
  6818. {
  6819. var name = field.name,
  6820. textField = field.textField,
  6821. editPrev = tabIndex == null ? "" : "tab" + tabIndex + "_",
  6822. editor = g.editors[editPrev + fieldIndex];
  6823. if (!editor) return;
  6824. if (name)
  6825. {
  6826. var value = editor.editor.getValue(editor.control, {
  6827. field: field
  6828. });
  6829. g._setValueByName(g.data, name, value);
  6830. }
  6831. if (textField)
  6832. {
  6833. var value = editor.editor.getText(editor.control, {
  6834. field: field
  6835. });
  6836. g._setValueByName(g.data, textField, value);
  6837. }
  6838. });
  6839. }
  6840. return g.data;
  6841. },
  6842. setData: function (data)
  6843. {
  6844. var g = this, p = this.options;
  6845. g.data = data || {};
  6846. setDataToFields(p.fields);
  6847. if (p.tab && p.tab.items)
  6848. {
  6849. for (var i = 0; i < p.tab.items.length; i++)
  6850. {
  6851. var item = p.tab.items[i];
  6852. setDataToFields(item.fields, i);
  6853. }
  6854. }
  6855. function setDataToFields(fields, tabIndex)
  6856. {
  6857. $(fields).each(function (fieldIndex, field)
  6858. {
  6859. var name = field.name,
  6860. textField = field.textField,
  6861. editPrev = tabIndex == null ? "" : "tab" + tabIndex + "_",
  6862. editor = g.editors[editPrev + fieldIndex];
  6863. if (!editor) return;
  6864. if (name && (name in g.data))
  6865. {
  6866. var value = g._getValueByName(g.data, name);
  6867. editor.editor.setValue(editor.control, value, {
  6868. field: field
  6869. });
  6870. }
  6871. if (textField && (textField in g.data))
  6872. {
  6873. var text = g._getValueByName(g.data, textField);
  6874. editor.editor.setText(editor.control, text, {
  6875. field: field
  6876. });
  6877. }
  6878. });
  6879. }
  6880. },
  6881. _setValueByName: function (data, name, value)
  6882. {
  6883. if (!data || !name) return null;
  6884. if (name.indexOf('.') == -1)
  6885. {
  6886. data[name] = value;
  6887. }
  6888. else
  6889. {
  6890. try
  6891. {
  6892. new Function("data,value", "data." + name + "=value;")(data, value);
  6893. }
  6894. catch (e)
  6895. {
  6896. }
  6897. }
  6898. },
  6899. _getValueByName: function (data, name)
  6900. {
  6901. if (!data || !name) return null;
  6902. if (name.indexOf('.') == -1)
  6903. {
  6904. return data[name];
  6905. }
  6906. else
  6907. {
  6908. try
  6909. {
  6910. return new Function("data", "return data." + name + ";")(data);
  6911. }
  6912. catch (e)
  6913. {
  6914. return null;
  6915. }
  6916. }
  6917. },
  6918. //验证
  6919. valid: function ()
  6920. {
  6921. var g = this, p = this.options;
  6922. if (!g.form || !g.validator) return true;
  6923. return g.form.valid();
  6924. },
  6925. //设置验证
  6926. initValidate: function ()
  6927. {
  6928. var g = this, p = this.options;
  6929. if (!g.form || !p.validate || !g.form.validate)
  6930. {
  6931. g.validator = null;
  6932. return;
  6933. }
  6934. var validate = p.validate == true ? {} : p.validate;
  6935. var validateOptions = $.extend({
  6936. errorPlacement: function (lable, element)
  6937. {
  6938. if (!element.attr("id"))
  6939. element.attr("id", new Date().getTime());
  6940. if (element.hasClass("l-textarea"))
  6941. {
  6942. element.addClass("l-textarea-invalid");
  6943. }
  6944. else if (element.hasClass("l-text-field"))
  6945. {
  6946. element.parent().addClass("l-text-invalid");
  6947. }
  6948. $(element).removeAttr("title").ligerHideTip();
  6949. $(element).attr("title", lable.html()).ligerTip({
  6950. distanceX: 5,
  6951. distanceY: -3,
  6952. auto: true
  6953. });
  6954. },
  6955. success: function (lable)
  6956. {
  6957. if (!lable.attr("for")) return;
  6958. var element = $("#" + lable.attr("for"));
  6959. if (element.hasClass("l-textarea"))
  6960. {
  6961. element.removeClass("l-textarea-invalid");
  6962. }
  6963. else if (element.hasClass("l-text-field"))
  6964. {
  6965. element.parent().removeClass("l-text-invalid");
  6966. }
  6967. $(element).removeAttr("title").ligerHideTip();
  6968. }
  6969. }, validate, {
  6970. rules: g.validate.rules,
  6971. messages: g.validate.messages
  6972. });
  6973. g.validator = g.form.validate(validateOptions);
  6974. },
  6975. //提示 验证错误信息
  6976. showInvalid: function ()
  6977. {
  6978. var g = this, p = this.options;
  6979. if (!g.validator) return;
  6980. var jmessage = $('<div><div class="invalid">' + p.invalidMessage.replace('{errorCount}', g.validator.errorList.length) + '<a class="viewInvalidDetail" href="javascript:void(0)">' + p.detailMessage + '</a></div><div class="invalidDetail" style="display:none;">' + getInvalidInf(g.validator.errorList) + '</div></div>');
  6981. jmessage.find("a.viewInvalidDetail:first").bind('click', function ()
  6982. {
  6983. $(this).parent().next("div.invalidDetail").toggle();
  6984. });
  6985. $.ligerDialog.open({
  6986. type: 'error',
  6987. width: 350,
  6988. showMax: false,
  6989. showToggle: false,
  6990. showMin: false,
  6991. target: jmessage,
  6992. buttons: [
  6993. {
  6994. text: p.okMessage, onclick: function (item, dailog)
  6995. {
  6996. dailog.close();
  6997. }
  6998. }
  6999. ]
  7000. });
  7001. },
  7002. _createEditor: function (editorBuilder, container, editParm, width, height)
  7003. {
  7004. var g = this, p = this.options;
  7005. try
  7006. {
  7007. var editor = editorBuilder.create.call(this, container, editParm, p);
  7008. if (editor && editorBuilder.resize)
  7009. editorBuilder.resize.call(this, editor, width, height, editParm);
  7010. return editor;
  7011. } catch (e)
  7012. {
  7013. return null;
  7014. }
  7015. },
  7016. //标签部分
  7017. _buliderLabelContainer: function (field)
  7018. {
  7019. var g = this, p = this.options;
  7020. var label = field.label || field.display;
  7021. var labelWidth = field.labelWidth || field.labelwidth || p.labelWidth;
  7022. var labelAlign = field.labelAlign || p.labelAlign;
  7023. if (label) label += field.rightToken || p.rightToken;
  7024. var out = [];
  7025. out.push('<li');
  7026. if (p.labelCss)
  7027. {
  7028. out.push(' class="' + p.labelCss + '"');
  7029. }
  7030. out.push(' style="');
  7031. if (/px$/i.test(labelWidth) || /auto/i.test(labelWidth) || /%$/i.test(labelWidth))
  7032. {
  7033. out.push('width:' + labelWidth + ';');
  7034. }
  7035. else if (labelWidth)
  7036. {
  7037. out.push('width:' + labelWidth + 'px;');
  7038. }
  7039. if (labelAlign)
  7040. {
  7041. out.push('text-align:' + labelAlign + ';');
  7042. }
  7043. out.push('">');
  7044. if (label)
  7045. {
  7046. out.push(label);
  7047. }
  7048. out.push('</li>');
  7049. return out.join('');
  7050. },
  7051. //控件部分
  7052. _buliderControlContainer: function (field, fieldIndex,idPrev)
  7053. {
  7054. var g = this, p = this.options;
  7055. var width = field.width || p.inputWidth,
  7056. align = field.align || field.textAlign || field.textalign || p.align,
  7057. out = [],
  7058. idPrev = idPrev || g.id;
  7059. out.push('<li');
  7060. out.push(' id="' + (idPrev + "|" + fieldIndex) + '"');
  7061. if (p.fieldCss)
  7062. {
  7063. out.push(' class="' + p.fieldCss + '"');
  7064. }
  7065. out.push(' style="');
  7066. if (width)
  7067. {
  7068. out.push('width:' + width + 'px;');
  7069. }
  7070. if (align)
  7071. {
  7072. out.push('text-align:' + align + ';');
  7073. }
  7074. out.push('">');
  7075. out.push('</li>');
  7076. return out.join('');
  7077. },
  7078. //间隔部分
  7079. _buliderSpaceContainer: function (field)
  7080. {
  7081. var g = this, p = this.options;
  7082. var spaceWidth = field.space || field.spaceWidth || p.space;
  7083. if (field.space === 0 || field.spaceWidth === 0) spaceWidth = 0;
  7084. var out = [];
  7085. out.push('<li');
  7086. if (p.spaceCss)
  7087. {
  7088. out.push(' class="' + p.spaceCss + '"');
  7089. }
  7090. out.push(' style="');
  7091. if (/px$/i.test(spaceWidth) || /auto/i.test(spaceWidth) || /%$/i.test(spaceWidth))
  7092. {
  7093. out.push('width:' + spaceWidth + ';');
  7094. }
  7095. if (spaceWidth)
  7096. {
  7097. out.push('width:' + spaceWidth + 'px;');
  7098. }
  7099. out.push('">');
  7100. if (field.validate && field.validate.required)
  7101. {
  7102. out.push("<span class='l-star'>*</span>");
  7103. }
  7104. out.push('</li>');
  7105. return out.join('');
  7106. },
  7107. _getInputAttrHtml: function (field)
  7108. {
  7109. var out = [], type = (field.type || "text").toLowerCase();
  7110. if (type == "textarea")
  7111. {
  7112. field.cols && out.push('cols="' + field.cols + '" ');
  7113. field.rows && out.push('rows="' + field.rows + '" ');
  7114. }
  7115. out.push('ltype="' + type + '" ');
  7116. field.op && out.push('op="' + field.op + '" ');
  7117. field.vt && out.push('vt="' + field.vt + '" ');
  7118. if (field.attr)
  7119. {
  7120. for (var attrp in field.attr)
  7121. {
  7122. out.push(attrp + '="' + field.attr[attrp] + '" ');
  7123. }
  7124. }
  7125. return out.join('');
  7126. },
  7127. _setTab: function (tab)
  7128. {
  7129. var g = this, p = this.options;
  7130. if (!tab || !tab.items) return;
  7131. var jtab = $('<div class="l-form-tabs"></div>').appendTo(g.element);
  7132. var jtabNav = $('<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" original-title="">').appendTo(jtab);
  7133. for (var i = 0; i < tab.items.length; i++)
  7134. {
  7135. var tabItem = tab.items[i],
  7136. jnavItem = $('<li class="ui-state-default ui-corner-top"><a href="javascript:void(0)"></a></li>').appendTo(jtabNav),
  7137. jcontentItem = $('<div class="ui-tabs-panel ui-widget-content ui-corner-bottom">').appendTo(jtab),
  7138. idPrev = g.id +"|tdb" + i;
  7139. jnavItem.add(jcontentItem).attr("data-index", i);
  7140. jnavItem.find("a:first").text(tabItem.title);
  7141. g._initFieldsValidate({
  7142. fields: tabItem.fields
  7143. });
  7144. g._initFieldsHtml({
  7145. panel: jcontentItem,
  7146. fields: tabItem.fields,
  7147. idPrev: idPrev
  7148. });
  7149. g._createEditors({
  7150. fields: tabItem.fields,
  7151. idPrev: idPrev,
  7152. editPrev: 'tab' + i + "_"
  7153. });
  7154. }
  7155. jtabNav.find("li").hover(function ()
  7156. {
  7157. $(this).addClass("ui-state-active");
  7158. }, function ()
  7159. {
  7160. $(this).removeClass("ui-state-active");
  7161. }).click(function ()
  7162. {
  7163. var index = $(this).attr("data-index");
  7164. g.selectTab(index);
  7165. });
  7166. g.selectTab(0);
  7167. },
  7168. selectTab : function (index)
  7169. {
  7170. var g = this, p = this.options;
  7171. var jtab = $(g.element).find(".l-form-tabs:first");
  7172. var links = jtab.find(".ui-tabs-nav li"), contents = jtab.find(".ui-tabs-panel");
  7173. links.filter("[data-index=" + index + "]")
  7174. .addClass("ui-tabs-selected ui-state-active ui-state-hover");
  7175. links.filter("[data-index!=" + index + "]")
  7176. .removeClass("ui-tabs-selected ui-state-active ui-state-hover");
  7177. contents.filter("[data-index=" + index + "]").show();
  7178. contents.filter("[data-index!=" + index + "]").hide();
  7179. }
  7180. });
  7181. function getInvalidInf(errorList)
  7182. {
  7183. var out = [];
  7184. $(errorList).each(function (i, error)
  7185. {
  7186. var label = $(error.element).parents("li:first").prev("li:first").html();
  7187. var message = error.message;
  7188. out.push('<div>' + label + ' ' + message + '</div>');
  7189. });
  7190. return out.join('');
  7191. }
  7192. })(jQuery);/**
  7193. * jQuery ligerUI 1.2.4
  7194. *
  7195. * http://ligerui.com
  7196. *
  7197. * Author daomi 2014 [ gd_star@163.com ]
  7198. *
  7199. */
  7200. (function ($)
  7201. {
  7202. var l = $.ligerui;
  7203. $.fn.ligerGrid = function (options)
  7204. {
  7205. return $.ligerui.run.call(this, "ligerGrid", arguments);
  7206. };
  7207. $.fn.ligerGetGridManager = function ()
  7208. {
  7209. return $.ligerui.run.call(this, "ligerGetGridManager", arguments);
  7210. };
  7211. $.ligerDefaults.Grid = {
  7212. title: null,
  7213. width: 'auto', //宽度值
  7214. height: 'auto', //宽度值
  7215. columnWidth: null, //默认列宽度
  7216. resizable: true, //table是否可伸缩
  7217. url: false, //ajax url
  7218. data: null, //初始化数据
  7219. usePager: true, //是否分页
  7220. page: 1, //默认当前页
  7221. pageSize: 10, //每页默认的结果数
  7222. pageSizeOptions: [10, 20, 30, 40, 50], //可选择设定的每页结果数
  7223. parms: [], //提交到服务器的参数
  7224. columns: [], //数据源
  7225. minColToggle: 1, //最小显示的列
  7226. dataType: 'server', //数据源:本地(local)或(server),本地是将读取p.data。不需要配置,取决于设置了data或是url
  7227. dataAction: 'server', //提交数据的方式:本地(local)或(server),选择本地方式时将在客服端分页、排序。
  7228. showTableToggleBtn: false, //是否显示'显示隐藏Grid'按钮
  7229. switchPageSizeApplyComboBox: false, //切换每页记录数是否应用ligerComboBox
  7230. allowAdjustColWidth: true, //是否允许调整列宽
  7231. checkbox: false, //是否显示复选框
  7232. allowHideColumn: true, //是否显示'切换列层'按钮
  7233. enabledEdit: false, //是否允许编辑
  7234. isScroll: true, //是否滚动
  7235. dateFormat: 'yyyy-MM-dd', //默认时间显示格式
  7236. inWindow: true, //是否以窗口的高度为准 height设置为百分比时可用
  7237. statusName: '__status', //状态名
  7238. method: 'post', //获取数据http方式
  7239. async: true,
  7240. fixedCellHeight: true, //是否固定单元格的高度
  7241. heightDiff: 0, //高度补差,当设置height:100%时,可能会有高度的误差,可以通过这个属性调整
  7242. cssClass: null, //类名
  7243. root: 'Rows', //数据源字段名
  7244. record: 'Total', //数据源记录数字段名
  7245. pageParmName: 'page', //页索引参数名,(提交给服务器)
  7246. pagesizeParmName: 'pagesize', //页记录数参数名,(提交给服务器)
  7247. sortnameParmName: 'sortname', //页排序列名(提交给服务器)
  7248. sortorderParmName: 'sortorder', //页排序方向(提交给服务器)
  7249. allowUnSelectRow: false, //是否允许反选行
  7250. alternatingRow: true, //奇偶行效果
  7251. mouseoverRowCssClass: 'l-grid-row-over',
  7252. enabledSort: true, //是否允许排序
  7253. rowAttrRender: null, //行自定义属性渲染器(包括style,也可以定义)
  7254. groupColumnName: null, //分组 - 列名
  7255. groupColumnDisplay: '分组', //分组 - 列显示名字
  7256. groupRender: null, //分组 - 渲染器
  7257. totalRender: null, //统计行(全部数据)
  7258. delayLoad: false, //初始化时是否不加载
  7259. where: null, //数据过滤查询函数,(参数一 data item,参数二 data item index)
  7260. selectRowButtonOnly: false, //复选框模式时,是否只允许点击复选框才能选择行
  7261. whenRClickToSelect: false, //右击行时是否选中
  7262. contentType: null, //Ajax contentType参数
  7263. checkboxColWidth: 27, //复选框列宽度
  7264. detailColWidth: 29, //明细列宽度
  7265. clickToEdit: true, //是否点击单元格的时候就编辑
  7266. detailToEdit: false, //是否点击明细的时候进入编辑
  7267. onEndEdit: null,
  7268. minColumnWidth: 80,
  7269. tree: null, //treeGrid模式
  7270. isChecked: null, //复选框 初始化函数
  7271. isSelected: null, //选择 初始化函数
  7272. frozen: true, //是否固定列
  7273. frozenDetail: false, //明细按钮是否在固定列中
  7274. frozenCheckbox: true, //复选框按钮是否在固定列中
  7275. detail: null,
  7276. detailHeight: 260,
  7277. isShowDetailToggle: null, //是否显示展开/收缩明细的判断函数
  7278. rownumbers: false, //是否显示行序号
  7279. frozenRownumbers: true, //行序号是否在固定列中
  7280. rownumbersColWidth: 26,
  7281. colDraggable: false, //是否允许表头拖拽
  7282. rowDraggable: false, //是否允许行拖拽
  7283. rowDraggingRender: null,
  7284. autoCheckChildren: true, //是否自动选中子节点
  7285. onRowDragDrop: null, //行拖拽事件
  7286. rowHeight: 28, //行默认的高度
  7287. headerRowHeight: 28, //表头行的高度
  7288. toolbar: null, //工具条,参数同 ligerToolbar的,额外参数有title、icon
  7289. toolbarShowInLeft: true, //工具条显示在左边
  7290. headerImg: null, //表格头部图标
  7291. editorTopDiff : 0, //编辑器top误差
  7292. unSetValidateAttr: true, //是否不设置validate属性到inuput
  7293. onDragCol: null, //拖动列事件
  7294. onToggleCol: null, //切换列事件
  7295. onChangeSort: null, //改变排序事件
  7296. onSuccess: null, //成功获取服务器数据的事件
  7297. onDblClickRow: null, //双击行事件
  7298. onSelectRow: null, //选择行事件
  7299. onUnSelectRow: null, //取消选择行事件
  7300. onBeforeCheckRow: null, //选择前事件,可以通过return false阻止操作(复选框)
  7301. onCheckRow: null, //选择事件(复选框)
  7302. onBeforeCheckAllRow: null, //选择前事件,可以通过return false阻止操作(复选框 全选/全不选)
  7303. onCheckAllRow: null, //选择事件(复选框 全选/全不选)onextend
  7304. onBeforeShowData: null, //显示数据前事件,可以通过reutrn false阻止操作
  7305. onAfterShowData: null, //显示完数据事件
  7306. onError: null, //错误事件
  7307. onSubmit: null, //提交前事件
  7308. onReload: null, //刷新事件,可以通过return false来阻止操作
  7309. onToFirst: null, //第一页,可以通过return false来阻止操作
  7310. onToPrev: null, //上一页,可以通过return false来阻止操作
  7311. onToNext: null, //下一页,可以通过return false来阻止操作
  7312. onToLast: null, //最后一页,可以通过return false来阻止操作
  7313. onAfterAddRow: null, //增加行后事件
  7314. onBeforeEdit: null, //编辑前事件
  7315. onBeforeSubmitEdit: null, //验证编辑器结果是否通过
  7316. onAfterEdit: null, //结束编辑后事件
  7317. onLoading: null, //加载时函数
  7318. onLoaded: null, //加载完函数
  7319. onContextmenu: null, //右击事件
  7320. onBeforeCancelEdit: null, //取消编辑前事件
  7321. onAfterSubmitEdit: null, //提交后事件
  7322. onRowDragDrop: null, //行拖拽后事件
  7323. onGroupExtend: null, //分组展开事件
  7324. onGroupCollapse: null, //分组收缩事件
  7325. onTreeExpand: null, //树展开事件
  7326. onTreeCollapse: null, //树收缩事件
  7327. onTreeExpanded: null, //树展开事件
  7328. onTreeCollapsed: null, //树收缩事件
  7329. onLoadData: null //加载数据前事件
  7330. };
  7331. $.ligerDefaults.GridString = {
  7332. errorMessage: '发生错误',
  7333. pageStatMessage: '显示从{from}到{to},总 {total} 条 。每页显示:{pagesize}',
  7334. pageTextMessage: 'Page',
  7335. loadingMessage: '加载中...',
  7336. findTextMessage: '查找',
  7337. noRecordMessage: '没有符合条件的记录存在',
  7338. isContinueByDataChanged: '数据已经改变,如果继续将丢失数据,是否继续?',
  7339. cancelMessage: '取消',
  7340. saveMessage: '保存',
  7341. applyMessage: '应用',
  7342. draggingMessage: '{count}行'
  7343. };
  7344. $.ligerDefaults.Grid_columns = {
  7345. id: null,
  7346. name: null,
  7347. totalSummary: null,
  7348. display: null,
  7349. headerRender: null,
  7350. isAllowHide: true,
  7351. isSort: false,
  7352. type: null,
  7353. columns: null,
  7354. width: 120,
  7355. minWidth: 80,
  7356. format: null,
  7357. align: 'left',
  7358. hide: false,
  7359. editor: null,
  7360. render: null,
  7361. textField: null //真正显示的字段名,如果设置了,在编辑状态时,会调用创建编辑器的setText和getText方法
  7362. };
  7363. $.ligerDefaults.Grid_editor = {
  7364. type: null,
  7365. ext: null,
  7366. onChange: null,
  7367. onChanged: null
  7368. };
  7369. //接口方法扩展
  7370. $.ligerMethos.Grid = $.ligerMethos.Grid || {};
  7371. //排序器扩展
  7372. $.ligerDefaults.Grid.sorters = $.ligerDefaults.Grid.sorters || {};
  7373. //格式化器扩展
  7374. $.ligerDefaults.Grid.formatters = $.ligerDefaults.Grid.formatters || {};
  7375. //编辑器扩展
  7376. $.ligerDefaults.Grid.editors = $.ligerDefaults.Grid.editors || {};
  7377. $.ligerDefaults.Grid.sorters['date'] = function (val1, val2)
  7378. {
  7379. return val1 < val2 ? -1 : val1 > val2 ? 1 : 0;
  7380. };
  7381. $.ligerDefaults.Grid.sorters['int'] = function (val1, val2)
  7382. {
  7383. return parseInt(val1) < parseInt(val2) ? -1 : parseInt(val1) > parseInt(val2) ? 1 : 0;
  7384. };
  7385. $.ligerDefaults.Grid.sorters['float'] = function (val1, val2)
  7386. {
  7387. return parseFloat(val1) < parseFloat(val2) ? -1 : parseFloat(val1) > parseFloat(val2) ? 1 : 0;
  7388. };
  7389. $.ligerDefaults.Grid.sorters['string'] = function (val1, val2)
  7390. {
  7391. if (!val1) return false;
  7392. return val1.localeCompare(val2);
  7393. };
  7394. $.ligerDefaults.Grid.formatters['date'] = function (value, column)
  7395. {
  7396. function getFormatDate(date, dateformat)
  7397. {
  7398. var g = this, p = this.options;
  7399. if (isNaN(date)) return null;
  7400. var format = dateformat;
  7401. var o = {
  7402. "M+": date.getMonth() + 1,
  7403. "d+": date.getDate(),
  7404. "h+": date.getHours(),
  7405. "m+": date.getMinutes(),
  7406. "s+": date.getSeconds(),
  7407. "q+": Math.floor((date.getMonth() + 3) / 3),
  7408. "S": date.getMilliseconds()
  7409. }
  7410. if (/(y+)/.test(format))
  7411. {
  7412. format = format.replace(RegExp.$1, (date.getFullYear() + "")
  7413. .substr(4 - RegExp.$1.length));
  7414. }
  7415. for (var k in o)
  7416. {
  7417. if (new RegExp("(" + k + ")").test(format))
  7418. {
  7419. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
  7420. : ("00" + o[k]).substr(("" + o[k]).length));
  7421. }
  7422. }
  7423. return format;
  7424. }
  7425. if (!value) return "";
  7426. // /Date(1328423451489)/
  7427. if (typeof (value) == "string" && /^\/Date/.test(value))
  7428. {
  7429. value = value.replace(/^\//, "new ").replace(/\/$/, "");
  7430. eval("value = " + value);
  7431. }
  7432. if (value instanceof Date)
  7433. {
  7434. var format = column.format || this.options.dateFormat || "yyyy-MM-dd";
  7435. return getFormatDate(value, format);
  7436. }
  7437. else
  7438. {
  7439. return value.toString();
  7440. }
  7441. }
  7442. $.ligerui.controls.Grid = function (element, options)
  7443. {
  7444. $.ligerui.controls.Grid.base.constructor.call(this, element, options);
  7445. };
  7446. $.ligerui.controls.Grid.ligerExtend($.ligerui.core.UIComponent, {
  7447. __getType: function ()
  7448. {
  7449. return '$.ligerui.controls.Grid';
  7450. },
  7451. __idPrev: function ()
  7452. {
  7453. return 'grid';
  7454. },
  7455. _extendMethods: function ()
  7456. {
  7457. return $.ligerMethos.Grid;
  7458. },
  7459. _init: function ()
  7460. {
  7461. $.ligerui.controls.Grid.base._init.call(this);
  7462. var g = this, p = this.options;
  7463. p.dataType = p.url ? "server" : "local";
  7464. if (p.dataType == "local")
  7465. {
  7466. p.data = p.data || [];
  7467. p.dataAction = "local";
  7468. }
  7469. if (p.isScroll == false)
  7470. {
  7471. p.height = 'auto';
  7472. }
  7473. if (!p.frozen)
  7474. {
  7475. p.frozenCheckbox = false;
  7476. p.frozenDetail = false;
  7477. p.frozenRownumbers = false;
  7478. }
  7479. if (p.detailToEdit)
  7480. {
  7481. p.enabledEdit = true;
  7482. p.clickToEdit = false;
  7483. p.detail = {
  7484. height: 'auto',
  7485. onShowDetail: function (record, container, callback)
  7486. {
  7487. $(container).addClass("l-grid-detailpanel-edit");
  7488. g.beginEdit(record, function (rowdata, column)
  7489. {
  7490. var editContainer = $("<div class='l-editbox'></div>");
  7491. editContainer.width(120).height(p.rowHeight + 1);
  7492. editContainer.appendTo(container);
  7493. return editContainer;
  7494. });
  7495. function removeRow()
  7496. {
  7497. $(container).parent().parent().remove();
  7498. g.collapseDetail(record);
  7499. }
  7500. $("<div class='l-clear'></div>").appendTo(container);
  7501. $("<div class='l-button'>" + p.saveMessage + "</div>").appendTo(container).click(function ()
  7502. {
  7503. g.endEdit(record);
  7504. removeRow();
  7505. });
  7506. $("<div class='l-button'>" + p.applyMessage + "</div>").appendTo(container).click(function ()
  7507. {
  7508. g.submitEdit(record);
  7509. });
  7510. $("<div class='l-button'>" + p.cancelMessage + "</div>").appendTo(container).click(function ()
  7511. {
  7512. g.cancelEdit(record);
  7513. removeRow();
  7514. });
  7515. }
  7516. };
  7517. }
  7518. if (p.tree)//启用分页模式
  7519. {
  7520. p.tree.childrenName = p.tree.childrenName || "children";
  7521. p.tree.isParent = p.tree.isParent || function (rowData)
  7522. {
  7523. var exist = p.tree.childrenName in rowData;
  7524. return exist;
  7525. };
  7526. p.tree.isExtend = p.tree.isExtend || function (rowData)
  7527. {
  7528. if ('isextend' in rowData && rowData['isextend'] == false)
  7529. return false;
  7530. return true;
  7531. };
  7532. }
  7533. //编辑构造器初始化
  7534. for (var type in liger.editors)
  7535. {
  7536. var editor = liger.editors[type];
  7537. //如果没有默认的或者已经定义
  7538. if (!editor || type in p.editors) continue;
  7539. p.editors[type] = liger.getEditor($.extend({
  7540. type: type,
  7541. master: g
  7542. }, editor));
  7543. }
  7544. },
  7545. _render: function ()
  7546. {
  7547. var g = this, p = this.options;
  7548. g.grid = $(g.element);
  7549. g.grid.addClass("l-panel");
  7550. var gridhtmlarr = [];
  7551. gridhtmlarr.push(" <div class='l-panel-header'><span class='l-panel-header-text'></span></div>");
  7552. gridhtmlarr.push(" <div class='l-grid-loading'></div>");
  7553. gridhtmlarr.push(" <div class='l-panel-topbar' style='display:none'><div class='l-panel-topbarinner'></div></div><div class='l-clear'></div>");
  7554. gridhtmlarr.push(" <div class='l-panel-bwarp'>");
  7555. gridhtmlarr.push(" <div class='l-panel-body'>");
  7556. gridhtmlarr.push(" <div class='l-grid'>");
  7557. gridhtmlarr.push(" <div class='l-grid-dragging-line'></div>");
  7558. gridhtmlarr.push(" <div class='l-grid-popup'><table cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  7559. gridhtmlarr.push(" <div class='l-grid1'>");
  7560. gridhtmlarr.push(" <div class='l-grid-header l-grid-header1'>");
  7561. gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  7562. gridhtmlarr.push(" </div>");
  7563. gridhtmlarr.push(" <div class='l-grid-body l-grid-body1'>");
  7564. gridhtmlarr.push(" </div>");
  7565. gridhtmlarr.push(" </div>");
  7566. gridhtmlarr.push(" <div class='l-grid2'>");
  7567. gridhtmlarr.push(" <div class='l-grid-header l-grid-header2'>");
  7568. gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  7569. gridhtmlarr.push(" </div>");
  7570. gridhtmlarr.push(" <div class='l-grid-body l-grid-body2 l-scroll'>");
  7571. gridhtmlarr.push(" </div>");
  7572. gridhtmlarr.push(" </div>");
  7573. gridhtmlarr.push(" </div>");
  7574. gridhtmlarr.push(" </div>");
  7575. gridhtmlarr.push(" </div>");
  7576. gridhtmlarr.push(" <div class='l-panel-bar'>");
  7577. gridhtmlarr.push(" <div class='l-panel-bbar-inner'>");
  7578. gridhtmlarr.push(" <div class='l-bar-group l-bar-message'><span class='l-bar-text'></span></div>");
  7579. gridhtmlarr.push(" <div class='l-bar-group l-bar-selectpagesize'></div>");
  7580. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  7581. gridhtmlarr.push(" <div class='l-bar-group'>");
  7582. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnfirst'><span></span></div>");
  7583. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnprev'><span></span></div>");
  7584. gridhtmlarr.push(" </div>");
  7585. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  7586. gridhtmlarr.push(" <div class='l-bar-group'><span class='pcontrol'> <input type='text' size='4' value='1' style='width:20px' maxlength='3' /> / <span></span></span></div>");
  7587. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  7588. gridhtmlarr.push(" <div class='l-bar-group'>");
  7589. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnnext'><span></span></div>");
  7590. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnlast'><span></span></div>");
  7591. gridhtmlarr.push(" </div>");
  7592. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  7593. gridhtmlarr.push(" <div class='l-bar-group'>");
  7594. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnload'><span></span></div>");
  7595. gridhtmlarr.push(" </div>");
  7596. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  7597. gridhtmlarr.push(" <div class='l-clear'></div>");
  7598. gridhtmlarr.push(" </div>");
  7599. gridhtmlarr.push(" </div>");
  7600. g.grid.html(gridhtmlarr.join(''));
  7601. //头部
  7602. g.header = $(".l-panel-header:first", g.grid);
  7603. //主体
  7604. g.body = $(".l-panel-body:first", g.grid);
  7605. //底部工具条
  7606. g.toolbar = $(".l-panel-bar:first", g.grid);
  7607. //显示/隐藏列
  7608. g.popup = $(".l-grid-popup:first", g.grid);
  7609. //加载中
  7610. g.gridloading = $(".l-grid-loading:first", g.grid);
  7611. //调整列宽层
  7612. g.draggingline = $(".l-grid-dragging-line", g.grid);
  7613. //顶部工具栏
  7614. g.topbar = $(".l-panel-topbarinner:first", g.grid);
  7615. g.gridview = $(".l-grid:first", g.grid);
  7616. g.gridview.attr("id", g.id + "grid");
  7617. g.gridview1 = $(".l-grid1:first", g.gridview);
  7618. g.gridview2 = $(".l-grid2:first", g.gridview);
  7619. //表头
  7620. g.gridheader = $(".l-grid-header:first", g.gridview2);
  7621. //表主体
  7622. g.gridbody = $(".l-grid-body:first", g.gridview2);
  7623. //frozen
  7624. g.f = {};
  7625. //表头
  7626. g.f.gridheader = $(".l-grid-header:first", g.gridview1);
  7627. //表主体
  7628. g.f.gridbody = $(".l-grid-body:first", g.gridview1);
  7629. g.currentData = null;
  7630. g.changedCells = {};
  7631. g.editors = {}; //多编辑器同时存在
  7632. g.editor = { editing: false }; //单编辑器,配置clickToEdit
  7633. g.cacheData = {}; //缓存数据
  7634. if (p.height == "auto")
  7635. {
  7636. g.bind("SysGridHeightChanged", function ()
  7637. {
  7638. if (g.enabledFrozen())
  7639. g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height()));
  7640. });
  7641. }
  7642. var pc = $.extend({}, p);
  7643. this._bulid();
  7644. this._setColumns(p.columns);
  7645. delete pc['columns'];
  7646. delete pc['data'];
  7647. delete pc['url'];
  7648. g.set(pc);
  7649. if (!p.delayLoad)
  7650. {
  7651. if (p.url)
  7652. g.set({ url: p.url });
  7653. else if (p.data)
  7654. g.set({ data: p.data });
  7655. }
  7656. },
  7657. _setFrozen: function (frozen)
  7658. {
  7659. if (frozen)
  7660. this.grid.addClass("l-frozen");
  7661. else
  7662. this.grid.removeClass("l-frozen");
  7663. },
  7664. _setCssClass: function (value)
  7665. {
  7666. this.grid.addClass(value);
  7667. },
  7668. _setLoadingMessage: function (value)
  7669. {
  7670. this.gridloading.html(value);
  7671. },
  7672. _setToolbar: function (value)
  7673. {
  7674. var g = this, p = this.options;
  7675. if (value && $.fn.ligerToolBar)
  7676. {
  7677. g.topbar.parent().show();
  7678. g.toolbarManager = g.topbar.ligerToolBar(value);
  7679. if (value.title)
  7680. {
  7681. var jtitle = $("<div class='l-panel-topbartitle'><span>" + value.title + "</span></div>");
  7682. if (value.icon)
  7683. {
  7684. jtitle.append("<img class='l-panel-topbaricon' src='" + value.icon + "'></img>");
  7685. jtitle.addClass("l-panel-topbartitle-hasicon");
  7686. }
  7687. g.topbar.parent().append(jtitle);
  7688. }
  7689. if (p.toolbarShowInLeft)
  7690. {
  7691. g.topbar.addClass("l-panel-topbarinner-left");
  7692. }
  7693. } else
  7694. {
  7695. g.topbar.parent().remove();
  7696. }
  7697. },
  7698. isHorizontalScrollShowed: function ()
  7699. {
  7700. var g = this;
  7701. var inner = g.gridbody.find(".l-grid-body-inner:first");
  7702. if (!inner.length) return false;
  7703. //20为横向滚动条的宽度
  7704. return g.gridbody.width() - 20 < inner.width();
  7705. },
  7706. _setHeight: function (h)
  7707. {
  7708. var g = this, p = this.options;
  7709. g.unbind("SysGridHeightChanged");
  7710. if (h == "auto")
  7711. {
  7712. g.bind("SysGridHeightChanged", function ()
  7713. {
  7714. if (g.enabledFrozen())
  7715. g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height()));
  7716. });
  7717. return;
  7718. }
  7719. h = g._calculateGridBodyHeight(h);
  7720. if (h > 0)
  7721. {
  7722. g.gridbody.height(h);
  7723. g.f.gridbody.height(h);
  7724. var gridHeaderHeight = p.headerRowHeight * (g._columnMaxLevel - 1) + p.headerRowHeight - 1;
  7725. g.gridview.height(h + gridHeaderHeight);
  7726. }
  7727. g._updateHorizontalScrollStatus.ligerDefer(g, 10);
  7728. },
  7729. _calculateGridBodyHeight: function (h)
  7730. {
  7731. var g = this, p = this.options;
  7732. if (typeof h == "string" && h.indexOf('%') > 0)
  7733. {
  7734. if (p.inWindow)
  7735. h = $(window).height() * parseInt(h) * 0.01;
  7736. else
  7737. h = g.grid.parent().height() * parseInt(h) * 0.01;
  7738. }
  7739. if (p.title) h -= 24;
  7740. if (p.usePager) h -= 32;
  7741. if (p.totalRender) h -= 25;
  7742. if (p.toolbar) h -= g.topbar.outerHeight();
  7743. var gridHeaderHeight = p.headerRowHeight * (g._columnMaxLevel - 1) + p.headerRowHeight - 1;
  7744. h -= gridHeaderHeight;
  7745. return h;
  7746. },
  7747. _updateHorizontalScrollStatus: function ()
  7748. {
  7749. var g = this, p = this.options;
  7750. if (g.isHorizontalScrollShowed())
  7751. {
  7752. g.gridview.addClass("l-grid-hashorizontal");
  7753. }
  7754. else
  7755. {
  7756. g.gridview.removeClass("l-grid-hashorizontal");
  7757. }
  7758. },
  7759. _updateFrozenWidth: function ()
  7760. {
  7761. var g = this, p = this.options;
  7762. if (g.enabledFrozen())
  7763. {
  7764. g.gridview1.width(g.f.gridtablewidth);
  7765. var view2width = g.gridview.width() - g.f.gridtablewidth;
  7766. g.gridview2.css({ left: g.f.gridtablewidth });
  7767. if (view2width > 0) g.gridview2.css({ width: view2width });
  7768. }
  7769. },
  7770. _setWidth: function (value)
  7771. {
  7772. var g = this, p = this.options;
  7773. if (g.enabledFrozen()) g._onResize();
  7774. },
  7775. _setUrl: function (value)
  7776. {
  7777. this.options.url = value;
  7778. if (value)
  7779. {
  7780. this.options.dataType = "server";
  7781. this.loadData(true);
  7782. }
  7783. else
  7784. {
  7785. this.options.dataType = "local";
  7786. }
  7787. },
  7788. removeParm: function (name)
  7789. {
  7790. var g = this;
  7791. var parms = g.get('parms');
  7792. if (!parms) parms = {};
  7793. if (parms instanceof Array)
  7794. {
  7795. removeArrItem(parms, function (p) { return p.name == name; });
  7796. } else
  7797. {
  7798. delete parms[name];
  7799. }
  7800. g.set('parms', parms);
  7801. },
  7802. setParm: function (name, value)
  7803. {
  7804. var g = this;
  7805. var parms = g.get('parms');
  7806. if (!parms) parms = {};
  7807. if (parms instanceof Array)
  7808. {
  7809. removeArrItem(parms, function (p) { return p.name == name; });
  7810. parms.push({ name: name, value: value });
  7811. } else
  7812. {
  7813. parms[name] = value;
  7814. }
  7815. g.set('parms', parms);
  7816. },
  7817. _setData: function (value)
  7818. {
  7819. this.loadData(this.options.data);
  7820. },
  7821. //刷新数据
  7822. loadData: function (loadDataParm)
  7823. {
  7824. var g = this, p = this.options;
  7825. g.loading = true;
  7826. g.trigger('loadData');
  7827. var clause = null;
  7828. var loadServer = true;
  7829. if (typeof (loadDataParm) == "function")
  7830. {
  7831. clause = loadDataParm;
  7832. if (g.lastData)
  7833. {
  7834. g.data = g.lastData;
  7835. } else
  7836. {
  7837. g.data = g.currentData;
  7838. if (!g.data) g.data = {};
  7839. if (!g.data[p.root]) g.data[p.root] = [];
  7840. g.lastData = g.data;
  7841. }
  7842. loadServer = false;
  7843. }
  7844. else if (typeof (loadDataParm) == "boolean")
  7845. {
  7846. loadServer = loadDataParm;
  7847. }
  7848. else if (typeof (loadDataParm) == "object" && loadDataParm)
  7849. {
  7850. loadServer = false;
  7851. p.dataType = "local";
  7852. p.data = loadDataParm;
  7853. }
  7854. //参数初始化
  7855. if (!p.newPage) p.newPage = 1;
  7856. if (p.dataAction == "server")
  7857. {
  7858. if (!p.sortOrder) p.sortOrder = "asc";
  7859. }
  7860. var param = [];
  7861. if (p.parms)
  7862. {
  7863. var parms = $.isFunction(p.parms) ? p.parms() : p.parms;
  7864. if (parms.length)
  7865. {
  7866. $(parms).each(function ()
  7867. {
  7868. param.push({ name: this.name, value: this.value });
  7869. });
  7870. }
  7871. else if (typeof parms == "object")
  7872. {
  7873. for (var name in parms)
  7874. {
  7875. param.push({ name: name, value: parms[name] });
  7876. }
  7877. }
  7878. }
  7879. if (p.dataAction == "server")
  7880. {
  7881. if (p.usePager)
  7882. {
  7883. param.push({ name: p.pageParmName, value: p.newPage });
  7884. param.push({ name: p.pagesizeParmName, value: p.pageSize });
  7885. }
  7886. if (p.sortName)
  7887. {
  7888. param.push({ name: p.sortnameParmName, value: p.sortName });
  7889. param.push({ name: p.sortorderParmName, value: p.sortOrder });
  7890. }
  7891. };
  7892. $(".l-bar-btnload span", g.toolbar).addClass("l-disabled");
  7893. if (p.dataType == "local")
  7894. {
  7895. g.filteredData = p.data || g.currentData;
  7896. if (clause)
  7897. g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  7898. if (p.usePager)
  7899. g.currentData = g._getCurrentPageData(g.filteredData);
  7900. else
  7901. {
  7902. g.currentData = g.filteredData;
  7903. }
  7904. g._convertTreeData();
  7905. g._showData();
  7906. }
  7907. else if (p.dataAction == "local" && !loadServer)
  7908. {
  7909. if (g.data && g.data[p.root])
  7910. {
  7911. g.filteredData = g.data;
  7912. if (clause)
  7913. g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  7914. g.currentData = g._getCurrentPageData(g.filteredData);
  7915. g._convertTreeData();
  7916. g._showData();
  7917. }
  7918. }
  7919. else
  7920. {
  7921. g.loadServerData(param, clause);
  7922. //g.loadServerData.ligerDefer(g, 10, [param, clause]);
  7923. }
  7924. g.loading = false;
  7925. },
  7926. _convertTreeData: function ()
  7927. {
  7928. var g = this, p = this.options;
  7929. if (p.tree && p.tree.idField && p.tree.parentIDField)
  7930. {
  7931. g.currentData[p.root] = g.arrayToTree(g.currentData[p.root], p.tree.idField, p.tree.parentIDField);
  7932. g.currentData[p.record] = g.currentData[p.root].length;
  7933. }
  7934. },
  7935. loadServerData: function (param, clause)
  7936. {
  7937. var g = this, p = this.options;
  7938. var ajaxOptions = {
  7939. type: p.method,
  7940. url: p.url,
  7941. data: param,
  7942. async: p.async,
  7943. dataType: 'json',
  7944. beforeSend: function ()
  7945. {
  7946. if (g.hasBind('loading'))
  7947. {
  7948. g.trigger('loading');
  7949. }
  7950. else
  7951. {
  7952. g.toggleLoading(true);
  7953. }
  7954. },
  7955. success: function (data)
  7956. {
  7957. g.trigger('success', [data, g]);
  7958. if (!data || !data[p.root] || !data[p.root].length)
  7959. {
  7960. g.currentData = g.data = {};
  7961. g.currentData[p.root] = g.data[p.root] = [];
  7962. if (data && data[p.record])
  7963. {
  7964. g.currentData[p.record] = g.data[p.record] = data[p.record];
  7965. } else
  7966. {
  7967. g.currentData[p.record] = g.data[p.record] = 0;
  7968. }
  7969. g._convertTreeData();
  7970. g._showData();
  7971. return;
  7972. }
  7973. g.data = data;
  7974. //保存缓存数据-记录总数
  7975. if (g.data[p.record] != null && g.cacheData.records)
  7976. {
  7977. g.cacheData.records = g.data[p.record];
  7978. }
  7979. if (p.dataAction == "server") //服务器处理好分页排序数据
  7980. {
  7981. g.currentData = g.data;
  7982. //读取缓存数据-记录总数(当没有返回总记录数)
  7983. if (g.currentData[p.record] == null && g.cacheData.records)
  7984. {
  7985. g.currentData[p.record] = g.cacheData.records;
  7986. }
  7987. }
  7988. else //在客户端处理分页排序数据
  7989. {
  7990. g.filteredData = g.data;
  7991. if (clause) g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  7992. if (p.usePager)
  7993. g.currentData = g._getCurrentPageData(g.filteredData);
  7994. else
  7995. g.currentData = g.filteredData;
  7996. }
  7997. g._convertTreeData();
  7998. g._showData.ligerDefer(g, 10, [g.currentData]);
  7999. },
  8000. complete: function ()
  8001. {
  8002. g.trigger('complete', [g]);
  8003. if (g.hasBind('loaded'))
  8004. {
  8005. g.trigger('loaded', [g]);
  8006. }
  8007. else
  8008. {
  8009. g.toggleLoading.ligerDefer(g, 10, [false]);
  8010. }
  8011. },
  8012. error: function (XMLHttpRequest, textStatus, errorThrown)
  8013. {
  8014. g.currentData = g.data = {};
  8015. g.currentData[p.root] = g.data[p.root] = [];
  8016. g.currentData[p.record] = g.data[p.record] = 0;
  8017. g.toggleLoading.ligerDefer(g, 10, [false]);
  8018. $(".l-bar-btnload span", g.toolbar).removeClass("l-disabled");
  8019. g.trigger('error', [XMLHttpRequest, textStatus, errorThrown]);
  8020. }
  8021. };
  8022. if (p.contentType) ajaxOptions.contentType = p.contentType;
  8023. $.ajax(ajaxOptions);
  8024. },
  8025. toggleLoading: function (show)
  8026. {
  8027. this.gridloading[show ? 'show' : 'hide']();
  8028. },
  8029. _createEditor: function (editorBuilder, container, editParm, width, height)
  8030. {
  8031. var editor = editorBuilder.create.call(this, container, editParm);
  8032. if (editorBuilder.setValue)
  8033. editorBuilder.setValue.call(this, editor, editParm.value, editParm);
  8034. if (editorBuilder.setText && editParm.column.textField)
  8035. editorBuilder.setText.call(this, editor, editParm.text, editParm);
  8036. if (editorBuilder.resize)
  8037. editorBuilder.resize.call(this, editor, width, height, editParm);
  8038. return editor;
  8039. },
  8040. /*
  8041. @description 使一行进入编辑状态
  8042. @param {rowParm} rowindex或者rowdata
  8043. @param {containerBulider} 编辑器填充层构造器
  8044. */
  8045. beginEdit: function (rowParm, containerBulider)
  8046. {
  8047. var g = this, p = this.options;
  8048. if (!p.enabledEdit || p.clickToEdit) return;
  8049. var rowdata = g.getRow(rowParm);
  8050. if (rowdata._editing) return;
  8051. if (g.trigger('beginEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return;
  8052. g.editors[rowdata['__id']] = {};
  8053. rowdata._editing = true;
  8054. g.reRender({ rowdata: rowdata });
  8055. containerBulider = containerBulider || function (rowdata, column)
  8056. {
  8057. var cellobj = g.getCellObj(rowdata, column);
  8058. var container = $(cellobj).html("");
  8059. g.setCellEditing(rowdata, column, true);
  8060. return container;
  8061. };
  8062. for (var i = 0, l = g.columns.length; i < l; i++)
  8063. {
  8064. var column = g.columns[i];
  8065. if (!column.name || !column.editor || !column.editor.type || !p.editors[column.editor.type]) continue;
  8066. var editor = p.editors[column.editor.type];
  8067. var editParm = {
  8068. record: rowdata,
  8069. value: g._getValueByName(rowdata, column.name),
  8070. column: column,
  8071. rowindex: rowdata['__index'],
  8072. grid: g
  8073. };
  8074. var container = containerBulider(rowdata, column);
  8075. var width = container.width(), height = container.height();
  8076. var editorControl = g._createEditor(editor, container, editParm, width, height);
  8077. g.editors[rowdata['__id']][column['__id']] = {
  8078. editor: editor,
  8079. input: editorControl,
  8080. editParm: editParm,
  8081. container: container
  8082. };
  8083. }
  8084. g.trigger('afterBeginEdit', { record: rowdata, rowindex: rowdata['__index'] });
  8085. },
  8086. cancelEdit: function (rowParm)
  8087. {
  8088. var g = this;
  8089. if (rowParm == undefined)
  8090. {
  8091. for (var rowid in g.editors)
  8092. {
  8093. g.cancelEdit(rowid);
  8094. }
  8095. }
  8096. else
  8097. {
  8098. var rowdata = g.getRow(rowParm);
  8099. if (!g.editors[rowdata['__id']]) return;
  8100. if (g.trigger('beforeCancelEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return;
  8101. for (var columnid in g.editors[rowdata['__id']])
  8102. {
  8103. var o = g.editors[rowdata['__id']][columnid];
  8104. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  8105. }
  8106. delete g.editors[rowdata['__id']];
  8107. delete rowdata['_editing'];
  8108. g.reRender({ rowdata: rowdata });
  8109. }
  8110. },
  8111. addEditRow: function (rowdata, containerBulider)
  8112. {
  8113. this.submitEdit();
  8114. rowdata = this.add(rowdata);
  8115. this.beginEdit(rowdata, containerBulider);
  8116. },
  8117. submitEdit: function (rowParm)
  8118. {
  8119. var g = this, p = this.options;
  8120. if (rowParm == undefined)
  8121. {
  8122. for (var rowid in g.editors)
  8123. {
  8124. g.submitEdit(rowid);
  8125. }
  8126. }
  8127. else
  8128. {
  8129. var rowdata = g.getRow(rowParm);
  8130. var newdata = {};
  8131. if (!g.editors[rowdata['__id']]) return;
  8132. for (var columnid in g.editors[rowdata['__id']])
  8133. {
  8134. var o = g.editors[rowdata['__id']][columnid];
  8135. var column = o.editParm.column;
  8136. if (column.name)
  8137. {
  8138. newdata[column.name] = o.editor.getValue(o.input, o.editParm);
  8139. }
  8140. if (column.textField && o.editor.getText)
  8141. {
  8142. newdata[column.textField] = o.editor.getText(o.input, o.editParm);
  8143. }
  8144. }
  8145. if (g.trigger('beforeSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata }) == false)
  8146. return false;
  8147. g.updateRow(rowdata, newdata);
  8148. g.trigger('afterSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata });
  8149. }
  8150. },
  8151. endEdit: function (rowParm)
  8152. {
  8153. var g = this, p = this.options;
  8154. if (g.editor.editing)
  8155. {
  8156. var o = g.editor;
  8157. g.trigger('sysEndEdit', [g.editor.editParm]);
  8158. g.trigger('endEdit', [g.editor.editParm]);
  8159. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  8160. g.editor.container.remove();
  8161. g.reRender({ rowdata: g.editor.editParm.record, column: g.editor.editParm.column });
  8162. g.trigger('afterEdit', [g.editor.editParm]);
  8163. g.editor = { editing: false };
  8164. }
  8165. else if (rowParm != undefined)
  8166. {
  8167. var rowdata = g.getRow(rowParm);
  8168. if (!g.editors[rowdata['__id']]) return;
  8169. if (g.submitEdit(rowParm) == false) return false;
  8170. for (var columnid in g.editors[rowdata['__id']])
  8171. {
  8172. var o = g.editors[rowdata['__id']][columnid];
  8173. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  8174. }
  8175. delete g.editors[rowdata['__id']];
  8176. delete rowdata['_editing'];
  8177. g.trigger('afterEdit', { record: rowdata, rowindex: rowdata['__index'] });
  8178. }
  8179. else
  8180. {
  8181. for (var rowid in g.editors)
  8182. {
  8183. g.endEdit(rowid);
  8184. }
  8185. }
  8186. g._fixHeight.ligerDefer(g, 10);
  8187. },
  8188. setWidth: function (w)
  8189. {
  8190. return this._setWidth(w);
  8191. },
  8192. setHeight: function (h)
  8193. {
  8194. return this._setHeight(h);
  8195. },
  8196. //是否启用复选框列
  8197. enabledCheckbox: function ()
  8198. {
  8199. return this.options.checkbox ? true : false;
  8200. },
  8201. //是否固定列
  8202. enabledFrozen: function ()
  8203. {
  8204. var g = this, p = this.options;
  8205. if (!p.frozen) return false;
  8206. var cols = g.columns || [];
  8207. if (g.enabledDetail() && p.frozenDetail || g.enabledCheckbox() && p.frozenCheckbox
  8208. || p.frozenRownumbers && p.rownumbers) return true;
  8209. for (var i = 0, l = cols.length; i < l; i++)
  8210. {
  8211. if (cols[i].frozen)
  8212. {
  8213. return true;
  8214. }
  8215. }
  8216. this._setFrozen(false);
  8217. return false;
  8218. },
  8219. //是否启用明细编辑
  8220. enabledDetailEdit: function ()
  8221. {
  8222. if (!this.enabledDetail()) return false;
  8223. return this.options.detailToEdit ? true : false;
  8224. },
  8225. //是否启用明细列
  8226. enabledDetail: function ()
  8227. {
  8228. if (this.options.detail && this.options.detail.onShowDetail) return true;
  8229. return false;
  8230. },
  8231. //是否启用分组
  8232. enabledGroup: function ()
  8233. {
  8234. return this.options.groupColumnName ? true : false;
  8235. },
  8236. deleteSelectedRow: function ()
  8237. {
  8238. if (!this.selected) return;
  8239. for (var i in this.selected)
  8240. {
  8241. var o = this.selected[i];
  8242. if (o['__id'] in this.records)
  8243. this._deleteData.ligerDefer(this, 10, [o]);
  8244. }
  8245. this.reRender.ligerDefer(this, 20);
  8246. },
  8247. removeRange: function (rowArr)
  8248. {
  8249. var g = this, p = this.options;
  8250. $.each(rowArr, function ()
  8251. {
  8252. g._removeData(this);
  8253. });
  8254. g.reRender();
  8255. },
  8256. remove: function (rowParm)
  8257. {
  8258. var g = this, p = this.options;
  8259. var rowdata = g.getRow(rowParm);
  8260. g._removeData(rowParm);
  8261. g.reRender();
  8262. },
  8263. deleteRange: function (rowArr)
  8264. {
  8265. var g = this, p = this.options;
  8266. $.each(rowArr, function ()
  8267. {
  8268. g._deleteData(this);
  8269. });
  8270. g.reRender();
  8271. },
  8272. deleteRow: function (rowParm)
  8273. {
  8274. var g = this, p = this.options;
  8275. var rowdata = g.getRow(rowParm);
  8276. if (!rowdata) return;
  8277. g._deleteData(rowdata);
  8278. g.reRender();
  8279. g.isDataChanged = true;
  8280. },
  8281. _deleteData: function (rowParm)
  8282. {
  8283. var g = this, p = this.options;
  8284. var rowdata = g.getRow(rowParm);
  8285. rowdata[p.statusName] = 'delete';
  8286. if (p.tree)
  8287. {
  8288. var children = g.getChildren(rowdata, true);
  8289. if (children)
  8290. {
  8291. for (var i = 0, l = children.length; i < l; i++)
  8292. {
  8293. children[i][p.statusName] = 'delete';
  8294. }
  8295. }
  8296. }
  8297. g.deletedRows = g.deletedRows || [];
  8298. g.deletedRows.push(rowdata);
  8299. g._removeSelected(rowdata);
  8300. },
  8301. /*
  8302. @param {arg} column index、column name、column、单元格
  8303. @param {value} 值
  8304. @param {rowParm} rowindex或者rowdata
  8305. */
  8306. updateCell: function (arg, value, rowParm)
  8307. {
  8308. var g = this, p = this.options;
  8309. var column, cellObj, rowdata;
  8310. if (typeof (arg) == "string") //column name
  8311. {
  8312. for (var i = 0, l = g.columns.length; i < l; i++)
  8313. {
  8314. if (g.columns[i].name == arg)
  8315. {
  8316. g.updateCell(i, value, rowParm);
  8317. }
  8318. }
  8319. return;
  8320. }
  8321. if (typeof (arg) == "number")
  8322. {
  8323. column = g.columns[arg];
  8324. rowdata = g.getRow(rowParm);
  8325. cellObj = g.getCellObj(rowdata, column);
  8326. }
  8327. else if (typeof (arg) == "object" && arg['__id'])
  8328. {
  8329. column = arg;
  8330. rowdata = g.getRow(rowParm);
  8331. cellObj = g.getCellObj(rowdata, column);
  8332. }
  8333. else
  8334. {
  8335. cellObj = arg;
  8336. var ids = cellObj.id.split('|');
  8337. var columnid = ids[ids.length - 1];
  8338. column = g._columns[columnid];
  8339. var row = $(cellObj).parent();
  8340. rowdata = rowdata || g.getRow(row[0]);
  8341. }
  8342. if (value != null && column.name)
  8343. {
  8344. g._setValueByName(rowdata, column.name, value);
  8345. if (rowdata[p.statusName] != 'add')
  8346. rowdata[p.statusName] = 'update';
  8347. g.isDataChanged = true;
  8348. }
  8349. g.reRender({ rowdata: rowdata, column: column });
  8350. },
  8351. addRows: function (rowdataArr, neardata, isBefore, parentRowData)
  8352. {
  8353. var g = this, p = this.options;
  8354. $(rowdataArr).each(function ()
  8355. {
  8356. g.addRow(this, neardata, isBefore, parentRowData);
  8357. });
  8358. },
  8359. _createRowid: function ()
  8360. {
  8361. return "r" + (1000 + this.recordNumber);
  8362. },
  8363. _isRowId: function (str)
  8364. {
  8365. return (str in this.records);
  8366. },
  8367. _addNewRecord: function (o, previd, pid)
  8368. {
  8369. var g = this, p = this.options;
  8370. g.recordNumber++;
  8371. o['__id'] = g._createRowid();
  8372. o['__previd'] = previd;
  8373. if (previd && previd != -1)
  8374. {
  8375. var prev = g.records[previd];
  8376. if (prev['__nextid'] && prev['__nextid'] != -1)
  8377. {
  8378. var prevOldNext = g.records[prev['__nextid']];
  8379. if (prevOldNext)
  8380. prevOldNext['__previd'] = o['__id'];
  8381. }
  8382. prev['__nextid'] = o['__id'];
  8383. o['__index'] = prev['__index'] + 1;
  8384. }
  8385. else
  8386. {
  8387. o['__index'] = 0;
  8388. }
  8389. if (p.tree)
  8390. {
  8391. if (pid && pid != -1)
  8392. {
  8393. var parent = g.records[pid];
  8394. o['__pid'] = pid;
  8395. o['__level'] = parent['__level'] + 1;
  8396. }
  8397. else
  8398. {
  8399. o['__pid'] = -1;
  8400. o['__level'] = 1;
  8401. }
  8402. o['__hasChildren'] = o[p.tree.childrenName] ? true : false;
  8403. }
  8404. o[p.statusName] = o[p.statusName] || "nochanged";
  8405. g.rows[o['__index']] = o;
  8406. g.records[o['__id']] = o;
  8407. return o;
  8408. },
  8409. //将原始的数据转换成适合 grid的行数据
  8410. _getRows: function (data)
  8411. {
  8412. var g = this, p = this.options;
  8413. var targetData = [];
  8414. function load(data)
  8415. {
  8416. if (!data || !data.length) return;
  8417. for (var i = 0, l = data.length; i < l; i++)
  8418. {
  8419. var o = data[i];
  8420. targetData.push(o);
  8421. if (o[p.tree.childrenName])
  8422. {
  8423. load(o[p.tree.childrenName]);
  8424. }
  8425. }
  8426. }
  8427. load(data);
  8428. return targetData;
  8429. },
  8430. _updateGridData: function ()
  8431. {
  8432. var g = this, p = this.options;
  8433. g.recordNumber = 0;
  8434. g.rows = [];
  8435. g.records = {};
  8436. var previd = -1;
  8437. function load(data, pid)
  8438. {
  8439. if (!data || !data.length) return;
  8440. for (var i = 0, l = data.length; i < l; i++)
  8441. {
  8442. var o = data[i];
  8443. g.formatRecord(o);
  8444. if (o[p.statusName] == "delete") continue;
  8445. g._addNewRecord(o, previd, pid);
  8446. previd = o['__id'];
  8447. if (o['__hasChildren'])
  8448. {
  8449. load(o[p.tree.childrenName], o['__id']);
  8450. }
  8451. }
  8452. }
  8453. load(g.currentData[p.root], -1);
  8454. return g.rows;
  8455. },
  8456. _moveData: function (from, to, isAfter)
  8457. {
  8458. var g = this, p = this.options;
  8459. var fromRow = g.getRow(from);
  8460. var toRow = g.getRow(to);
  8461. var fromIndex, toIndex;
  8462. var listdata = g._getParentChildren(fromRow);
  8463. fromIndex = $.inArray(fromRow, listdata);
  8464. listdata.splice(fromIndex, 1);
  8465. listdata = g._getParentChildren(toRow);
  8466. toIndex = $.inArray(toRow, listdata);
  8467. listdata.splice(toIndex + (isAfter ? 1 : 0), 0, fromRow);
  8468. },
  8469. move: function (from, to, isAfter)
  8470. {
  8471. this._moveData(from, to, isAfter);
  8472. this.reRender();
  8473. },
  8474. moveRange: function (rows, to, isAfter)
  8475. {
  8476. for (var i in rows)
  8477. {
  8478. this._moveData(rows[i], to, isAfter);
  8479. }
  8480. this.reRender();
  8481. },
  8482. up: function (rowParm)
  8483. {
  8484. var g = this, p = this.options;
  8485. var rowdata = g.getRow(rowParm);
  8486. var listdata = g._getParentChildren(rowdata);
  8487. var index = $.inArray(rowdata, listdata);
  8488. if (index == -1 || index == 0) return;
  8489. var selected = g.getSelected();
  8490. g.move(rowdata, listdata[index - 1], false);
  8491. g.select(selected);
  8492. },
  8493. down: function (rowParm)
  8494. {
  8495. var g = this, p = this.options;
  8496. var rowdata = g.getRow(rowParm);
  8497. var listdata = g._getParentChildren(rowdata);
  8498. var index = $.inArray(rowdata, listdata);
  8499. if (index == -1 || index == listdata.length - 1) return;
  8500. var selected = g.getSelected();
  8501. g.move(rowdata, listdata[index + 1], true);
  8502. g.select(selected);
  8503. },
  8504. addRow: function (rowdata, neardata, isBefore, parentRowData)
  8505. {
  8506. var g = this, p = this.options;
  8507. rowdata = rowdata || {};
  8508. g._addData(rowdata, parentRowData, neardata, isBefore);
  8509. g.reRender();
  8510. //标识状态
  8511. rowdata[p.statusName] = 'add';
  8512. if (p.tree)
  8513. {
  8514. var children = g.getChildren(rowdata, true);
  8515. if (children)
  8516. {
  8517. for (var i = 0, l = children.length; i < l; i++)
  8518. {
  8519. children[i][p.statusName] = 'add';
  8520. }
  8521. }
  8522. }
  8523. g.isDataChanged = true;
  8524. p.total = p.total ? (p.total + 1) : 1;
  8525. p.pageCount = Math.ceil(p.total / p.pageSize);
  8526. g._buildPager();
  8527. g.trigger('SysGridHeightChanged');
  8528. g.trigger('afterAddRow', [rowdata]);
  8529. return rowdata;
  8530. },
  8531. updateRow: function (rowDom, newRowData)
  8532. {
  8533. var g = this, p = this.options;
  8534. var rowdata = g.getRow(rowDom);
  8535. //标识状态
  8536. g.isDataChanged = true;
  8537. $.extend(rowdata, newRowData || {});
  8538. if (rowdata[p.statusName] != 'add')
  8539. rowdata[p.statusName] = 'update';
  8540. g.reRender.ligerDefer(g, 10, [{ rowdata: rowdata}]);
  8541. return rowdata;
  8542. },
  8543. setCellEditing: function (rowdata, column, editing)
  8544. {
  8545. var g = this, p = this.options;
  8546. var cell = g.getCellObj(rowdata, column);
  8547. var methodName = editing ? 'addClass' : 'removeClass';
  8548. $(cell)[methodName]("l-grid-row-cell-editing");
  8549. if (rowdata['__id'] != 0)
  8550. {
  8551. var prevrowobj = $(g.getRowObj(rowdata['__id'])).prev();
  8552. if (!prevrowobj.length) return;
  8553. var prevrow = g.getRow(prevrowobj[0]);
  8554. var cellprev = g.getCellObj(prevrow, column);
  8555. if (!cellprev) return;
  8556. $(cellprev)[methodName]("l-grid-row-cell-editing-topcell");
  8557. }
  8558. if (column['__previd'] != -1 && column['__previd'] != null)
  8559. {
  8560. var cellprev = $(g.getCellObj(rowdata, column)).prev();
  8561. $(cellprev)[methodName]("l-grid-row-cell-editing-leftcell");
  8562. }
  8563. },
  8564. reRender: function (e)
  8565. {
  8566. var g = this, p = this.options;
  8567. e = e || {};
  8568. var rowdata = e.rowdata, column = e.column;
  8569. if (column && (column.isdetail || column.ischeckbox)) return;
  8570. if (rowdata && rowdata[p.statusName] == "delete") return;
  8571. if (rowdata && column)
  8572. {
  8573. var cell = g.getCellObj(rowdata, column);
  8574. $(cell).html(g._getCellHtml(rowdata, column));
  8575. if (!column.issystem)
  8576. g.setCellEditing(rowdata, column, false);
  8577. }
  8578. else if (rowdata)
  8579. {
  8580. $(g.columns).each(function () { g.reRender({ rowdata: rowdata, column: this }); });
  8581. }
  8582. else if (column)
  8583. {
  8584. for (var rowid in g.records) { g.reRender({ rowdata: g.records[rowid], column: column }); }
  8585. for (var i = 0; i < g.totalNumber; i++)
  8586. {
  8587. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  8588. $("div:first", tobj).html(g._getTotalCellContent(column, g.groups && g.groups[i] ? g.groups[i] : g.currentData[p.root]));
  8589. }
  8590. }
  8591. else
  8592. {
  8593. g._showData();
  8594. }
  8595. },
  8596. getData: function (status, removeStatus)
  8597. {
  8598. var g = this, p = this.options;
  8599. var data = [];
  8600. if (removeStatus == undefined) removeStatus = true;
  8601. for (var rowid in g.records)
  8602. {
  8603. var o = $.extend(true, {}, g.records[rowid]);
  8604. if (o[p.statusName] == status || status == undefined)
  8605. {
  8606. data.push(g.formatRecord(o, removeStatus));
  8607. }
  8608. }
  8609. return data;
  8610. },
  8611. //格式化数据
  8612. formatRecord: function (o, removeStatus)
  8613. {
  8614. delete o['__id'];
  8615. delete o['__previd'];
  8616. delete o['__nextid'];
  8617. delete o['__index'];
  8618. if (this.options.tree)
  8619. {
  8620. delete o['__pid'];
  8621. delete o['__level'];
  8622. delete o['__hasChildren'];
  8623. }
  8624. if (removeStatus) delete o[this.options.statusName];
  8625. return o;
  8626. },
  8627. getUpdated: function ()
  8628. {
  8629. return this.getData('update', true);
  8630. },
  8631. getDeleted: function ()
  8632. {
  8633. return this.deletedRows;
  8634. },
  8635. getAdded: function ()
  8636. {
  8637. return this.getData('add', true);
  8638. },
  8639. getChanges: function ()
  8640. {
  8641. var g = this, p = this.options;
  8642. var data = [];
  8643. if (this.deletedRows)
  8644. {
  8645. $(this.deletedRows).each(function ()
  8646. {
  8647. var o = $.extend(true, {}, this);
  8648. data.push(g.formatRecord(o, true));
  8649. });
  8650. }
  8651. $.merge(data, g.getUpdated());
  8652. $.merge(data, g.getAdded());
  8653. return data;
  8654. },
  8655. getColumn: function (columnParm)
  8656. {
  8657. var g = this, p = this.options;
  8658. if (typeof columnParm == "string") // column id
  8659. {
  8660. if (g._isColumnId(columnParm))
  8661. return g._columns[columnParm];
  8662. else
  8663. return g.columns[parseInt(columnParm)];
  8664. }
  8665. else if (typeof (columnParm) == "number") //column index
  8666. {
  8667. return g.columns[columnParm];
  8668. }
  8669. else if (typeof columnParm == "object" && columnParm.nodeType == 1) //column header cell
  8670. {
  8671. var ids = columnParm.id.split('|');
  8672. var columnid = ids[ids.length - 1];
  8673. return g._columns[columnid];
  8674. }
  8675. return columnParm;
  8676. },
  8677. getColumnType: function (columnname)
  8678. {
  8679. var g = this, p = this.options;
  8680. for (i = 0; i < g.columns.length; i++)
  8681. {
  8682. if (g.columns[i].name == columnname)
  8683. {
  8684. if (g.columns[i].type) return g.columns[i].type;
  8685. return "string";
  8686. }
  8687. }
  8688. return null;
  8689. },
  8690. //是否包含汇总
  8691. isTotalSummary: function ()
  8692. {
  8693. var g = this, p = this.options;
  8694. for (var i = 0; i < g.columns.length; i++)
  8695. {
  8696. if (g.columns[i].totalSummary) return true;
  8697. }
  8698. return false;
  8699. },
  8700. //根据层次获取列集合
  8701. //如果columnLevel为空,获取叶节点集合
  8702. getColumns: function (columnLevel)
  8703. {
  8704. var g = this, p = this.options;
  8705. var columns = [];
  8706. for (var id in g._columns)
  8707. {
  8708. var col = g._columns[id];
  8709. if (columnLevel != undefined)
  8710. {
  8711. if (col['__level'] == columnLevel) columns.push(col);
  8712. }
  8713. else
  8714. {
  8715. if (col['__leaf']) columns.push(col);
  8716. }
  8717. }
  8718. return columns;
  8719. },
  8720. //改变排序
  8721. changeSort: function (columnName, sortOrder)
  8722. {
  8723. var g = this, p = this.options;
  8724. if (g.loading) return true;
  8725. if (p.dataAction == "local")
  8726. {
  8727. var columnType = g.getColumnType(columnName);
  8728. if (!g.sortedData)
  8729. g.sortedData = g.filteredData;
  8730. if (!g.sortedData || !g.sortedData[p.root])
  8731. return;
  8732. if (p.sortName == columnName)
  8733. {
  8734. g.sortedData[p.root].reverse();
  8735. } else
  8736. {
  8737. g.sortedData[p.root].sort(function (data1, data2)
  8738. {
  8739. return g._compareData(data1, data2, columnName, columnType);
  8740. });
  8741. }
  8742. if (p.usePager)
  8743. g.currentData = g._getCurrentPageData(g.sortedData);
  8744. else
  8745. g.currentData = g.sortedData;
  8746. g._showData();
  8747. }
  8748. p.sortName = columnName;
  8749. p.sortOrder = sortOrder;
  8750. if (p.dataAction == "server")
  8751. {
  8752. g.loadData(p.where);
  8753. }
  8754. },
  8755. //改变分页
  8756. changePage: function (ctype)
  8757. {
  8758. var g = this, p = this.options;
  8759. if (g.loading) return true;
  8760. if (p.dataAction != "local" && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  8761. return false;
  8762. p.pageCount = parseInt($(".pcontrol span", g.toolbar).html());
  8763. switch (ctype)
  8764. {
  8765. case 'first': if (p.page == 1) return; p.newPage = 1; break;
  8766. case 'prev': if (p.page == 1) return; if (p.page > 1) p.newPage = parseInt(p.page) - 1; break;
  8767. case 'next': if (p.page >= p.pageCount) return; p.newPage = parseInt(p.page) + 1; break;
  8768. case 'last': if (p.page >= p.pageCount) return; p.newPage = p.pageCount; break;
  8769. case 'input':
  8770. var nv = parseInt($('.pcontrol input', g.toolbar).val());
  8771. if (isNaN(nv)) nv = 1;
  8772. if (nv < 1) nv = 1;
  8773. else if (nv > p.pageCount) nv = p.pageCount;
  8774. $('.pcontrol input', g.toolbar).val(nv);
  8775. p.newPage = nv;
  8776. break;
  8777. }
  8778. if (p.newPage == p.page) return false;
  8779. if (p.newPage == 1)
  8780. {
  8781. $(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled");
  8782. $(".l-bar-btnprev span", g.toolbar).addClass("l-disabled");
  8783. }
  8784. else
  8785. {
  8786. $(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled");
  8787. $(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled");
  8788. }
  8789. if (p.newPage == p.pageCount)
  8790. {
  8791. $(".l-bar-btnlast span", g.toolbar).addClass("l-disabled");
  8792. $(".l-bar-btnnext span", g.toolbar).addClass("l-disabled");
  8793. }
  8794. else
  8795. {
  8796. $(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled");
  8797. $(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled");
  8798. }
  8799. g.trigger('changePage', [p.newPage]);
  8800. if (p.dataAction == "server")
  8801. {
  8802. g.loadData(p.where);
  8803. }
  8804. else
  8805. {
  8806. g.currentData = g._getCurrentPageData(g.filteredData);
  8807. g._showData();
  8808. }
  8809. },
  8810. getSelectedRow: function ()
  8811. {
  8812. for (var i in this.selected)
  8813. {
  8814. var o = this.selected[i];
  8815. if (o['__id'] in this.records)
  8816. return o;
  8817. }
  8818. return null;
  8819. },
  8820. getSelectedRows: function ()
  8821. {
  8822. var arr = [];
  8823. for (var i in this.selected)
  8824. {
  8825. var o = this.selected[i];
  8826. if (o['__id'] in this.records)
  8827. arr.push(o);
  8828. }
  8829. return arr;
  8830. },
  8831. getSelectedRowObj: function ()
  8832. {
  8833. for (var i in this.selected)
  8834. {
  8835. var o = this.selected[i];
  8836. if (o['__id'] in this.records)
  8837. return this.getRowObj(o);
  8838. }
  8839. return null;
  8840. },
  8841. getSelectedRowObjs: function ()
  8842. {
  8843. var arr = [];
  8844. for (var i in this.selected)
  8845. {
  8846. var o = this.selected[i];
  8847. if (o['__id'] in this.records)
  8848. arr.push(this.getRowObj(o));
  8849. }
  8850. return arr;
  8851. },
  8852. getCellObj: function (rowParm, column)
  8853. {
  8854. var rowdata = this.getRow(rowParm);
  8855. column = this.getColumn(column);
  8856. return document.getElementById(this._getCellDomId(rowdata, column));
  8857. },
  8858. getRowObj: function (rowParm, frozen)
  8859. {
  8860. var g = this, p = this.options;
  8861. if (rowParm == null) return null;
  8862. if (typeof (rowParm) == "string")
  8863. {
  8864. if (g._isRowId(rowParm))
  8865. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + rowParm);
  8866. else
  8867. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[parseInt(rowParm)]['__id']);
  8868. }
  8869. else if (typeof (rowParm) == "number")
  8870. {
  8871. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[rowParm]['__id']);
  8872. }
  8873. else if (typeof (rowParm) == "object" && rowParm['__id']) //rowdata
  8874. {
  8875. return g.getRowObj(rowParm['__id'], frozen);
  8876. }
  8877. return rowParm;
  8878. },
  8879. getRow: function (rowParm)
  8880. {
  8881. var g = this, p = this.options;
  8882. if (rowParm == null) return null;
  8883. if (typeof (rowParm) == "string")
  8884. {
  8885. if (g._isRowId(rowParm))
  8886. return g.records[rowParm];
  8887. else
  8888. return g.rows[parseInt(rowParm)];
  8889. }
  8890. else if (typeof (rowParm) == "number")
  8891. {
  8892. return g.rows[parseInt(rowParm)];
  8893. }
  8894. else if (typeof (rowParm) == "object" && rowParm.nodeType == 1 && !rowParm['__id']) //dom对象
  8895. {
  8896. return g._getRowByDomId(rowParm.id);
  8897. }
  8898. return rowParm;
  8899. },
  8900. _setColumnVisible: function (column, hide)
  8901. {
  8902. var g = this, p = this.options;
  8903. if (!hide) //显示
  8904. {
  8905. column._hide = false;
  8906. document.getElementById(column['__domid']).style.display = "";
  8907. //判断分组列是否隐藏,如果隐藏了则显示出来
  8908. if (column['__pid'] != -1)
  8909. {
  8910. var pcol = g._columns[column['__pid']];
  8911. if (pcol._hide)
  8912. {
  8913. document.getElementById(pcol['__domid']).style.display = "";
  8914. this._setColumnVisible(pcol, hide);
  8915. }
  8916. }
  8917. }
  8918. else //隐藏
  8919. {
  8920. column._hide = true;
  8921. document.getElementById(column['__domid']).style.display = "none";
  8922. //判断同分组的列是否都隐藏,如果是则隐藏分组列
  8923. if (column['__pid'] != -1)
  8924. {
  8925. var hideall = true;
  8926. var pcol = this._columns[column['__pid']];
  8927. for (var i = 0; pcol && i < pcol.columns.length; i++)
  8928. {
  8929. if (!pcol.columns[i]._hide)
  8930. {
  8931. hideall = false;
  8932. break;
  8933. }
  8934. }
  8935. if (hideall)
  8936. {
  8937. pcol._hide = true;
  8938. document.getElementById(pcol['__domid']).style.display = "none";
  8939. this._setColumnVisible(pcol, hide);
  8940. }
  8941. }
  8942. }
  8943. },
  8944. //显示隐藏列
  8945. toggleCol: function (columnparm, visible, toggleByPopup)
  8946. {
  8947. var g = this, p = this.options;
  8948. var column;
  8949. if (typeof (columnparm) == "number")
  8950. {
  8951. column = g.columns[columnparm];
  8952. }
  8953. else if (typeof (columnparm) == "object" && columnparm['__id'])
  8954. {
  8955. column = columnparm;
  8956. }
  8957. else if (typeof (columnparm) == "string")
  8958. {
  8959. if (g._isColumnId(columnparm)) // column id
  8960. {
  8961. column = g._columns[columnparm];
  8962. }
  8963. else // column name
  8964. {
  8965. $(g.columns).each(function ()
  8966. {
  8967. if (this.name == columnparm)
  8968. g.toggleCol(this, visible, toggleByPopup);
  8969. });
  8970. return;
  8971. }
  8972. }
  8973. if (!column) return;
  8974. var columnindex = column['__leafindex'];
  8975. var headercell = document.getElementById(column['__domid']);
  8976. if (!headercell) return;
  8977. headercell = $(headercell);
  8978. var cells = [];
  8979. for (var i in g.rows)
  8980. {
  8981. var obj = g.getCellObj(g.rows[i], column);
  8982. if (obj) cells.push(obj);
  8983. }
  8984. for (var i = 0; i < g.totalNumber; i++)
  8985. {
  8986. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  8987. if (tobj) cells.push(tobj);
  8988. }
  8989. var colwidth = column._width;
  8990. //显示列
  8991. if (visible && column._hide)
  8992. {
  8993. if (column.frozen)
  8994. g.f.gridtablewidth += (parseInt(colwidth) + 1);
  8995. else
  8996. g.gridtablewidth += (parseInt(colwidth) + 1);
  8997. g._setColumnVisible(column, false);
  8998. $(cells).show();
  8999. }
  9000. //隐藏列
  9001. else if (!visible && !column._hide)
  9002. {
  9003. if (column.frozen)
  9004. g.f.gridtablewidth -= (parseInt(colwidth) + 1);
  9005. else
  9006. g.gridtablewidth -= (parseInt(colwidth) + 1);
  9007. g._setColumnVisible(column, true);
  9008. $(cells).hide();
  9009. }
  9010. if (column.frozen)
  9011. {
  9012. $("div:first", g.f.gridheader).width(g.f.gridtablewidth);
  9013. $("div:first", g.f.gridbody).width(g.f.gridtablewidth);
  9014. }
  9015. else
  9016. {
  9017. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  9018. $("div:first", g.gridbody).width(g.gridtablewidth);
  9019. }
  9020. g._updateFrozenWidth();
  9021. if (!toggleByPopup)
  9022. {
  9023. $(':checkbox[columnindex=' + columnindex + "]", g.popup).each(function ()
  9024. {
  9025. this.checked = visible;
  9026. if ($.fn.ligerCheckBox)
  9027. {
  9028. var checkboxmanager = $(this).ligerGetCheckBoxManager();
  9029. if (checkboxmanager) checkboxmanager.updateStyle();
  9030. }
  9031. });
  9032. }
  9033. },
  9034. //设置列宽
  9035. setColumnWidth: function (columnparm, newwidth)
  9036. {
  9037. var g = this, p = this.options;
  9038. if (!newwidth) return;
  9039. newwidth = parseInt(newwidth, 10);
  9040. var column;
  9041. if (typeof (columnparm) == "number")
  9042. {
  9043. column = g.columns[columnparm];
  9044. }
  9045. else if (typeof (columnparm) == "object" && columnparm['__id'])
  9046. {
  9047. column = columnparm;
  9048. }
  9049. else if (typeof (columnparm) == "string")
  9050. {
  9051. if (g._isColumnId(columnparm)) // column id
  9052. {
  9053. column = g._columns[columnparm];
  9054. }
  9055. else // column name
  9056. {
  9057. $(g.columns).each(function ()
  9058. {
  9059. if (this.name == columnparm)
  9060. g.setColumnWidth(this, newwidth);
  9061. });
  9062. return;
  9063. }
  9064. }
  9065. if (!column) return;
  9066. var mincolumnwidth = p.minColumnWidth;
  9067. if (column.minWidth) mincolumnwidth = column.minWidth;
  9068. newwidth = newwidth < mincolumnwidth ? mincolumnwidth : newwidth;
  9069. var diff = newwidth - column._width;
  9070. if (g.trigger('beforeChangeColumnWidth', [column, newwidth]) == false) return;
  9071. column._width = newwidth;
  9072. if (column.frozen)
  9073. {
  9074. g.f.gridtablewidth += diff;
  9075. $("div:first", g.f.gridheader).width(g.f.gridtablewidth);
  9076. $("div:first", g.f.gridbody).width(g.f.gridtablewidth);
  9077. }
  9078. else
  9079. {
  9080. g.gridtablewidth += diff;
  9081. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  9082. $("div:first", g.gridbody).width(g.gridtablewidth);
  9083. }
  9084. $(document.getElementById(column['__domid'])).css('width', newwidth);
  9085. var cells = [];
  9086. for (var rowid in g.records)
  9087. {
  9088. var obj = g.getCellObj(g.records[rowid], column);
  9089. if (obj) cells.push(obj);
  9090. if (!g.enabledDetailEdit() && g.editors[rowid] && g.editors[rowid][column['__id']])
  9091. {
  9092. var o = g.editors[rowid][column['__id']];
  9093. if (o.editor.resize) o.editor.resize(o.input, newwidth, o.container.height(), o.editParm);
  9094. }
  9095. }
  9096. for (var i = 0; i < g.totalNumber; i++)
  9097. {
  9098. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  9099. if (tobj) cells.push(tobj);
  9100. }
  9101. $(cells).css('width', newwidth).find("> div.l-grid-row-cell-inner:first").css('width', newwidth - 8);
  9102. g._updateFrozenWidth();
  9103. g._updateHorizontalScrollStatus.ligerDefer(g, 10);
  9104. g.trigger('afterChangeColumnWidth', [column, newwidth]);
  9105. },
  9106. //改变列表头内容
  9107. changeHeaderText: function (columnparm, headerText)
  9108. {
  9109. var g = this, p = this.options;
  9110. var column;
  9111. if (typeof (columnparm) == "number")
  9112. {
  9113. column = g.columns[columnparm];
  9114. }
  9115. else if (typeof (columnparm) == "object" && columnparm['__id'])
  9116. {
  9117. column = columnparm;
  9118. }
  9119. else if (typeof (columnparm) == "string")
  9120. {
  9121. if (g._isColumnId(columnparm)) // column id
  9122. {
  9123. column = g._columns[columnparm];
  9124. }
  9125. else // column name
  9126. {
  9127. $(g.columns).each(function ()
  9128. {
  9129. if (this.name == columnparm)
  9130. g.changeHeaderText(this, headerText);
  9131. });
  9132. return;
  9133. }
  9134. }
  9135. if (!column) return;
  9136. var columnindex = column['__leafindex'];
  9137. var headercell = document.getElementById(column['__domid']);
  9138. $(".l-grid-hd-cell-text", headercell).html(headerText);
  9139. if (p.allowHideColumn)
  9140. {
  9141. $(':checkbox[columnindex=' + columnindex + "]", g.popup).parent().next().html(headerText);
  9142. }
  9143. },
  9144. //改变列的位置
  9145. changeCol: function (from, to, isAfter)
  9146. {
  9147. var g = this, p = this.options;
  9148. if (!from || !to) return;
  9149. var fromCol = g.getColumn(from);
  9150. var toCol = g.getColumn(to);
  9151. fromCol.frozen = toCol.frozen;
  9152. var fromColIndex, toColIndex;
  9153. var fromColumns = fromCol['__pid'] == -1 ? p.columns : g._columns[fromCol['__pid']].columns;
  9154. var toColumns = toCol['__pid'] == -1 ? p.columns : g._columns[toCol['__pid']].columns;
  9155. fromColIndex = $.inArray(fromCol, fromColumns);
  9156. toColIndex = $.inArray(toCol, toColumns);
  9157. var sameParent = fromColumns == toColumns;
  9158. var sameLevel = fromCol['__level'] == toCol['__level'];
  9159. toColumns.splice(toColIndex + (isAfter ? 1 : 0), 0, fromCol);
  9160. if (!sameParent)
  9161. {
  9162. fromColumns.splice(fromColIndex, 1);
  9163. }
  9164. else
  9165. {
  9166. if (isAfter) fromColumns.splice(fromColIndex, 1);
  9167. else fromColumns.splice(fromColIndex + 1, 1);
  9168. }
  9169. g._setColumns(p.columns);
  9170. g.reRender();
  9171. },
  9172. collapseDetail: function (rowParm)
  9173. {
  9174. var g = this, p = this.options;
  9175. var rowdata = g.getRow(rowParm);
  9176. if (!rowdata) return;
  9177. for (var i = 0, l = g.columns.length; i < l; i++)
  9178. {
  9179. if (g.columns[i].isdetail)
  9180. {
  9181. var row = g.getRowObj(rowdata);
  9182. var cell = g.getCellObj(rowdata, g.columns[i]);
  9183. $(row).next("tr.l-grid-detailpanel").hide();
  9184. $(".l-grid-row-cell-detailbtn:first", cell).removeClass("l-open");
  9185. g.trigger('SysGridHeightChanged');
  9186. return;
  9187. }
  9188. }
  9189. },
  9190. extendDetail: function (rowParm)
  9191. {
  9192. var g = this, p = this.options;
  9193. var rowdata = g.getRow(rowParm);
  9194. if (!rowdata) return;
  9195. for (var i = 0, l = g.columns; i < l; i++)
  9196. {
  9197. if (g.columns[i].isdetail)
  9198. {
  9199. var row = g.getRowObj(rowdata);
  9200. var cell = g.getCellObj(rowdata, g.columns[i]);
  9201. $(row).next("tr.l-grid-detailpanel").show();
  9202. $(".l-grid-row-cell-detailbtn:first", cell).addClass("l-open");
  9203. g.trigger('SysGridHeightChanged');
  9204. return;
  9205. }
  9206. }
  9207. },
  9208. getParent: function (rowParm)
  9209. {
  9210. var g = this, p = this.options;
  9211. if (!p.tree) return null;
  9212. var rowdata = g.getRow(rowParm);
  9213. if (!rowdata) return null;
  9214. if (rowdata['__pid'] in g.records) return g.records[rowdata['__pid']];
  9215. else return null;
  9216. },
  9217. getChildren: function (rowParm, deep)
  9218. {
  9219. var g = this, p = this.options;
  9220. if (!p.tree) return null;
  9221. var rowData = g.getRow(rowParm);
  9222. if (!rowData) return null;
  9223. var arr = [];
  9224. function loadChildren(data)
  9225. {
  9226. if (data[p.tree.childrenName])
  9227. {
  9228. for (var i = 0, l = data[p.tree.childrenName].length; i < l; i++)
  9229. {
  9230. var o = data[p.tree.childrenName][i];
  9231. if (o['__status'] == 'delete') continue;
  9232. arr.push(o);
  9233. if (deep)
  9234. loadChildren(o);
  9235. }
  9236. }
  9237. }
  9238. loadChildren(rowData);
  9239. return arr;
  9240. },
  9241. isLeaf: function (rowParm)
  9242. {
  9243. var g = this, p = this.options;
  9244. var rowdata = g.getRow(rowParm);
  9245. if (!rowdata) return;
  9246. return rowdata['__hasChildren'] ? false : true;
  9247. },
  9248. hasChildren: function (rowParm)
  9249. {
  9250. var g = this, p = this.options;
  9251. var rowdata = this.getRow(rowParm);
  9252. if (!rowdata) return;
  9253. return (rowdata[p.tree.childrenName] && rowdata[p.tree.childrenName].length) ? true : false;
  9254. },
  9255. existRecord: function (record)
  9256. {
  9257. for (var rowid in this.records)
  9258. {
  9259. if (this.records[rowid] == record) return true;
  9260. }
  9261. return false;
  9262. },
  9263. _removeSelected: function (rowdata)
  9264. {
  9265. var g = this, p = this.options;
  9266. if (p.tree)
  9267. {
  9268. var children = g.getChildren(rowdata, true);
  9269. if (children)
  9270. {
  9271. for (var i = 0, l = children.length; i < l; i++)
  9272. {
  9273. var index2 = $.inArray(children[i], g.selected);
  9274. if (index2 != -1) g.selected.splice(index2, 1);
  9275. }
  9276. }
  9277. }
  9278. var index = $.inArray(rowdata, g.selected);
  9279. if (index != -1) g.selected.splice(index, 1);
  9280. },
  9281. _getParentChildren: function (rowParm)
  9282. {
  9283. var g = this, p = this.options;
  9284. var rowdata = g.getRow(rowParm);
  9285. var listdata;
  9286. if (p.tree && g.existRecord(rowdata) && rowdata['__pid'] in g.records)
  9287. {
  9288. listdata = g.records[rowdata['__pid']][p.tree.childrenName];
  9289. }
  9290. else
  9291. {
  9292. listdata = g.currentData[p.root];
  9293. }
  9294. return listdata;
  9295. },
  9296. _removeData: function (rowdata)
  9297. {
  9298. var g = this, p = this.options;
  9299. var listdata = g._getParentChildren(rowdata);
  9300. var index = $.inArray(rowdata, listdata);
  9301. if (index != -1)
  9302. {
  9303. listdata.splice(index, 1);
  9304. }
  9305. g._removeSelected(rowdata);
  9306. },
  9307. _addData: function (rowdata, parentdata, neardata, isBefore)
  9308. {
  9309. var g = this, p = this.options;
  9310. if (!g.currentData) g.currentData = {};
  9311. if (!g.currentData[p.root]) g.currentData[p.root] = [];
  9312. var listdata = g.currentData[p.root];
  9313. if (neardata)
  9314. {
  9315. if (p.tree)
  9316. {
  9317. if (parentdata)
  9318. listdata = parentdata[p.tree.childrenName];
  9319. else if (neardata['__pid'] in g.records)
  9320. listdata = g.records[neardata['__pid']][p.tree.childrenName];
  9321. }
  9322. var index = $.inArray(neardata, listdata);
  9323. listdata.splice(index == -1 ? -1 : index + (isBefore ? 0 : 1), 0, rowdata);
  9324. }
  9325. else
  9326. {
  9327. if (p.tree && parentdata)
  9328. {
  9329. listdata = parentdata[p.tree.childrenName];
  9330. }
  9331. listdata.push(rowdata);
  9332. }
  9333. },
  9334. //移动数据(树)
  9335. //parm [parentdata] 附加到哪一个节点下级
  9336. //parm [neardata] 附加到哪一个节点的上方/下方
  9337. //parm [isBefore] 是否附加到上方
  9338. _appendData: function (rowdata, parentdata, neardata, isBefore)
  9339. {
  9340. var g = this, p = this.options;
  9341. rowdata[p.statusName] = "update";
  9342. g._removeData(rowdata);
  9343. g._addData(rowdata, parentdata, neardata, isBefore);
  9344. },
  9345. appendRange: function (rows, parentdata, neardata, isBefore)
  9346. {
  9347. var g = this, p = this.options;
  9348. var toRender = false;
  9349. $.each(rows, function (i, item)
  9350. {
  9351. if (item['__id'] && g.existRecord(item))
  9352. {
  9353. if (g.isLeaf(parentdata)) g.upgrade(parentdata);
  9354. g._appendData(item, parentdata, neardata, isBefore);
  9355. toRender = true;
  9356. }
  9357. else
  9358. {
  9359. g.appendRow(item, parentdata, neardata, isBefore);
  9360. }
  9361. });
  9362. if (toRender) g.reRender();
  9363. },
  9364. appendRow: function (rowdata, parentdata, neardata, isBefore)
  9365. {
  9366. var g = this, p = this.options;
  9367. if ($.isArray(rowdata))
  9368. {
  9369. g.appendRange(rowdata, parentdata, neardata, isBefore);
  9370. return;
  9371. }
  9372. if (rowdata['__id'] && g.existRecord(rowdata))
  9373. {
  9374. g._appendData(rowdata, parentdata, neardata, isBefore);
  9375. g.reRender();
  9376. return;
  9377. }
  9378. if (parentdata && g.isLeaf(parentdata)) g.upgrade(parentdata);
  9379. g.addRow(rowdata, neardata, isBefore ? true : false, parentdata);
  9380. },
  9381. upgrade: function (rowParm)
  9382. {
  9383. var g = this, p = this.options;
  9384. var rowdata = g.getRow(rowParm);
  9385. if (!rowdata || !p.tree) return;
  9386. rowdata[p.tree.childrenName] = rowdata[p.tree.childrenName] || [];
  9387. rowdata['__hasChildren'] = true;
  9388. var rowobjs = [g.getRowObj(rowdata)];
  9389. if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true));
  9390. $("> td > div > .l-grid-tree-space:last", rowobjs).addClass("l-grid-tree-link l-grid-tree-link-open");
  9391. },
  9392. demotion: function (rowParm)
  9393. {
  9394. var g = this, p = this.options;
  9395. var rowdata = g.getRow(rowParm);
  9396. if (!rowdata || !p.tree) return;
  9397. var rowobjs = [g.getRowObj(rowdata)];
  9398. if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true));
  9399. $("> td > div > .l-grid-tree-space:last", rowobjs).removeClass("l-grid-tree-link l-grid-tree-link-open l-grid-tree-link-close");
  9400. if (g.hasChildren(rowdata))
  9401. {
  9402. var children = g.getChildren(rowdata);
  9403. for (var i = 0, l = children.length; i < l; i++)
  9404. {
  9405. g.deleteRow(children[i]);
  9406. }
  9407. }
  9408. rowdata['__hasChildren'] = false;
  9409. },
  9410. collapseAll: function ()
  9411. {
  9412. var g = this, p = this.options;
  9413. $(g.rows).each(function (rowIndex, rowParm)
  9414. {
  9415. var targetRowObj = g.getRowObj(rowParm);
  9416. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  9417. if (linkbtn.hasClass("l-grid-tree-link-close")) return;
  9418. g.toggle(rowParm);
  9419. });
  9420. },
  9421. expandAll: function ()
  9422. {
  9423. var g = this, p = this.options;
  9424. $(g.rows).each(function (rowIndex, rowParm)
  9425. {
  9426. var targetRowObj = g.getRowObj(rowParm);
  9427. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  9428. if (linkbtn.hasClass("l-grid-tree-link-open")) return;
  9429. g.toggle(rowParm);
  9430. });
  9431. },
  9432. collapse: function (rowParm)
  9433. {
  9434. var g = this, p = this.options;
  9435. var targetRowObj = g.getRowObj(rowParm);
  9436. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  9437. if (linkbtn.hasClass("l-grid-tree-link-close")) return;
  9438. g.toggle(rowParm);
  9439. },
  9440. expand: function (rowParm)
  9441. {
  9442. var g = this, p = this.options;
  9443. var targetRowObj = g.getRowObj(rowParm);
  9444. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  9445. if (linkbtn.hasClass("l-grid-tree-link-open")) return;
  9446. g.toggle(rowParm);
  9447. },
  9448. toggle: function (rowParm)
  9449. {
  9450. if (!rowParm) return;
  9451. var g = this, p = this.options;
  9452. var rowdata = g.getRow(rowParm);
  9453. var targetRowObj = [g.getRowObj(rowdata)];
  9454. if (g.enabledFrozen()) targetRowObj.push(g.getRowObj(rowdata, true));
  9455. var level = rowdata['__level'], indexInCollapsedRows;
  9456. var linkbtn = $(".l-grid-tree-link:first", targetRowObj);
  9457. var opening = true;
  9458. g.collapsedRows = g.collapsedRows || [];
  9459. if (linkbtn.hasClass("l-grid-tree-link-close")) //收缩
  9460. {
  9461. if (g.hasBind('treeExpand') && g.trigger('treeExpand', [rowdata]) == false) return false;
  9462. linkbtn.removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open");
  9463. indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows);
  9464. if (indexInCollapsedRows != -1) g.collapsedRows.splice(indexInCollapsedRows, 1);
  9465. }
  9466. else //折叠
  9467. {
  9468. if (g.hasBind('treeCollapse') && g.trigger('treeCollapse', [rowdata]) == false) return false;
  9469. opening = false;
  9470. linkbtn.addClass("l-grid-tree-link-close").removeClass("l-grid-tree-link-open");
  9471. indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows);
  9472. if (indexInCollapsedRows == -1) g.collapsedRows.push(rowdata);
  9473. }
  9474. var children = g.getChildren(rowdata, true);
  9475. for (var i = 0, l = children.length; i < l; i++)
  9476. {
  9477. var o = children[i];
  9478. var currentRow = $([g.getRowObj(o['__id'])]);
  9479. if (g.enabledFrozen()) currentRow = currentRow.add(g.getRowObj(o['__id'], true));
  9480. if (opening)
  9481. {
  9482. $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open");
  9483. currentRow.show();
  9484. }
  9485. else
  9486. {
  9487. $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-open").addClass("l-grid-tree-link-close");
  9488. currentRow.hide();
  9489. }
  9490. }
  9491. g.trigger(opening ? 'treeExpanded' : 'treeCollapsed', [rowdata]);
  9492. },
  9493. _bulid: function ()
  9494. {
  9495. var g = this;
  9496. g._clearGrid();
  9497. //创建头部
  9498. g._initBuildHeader();
  9499. //宽度高度初始化
  9500. g._initHeight();
  9501. //创建底部工具条
  9502. g._initFootbar();
  9503. //创建分页
  9504. g._buildPager();
  9505. //创建事件
  9506. g._setEvent();
  9507. },
  9508. _setColumns: function (columns)
  9509. {
  9510. var g = this;
  9511. //初始化列
  9512. g._initColumns();
  9513. //创建表头
  9514. g._initBuildGridHeader();
  9515. //创建 显示/隐藏 列 列表
  9516. g._initBuildPopup();
  9517. },
  9518. _initBuildHeader: function ()
  9519. {
  9520. var g = this, p = this.options;
  9521. if (p.title)
  9522. {
  9523. $(".l-panel-header-text", g.header).html(p.title);
  9524. if (p.headerImg)
  9525. g.header.append("<img src='" + p.headerImg + "' />").addClass("l-panel-header-hasicon");
  9526. }
  9527. else
  9528. {
  9529. g.header.hide();
  9530. }
  9531. if (p.toolbar)
  9532. {
  9533. if ($.fn.ligerToolBar)
  9534. g.toolbarManager = g.topbar.ligerToolBar(p.toolbar);
  9535. }
  9536. else
  9537. {
  9538. g.topbar.parent().remove();
  9539. }
  9540. },
  9541. _createColumnId: function (column)
  9542. {
  9543. if (column.id != null && column.id != "") return column.id.toString();
  9544. return "c" + (100 + this._columnCount);
  9545. },
  9546. _isColumnId: function (str)
  9547. {
  9548. return (str in this._columns);
  9549. },
  9550. _initColumns: function ()
  9551. {
  9552. var g = this, p = this.options;
  9553. g._columns = {}; //全部列的信息
  9554. g._columnCount = 0;
  9555. g._columnLeafCount = 0;
  9556. g._columnMaxLevel = 1;
  9557. if (!p.columns) return;
  9558. function removeProp(column, props)
  9559. {
  9560. for (var i in props)
  9561. {
  9562. if (props[i] in column)
  9563. delete column[props[i]];
  9564. }
  9565. }
  9566. //设置id、pid、level、leaf,返回叶节点数,如果是叶节点,返回1
  9567. function setColumn(column, level, pid, previd)
  9568. {
  9569. removeProp(column, ['__id', '__pid', '__previd', '__nextid', '__domid', '__leaf', '__leafindex', '__level', '__colSpan', '__rowSpan']);
  9570. if (level > g._columnMaxLevel) g._columnMaxLevel = level;
  9571. g._columnCount++;
  9572. column['__id'] = g._createColumnId(column);
  9573. column['__domid'] = g.id + "|hcell|" + column['__id'];
  9574. g._columns[column['__id']] = column;
  9575. if (!column.columns || !column.columns.length)
  9576. column['__leafindex'] = g._columnLeafCount++;
  9577. column['__level'] = level;
  9578. column['__pid'] = pid;
  9579. column['__previd'] = previd;
  9580. if (!column.columns || !column.columns.length)
  9581. {
  9582. column['__leaf'] = true;
  9583. return 1;
  9584. }
  9585. var leafcount = 0;
  9586. var newid = -1;
  9587. for (var i = 0, l = column.columns.length; i < l; i++)
  9588. {
  9589. var col = column.columns[i];
  9590. leafcount += setColumn(col, level + 1, column['__id'], newid);
  9591. newid = col['__id'];
  9592. }
  9593. column['__leafcount'] = leafcount;
  9594. return leafcount;
  9595. }
  9596. var lastid = -1;
  9597. //行序号
  9598. if (p.rownumbers)
  9599. {
  9600. var frozenRownumbers = g.enabledGroup() ? false : p.frozen && p.frozenRownumbers;
  9601. var col = { isrownumber: true, issystem: true, width: p.rownumbersColWidth, frozen: frozenRownumbers };
  9602. setColumn(col, 1, -1, lastid);
  9603. lastid = col['__id'];
  9604. }
  9605. //明细列
  9606. if (g.enabledDetail())
  9607. {
  9608. var frozenDetail = g.enabledGroup() ? false : p.frozen && p.frozenDetail;
  9609. var col = { isdetail: true, issystem: true, width: p.detailColWidth, frozen: frozenDetail };
  9610. setColumn(col, 1, -1, lastid);
  9611. lastid = col['__id'];
  9612. }
  9613. //复选框列
  9614. if (g.enabledCheckbox())
  9615. {
  9616. var frozenCheckbox = g.enabledGroup() ? false : p.frozen && p.frozenCheckbox;
  9617. var col = { ischeckbox: true, issystem: true, width: p.detailColWidth, frozen: frozenCheckbox };
  9618. setColumn(col, 1, -1, lastid);
  9619. lastid = col['__id'];
  9620. }
  9621. for (var i = 0, l = p.columns.length; i < l; i++)
  9622. {
  9623. var col = p.columns[i];
  9624. setColumn(col, 1, -1, lastid);
  9625. lastid = col['__id'];
  9626. }
  9627. //设置colSpan和rowSpan
  9628. for (var id in g._columns)
  9629. {
  9630. var col = g._columns[id];
  9631. if (col['__leafcount'] > 1)
  9632. {
  9633. col['__colSpan'] = col['__leafcount'];
  9634. }
  9635. if (col['__leaf'] && col['__level'] != g._columnMaxLevel)
  9636. {
  9637. col['__rowSpan'] = g._columnMaxLevel - col['__level'] + 1;
  9638. }
  9639. }
  9640. //叶级别列的信息
  9641. g.columns = g.getColumns();
  9642. $(g.columns).each(function (i, column)
  9643. {
  9644. column.columnname = column.name;
  9645. column.columnindex = i;
  9646. column.type = column.type || "string";
  9647. column.islast = i == g.columns.length - 1;
  9648. column.isSort = column.isSort == false ? false : true;
  9649. column.frozen = column.frozen ? true : false;
  9650. column._width = g._getColumnWidth(column);
  9651. column._hide = column.hide ? true : false;
  9652. });
  9653. },
  9654. _getColumnWidth: function (column)
  9655. {
  9656. var g = this, p = this.options;
  9657. if (column._width) return column._width;
  9658. var colwidth = column.width || p.columnWidth;
  9659. if (!colwidth || colwidth == "auto")
  9660. {
  9661. var autoColumnNumber = 0, noAutoColumnWidth = 0;
  9662. $(g.columns).each(function (i, col)
  9663. {
  9664. var colwidth = col.width || p.columnWidth;
  9665. var isAuto = (!colwidth || colwidth == "auto") ? true : false;
  9666. if (isAuto) autoColumnNumber++;
  9667. else noAutoColumnWidth += (parseInt(g._getColumnWidth(col)) + 1);
  9668. });
  9669. colwidth = parseInt((g.grid.width() - noAutoColumnWidth) / autoColumnNumber) - 1;
  9670. }
  9671. if (typeof (colwidth) == "string" && colwidth.indexOf('%') > 0)
  9672. {
  9673. column._width = colwidth = parseInt(parseInt(colwidth) * 0.01 * (g.grid.width() - g.columns.length));
  9674. }
  9675. if (column.minWidth && colwidth < column.minWidth) colwidth = column.minWidth;
  9676. if (column.maxWidth && colwidth > column.maxWidth) colwidth = column.maxWidth;
  9677. return colwidth;
  9678. },
  9679. _createHeaderCell: function (column)
  9680. {
  9681. var g = this, p = this.options;
  9682. var jcell = $("<td class='l-grid-hd-cell'><div class='l-grid-hd-cell-inner'><span class='l-grid-hd-cell-text'></span></div></td>");
  9683. jcell.attr("id", column['__domid']);
  9684. if (!column['__leaf'])
  9685. jcell.addClass("l-grid-hd-cell-mul");
  9686. if (column.columnindex == g.columns.length - 1)
  9687. {
  9688. jcell.addClass("l-grid-hd-cell-last");
  9689. }
  9690. if (column.isrownumber)
  9691. {
  9692. jcell.addClass("l-grid-hd-cell-rownumbers");
  9693. jcell.html("<div class='l-grid-hd-cell-inner'></div>");
  9694. }
  9695. if (column.ischeckbox)
  9696. {
  9697. jcell.addClass("l-grid-hd-cell-checkbox");
  9698. jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-checkbox'></div></div>");
  9699. }
  9700. if (column.isdetail)
  9701. {
  9702. jcell.addClass("l-grid-hd-cell-detail");
  9703. jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-detail'></div></div>");
  9704. }
  9705. if (column.heightAlign)
  9706. {
  9707. $(".l-grid-hd-cell-inner:first", jcell).css("textAlign", column.heightAlign);
  9708. }
  9709. if (column['__colSpan']) jcell.attr("colSpan", column['__colSpan']);
  9710. if (column['__rowSpan'])
  9711. {
  9712. jcell.attr("rowSpan", column['__rowSpan']);
  9713. jcell.height(p.headerRowHeight * column['__rowSpan']);
  9714. var paddingTop = (p.headerRowHeight * column['__rowSpan'] - p.headerRowHeight) / 2 - 5;
  9715. $(".l-grid-hd-cell-inner:first", jcell).css("paddingTop", paddingTop);
  9716. } else
  9717. {
  9718. jcell.height(p.headerRowHeight);
  9719. }
  9720. if (column['__leaf'])
  9721. {
  9722. jcell.width(column['_width']);
  9723. jcell.attr("columnindex", column['__leafindex']);
  9724. }
  9725. var cellHeight = jcell.height();
  9726. if (!column['__rowSpan'] && cellHeight > 10) $(">div:first", jcell).height(cellHeight);
  9727. if (column._hide) jcell.hide();
  9728. if (column.name) jcell.attr({ columnname: column.name });
  9729. var headerText = "";
  9730. if (column.display && column.display != "")
  9731. headerText = column.display;
  9732. else if (column.headerRender)
  9733. headerText = column.headerRender(column);
  9734. else
  9735. headerText = "&nbsp;";
  9736. $(".l-grid-hd-cell-text:first", jcell).html(headerText);
  9737. if (!column.issystem && column['__leaf'] && column.resizable !== false && $.fn.ligerResizable && p.allowAdjustColWidth)
  9738. {
  9739. g.colResizable[column['__id']] = jcell.ligerResizable({
  9740. handles: 'e',
  9741. onStartResize: function (e, ev)
  9742. {
  9743. this.proxy.hide();
  9744. g.draggingline.css({ height: g.body.height(), top: 0, left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) }).show();
  9745. },
  9746. onResize: function (e, ev)
  9747. {
  9748. g.colresizing = true;
  9749. g.draggingline.css({ left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) });
  9750. $('body').add(jcell).css('cursor', 'e-resize');
  9751. },
  9752. onStopResize: function (e)
  9753. {
  9754. g.colresizing = false;
  9755. $('body').add(jcell).css('cursor', 'default');
  9756. g.draggingline.hide();
  9757. g.setColumnWidth(column, parseInt(column._width) + e.diffX);
  9758. return false;
  9759. }
  9760. });
  9761. }
  9762. return jcell;
  9763. },
  9764. _initBuildGridHeader: function ()
  9765. {
  9766. var g = this, p = this.options;
  9767. g.gridtablewidth = 0;
  9768. g.f.gridtablewidth = 0;
  9769. if (g.colResizable)
  9770. {
  9771. for (var i in g.colResizable)
  9772. {
  9773. g.colResizable[i].destroy();
  9774. }
  9775. g.colResizable = null;
  9776. }
  9777. g.colResizable = {};
  9778. $("tbody:first", g.gridheader).html("");
  9779. $("tbody:first", g.f.gridheader).html("");
  9780. for (var level = 1; level <= g._columnMaxLevel; level++)
  9781. {
  9782. var columns = g.getColumns(level); //获取level层次的列集合
  9783. var islast = level == g._columnMaxLevel; //是否最末级
  9784. var tr = $("<tr class='l-grid-hd-row'></tr>");
  9785. var trf = $("<tr class='l-grid-hd-row'></tr>");
  9786. if (!islast) tr.add(trf).addClass("l-grid-hd-mul");
  9787. $("tbody:first", g.gridheader).append(tr);
  9788. $("tbody:first", g.f.gridheader).append(trf);
  9789. $(columns).each(function (i, column)
  9790. {
  9791. (column.frozen ? trf : tr).append(g._createHeaderCell(column));
  9792. if (column['__leaf'])
  9793. {
  9794. var colwidth = column['_width'];
  9795. if (!column.frozen)
  9796. g.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1;
  9797. else
  9798. g.f.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1;
  9799. }
  9800. });
  9801. }
  9802. if (g._columnMaxLevel > 0)
  9803. {
  9804. var h = p.headerRowHeight * g._columnMaxLevel;
  9805. g.gridheader.add(g.f.gridheader).height(h);
  9806. if (p.rownumbers && p.frozenRownumbers) g.f.gridheader.find("td:first").height(h);
  9807. }
  9808. g._updateFrozenWidth();
  9809. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  9810. },
  9811. _initBuildPopup: function ()
  9812. {
  9813. var g = this, p = this.options;
  9814. $(':checkbox', g.popup).unbind();
  9815. $('tbody tr', g.popup).remove();
  9816. $(g.columns).each(function (i, column)
  9817. {
  9818. if (column.issystem) return;
  9819. if (column.isAllowHide == false) return;
  9820. var chk = 'checked="checked"';
  9821. if (column._hide) chk = '';
  9822. var header = column.display;
  9823. $('tbody', g.popup).append('<tr><td class="l-column-left"><input type="checkbox" ' + chk + ' class="l-checkbox" columnindex="' + i + '"/></td><td class="l-column-right">' + header + '</td></tr>');
  9824. });
  9825. if ($.fn.ligerCheckBox)
  9826. {
  9827. $('input:checkbox', g.popup).ligerCheckBox(
  9828. {
  9829. onBeforeClick: function (obj)
  9830. {
  9831. if (!obj.checked) return true;
  9832. if ($('input:checked', g.popup).length <= p.minColToggle)
  9833. return false;
  9834. return true;
  9835. }
  9836. });
  9837. }
  9838. //表头 - 显示/隐藏'列控制'按钮事件
  9839. if (p.allowHideColumn)
  9840. {
  9841. $('tr', g.popup).hover(function ()
  9842. {
  9843. $(this).addClass('l-popup-row-over');
  9844. },
  9845. function ()
  9846. {
  9847. $(this).removeClass('l-popup-row-over');
  9848. });
  9849. var onPopupCheckboxChange = function ()
  9850. {
  9851. if ($('input:checked', g.popup).length + 1 <= p.minColToggle)
  9852. {
  9853. return false;
  9854. }
  9855. g.toggleCol(parseInt($(this).attr("columnindex")), this.checked, true);
  9856. };
  9857. if ($.fn.ligerCheckBox)
  9858. $(':checkbox', g.popup).bind('change', onPopupCheckboxChange);
  9859. else
  9860. $(':checkbox', g.popup).bind('click', onPopupCheckboxChange);
  9861. }
  9862. },
  9863. _initHeight: function ()
  9864. {
  9865. var g = this, p = this.options;
  9866. if (p.height == 'auto')
  9867. {
  9868. g.gridbody.height('auto');
  9869. g.f.gridbody.height('auto');
  9870. }
  9871. if (p.width)
  9872. {
  9873. g.grid.width(p.width);
  9874. }
  9875. g._onResize.call(g);
  9876. },
  9877. _initFootbar: function ()
  9878. {
  9879. var g = this, p = this.options;
  9880. if (p.usePager)
  9881. {
  9882. //创建底部工具条 - 选择每页显示记录数
  9883. var optStr = "";
  9884. var selectedIndex = -1;
  9885. $(p.pageSizeOptions).each(function (i, item)
  9886. {
  9887. var selectedStr = "";
  9888. if (p.pageSize == item) selectedIndex = i;
  9889. optStr += "<option value='" + item + "' " + selectedStr + " >" + item + "</option>";
  9890. });
  9891. $('.l-bar-selectpagesize', g.toolbar).append("<select name='rp'>" + optStr + "</select>");
  9892. if (selectedIndex != -1) $('.l-bar-selectpagesize select', g.toolbar)[0].selectedIndex = selectedIndex;
  9893. if (p.switchPageSizeApplyComboBox && $.fn.ligerComboBox)
  9894. {
  9895. $(".l-bar-selectpagesize select", g.toolbar).ligerComboBox(
  9896. {
  9897. onBeforeSelect: function ()
  9898. {
  9899. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  9900. return false;
  9901. return true;
  9902. },
  9903. width: 45
  9904. });
  9905. }
  9906. }
  9907. else
  9908. {
  9909. g.toolbar.hide();
  9910. }
  9911. },
  9912. _searchData: function (data, clause)
  9913. {
  9914. var g = this, p = this.options;
  9915. var newData = new Array();
  9916. for (var i = 0; i < data.length; i++)
  9917. {
  9918. if (clause(data[i], i))
  9919. {
  9920. newData[newData.length] = data[i];
  9921. }
  9922. }
  9923. return newData;
  9924. },
  9925. _clearGrid: function ()
  9926. {
  9927. var g = this, p = this.options;
  9928. for (var i in g.rows)
  9929. {
  9930. var rowobj = $(g.getRowObj(g.rows[i]));
  9931. if (g.enabledFrozen())
  9932. rowobj = rowobj.add(g.getRowObj(g.rows[i], true));
  9933. rowobj.unbind();
  9934. }
  9935. //清空数据
  9936. g.gridbody.html("");
  9937. g.f.gridbody.html("");
  9938. g.recordNumber = 0;
  9939. g.records = {};
  9940. g.rows = [];
  9941. //清空选择的行
  9942. g.selected = [];
  9943. g.totalNumber = 0;
  9944. //编辑器计算器
  9945. g.editorcounter = 0;
  9946. },
  9947. _fillGridBody: function (data, frozen)
  9948. {
  9949. var g = this, p = this.options;
  9950. //加载数据
  9951. var gridhtmlarr = ['<div class="l-grid-body-inner"><table class="l-grid-body-table" cellpadding=0 cellspacing=0><tbody>'];
  9952. if (g.enabledGroup()) //启用分组模式
  9953. {
  9954. var groups = []; //分组列名数组
  9955. var groupsdata = []; //切成几块后的数据
  9956. g.groups = groupsdata;
  9957. for (var rowparm in data)
  9958. {
  9959. var item = data[rowparm];
  9960. var groupColumnValue = item[p.groupColumnName];
  9961. var valueIndex = $.inArray(groupColumnValue, groups);
  9962. if (valueIndex == -1)
  9963. {
  9964. groups.push(groupColumnValue);
  9965. valueIndex = groups.length - 1;
  9966. groupsdata.push([]);
  9967. }
  9968. groupsdata[valueIndex].push(item);
  9969. }
  9970. $(groupsdata).each(function (i, item)
  9971. {
  9972. if (groupsdata.length == 1)
  9973. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-last l-grid-grouprow-first"');
  9974. if (i == groupsdata.length - 1)
  9975. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-last"');
  9976. else if (i == 0)
  9977. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-first"');
  9978. else
  9979. gridhtmlarr.push('<tr class="l-grid-grouprow"');
  9980. gridhtmlarr.push(' groupindex"=' + i + '" >');
  9981. gridhtmlarr.push('<td colSpan="' + g.columns.length + '" class="l-grid-grouprow-cell">');
  9982. gridhtmlarr.push('<span class="l-grid-group-togglebtn">&nbsp;&nbsp;&nbsp;&nbsp;</span>');
  9983. if (p.groupRender)
  9984. gridhtmlarr.push(p.groupRender(groups[i], item, p.groupColumnDisplay));
  9985. else
  9986. gridhtmlarr.push(p.groupColumnDisplay + ':' + groups[i]);
  9987. gridhtmlarr.push('</td>');
  9988. gridhtmlarr.push('</tr>');
  9989. gridhtmlarr.push(g._getHtmlFromData(item, frozen));
  9990. //汇总
  9991. if (g.isTotalSummary())
  9992. gridhtmlarr.push(g._getTotalSummaryHtml(item, "l-grid-totalsummary-group", frozen));
  9993. });
  9994. }
  9995. else
  9996. {
  9997. gridhtmlarr.push(g._getHtmlFromData(data, frozen));
  9998. }
  9999. gridhtmlarr.push('</tbody></table></div>');
  10000. if (frozen) gridhtmlarr.push('<div class="l-jplace"></div>');
  10001. (frozen ? g.f.gridbody : g.gridbody).html(gridhtmlarr.join(''));
  10002. //分组时不需要
  10003. if (!g.enabledGroup())
  10004. {
  10005. //创建汇总行
  10006. g._bulidTotalSummary(frozen);
  10007. }
  10008. $("> div:first", g.gridbody).width(g.gridtablewidth);
  10009. g._onResize();
  10010. },
  10011. _showData: function ()
  10012. {
  10013. var g = this, p = this.options;
  10014. g.changedCells = {};
  10015. var data = g.currentData[p.root];
  10016. if (p.usePager)
  10017. {
  10018. //更新总记录数
  10019. if (p.dataAction == "server" && g.data && g.data[p.record])
  10020. p.total = g.data[p.record];
  10021. else if (g.filteredData && g.filteredData[p.root])
  10022. p.total = g.filteredData[p.root].length;
  10023. else if (g.data && g.data[p.root])
  10024. p.total = g.data[p.root].length;
  10025. else if (data)
  10026. p.total = data.length;
  10027. p.page = p.newPage;
  10028. if (!p.total) p.total = 0;
  10029. if (!p.page) p.page = 1;
  10030. p.pageCount = Math.ceil(p.total / p.pageSize);
  10031. if (!p.pageCount) p.pageCount = 1;
  10032. //更新分页
  10033. g._buildPager();
  10034. }
  10035. //加载中
  10036. $('.l-bar-btnloading:first', g.toolbar).removeClass('l-bar-btnloading');
  10037. if (g.trigger('beforeShowData', [g.currentData]) == false) return;
  10038. g._clearGrid();
  10039. g.isDataChanged = false;
  10040. if (!data || !data.length)
  10041. {
  10042. g.gridview.addClass("l-grid-empty");
  10043. $("<div></div>").addClass("l-grid-body-inner").appendTo(g.gridbody).css({
  10044. width: g.gridheader.find(">div:first").width(),
  10045. height: g.gridbody.height()
  10046. });
  10047. g._onResize.ligerDefer(g, 50);
  10048. return;
  10049. }
  10050. else
  10051. {
  10052. g.gridview.removeClass("l-grid-empty");
  10053. }
  10054. $(".l-bar-btnload:first span", g.toolbar).removeClass("l-disabled");
  10055. g._updateGridData();
  10056. if (g.enabledFrozen())
  10057. g._fillGridBody(g.rows, true);
  10058. g._fillGridBody(g.rows, false);
  10059. g.trigger('SysGridHeightChanged');
  10060. if (p.totalRender)
  10061. {
  10062. $(".l-panel-bar-total", g.element).remove();
  10063. $(".l-panel-bar", g.element).before('<div class="l-panel-bar-total">' + p.totalRender(g.data, g.filteredData) + '</div>');
  10064. }
  10065. if (p.mouseoverRowCssClass)
  10066. {
  10067. for (var i in g.rows)
  10068. {
  10069. var rowobj = $(g.getRowObj(g.rows[i]));
  10070. if (g.enabledFrozen())
  10071. rowobj = rowobj.add(g.getRowObj(g.rows[i], true));
  10072. rowobj.bind('mouseover.gridrow', function ()
  10073. {
  10074. g._onRowOver(this, true);
  10075. }).bind('mouseout.gridrow', function ()
  10076. {
  10077. g._onRowOver(this, false);
  10078. });
  10079. }
  10080. }
  10081. g._fixHeight();
  10082. g.gridbody.trigger('scroll.grid');
  10083. g.trigger('afterShowData', [g.currentData]);
  10084. },
  10085. _fixHeight: function ()
  10086. {
  10087. var g = this, p = this.options;
  10088. if (p.fixedCellHeight || !p.frozen) return;
  10089. var column1, column2;
  10090. for (var i in g.columns)
  10091. {
  10092. var column = g.columns[i];
  10093. if (column1 && column2) break;
  10094. if (column.frozen && !column1)
  10095. {
  10096. column1 = column;
  10097. continue;
  10098. }
  10099. if (!column.frozen && !column2)
  10100. {
  10101. column2 = column;
  10102. continue;
  10103. }
  10104. }
  10105. if (!column1 || !column2) return;
  10106. for (var rowid in g.records)
  10107. {
  10108. var cell1 = g.getCellObj(rowid, column1), cell2 = g.getCellObj(rowid, column2);
  10109. var height = Math.max($(cell1).height(), ($(cell2).height()));
  10110. $(cell1).add(cell2).height(height);
  10111. }
  10112. },
  10113. _getRowDomId: function (rowdata, frozen)
  10114. {
  10115. return this.id + "|" + (frozen ? "1" : "2") + "|" + rowdata['__id'];
  10116. },
  10117. _getCellDomId: function (rowdata, column)
  10118. {
  10119. return this._getRowDomId(rowdata, column.frozen) + "|" + column['__id'];
  10120. },
  10121. _getHtmlFromData: function (data, frozen)
  10122. {
  10123. if (!data) return "";
  10124. var g = this, p = this.options;
  10125. var gridhtmlarr = [];
  10126. for (var i = 0, l = data.length; i < l; i++)
  10127. {
  10128. var item = data[i];
  10129. var rowid = item['__id'];
  10130. if (!item) continue;
  10131. gridhtmlarr.push('<tr');
  10132. gridhtmlarr.push(' id="' + g._getRowDomId(item, frozen) + '"');
  10133. gridhtmlarr.push(' class="l-grid-row'); //class start
  10134. if (!frozen && g.enabledCheckbox() && p.isChecked && p.isChecked(item))
  10135. {
  10136. g.select(item);
  10137. gridhtmlarr.push(' l-selected');
  10138. }
  10139. else if (g.isSelected(item))
  10140. {
  10141. gridhtmlarr.push(' l-selected');
  10142. }
  10143. else if (p.isSelected && p.isSelected(item))
  10144. {
  10145. g.select(item);
  10146. gridhtmlarr.push(' l-selected');
  10147. }
  10148. if (item['__index'] % 2 == 1 && p.alternatingRow)
  10149. gridhtmlarr.push(' l-grid-row-alt');
  10150. gridhtmlarr.push('" '); //class end
  10151. if (p.rowAttrRender) gridhtmlarr.push(p.rowAttrRender(item, rowid));
  10152. if (p.tree && g.collapsedRows && g.collapsedRows.length)
  10153. {
  10154. var isHide = function ()
  10155. {
  10156. var pitem = g.getParent(item);
  10157. while (pitem)
  10158. {
  10159. if ($.inArray(pitem, g.collapsedRows) != -1) return true;
  10160. pitem = g.getParent(pitem);
  10161. }
  10162. return false;
  10163. };
  10164. if (isHide()) gridhtmlarr.push(' style="display:none;" ');
  10165. }
  10166. gridhtmlarr.push('>');
  10167. $(g.columns).each(function (columnindex, column)
  10168. {
  10169. if (frozen != column.frozen) return;
  10170. gridhtmlarr.push('<td');
  10171. gridhtmlarr.push(' id="' + g._getCellDomId(item, this) + '"');
  10172. //如果是行序号(系统列)
  10173. if (this.isrownumber)
  10174. {
  10175. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-rownumbers" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  10176. if (p.fixedCellHeight)
  10177. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  10178. else
  10179. gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
  10180. gridhtmlarr.push('>' + (parseInt(item['__index']) + 1) + '</div></td>');
  10181. return;
  10182. }
  10183. //如果是复选框(系统列)
  10184. if (this.ischeckbox)
  10185. {
  10186. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-checkbox" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  10187. if (p.fixedCellHeight)
  10188. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  10189. else
  10190. gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
  10191. gridhtmlarr.push('>');
  10192. gridhtmlarr.push('<span class="l-grid-row-cell-btn-checkbox"></span>');
  10193. gridhtmlarr.push('</div></td>');
  10194. return;
  10195. }
  10196. //如果是明细列(系统列)
  10197. else if (this.isdetail)
  10198. {
  10199. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-detail" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  10200. if (p.fixedCellHeight)
  10201. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  10202. else
  10203. gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
  10204. gridhtmlarr.push('>');
  10205. if (!p.isShowDetailToggle || p.isShowDetailToggle(item))
  10206. {
  10207. gridhtmlarr.push('<span class="l-grid-row-cell-detailbtn"></span>');
  10208. }
  10209. gridhtmlarr.push('</div></td>');
  10210. return;
  10211. }
  10212. var colwidth = this._width;
  10213. gridhtmlarr.push(' class="l-grid-row-cell ');
  10214. if (g.changedCells[rowid + "_" + this['__id']]) gridhtmlarr.push("l-grid-row-cell-edited ");
  10215. if (this.islast)
  10216. gridhtmlarr.push('l-grid-row-cell-last ');
  10217. gridhtmlarr.push('"');
  10218. //if (this.columnname) gridhtmlarr.push('columnname="' + this.columnname + '"');
  10219. gridhtmlarr.push(' style = "');
  10220. gridhtmlarr.push('width:' + colwidth + 'px; ');
  10221. if (column._hide)
  10222. {
  10223. gridhtmlarr.push('display:none;');
  10224. }
  10225. gridhtmlarr.push(' ">');
  10226. gridhtmlarr.push(g._getCellHtml(item, column));
  10227. gridhtmlarr.push('</td>');
  10228. });
  10229. gridhtmlarr.push('</tr>');
  10230. }
  10231. return gridhtmlarr.join('');
  10232. },
  10233. _getCellHtml: function (rowdata, column)
  10234. {
  10235. var g = this, p = this.options;
  10236. if (column.isrownumber)
  10237. return '<div class="l-grid-row-cell-inner">' + (parseInt(rowdata['__index']) + 1) + '</div>';
  10238. var htmlarr = [];
  10239. htmlarr.push('<div class="l-grid-row-cell-inner"');
  10240. //htmlarr.push('<div');
  10241. htmlarr.push(' style = "width:' + parseInt(column._width - 8) + 'px;');
  10242. if (p.fixedCellHeight) htmlarr.push('height:' + p.rowHeight + 'px;');
  10243. htmlarr.push('min-height:' + p.rowHeight + 'px; ');
  10244. if (column.align) htmlarr.push('text-align:' + column.align + ';');
  10245. var content = g._getCellContent(rowdata, column);
  10246. htmlarr.push('">' + content + '</div>');
  10247. return htmlarr.join('');
  10248. },
  10249. _setValueByName: function (data, name, value)
  10250. {
  10251. if (!data || !name) return null;
  10252. if (name.indexOf('.') == -1)
  10253. {
  10254. data[name] = value;
  10255. }
  10256. else
  10257. {
  10258. try
  10259. {
  10260. new Function("data,value", "data." + name + "=value;")(data, value);
  10261. }
  10262. catch (e)
  10263. {
  10264. }
  10265. }
  10266. },
  10267. _getValueByName: function (data, name)
  10268. {
  10269. if (!data || !name) return null;
  10270. if (name.indexOf('.') == -1)
  10271. {
  10272. return data[name];
  10273. }
  10274. else
  10275. {
  10276. try
  10277. {
  10278. return new Function("data", "return data." + name + ";")(data);
  10279. }
  10280. catch (e)
  10281. {
  10282. return null;
  10283. }
  10284. }
  10285. },
  10286. _getCellContent: function (rowdata, column)
  10287. {
  10288. var g = this, p = this.options;
  10289. if (!rowdata || !column) return "";
  10290. if (column.isrownumber) return parseInt(rowdata['__index']) + 1;
  10291. var rowid = rowdata['__id'];
  10292. var rowindex = rowdata['__index'];
  10293. var value = g._getValueByName(rowdata, column.name);
  10294. var text = g._getValueByName(rowdata, column.textField);
  10295. var content = "";
  10296. if (column.render)
  10297. {
  10298. content = column.render.call(g, rowdata, rowindex, value, column);
  10299. }
  10300. else if (p.formatters[column.type])
  10301. {
  10302. content = p.formatters[column.type].call(g, value, column);
  10303. }
  10304. else if (text != null)
  10305. {
  10306. content = text.toString();
  10307. }
  10308. else if (value != null)
  10309. {
  10310. content = value.toString();
  10311. }
  10312. if (p.tree && (p.tree.columnName != null && p.tree.columnName == column.name || p.tree.columnId != null && p.tree.columnId == column.id))
  10313. {
  10314. content = g._getTreeCellHtml(content, rowdata);
  10315. }
  10316. return content || "";
  10317. },
  10318. _getTreeCellHtml: function (oldContent, rowdata)
  10319. {
  10320. var level = rowdata['__level'];
  10321. var g = this, p = this.options;
  10322. //var isExtend = p.tree.isExtend(rowdata);
  10323. var isExtend = $.inArray(rowdata, g.collapsedRows || []) == -1;
  10324. var isParent = p.tree.isParent(rowdata);
  10325. var content = "";
  10326. level = parseInt(level) || 1;
  10327. for (var i = 1; i < level; i++)
  10328. {
  10329. content += "<div class='l-grid-tree-space'></div>";
  10330. }
  10331. if (isExtend && isParent)
  10332. content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-open'></div>";
  10333. else if (isParent)
  10334. content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-close'></div>";
  10335. else
  10336. content += "<div class='l-grid-tree-space'></div>";
  10337. content += "<span class='l-grid-tree-content'>" + oldContent + "</span>";
  10338. return content;
  10339. },
  10340. _applyEditor: function (obj)
  10341. {
  10342. var g = this, p = this.options;
  10343. var rowcell = obj, ids = rowcell.id.split('|');
  10344. var columnid = ids[ids.length - 1], column = g._columns[columnid];
  10345. var row = $(rowcell).parent(), rowdata = g.getRow(row[0]), rowid = rowdata['__id'], rowindex = rowdata['__index'];
  10346. if (!column || !column.editor) return;
  10347. var columnname = column.name, columnindex = column.columnindex;
  10348. if (column.editor.type && p.editors[column.editor.type])
  10349. {
  10350. var currentdata = g._getValueByName(rowdata, columnname);
  10351. var editParm = { record: rowdata, value: currentdata, column: column, rowindex: rowindex };
  10352. if (column.textField) editParm.text = g._getValueByName(rowdata, column.textField);
  10353. if (g.trigger('beforeEdit', [editParm]) == false) return false;
  10354. g.lastEditRow = rowdata;
  10355. var editor = p.editors[column.editor.type],
  10356. jcell = $(rowcell), offset = $(rowcell).offset(),
  10357. width = $(rowcell).width(), height = $(rowcell).height(),
  10358. container = $("<div class='l-grid-editor'></div>").appendTo(g.grid),
  10359. left = 0,
  10360. top = 0,
  10361. pc = jcell.position(),
  10362. pb = g.gridbody.position(),
  10363. pv = g.gridview2.position(),
  10364. topbarHeight = p.toolbar ? g.topbar.parent().outerHeight() : 0 + p.title ? g.header.outerHeight() : 0,
  10365. left = pc.left + pb.left + pv.left,
  10366. top = pc.top + pb.top + pv.top + topbarHeight;
  10367. jcell.html("");
  10368. g.setCellEditing(rowdata, column, true);
  10369. container
  10370. .css({ left: left, top: ($.browser.safari ? top : top - 1) + p.editorTopDiff })
  10371. .show();
  10372. if (column.textField) editParm.text = g._getValueByName(rowdata, column.textField);
  10373. var editorInput = g._createEditor(editor, container, editParm, width, height - 1);
  10374. g.editor = { editing: true, editor: editor, input: editorInput, editParm: editParm, container: container };
  10375. g.unbind('sysEndEdit');
  10376. g.bind('sysEndEdit', function ()
  10377. {
  10378. var newValue = editor.getValue(editorInput, editParm);
  10379. if (column.textField && editor.getText)
  10380. {
  10381. editParm.text = editor.getText(editorInput, editParm);
  10382. }
  10383. if (editor.getSelected)
  10384. {
  10385. editParm.selected = editor.getSelected(editorInput, editParm);
  10386. }
  10387. if (newValue != currentdata)
  10388. {
  10389. $(rowcell).addClass("l-grid-row-cell-edited");
  10390. g.changedCells[rowid + "_" + column['__id']] = true;
  10391. if (column.textField != column.name) //如果textField跟name一样,那么获取text就可以
  10392. {
  10393. editParm.value = newValue;
  10394. }
  10395. }
  10396. if (column.editor.onChange) column.editor.onChange(editParm);
  10397. if (g._checkEditAndUpdateCell(editParm))
  10398. {
  10399. if (column.editor.onChanged) column.editor.onChanged(editParm);
  10400. }
  10401. });
  10402. }
  10403. },
  10404. _checkEditAndUpdateCell: function (editParm)
  10405. {
  10406. var g = this, p = this.options;
  10407. if (g.trigger('beforeSubmitEdit', [editParm]) == false) return false;
  10408. var column = editParm.column;
  10409. if (editParm.text && column.textField) g._setValueByName(editParm.record, column.textField, editParm.text);
  10410. g.updateCell(column, editParm.value, editParm.record);
  10411. if (column.render || g.enabledTotal()) g.reRender({ column: column });
  10412. g.reRender({ rowdata: editParm.record });
  10413. return true;
  10414. },
  10415. _getCurrentPageData: function (source)
  10416. {
  10417. var g = this, p = this.options;
  10418. var data = {};
  10419. data[p.root] = [];
  10420. if (!source || !source[p.root] || !source[p.root].length)
  10421. {
  10422. data[p.record] = 0;
  10423. return data;
  10424. }
  10425. data[p.record] = source[p.root].length;
  10426. if (!p.newPage) p.newPage = 1;
  10427. for (i = (p.newPage - 1) * p.pageSize; i < source[p.root].length && i < p.newPage * p.pageSize; i++)
  10428. {
  10429. data[p.root].push(source[p.root][i]);
  10430. }
  10431. return data;
  10432. },
  10433. //比较某一列两个数据
  10434. _compareData: function (data1, data2, columnName, columnType)
  10435. {
  10436. var g = this, p = this.options;
  10437. var val1 = data1[columnName], val2 = data2[columnName];
  10438. if (val1 == null && val2 != null) return 1;
  10439. else if (val1 == null && val2 == null) return 0;
  10440. else if (val1 != null && val2 == null) return -1;
  10441. if (p.sorters[columnType])
  10442. return p.sorters[columnType].call(g, val1, val2);
  10443. else
  10444. return val1 < val2 ? -1 : val1 > val2 ? 1 : 0;
  10445. },
  10446. _getTotalCellContent: function (column, data)
  10447. {
  10448. var g = this, p = this.options;
  10449. var totalsummaryArr = [];
  10450. if (column.totalSummary)
  10451. {
  10452. var isExist = function (type)
  10453. {
  10454. for (var i = 0; i < types.length; i++)
  10455. if (types[i].toLowerCase() == type.toLowerCase()) return true;
  10456. return false;
  10457. };
  10458. var sum = 0, count = 0, avg = 0;
  10459. var max = parseFloat(data[0][column.name]);
  10460. var min = parseFloat(data[0][column.name]);
  10461. for (var i = 0; i < data.length; i++)
  10462. {
  10463. count += 1;
  10464. var value = data[i][column.name];
  10465. if (typeof (value) == "string") value = value.replace(/\$|\,/g, '');
  10466. value = parseFloat(value);
  10467. if (!value) continue;
  10468. sum += value;
  10469. if (value > max) max = value;
  10470. if (value < min) min = value;
  10471. }
  10472. avg = sum * 1.0 / data.length;
  10473. if (column.totalSummary.render)
  10474. {
  10475. var renderhtml = column.totalSummary.render({
  10476. sum: sum,
  10477. count: count,
  10478. avg: avg,
  10479. min: min,
  10480. max: max
  10481. }, column, g.data);
  10482. totalsummaryArr.push(renderhtml);
  10483. }
  10484. else if (column.totalSummary.type)
  10485. {
  10486. var types = column.totalSummary.type.split(',');
  10487. if (isExist('sum'))
  10488. totalsummaryArr.push("<div>Sum=" + sum.toFixed(2) + "</div>");
  10489. if (isExist('count'))
  10490. totalsummaryArr.push("<div>Count=" + count + "</div>");
  10491. if (isExist('max'))
  10492. totalsummaryArr.push("<div>Max=" + max.toFixed(2) + "</div>");
  10493. if (isExist('min'))
  10494. totalsummaryArr.push("<div>Min=" + min.toFixed(2) + "</div>");
  10495. if (isExist('avg'))
  10496. totalsummaryArr.push("<div>Avg=" + avg.toFixed(2) + "</div>");
  10497. }
  10498. }
  10499. return totalsummaryArr.join('');
  10500. },
  10501. _getTotalSummaryHtml: function (data, classCssName, frozen)
  10502. {
  10503. var g = this, p = this.options;
  10504. var totalsummaryArr = [];
  10505. if (classCssName)
  10506. totalsummaryArr.push('<tr class="l-grid-totalsummary ' + classCssName + '">');
  10507. else
  10508. totalsummaryArr.push('<tr class="l-grid-totalsummary">');
  10509. $(g.columns).each(function (columnindex, column)
  10510. {
  10511. if (this.frozen != frozen) return;
  10512. //如果是行序号(系统列)
  10513. if (this.isrownumber)
  10514. {
  10515. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-rownumbers" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  10516. return;
  10517. }
  10518. //如果是复选框(系统列)
  10519. if (this.ischeckbox)
  10520. {
  10521. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-checkbox" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  10522. return;
  10523. }
  10524. //如果是明细列(系统列)
  10525. else if (this.isdetail)
  10526. {
  10527. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-detail" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  10528. return;
  10529. }
  10530. totalsummaryArr.push('<td class="l-grid-totalsummary-cell');
  10531. if (this.islast)
  10532. totalsummaryArr.push(" l-grid-totalsummary-cell-last");
  10533. totalsummaryArr.push('" ');
  10534. totalsummaryArr.push('id="' + g.id + "|total" + g.totalNumber + "|" + column.__id + '" ');
  10535. totalsummaryArr.push('width="' + this._width + '" ');
  10536. columnname = this.columnname;
  10537. if (columnname)
  10538. {
  10539. totalsummaryArr.push('columnname="' + columnname + '" ');
  10540. }
  10541. totalsummaryArr.push('columnindex="' + columnindex + '" ');
  10542. totalsummaryArr.push('><div class="l-grid-totalsummary-cell-inner"');
  10543. if (column.align)
  10544. totalsummaryArr.push(' style="text-Align:' + column.align + ';"');
  10545. totalsummaryArr.push('>');
  10546. totalsummaryArr.push(g._getTotalCellContent(column, data));
  10547. totalsummaryArr.push('</div></td>');
  10548. });
  10549. totalsummaryArr.push('</tr>');
  10550. if (!frozen) g.totalNumber++;
  10551. return totalsummaryArr.join('');
  10552. },
  10553. _bulidTotalSummary: function (frozen)
  10554. {
  10555. var g = this, p = this.options;
  10556. if (!g.isTotalSummary()) return false;
  10557. if (!g.currentData || g.currentData[p.root].length == 0) return false;
  10558. var totalRow = $(g._getTotalSummaryHtml(g.currentData[p.root], null, frozen));
  10559. $("tbody:first", frozen ? g.f.gridbody : g.gridbody).append(totalRow);
  10560. if (frozen) g.totalRow1 = totalRow;
  10561. else g.totalRow2 = totalRow;
  10562. },
  10563. updateTotalSummary: function ()
  10564. {
  10565. var g = this, p = this.options;
  10566. if (!g.isTotalSummary()) return;
  10567. if (!g.currentData || g.currentData[p.root].length == 0) return;
  10568. var totalRow2 = $(g._getTotalSummaryHtml(g.currentData[p.root], null, false));
  10569. if (g.totalRow2) g.totalRow2.html(totalRow2.html());
  10570. },
  10571. _buildPager: function ()
  10572. {
  10573. var g = this, p = this.options;
  10574. $('.pcontrol input', g.toolbar).val(p.page);
  10575. if (!p.pageCount) p.pageCount = 1;
  10576. $('.pcontrol span', g.toolbar).html(p.pageCount);
  10577. var r1 = parseInt((p.page - 1) * p.pageSize) + 1.0;
  10578. var r2 = parseInt(r1) + parseInt(p.pageSize) - 1;
  10579. if (!p.total) p.total = 0;
  10580. if (p.total < r2) r2 = p.total;
  10581. if (!p.total) r1 = r2 = 0;
  10582. if (r1 < 0) r1 = 0;
  10583. if (r2 < 0) r2 = 0;
  10584. var stat = p.pageStatMessage;
  10585. stat = stat.replace(/{from}/, r1);
  10586. stat = stat.replace(/{to}/, r2);
  10587. stat = stat.replace(/{total}/, p.total);
  10588. stat = stat.replace(/{pagesize}/, p.pageSize);
  10589. $('.l-bar-text', g.toolbar).html(stat);
  10590. if (!p.total)
  10591. {
  10592. $(".l-bar-btnfirst span,.l-bar-btnprev span,.l-bar-btnnext span,.l-bar-btnlast span", g.toolbar)
  10593. .addClass("l-disabled");
  10594. }
  10595. if (p.page == 1)
  10596. {
  10597. $(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled");
  10598. $(".l-bar-btnprev span", g.toolbar).addClass("l-disabled");
  10599. }
  10600. else if (p.page > p.pageCount && p.pageCount > 0)
  10601. {
  10602. $(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled");
  10603. $(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled");
  10604. }
  10605. if (p.page == p.pageCount)
  10606. {
  10607. $(".l-bar-btnlast span", g.toolbar).addClass("l-disabled");
  10608. $(".l-bar-btnnext span", g.toolbar).addClass("l-disabled");
  10609. }
  10610. else if (p.page < p.pageCount && p.pageCount > 0)
  10611. {
  10612. $(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled");
  10613. $(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled");
  10614. }
  10615. },
  10616. _getRowIdByDomId: function (domid)
  10617. {
  10618. var ids = domid.split('|');
  10619. var rowid = ids[2];
  10620. return rowid;
  10621. },
  10622. _getRowByDomId: function (domid)
  10623. {
  10624. return this.records[this._getRowIdByDomId(domid)];
  10625. },
  10626. //在外部点击的时候,判断是否在编辑状态,比如弹出的层点击的,如果自定义了编辑器,而且生成的层没有包括在grid内部,建议重载
  10627. _isEditing: function (jobjs)
  10628. {
  10629. return jobjs.hasClass("l-box-dateeditor") || jobjs.hasClass("l-box-select");
  10630. },
  10631. _getSrcElementByEvent: function (e)
  10632. {
  10633. var g = this;
  10634. var obj = (e.target || e.srcElement);
  10635. var jobjs = $(obj).parents().add(obj);
  10636. var fn = function (parm)
  10637. {
  10638. for (var i = 0, l = jobjs.length; i < l; i++)
  10639. {
  10640. if (typeof parm == "string")
  10641. {
  10642. if ($(jobjs[i]).hasClass(parm)) return jobjs[i];
  10643. }
  10644. else if (typeof parm == "object")
  10645. {
  10646. if (jobjs[i] == parm) return jobjs[i];
  10647. }
  10648. }
  10649. return null;
  10650. };
  10651. if (fn("l-grid-editor")) return { editing: true, editor: fn("l-grid-editor") };
  10652. if (jobjs.index(this.element) == -1)
  10653. {
  10654. if (g._isEditing(jobjs)) return { editing: true };
  10655. else return { out: true };
  10656. }
  10657. var indetail = false;
  10658. if (jobjs.hasClass("l-grid-detailpanel") && g.detailrows)
  10659. {
  10660. for (var i = 0, l = g.detailrows.length; i < l; i++)
  10661. {
  10662. if (jobjs.index(g.detailrows[i]) != -1)
  10663. {
  10664. indetail = true;
  10665. break;
  10666. }
  10667. }
  10668. }
  10669. var r = {
  10670. grid: fn("l-panel"),
  10671. indetail: indetail,
  10672. frozen: fn(g.gridview1[0]) ? true : false,
  10673. header: fn("l-panel-header"), //标题
  10674. gridheader: fn("l-grid-header"), //表格头
  10675. gridbody: fn("l-grid-body"),
  10676. total: fn("l-panel-bar-total"), //总汇总
  10677. popup: fn("l-grid-popup"),
  10678. toolbar: fn("l-panel-bar")
  10679. };
  10680. if (r.gridheader)
  10681. {
  10682. r.hrow = fn("l-grid-hd-row");
  10683. r.hcell = fn("l-grid-hd-cell");
  10684. r.hcelltext = fn("l-grid-hd-cell-text");
  10685. r.checkboxall = fn("l-grid-hd-cell-checkbox");
  10686. if (r.hcell)
  10687. {
  10688. var columnid = r.hcell.id.split('|')[2];
  10689. r.column = g._columns[columnid];
  10690. }
  10691. }
  10692. if (r.gridbody)
  10693. {
  10694. r.row = fn("l-grid-row");
  10695. r.cell = fn("l-grid-row-cell");
  10696. r.checkbox = fn("l-grid-row-cell-btn-checkbox");
  10697. r.groupbtn = fn("l-grid-group-togglebtn");
  10698. r.grouprow = fn("l-grid-grouprow");
  10699. r.detailbtn = fn("l-grid-row-cell-detailbtn");
  10700. r.detailrow = fn("l-grid-detailpanel");
  10701. r.totalrow = fn("l-grid-totalsummary");
  10702. r.totalcell = fn("l-grid-totalsummary-cell");
  10703. r.rownumberscell = $(r.cell).hasClass("l-grid-row-cell-rownumbers") ? r.cell : null;
  10704. r.detailcell = $(r.cell).hasClass("l-grid-row-cell-detail") ? r.cell : null;
  10705. r.checkboxcell = $(r.cell).hasClass("l-grid-row-cell-checkbox") ? r.cell : null;
  10706. r.treelink = fn("l-grid-tree-link");
  10707. r.editor = fn("l-grid-editor");
  10708. if (r.row) r.data = this._getRowByDomId(r.row.id);
  10709. if (r.cell) r.editing = $(r.cell).hasClass("l-grid-row-cell-editing");
  10710. if (r.editor) r.editing = true;
  10711. if (r.editing) r.out = false;
  10712. }
  10713. if (r.toolbar)
  10714. {
  10715. r.first = fn("l-bar-btnfirst");
  10716. r.last = fn("l-bar-btnlast");
  10717. r.next = fn("l-bar-btnnext");
  10718. r.prev = fn("l-bar-btnprev");
  10719. r.load = fn("l-bar-btnload");
  10720. r.button = fn("l-bar-button");
  10721. }
  10722. return r;
  10723. },
  10724. _setEvent: function ()
  10725. {
  10726. var g = this, p = this.options;
  10727. g.grid.bind("mousedown.grid", function (e)
  10728. {
  10729. g._onMouseDown.call(g, e);
  10730. });
  10731. g.grid.bind("dblclick.grid", function (e)
  10732. {
  10733. g._onDblClick.call(g, e);
  10734. });
  10735. g.grid.bind("contextmenu.grid", function (e)
  10736. {
  10737. return g._onContextmenu.call(g, e);
  10738. });
  10739. $(document).bind("mouseup.grid", function (e)
  10740. {
  10741. g._onMouseUp.call(g, e);
  10742. });
  10743. $(document).bind("click.grid", function (e)
  10744. {
  10745. g._onClick.call(g, e);
  10746. });
  10747. $(window).bind("resize.grid", function (e)
  10748. {
  10749. g._onResize.call(g);
  10750. });
  10751. $(document).bind("keydown.grid", function (e)
  10752. {
  10753. if (e.ctrlKey) g.ctrlKey = true;
  10754. });
  10755. $(document).bind("keyup.grid", function (e)
  10756. {
  10757. delete g.ctrlKey;
  10758. });
  10759. //表体 - 滚动联动事件
  10760. g.gridbody.bind('scroll.grid', function ()
  10761. {
  10762. var scrollLeft = g.gridbody.scrollLeft();
  10763. var scrollTop = g.gridbody.scrollTop();
  10764. if (scrollLeft != null)
  10765. g.gridheader[0].scrollLeft = scrollLeft;
  10766. if (scrollTop != null)
  10767. g.f.gridbody[0].scrollTop = scrollTop;
  10768. g.trigger('SysGridHeightChanged');
  10769. });
  10770. //工具条 - 切换每页记录数事件
  10771. $('select', g.toolbar).change(function ()
  10772. {
  10773. if (g.isDataChanged && p.dataAction != "local" && !confirm(p.isContinueByDataChanged))
  10774. return false;
  10775. p.newPage = 1;
  10776. p.pageSize = this.value;
  10777. g.loadData(p.dataAction != "local" ? p.where : false);
  10778. });
  10779. //工具条 - 切换当前页事件
  10780. $('span.pcontrol :text', g.toolbar).blur(function (e)
  10781. {
  10782. g.changePage('input');
  10783. });
  10784. $("div.l-bar-button", g.toolbar).hover(function ()
  10785. {
  10786. $(this).addClass("l-bar-button-over");
  10787. }, function ()
  10788. {
  10789. $(this).removeClass("l-bar-button-over");
  10790. });
  10791. //列拖拽支持
  10792. if ($.fn.ligerDrag && p.colDraggable)
  10793. {
  10794. g.colDroptip = $("<div class='l-drag-coldroptip' style='display:none'><div class='l-drop-move-up'></div><div class='l-drop-move-down'></div></div>").appendTo('body');
  10795. g.gridheader.add(g.f.gridheader).ligerDrag({
  10796. revert: true, animate: false,
  10797. proxyX: 0, proxyY: 0,
  10798. proxy: function (draggable, e)
  10799. {
  10800. var src = g._getSrcElementByEvent(e);
  10801. if (src.hcell && src.column)
  10802. {
  10803. var content = $(".l-grid-hd-cell-text:first", src.hcell).html();
  10804. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div></div>").appendTo('body');
  10805. proxy.append(content);
  10806. return proxy;
  10807. }
  10808. },
  10809. onRevert: function () { return false; },
  10810. onRendered: function ()
  10811. {
  10812. this.set('cursor', 'default');
  10813. g.children[this.id] = this;
  10814. },
  10815. onStartDrag: function (current, e)
  10816. {
  10817. if (e.button == 2) return false;
  10818. if (g.colresizing) return false;
  10819. this.set('cursor', 'default');
  10820. var src = g._getSrcElementByEvent(e);
  10821. if (!src.hcell || !src.column || src.column.issystem || src.hcelltext) return false;
  10822. if ($(src.hcell).css('cursor').indexOf('resize') != -1) return false;
  10823. this.draggingColumn = src.column;
  10824. g.coldragging = true;
  10825. var gridOffset = g.grid.offset();
  10826. this.validRange = {
  10827. top: gridOffset.top,
  10828. bottom: gridOffset.top + g.gridheader.height(),
  10829. left: gridOffset.left - 10,
  10830. right: gridOffset.left + g.grid.width() + 10
  10831. };
  10832. },
  10833. onDrag: function (current, e)
  10834. {
  10835. this.set('cursor', 'default');
  10836. var column = this.draggingColumn;
  10837. if (!column) return false;
  10838. if (g.colresizing) return false;
  10839. if (g.colDropIn == null)
  10840. g.colDropIn = -1;
  10841. var pageX = e.pageX;
  10842. var pageY = e.pageY;
  10843. var visit = false;
  10844. var gridOffset = g.grid.offset();
  10845. var validRange = this.validRange;
  10846. if (pageX < validRange.left || pageX > validRange.right
  10847. || pageY > validRange.bottom || pageY < validRange.top)
  10848. {
  10849. g.colDropIn = -1;
  10850. g.colDroptip.hide();
  10851. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
  10852. return;
  10853. }
  10854. for (var colid in g._columns)
  10855. {
  10856. var col = g._columns[colid];
  10857. if (column == col)
  10858. {
  10859. visit = true;
  10860. continue;
  10861. }
  10862. if (col.issystem) continue;
  10863. var sameLevel = col['__level'] == column['__level'];
  10864. var isAfter = !sameLevel ? false : visit ? true : false;
  10865. if (column.frozen != col.frozen) isAfter = col.frozen ? false : true;
  10866. if (g.colDropIn != -1 && g.colDropIn != colid) continue;
  10867. var cell = document.getElementById(col['__domid']);
  10868. var offset = $(cell).offset();
  10869. var range = {
  10870. top: offset.top,
  10871. bottom: offset.top + $(cell).height(),
  10872. left: offset.left - 10,
  10873. right: offset.left + 10
  10874. };
  10875. if (isAfter)
  10876. {
  10877. var cellwidth = $(cell).width();
  10878. range.left += cellwidth;
  10879. range.right += cellwidth;
  10880. }
  10881. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  10882. {
  10883. var height = p.headerRowHeight;
  10884. if (col['__rowSpan']) height *= col['__rowSpan'];
  10885. g.colDroptip.css({
  10886. left: range.left + 5,
  10887. top: range.top - 9,
  10888. height: height + 9 * 2
  10889. }).show();
  10890. g.colDropIn = colid;
  10891. g.colDropDir = isAfter ? "right" : "left";
  10892. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no").addClass("l-drop-yes");
  10893. break;
  10894. }
  10895. else if (g.colDropIn != -1)
  10896. {
  10897. g.colDropIn = -1;
  10898. g.colDroptip.hide();
  10899. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
  10900. }
  10901. }
  10902. },
  10903. onStopDrag: function (current, e)
  10904. {
  10905. var column = this.draggingColumn;
  10906. g.coldragging = false;
  10907. if (g.colDropIn != -1)
  10908. {
  10909. g.changeCol.ligerDefer(g, 0, [column, g.colDropIn, g.colDropDir == "right"]);
  10910. g.colDropIn = -1;
  10911. }
  10912. g.colDroptip.hide();
  10913. this.set('cursor', 'default');
  10914. }
  10915. });
  10916. }
  10917. //行拖拽支持
  10918. if ($.fn.ligerDrag && p.rowDraggable)
  10919. {
  10920. g.rowDroptip = $("<div class='l-drag-rowdroptip' style='display:none'></div>").appendTo('body');
  10921. g.gridbody.add(g.f.gridbody).ligerDrag({
  10922. revert: true, animate: false,
  10923. proxyX: 0, proxyY: 0,
  10924. proxy: function (draggable, e)
  10925. {
  10926. var src = g._getSrcElementByEvent(e);
  10927. if (src.row)
  10928. {
  10929. var content = p.draggingMessage.replace(/{count}/, draggable.draggingRows ? draggable.draggingRows.length : 1);
  10930. if (p.rowDraggingRender)
  10931. {
  10932. content = p.rowDraggingRender(draggable.draggingRows, draggable, g);
  10933. }
  10934. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div>" + content + "</div>").appendTo('body');
  10935. return proxy;
  10936. }
  10937. },
  10938. onRevert: function () { return false; },
  10939. onRendered: function ()
  10940. {
  10941. this.set('cursor', 'default');
  10942. g.children[this.id] = this;
  10943. },
  10944. onStartDrag: function (current, e)
  10945. {
  10946. if (e.button == 2) return false;
  10947. if (g.colresizing) return false;
  10948. if (!g.columns.length) return false;
  10949. this.set('cursor', 'default');
  10950. var src = g._getSrcElementByEvent(e);
  10951. if (!src.cell || !src.data || src.checkbox) return false;
  10952. var ids = src.cell.id.split('|');
  10953. var column = g._columns[ids[ids.length - 1]];
  10954. if (src.rownumberscell || src.detailcell || src.checkboxcell || column == g.columns[0])
  10955. {
  10956. if (g.enabledCheckbox())
  10957. {
  10958. this.draggingRows = g.getSelecteds();
  10959. if (!this.draggingRows || !this.draggingRows.length) return false;
  10960. }
  10961. else
  10962. {
  10963. this.draggingRows = [src.data];
  10964. }
  10965. this.draggingRow = src.data;
  10966. this.set('cursor', 'move');
  10967. g.rowdragging = true;
  10968. this.validRange = {
  10969. top: g.gridbody.offset().top,
  10970. bottom: g.gridbody.offset().top + g.gridbody.height(),
  10971. left: g.grid.offset().left - 10,
  10972. right: g.grid.offset().left + g.grid.width() + 10
  10973. };
  10974. }
  10975. else
  10976. {
  10977. return false;
  10978. }
  10979. },
  10980. onDrag: function (current, e)
  10981. {
  10982. var rowdata = this.draggingRow;
  10983. if (!rowdata) return false;
  10984. var rows = this.draggingRows ? this.draggingRows : [rowdata];
  10985. if (g.colresizing) return false;
  10986. if (g.rowDropIn == null) g.rowDropIn = -1;
  10987. var pageX = e.pageX;
  10988. var pageY = e.pageY;
  10989. var visit = false;
  10990. var validRange = this.validRange;
  10991. if (pageX < validRange.left || pageX > validRange.right
  10992. || pageY > validRange.bottom || pageY < validRange.top)
  10993. {
  10994. g.rowDropIn = -1;
  10995. g.rowDroptip.hide();
  10996. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  10997. return;
  10998. }
  10999. for (var i in g.rows)
  11000. {
  11001. var rd = g.rows[i];
  11002. var rowid = rd['__id'];
  11003. if (rowdata == rd) visit = true;
  11004. if ($.inArray(rd, rows) != -1) continue;
  11005. var isAfter = visit ? true : false;
  11006. if (g.rowDropIn != -1 && g.rowDropIn != rowid) continue;
  11007. var rowobj = g.getRowObj(rowid);
  11008. var offset = $(rowobj).offset();
  11009. var range = {
  11010. top: offset.top - 4,
  11011. bottom: offset.top + $(rowobj).height() + 4,
  11012. left: g.grid.offset().left,
  11013. right: g.grid.offset().left + g.grid.width()
  11014. };
  11015. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  11016. {
  11017. var lineTop = offset.top;
  11018. if (isAfter) lineTop += $(rowobj).height();
  11019. g.rowDroptip.css({
  11020. left: range.left,
  11021. top: lineTop,
  11022. width: range.right - range.left
  11023. }).show();
  11024. g.rowDropIn = rowid;
  11025. g.rowDropDir = isAfter ? "bottom" : "top";
  11026. if (p.tree && pageY > range.top + 5 && pageY < range.bottom - 5)
  11027. {
  11028. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-yes").addClass("l-drop-add");
  11029. g.rowDroptip.hide();
  11030. g.rowDropInParent = true;
  11031. }
  11032. else
  11033. {
  11034. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-add").addClass("l-drop-yes");
  11035. g.rowDroptip.show();
  11036. g.rowDropInParent = false;
  11037. }
  11038. break;
  11039. }
  11040. else if (g.rowDropIn != -1)
  11041. {
  11042. g.rowDropIn = -1;
  11043. g.rowDropInParent = false;
  11044. g.rowDroptip.hide();
  11045. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  11046. }
  11047. }
  11048. },
  11049. onStopDrag: function (current, e)
  11050. {
  11051. var rows = this.draggingRows;
  11052. g.rowdragging = false;
  11053. for (var i = 0; i < rows.length; i++)
  11054. {
  11055. var children = rows[i].children;
  11056. if (children)
  11057. {
  11058. rows = $.grep(rows, function (node, i)
  11059. {
  11060. var isIn = $.inArray(node, children) == -1;
  11061. return isIn;
  11062. });
  11063. }
  11064. }
  11065. if (g.rowDropIn != -1)
  11066. {
  11067. if (p.tree)
  11068. {
  11069. var neardata, prow;
  11070. if (g.rowDropInParent)
  11071. {
  11072. prow = g.getRow(g.rowDropIn);
  11073. }
  11074. else
  11075. {
  11076. neardata = g.getRow(g.rowDropIn);
  11077. prow = g.getParent(neardata);
  11078. }
  11079. g.appendRange(rows, prow, neardata, g.rowDropDir != "bottom");
  11080. g.trigger('rowDragDrop', {
  11081. rows: rows,
  11082. parent: prow,
  11083. near: neardata,
  11084. after: g.rowDropDir == "bottom"
  11085. });
  11086. }
  11087. else
  11088. {
  11089. g.moveRange(rows, g.rowDropIn, g.rowDropDir == "bottom");
  11090. g.trigger('rowDragDrop', {
  11091. rows: rows,
  11092. parent: prow,
  11093. near: g.getRow(g.rowDropIn),
  11094. after: g.rowDropDir == "bottom"
  11095. });
  11096. }
  11097. g.rowDropIn = -1;
  11098. }
  11099. g.rowDroptip.hide();
  11100. this.set('cursor', 'default');
  11101. }
  11102. });
  11103. }
  11104. },
  11105. _onRowOver: function (rowParm, over)
  11106. {
  11107. if (l.draggable.dragging) return;
  11108. var g = this, p = this.options;
  11109. var rowdata = g.getRow(rowParm);
  11110. var methodName = over ? "addClass" : "removeClass";
  11111. if (g.enabledFrozen())
  11112. $(g.getRowObj(rowdata, true))[methodName](p.mouseoverRowCssClass);
  11113. $(g.getRowObj(rowdata, false))[methodName](p.mouseoverRowCssClass);
  11114. },
  11115. _onMouseUp: function (e)
  11116. {
  11117. var g = this, p = this.options;
  11118. if (l.draggable.dragging)
  11119. {
  11120. var src = g._getSrcElementByEvent(e);
  11121. //drop in header cell
  11122. if (src.hcell && src.column)
  11123. {
  11124. g.trigger('dragdrop', [{ type: 'header', column: src.column, cell: src.hcell }, e]);
  11125. }
  11126. else if (src.row)
  11127. {
  11128. g.trigger('dragdrop', [{ type: 'row', record: src.data, row: src.row }, e]);
  11129. }
  11130. }
  11131. },
  11132. _onMouseDown: function (e)
  11133. {
  11134. var g = this, p = this.options;
  11135. },
  11136. _onContextmenu: function (e)
  11137. {
  11138. var g = this, p = this.options;
  11139. var src = g._getSrcElementByEvent(e);
  11140. if (src.row)
  11141. {
  11142. if (p.whenRClickToSelect)
  11143. g.select(src.data);
  11144. if (g.hasBind('contextmenu'))
  11145. {
  11146. return g.trigger('contextmenu', [{ data: src.data, rowindex: src.data['__index'], row: src.row }, e]);
  11147. }
  11148. }
  11149. else if (src.hcell)
  11150. {
  11151. if (!p.allowHideColumn) return true;
  11152. var columnindex = $(src.hcell).attr("columnindex");
  11153. if (columnindex == undefined) return true;
  11154. var left = (e.pageX - g.body.offset().left + parseInt(g.body[0].scrollLeft));
  11155. if (columnindex == g.columns.length - 1) left -= 50;
  11156. g.popup.css({ left: left, top: g.gridheader.height() + 1 });
  11157. g.popup.toggle();
  11158. return false;
  11159. }
  11160. },
  11161. _onDblClick: function (e)
  11162. {
  11163. var g = this, p = this.options;
  11164. var src = g._getSrcElementByEvent(e);
  11165. if (src.row)
  11166. {
  11167. g.trigger('dblClickRow', [src.data, src.data['__id'], src.row]);
  11168. }
  11169. },
  11170. _onClick: function (e)
  11171. {
  11172. var obj = (e.target || e.srcElement);
  11173. var g = this, p = this.options;
  11174. var src = g._getSrcElementByEvent(e);
  11175. if (src.out)
  11176. {
  11177. if (g.editor.editing && !$.ligerui.win.masking) g.endEdit();
  11178. if (p.allowHideColumn) g.popup.hide();
  11179. return;
  11180. }
  11181. if (src.indetail || src.editing)
  11182. {
  11183. return;
  11184. }
  11185. if (g.editor.editing)
  11186. {
  11187. g.endEdit();
  11188. }
  11189. if (p.allowHideColumn)
  11190. {
  11191. if (!src.popup)
  11192. {
  11193. g.popup.hide();
  11194. }
  11195. }
  11196. if (src.checkboxall) //复选框全选
  11197. {
  11198. var row = $(src.hrow);
  11199. var uncheck = row.hasClass("l-checked");
  11200. if (g.trigger('beforeCheckAllRow', [!uncheck, g.element]) == false) return false;
  11201. if (uncheck)
  11202. {
  11203. row.removeClass("l-checked");
  11204. }
  11205. else
  11206. {
  11207. row.addClass("l-checked");
  11208. }
  11209. g.selected = [];
  11210. for (var rowid in g.records)
  11211. {
  11212. if (uncheck)
  11213. g.unselect(g.records[rowid]);
  11214. else
  11215. g.select(g.records[rowid]);
  11216. }
  11217. g.trigger('checkAllRow', [!uncheck, g.element]);
  11218. }
  11219. else if (src.hcelltext) //排序
  11220. {
  11221. var hcell = $(src.hcelltext).parent().parent();
  11222. if (!p.enabledSort || !src.column) return;
  11223. if (src.column.isSort == false) return;
  11224. if (p.url && p.dataAction != "local" && g.isDataChanged && !confirm(p.isContinueByDataChanged)) return;
  11225. var sort = $(".l-grid-hd-cell-sort:first", hcell);
  11226. var columnName = src.column.name;
  11227. if (!columnName) return;
  11228. if (sort.length > 0)
  11229. {
  11230. if (sort.hasClass("l-grid-hd-cell-sort-asc"))
  11231. {
  11232. sort.removeClass("l-grid-hd-cell-sort-asc").addClass("l-grid-hd-cell-sort-desc");
  11233. hcell.removeClass("l-grid-hd-cell-asc").addClass("l-grid-hd-cell-desc");
  11234. g.trigger('ChangeSort', [columnName, 'desc']);
  11235. g.changeSort(columnName, 'desc');
  11236. }
  11237. else if (sort.hasClass("l-grid-hd-cell-sort-desc"))
  11238. {
  11239. sort.removeClass("l-grid-hd-cell-sort-desc").addClass("l-grid-hd-cell-sort-asc");
  11240. hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
  11241. g.trigger('ChangeSort', [columnName, 'asc']);
  11242. g.changeSort(columnName, 'asc');
  11243. }
  11244. }
  11245. else
  11246. {
  11247. hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
  11248. $(src.hcelltext).after("<span class='l-grid-hd-cell-sort l-grid-hd-cell-sort-asc'>&nbsp;&nbsp;</span>");
  11249. g.trigger('ChangeSort', [columnName, 'asc']);
  11250. g.changeSort(columnName, 'asc');
  11251. }
  11252. $(".l-grid-hd-cell-sort", g.gridheader).add($(".l-grid-hd-cell-sort", g.f.gridheader)).not($(".l-grid-hd-cell-sort:first", hcell)).remove();
  11253. }
  11254. //明细
  11255. else if (src.detailbtn && p.detail)
  11256. {
  11257. var item = src.data;
  11258. var row = $([g.getRowObj(item, false)]);
  11259. if (g.enabledFrozen()) row = row.add(g.getRowObj(item, true));
  11260. var rowid = item['__id'];
  11261. if ($(src.detailbtn).hasClass("l-open"))
  11262. {
  11263. if (p.detail.onCollapse)
  11264. p.detail.onCollapse(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
  11265. row.next("tr.l-grid-detailpanel").hide();
  11266. $(src.detailbtn).removeClass("l-open");
  11267. }
  11268. else
  11269. {
  11270. var nextrow = row.next("tr.l-grid-detailpanel");
  11271. if (nextrow.length > 0)
  11272. {
  11273. nextrow.show();
  11274. if (p.detail.onExtend)
  11275. p.detail.onExtend(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
  11276. $(src.detailbtn).addClass("l-open");
  11277. g.trigger('SysGridHeightChanged');
  11278. return;
  11279. }
  11280. $(src.detailbtn).addClass("l-open");
  11281. var frozenColNum = 0;
  11282. for (var i = 0; i < g.columns.length; i++)
  11283. if (g.columns[i].frozen) frozenColNum++;
  11284. var detailRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
  11285. var detailFrozenRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
  11286. detailRow.find("div:first").width(g.gridheader.find("div:first").width() - 50);
  11287. detailRow.attr("id", g.id + "|detail|" + rowid);
  11288. g.detailrows = g.detailrows || [];
  11289. g.detailrows.push(detailRow[0]);
  11290. g.detailrows.push(detailFrozenRow[0]);
  11291. var detailRowInner = $("div:first", detailRow);
  11292. detailRowInner.parent().attr("colSpan", g.columns.length - frozenColNum);
  11293. row.eq(0).after(detailRow);
  11294. if (frozenColNum > 0)
  11295. {
  11296. detailFrozenRow.find("td:first").attr("colSpan", frozenColNum);
  11297. row.eq(1).after(detailFrozenRow);
  11298. }
  11299. if (p.detail.onShowDetail)
  11300. {
  11301. p.detail.onShowDetail(item, detailRowInner[0], function ()
  11302. {
  11303. g.trigger('SysGridHeightChanged');
  11304. });
  11305. $("div:first", detailFrozenRow).add(detailRowInner).show().height(p.detail.height || p.detailHeight);
  11306. }
  11307. else if (p.detail.render)
  11308. {
  11309. detailRowInner.append(p.detail.render());
  11310. detailRowInner.show();
  11311. }
  11312. g.trigger('SysGridHeightChanged');
  11313. }
  11314. }
  11315. else if (src.groupbtn)
  11316. {
  11317. var grouprow = $(src.grouprow);
  11318. var opening = true;
  11319. if ($(src.groupbtn).hasClass("l-grid-group-togglebtn-close"))
  11320. {
  11321. $(src.groupbtn).removeClass("l-grid-group-togglebtn-close");
  11322. if (grouprow.hasClass("l-grid-grouprow-last"))
  11323. {
  11324. $("td:first", grouprow).width('auto');
  11325. }
  11326. }
  11327. else
  11328. {
  11329. opening = false;
  11330. $(src.groupbtn).addClass("l-grid-group-togglebtn-close");
  11331. if (grouprow.hasClass("l-grid-grouprow-last"))
  11332. {
  11333. $("td:first", grouprow).width(g.gridtablewidth);
  11334. }
  11335. }
  11336. var currentRow = grouprow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
  11337. while (true)
  11338. {
  11339. if (currentRow.length == 0) break;
  11340. if (opening)
  11341. {
  11342. currentRow.show();
  11343. //如果是明细展开的行,并且之前的状态已经是关闭的,隐藏之
  11344. if (currentRow.hasClass("l-grid-detailpanel") && !currentRow.prev().find("td.l-grid-row-cell-detail:first span.l-grid-row-cell-detailbtn:first").hasClass("l-open"))
  11345. {
  11346. currentRow.hide();
  11347. }
  11348. }
  11349. else
  11350. {
  11351. currentRow.hide();
  11352. }
  11353. currentRow = currentRow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
  11354. }
  11355. g.trigger(opening ? 'groupExtend' : 'groupCollapse');
  11356. g.trigger('SysGridHeightChanged');
  11357. }
  11358. //树 - 伸展/收缩节点
  11359. else if (src.treelink)
  11360. {
  11361. g.toggle(src.data);
  11362. }
  11363. else if (src.row && g.enabledCheckbox()) //复选框选择行
  11364. {
  11365. //复选框
  11366. var selectRowButtonOnly = p.selectRowButtonOnly ? true : false;
  11367. if (p.enabledEdit) selectRowButtonOnly = true;
  11368. if (src.checkbox || !selectRowButtonOnly)
  11369. {
  11370. var row = $(src.row);
  11371. var uncheck = row.hasClass("l-selected");
  11372. if (g.trigger('beforeCheckRow', [!uncheck, src.data, src.data['__id'], src.row]) == false)
  11373. return false;
  11374. var met = uncheck ? 'unselect' : 'select';
  11375. g[met](src.data);
  11376. if (p.tree && p.autoCheckChildren)
  11377. {
  11378. var children = g.getChildren(src.data, true);
  11379. for (var i = 0, l = children.length; i < l; i++)
  11380. {
  11381. g[met](children[i]);
  11382. }
  11383. }
  11384. g.trigger('checkRow', [!uncheck, src.data, src.data['__id'], src.row]);
  11385. }
  11386. if (!src.checkbox && src.cell && p.enabledEdit && p.clickToEdit)
  11387. {
  11388. g._applyEditor(src.cell);
  11389. }
  11390. }
  11391. else if (src.row && !g.enabledCheckbox())
  11392. {
  11393. if (src.cell && p.enabledEdit && p.clickToEdit)
  11394. {
  11395. g._applyEditor(src.cell);
  11396. }
  11397. //选择行
  11398. if ($(src.row).hasClass("l-selected"))
  11399. {
  11400. if (!p.allowUnSelectRow)
  11401. {
  11402. $(src.row).addClass("l-selected-again");
  11403. return;
  11404. }
  11405. g.unselect(src.data);
  11406. }
  11407. else
  11408. {
  11409. g.select(src.data);
  11410. }
  11411. }
  11412. else if (src.toolbar)
  11413. {
  11414. if (src.first)
  11415. {
  11416. if (g.trigger('toFirst', [g.element]) == false) return false;
  11417. g.changePage('first');
  11418. }
  11419. else if (src.prev)
  11420. {
  11421. if (g.trigger('toPrev', [g.element]) == false) return false;
  11422. g.changePage('prev');
  11423. }
  11424. else if (src.next)
  11425. {
  11426. if (g.trigger('toNext', [g.element]) == false) return false;
  11427. g.changePage('next');
  11428. }
  11429. else if (src.last)
  11430. {
  11431. if (g.trigger('toLast', [g.element]) == false) return false;
  11432. g.changePage('last');
  11433. }
  11434. else if (src.load)
  11435. {
  11436. if ($("span", src.load).hasClass("l-disabled")) return false;
  11437. if (g.trigger('reload', [g.element]) == false) return false;
  11438. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  11439. return false;
  11440. g.loadData(p.where);
  11441. }
  11442. }
  11443. },
  11444. select: function (rowParm)
  11445. {
  11446. var g = this, p = this.options;
  11447. var rowdata = g.getRow(rowParm);
  11448. var rowid = rowdata['__id'];
  11449. var rowobj = g.getRowObj(rowid);
  11450. var rowobj1 = g.getRowObj(rowid, true);
  11451. if (!g.enabledCheckbox() && !g.ctrlKey) //单选
  11452. {
  11453. for (var i in g.selected)
  11454. {
  11455. var o = g.selected[i];
  11456. if (o['__id'] in g.records)
  11457. {
  11458. $(g.getRowObj(o)).removeClass("l-selected l-selected-again");
  11459. if (g.enabledFrozen())
  11460. $(g.getRowObj(o, true)).removeClass("l-selected l-selected-again");
  11461. }
  11462. }
  11463. g.selected = [];
  11464. }
  11465. if (rowobj) $(rowobj).addClass("l-selected");
  11466. if (rowobj1) $(rowobj1).addClass("l-selected");
  11467. g.selected[g.selected.length] = rowdata;
  11468. g.trigger('selectRow', [rowdata, rowid, rowobj]);
  11469. },
  11470. unselect: function (rowParm)
  11471. {
  11472. var g = this, p = this.options;
  11473. var rowdata = g.getRow(rowParm);
  11474. var rowid = rowdata['__id'];
  11475. var rowobj = g.getRowObj(rowid);
  11476. var rowobj1 = g.getRowObj(rowid, true);
  11477. $(rowobj).removeClass("l-selected l-selected-again");
  11478. if (g.enabledFrozen())
  11479. $(rowobj1).removeClass("l-selected l-selected-again");
  11480. g._removeSelected(rowdata);
  11481. g.trigger('unSelectRow', [rowdata, rowid, rowobj]);
  11482. },
  11483. isSelected: function (rowParm)
  11484. {
  11485. var g = this, p = this.options;
  11486. var rowdata = g.getRow(rowParm);
  11487. for (var i in g.selected)
  11488. {
  11489. if (g.selected[i] == rowdata) return true;
  11490. }
  11491. return false;
  11492. },
  11493. arrayToTree: function (data, id, pid) //将ID、ParentID这种数据格式转换为树格式
  11494. {
  11495. var g = this, p = this.options;
  11496. var childrenName = "children";
  11497. if (p.tree) childrenName = p.tree.childrenName;
  11498. if (!data || !data.length) return [];
  11499. var targetData = []; //存储数据的容器(返回)
  11500. var records = {};
  11501. var itemLength = data.length; //数据集合的个数
  11502. for (var i = 0; i < itemLength; i++)
  11503. {
  11504. var o = data[i];
  11505. var key = getKey(o[id]);
  11506. records[key] = o;
  11507. }
  11508. for (var i = 0; i < itemLength; i++)
  11509. {
  11510. var currentData = data[i];
  11511. var key = getKey(currentData[pid]);
  11512. var parentData = records[key];
  11513. if (!parentData)
  11514. {
  11515. targetData.push(currentData);
  11516. continue;
  11517. }
  11518. parentData[childrenName] = parentData[childrenName] || [];
  11519. parentData[childrenName].push(currentData);
  11520. }
  11521. return targetData;
  11522. function getKey(key)
  11523. {
  11524. if (typeof (key) == "string") key = key.replace(/[.]/g, '').toLowerCase();
  11525. return key;
  11526. }
  11527. },
  11528. _onResize: function ()
  11529. {
  11530. var g = this, p = this.options;
  11531. if (p.height && p.height != 'auto')
  11532. {
  11533. var windowHeight = $(window).height();
  11534. //if(g.windowHeight != undefined && g.windowHeight == windowHeight) return;
  11535. var h = 0;
  11536. var parentHeight = null;
  11537. if (typeof (p.height) == "string" && p.height.indexOf('%') > 0)
  11538. {
  11539. var gridparent = g.grid.parent();
  11540. if (p.inWindow)
  11541. {
  11542. parentHeight = windowHeight;
  11543. parentHeight -= parseInt($('body').css('paddingTop'));
  11544. parentHeight -= parseInt($('body').css('paddingBottom'));
  11545. }
  11546. else
  11547. {
  11548. parentHeight = gridparent.height();
  11549. }
  11550. h = parentHeight * parseInt(p.height) * 0.01;
  11551. if (p.inWindow || gridparent[0].tagName.toLowerCase() == "body")
  11552. h -= (g.grid.offset().top - parseInt($('body').css('paddingTop')));
  11553. }
  11554. else
  11555. {
  11556. h = parseInt(p.height);
  11557. }
  11558. h += p.heightDiff;
  11559. g.windowHeight = windowHeight;
  11560. g._setHeight(h);
  11561. }
  11562. else
  11563. {
  11564. g._updateHorizontalScrollStatus.ligerDefer(g, 10);
  11565. }
  11566. if (g.enabledFrozen())
  11567. {
  11568. var gridView1Width = g.gridview1.width();
  11569. var gridViewWidth = g.gridview.width()
  11570. g.gridview2.css({
  11571. width: gridViewWidth - gridView1Width
  11572. });
  11573. }
  11574. g.trigger('SysGridHeightChanged');
  11575. }
  11576. });
  11577. $.ligerui.controls.Grid.prototype.enabledTotal = $.ligerui.controls.Grid.prototype.isTotalSummary;
  11578. $.ligerui.controls.Grid.prototype.add = $.ligerui.controls.Grid.prototype.addRow;
  11579. $.ligerui.controls.Grid.prototype.update = $.ligerui.controls.Grid.prototype.updateRow;
  11580. $.ligerui.controls.Grid.prototype.append = $.ligerui.controls.Grid.prototype.appendRow;
  11581. $.ligerui.controls.Grid.prototype.getSelected = $.ligerui.controls.Grid.prototype.getSelectedRow;
  11582. $.ligerui.controls.Grid.prototype.getSelecteds = $.ligerui.controls.Grid.prototype.getSelectedRows;
  11583. $.ligerui.controls.Grid.prototype.getCheckedRows = $.ligerui.controls.Grid.prototype.getSelectedRows;
  11584. $.ligerui.controls.Grid.prototype.getCheckedRowObjs = $.ligerui.controls.Grid.prototype.getSelectedRowObjs;
  11585. $.ligerui.controls.Grid.prototype.setOptions = $.ligerui.controls.Grid.prototype.set;
  11586. $.ligerui.controls.Grid.prototype.reload = $.ligerui.controls.Grid.prototype.loadData;
  11587. $.ligerui.controls.Grid.prototype.refreshSize = $.ligerui.controls.Grid.prototype._onResize;
  11588. function removeArrItem(arr, filterFn)
  11589. {
  11590. for (var i = arr.length - 1; i >= 0; i--)
  11591. {
  11592. if (filterFn(arr[i]))
  11593. {
  11594. arr.splice(i, 1);
  11595. }
  11596. }
  11597. }
  11598. })(jQuery);/**
  11599. * jQuery ligerUI 1.2.4
  11600. *
  11601. * http://ligerui.com
  11602. *
  11603. * Author daomi 2014 [ gd_star@163.com ]
  11604. *
  11605. */
  11606. (function ($)
  11607. {
  11608. $.fn.ligerLayout = function (options)
  11609. {
  11610. return $.ligerui.run.call(this, "ligerLayout", arguments);
  11611. };
  11612. $.fn.ligerGetLayoutManager = function ()
  11613. {
  11614. return $.ligerui.run.call(this, "ligerGetLayoutManager", arguments);
  11615. };
  11616. $.ligerDefaults.Layout = {
  11617. topHeight: 50,
  11618. bottomHeight: 50,
  11619. leftWidth: 110,
  11620. centerWidth: 300,
  11621. rightWidth: 170,
  11622. centerBottomHeight: 100,
  11623. allowCenterBottomResize: true,
  11624. inWindow: true, //是否以窗口的高度为准 height设置为百分比时可用
  11625. heightDiff: 0, //高度补差
  11626. height: '100%', //高度
  11627. onHeightChanged: null,
  11628. isLeftCollapse: false, //初始化时 左边是否隐藏
  11629. isRightCollapse: false, //初始化时 右边是否隐藏
  11630. allowLeftCollapse: true, //是否允许 左边可以隐藏
  11631. allowRightCollapse: true, //是否允许 右边可以隐藏
  11632. allowLeftResize: true, //是否允许 左边可以调整大小
  11633. allowRightResize: true, //是否允许 右边可以调整大小
  11634. allowTopResize: true, //是否允许 头部可以调整大小
  11635. allowBottomResize: true, //是否允许 底部可以调整大小
  11636. space: 3, //间隔
  11637. onEndResize: null, //调整大小结束事件
  11638. minLeftWidth: 80, //调整左侧宽度时的最小允许宽度
  11639. minRightWidth: 80 //调整右侧宽度时的最小允许宽度
  11640. };
  11641. $.ligerMethos.Layout = {};
  11642. $.ligerui.controls.Layout = function (element, options)
  11643. {
  11644. $.ligerui.controls.Layout.base.constructor.call(this, element, options);
  11645. };
  11646. $.ligerui.controls.Layout.ligerExtend($.ligerui.core.UIComponent, {
  11647. __getType: function ()
  11648. {
  11649. return 'Layout';
  11650. },
  11651. __idPrev: function ()
  11652. {
  11653. return 'Layout';
  11654. },
  11655. _extendMethods: function ()
  11656. {
  11657. return $.ligerMethos.Layout;
  11658. },
  11659. _init: function()
  11660. {
  11661. $.ligerui.controls.Layout.base._init.call(this);
  11662. var g = this, p = this.options;
  11663. if (p.InWindow != null && p.inWindow == null) p.inWindow = p.InWindow; //旧版本命名错误纠正
  11664. },
  11665. _render: function ()
  11666. {
  11667. var g = this, p = this.options;
  11668. g.layout = $(this.element);
  11669. g.layout.addClass("l-layout");
  11670. g.width = g.layout.width();
  11671. //top
  11672. if ($("> div[position=top]", g.layout).length > 0)
  11673. {
  11674. g.top = $("> div[position=top]", g.layout).wrap('<div class="l-layout-top" style="top:0px;"></div>').parent();
  11675. g.top.content = $("> div[position=top]", g.top);
  11676. if (!g.top.content.hasClass("l-layout-content"))
  11677. g.top.content.addClass("l-layout-content");
  11678. g.topHeight = p.topHeight;
  11679. if (g.topHeight)
  11680. {
  11681. g.top.height(g.topHeight);
  11682. }
  11683. }
  11684. //bottom
  11685. if ($("> div[position=bottom]", g.layout).length > 0)
  11686. {
  11687. g.bottom = $("> div[position=bottom]", g.layout).wrap('<div class="l-layout-bottom"></div>').parent();
  11688. g.bottom.content = $("> div[position=bottom]", g.bottom);
  11689. if (!g.bottom.content.hasClass("l-layout-content"))
  11690. g.bottom.content.addClass("l-layout-content");
  11691. g.bottomHeight = p.bottomHeight;
  11692. if (g.bottomHeight)
  11693. {
  11694. g.bottom.height(g.bottomHeight);
  11695. }
  11696. //set title
  11697. var bottomtitle = g.bottom.content.attr("title");
  11698. if (bottomtitle)
  11699. {
  11700. g.bottom.header = $('<div class="l-layout-header"></div>');
  11701. g.bottom.prepend(g.bottom.header);
  11702. g.bottom.header.html(bottomtitle);
  11703. g.bottom.content.attr("title", "");
  11704. }
  11705. }
  11706. //left
  11707. if ($("> div[position=left]", g.layout).length > 0)
  11708. {
  11709. g.left = $("> div[position=left]", g.layout).wrap('<div class="l-layout-left" style="left:0px;"></div>').parent();
  11710. g.left.header = $('<div class="l-layout-header"><div class="l-layout-header-toggle"></div><div class="l-layout-header-inner"></div></div>');
  11711. g.left.prepend(g.left.header);
  11712. g.left.header.toggle = $(".l-layout-header-toggle", g.left.header);
  11713. g.left.content = $("> div[position=left]", g.left);
  11714. if (!g.left.content.hasClass("l-layout-content"))
  11715. g.left.content.addClass("l-layout-content");
  11716. if (!p.allowLeftCollapse) $(".l-layout-header-toggle", g.left.header).remove();
  11717. //set title
  11718. var lefttitle = g.left.content.attr("title");
  11719. if (lefttitle)
  11720. {
  11721. g.left.content.attr("title", "");
  11722. $(".l-layout-header-inner", g.left.header).html(lefttitle);
  11723. }
  11724. //set title
  11725. if (g.left.content.attr("hidetitle"))
  11726. {
  11727. g.left.content.attr("title", "");
  11728. g.left.header.remove();
  11729. }
  11730. //set width
  11731. g.leftWidth = p.leftWidth;
  11732. if (g.leftWidth)
  11733. g.left.width(g.leftWidth);
  11734. }
  11735. //center
  11736. if ($("> div[position=center]", g.layout).length > 0)
  11737. {
  11738. g.center = $("> div[position=center]", g.layout).wrap('<div class="l-layout-center" ></div>').parent();
  11739. g.center.content = $("> div[position=center]", g.center);
  11740. g.center.content.addClass("l-layout-content");
  11741. //set title
  11742. var centertitle = g.center.content.attr("title");
  11743. if (centertitle)
  11744. {
  11745. g.center.content.attr("title", "");
  11746. g.center.header = $('<div class="l-layout-header"></div>');
  11747. g.center.prepend(g.center.header);
  11748. g.center.header.html(centertitle);
  11749. }
  11750. if (g.center.content.attr("hidetitle"))
  11751. {
  11752. g.center.content.attr("title", "");
  11753. g.center.header.remove();
  11754. }
  11755. //set width
  11756. g.centerWidth = p.centerWidth;
  11757. if (g.centerWidth)
  11758. g.center.width(g.centerWidth);
  11759. //centerBottom
  11760. if ($("> div[position=centerbottom]", g.layout).length > 0)
  11761. {
  11762. g.centerBottom = $("> div[position=centerbottom]", g.layout).wrap('<div class="l-layout-centerbottom" ></div>').parent();
  11763. g.centerBottom.content = $("> div[position=centerbottom]", g.centerBottom);
  11764. g.centerBottom.content.addClass("l-layout-content");
  11765. //set title
  11766. var centertitle = g.centerBottom.content.attr("title");
  11767. if (centertitle)
  11768. {
  11769. g.centerBottom.content.attr("title", "");
  11770. g.centerBottom.header = $('<div class="l-layout-header"></div>');
  11771. g.centerBottom.prepend(g.centerBottom.header);
  11772. g.centerBottom.header.html(centertitle);
  11773. }
  11774. if (g.centerBottom.content.attr("hidetitle"))
  11775. {
  11776. g.centerBottom.content.attr("title", "");
  11777. if (g.centerBottom.header)
  11778. {
  11779. g.centerBottom.header.remove();
  11780. }
  11781. }
  11782. if (g.centerWidth)
  11783. g.centerBottom.width(g.centerWidth);
  11784. }
  11785. }
  11786. //right
  11787. if ($("> div[position=right]", g.layout).length > 0)
  11788. {
  11789. g.right = $("> div[position=right]", g.layout).wrap('<div class="l-layout-right"></div>').parent();
  11790. g.right.header = $('<div class="l-layout-header"><div class="l-layout-header-toggle"></div><div class="l-layout-header-inner"></div></div>');
  11791. g.right.prepend(g.right.header);
  11792. g.right.header.toggle = $(".l-layout-header-toggle", g.right.header);
  11793. if (!p.allowRightCollapse) $(".l-layout-header-toggle", g.right.header).remove();
  11794. g.right.content = $("> div[position=right]", g.right);
  11795. if (!g.right.content.hasClass("l-layout-content"))
  11796. g.right.content.addClass("l-layout-content");
  11797. //set title
  11798. var righttitle = g.right.content.attr("title");
  11799. if (righttitle)
  11800. {
  11801. g.right.content.attr("title", "");
  11802. $(".l-layout-header-inner", g.right.header).html(righttitle);
  11803. }
  11804. if (g.right.content.attr("hidetitle"))
  11805. {
  11806. g.right.content.attr("title", "");
  11807. g.right.header.remove();
  11808. }
  11809. //set width
  11810. g.rightWidth = p.rightWidth;
  11811. if (g.rightWidth)
  11812. g.right.width(g.rightWidth);
  11813. }
  11814. //lock
  11815. g.layout.lock = $("<div class='l-layout-lock'></div>");
  11816. g.layout.append(g.layout.lock);
  11817. //DropHandle
  11818. g._addDropHandle();
  11819. //Collapse
  11820. g.isLeftCollapse = p.isLeftCollapse;
  11821. g.isRightCollapse = p.isRightCollapse;
  11822. g.leftCollapse = $('<div class="l-layout-collapse-left" style="display: none; "><div class="l-layout-collapse-left-toggle"></div></div>');
  11823. g.rightCollapse = $('<div class="l-layout-collapse-right" style="display: none; "><div class="l-layout-collapse-right-toggle"></div></div>');
  11824. g.layout.append(g.leftCollapse).append(g.rightCollapse);
  11825. g.leftCollapse.toggle = $("> .l-layout-collapse-left-toggle", g.leftCollapse);
  11826. g.rightCollapse.toggle = $("> .l-layout-collapse-right-toggle", g.rightCollapse);
  11827. g._setCollapse();
  11828. //init
  11829. g._bulid();
  11830. $(window).resize(function ()
  11831. {
  11832. g._onResize();
  11833. });
  11834. g.set(p);
  11835. g.mask.height(g.layout.height());
  11836. },
  11837. setLeftCollapse: function (isCollapse)
  11838. {
  11839. var g = this, p = this.options;
  11840. if (!g.left) return false;
  11841. g.isLeftCollapse = isCollapse;
  11842. if (g.isLeftCollapse)
  11843. {
  11844. g.leftCollapse.show();
  11845. g.leftDropHandle && g.leftDropHandle.hide();
  11846. g.left.hide();
  11847. }
  11848. else
  11849. {
  11850. g.leftCollapse.hide();
  11851. g.leftDropHandle && g.leftDropHandle.show();
  11852. g.left.show();
  11853. }
  11854. g._onResize();
  11855. },
  11856. setRightCollapse: function (isCollapse)
  11857. {
  11858. var g = this, p = this.options;
  11859. if (!g.right) return false;
  11860. g.isRightCollapse = isCollapse;
  11861. g._onResize();
  11862. if (g.isRightCollapse)
  11863. {
  11864. g.rightCollapse.show();
  11865. g.rightDropHandle && g.rightDropHandle.hide();
  11866. g.right.hide();
  11867. }
  11868. else
  11869. {
  11870. g.rightCollapse.hide();
  11871. g.rightDropHandle && g.rightDropHandle.show();
  11872. g.right.show();
  11873. }
  11874. g._onResize();
  11875. },
  11876. _bulid: function ()
  11877. {
  11878. var g = this, p = this.options;
  11879. $("> .l-layout-left .l-layout-header,> .l-layout-right .l-layout-header", g.layout).hover(function ()
  11880. {
  11881. $(this).addClass("l-layout-header-over");
  11882. }, function ()
  11883. {
  11884. $(this).removeClass("l-layout-header-over");
  11885. });
  11886. $(".l-layout-header-toggle", g.layout).hover(function ()
  11887. {
  11888. $(this).addClass("l-layout-header-toggle-over");
  11889. }, function ()
  11890. {
  11891. $(this).removeClass("l-layout-header-toggle-over");
  11892. });
  11893. $(".l-layout-header-toggle", g.left).click(function ()
  11894. {
  11895. g.setLeftCollapse(true);
  11896. });
  11897. $(".l-layout-header-toggle", g.right).click(function ()
  11898. {
  11899. g.setRightCollapse(true);
  11900. });
  11901. //set top
  11902. g.middleTop = 0;
  11903. if (g.top)
  11904. {
  11905. g.middleTop += g.top.height();
  11906. g.middleTop += parseInt(g.top.css('borderTopWidth'));
  11907. g.middleTop += parseInt(g.top.css('borderBottomWidth'));
  11908. g.middleTop += p.space;
  11909. }
  11910. if (g.left)
  11911. {
  11912. g.left.css({ top: g.middleTop });
  11913. g.leftCollapse.css({ top: g.middleTop });
  11914. }
  11915. if (g.center) g.center.css({ top: g.middleTop });
  11916. if (g.right)
  11917. {
  11918. g.right.css({ top: g.middleTop });
  11919. g.rightCollapse.css({ top: g.middleTop });
  11920. }
  11921. //set left
  11922. if (g.left) g.left.css({ left: 0 });
  11923. g._onResize();
  11924. g._onResize();
  11925. },
  11926. _setCollapse: function ()
  11927. {
  11928. var g = this, p = this.options;
  11929. g.leftCollapse.hover(function ()
  11930. {
  11931. $(this).addClass("l-layout-collapse-left-over");
  11932. }, function ()
  11933. {
  11934. $(this).removeClass("l-layout-collapse-left-over");
  11935. });
  11936. g.leftCollapse.toggle.hover(function ()
  11937. {
  11938. $(this).addClass("l-layout-collapse-left-toggle-over");
  11939. }, function ()
  11940. {
  11941. $(this).removeClass("l-layout-collapse-left-toggle-over");
  11942. });
  11943. g.rightCollapse.hover(function ()
  11944. {
  11945. $(this).addClass("l-layout-collapse-right-over");
  11946. }, function ()
  11947. {
  11948. $(this).removeClass("l-layout-collapse-right-over");
  11949. });
  11950. g.rightCollapse.toggle.hover(function ()
  11951. {
  11952. $(this).addClass("l-layout-collapse-right-toggle-over");
  11953. }, function ()
  11954. {
  11955. $(this).removeClass("l-layout-collapse-right-toggle-over");
  11956. });
  11957. g.leftCollapse.toggle.click(function ()
  11958. {
  11959. g.setLeftCollapse(false);
  11960. });
  11961. g.rightCollapse.toggle.click(function ()
  11962. {
  11963. g.setRightCollapse(false);
  11964. });
  11965. if (g.left && g.isLeftCollapse)
  11966. {
  11967. g.leftCollapse.show();
  11968. g.leftDropHandle && g.leftDropHandle.hide();
  11969. g.left.hide();
  11970. }
  11971. if (g.right && g.isRightCollapse)
  11972. {
  11973. g.rightCollapse.show();
  11974. g.rightDropHandle && g.rightDropHandle.hide();
  11975. g.right.hide();
  11976. }
  11977. },
  11978. _addDropHandle: function ()
  11979. {
  11980. var g = this, p = this.options;
  11981. if (g.left && p.allowLeftResize)
  11982. {
  11983. g.leftDropHandle = $("<div class='l-layout-drophandle-left'></div>");
  11984. g.layout.append(g.leftDropHandle);
  11985. g.leftDropHandle && g.leftDropHandle.show();
  11986. g.leftDropHandle.mousedown(function (e)
  11987. {
  11988. g._start('leftresize', e);
  11989. });
  11990. }
  11991. if (g.right && p.allowRightResize)
  11992. {
  11993. g.rightDropHandle = $("<div class='l-layout-drophandle-right'></div>");
  11994. g.layout.append(g.rightDropHandle);
  11995. g.rightDropHandle && g.rightDropHandle.show();
  11996. g.rightDropHandle.mousedown(function (e)
  11997. {
  11998. g._start('rightresize', e);
  11999. });
  12000. }
  12001. if (g.top && p.allowTopResize)
  12002. {
  12003. g.topDropHandle = $("<div class='l-layout-drophandle-top'></div>");
  12004. g.layout.append(g.topDropHandle);
  12005. g.topDropHandle.show();
  12006. g.topDropHandle.mousedown(function (e)
  12007. {
  12008. g._start('topresize', e);
  12009. });
  12010. }
  12011. if (g.bottom && p.allowBottomResize)
  12012. {
  12013. g.bottomDropHandle = $("<div class='l-layout-drophandle-bottom'></div>");
  12014. g.layout.append(g.bottomDropHandle);
  12015. g.bottomDropHandle.show();
  12016. g.bottomDropHandle.mousedown(function (e)
  12017. {
  12018. g._start('bottomresize', e);
  12019. });
  12020. }
  12021. if (g.centerBottom && p.allowCenterBottomResize)
  12022. {
  12023. g.centerBottomDropHandle = $("<div class='l-layout-drophandle-centerbottom'></div>");
  12024. g.layout.append(g.centerBottomDropHandle);
  12025. g.centerBottomDropHandle.show();
  12026. g.centerBottomDropHandle.mousedown(function (e)
  12027. {
  12028. g._start('centerbottomresize', e);
  12029. });
  12030. }
  12031. g.draggingxline = $("<div class='l-layout-dragging-xline'></div>");
  12032. g.draggingyline = $("<div class='l-layout-dragging-yline'></div>");
  12033. g.mask = $("<div class='l-dragging-mask'></div>");
  12034. g.layout.append(g.draggingxline).append(g.draggingyline).append(g.mask);
  12035. },
  12036. _setDropHandlePosition: function ()
  12037. {
  12038. var g = this, p = this.options;
  12039. if (g.leftDropHandle)
  12040. {
  12041. g.leftDropHandle.css({ left: g.left.width() + parseInt(g.left.css('left')), height: g.middleHeight, top: g.middleTop });
  12042. }
  12043. if (g.rightDropHandle)
  12044. {
  12045. g.rightDropHandle.css({ left: parseInt(g.right.css('left')) - p.space, height: g.middleHeight, top: g.middleTop });
  12046. }
  12047. if (g.topDropHandle)
  12048. {
  12049. g.topDropHandle.css({ top: g.top.height() + parseInt(g.top.css('top')), width: g.top.width() });
  12050. }
  12051. if (g.bottomDropHandle)
  12052. {
  12053. g.bottomDropHandle.css({ top: parseInt(g.bottom.css('top')) - p.space, width: g.bottom.width() });
  12054. }
  12055. if (g.centerBottomDropHandle)
  12056. {
  12057. g.centerBottomDropHandle.css({
  12058. top: parseInt(g.centerBottom.css('top')) - p.space,
  12059. left: parseInt(g.center.css('left')),
  12060. width: g.center.width()
  12061. });
  12062. }
  12063. },
  12064. _onResize: function ()
  12065. {
  12066. var g = this, p = this.options;
  12067. var oldheight = g.layout.height();
  12068. //set layout height
  12069. var h = 0;
  12070. var windowHeight = $(window).height();
  12071. var parentHeight = null;
  12072. if (typeof (p.height) == "string" && p.height.indexOf('%') > 0)
  12073. {
  12074. var layoutparent = g.layout.parent();
  12075. if (p.inWindow || layoutparent[0].tagName.toLowerCase() == "body")
  12076. {
  12077. parentHeight = windowHeight;
  12078. parentHeight -= parseInt($('body').css('paddingTop'));
  12079. parentHeight -= parseInt($('body').css('paddingBottom'));
  12080. }
  12081. else
  12082. {
  12083. parentHeight = layoutparent.height();
  12084. }
  12085. h = parentHeight * parseFloat(p.height) * 0.01;
  12086. if (p.inWindow || layoutparent[0].tagName.toLowerCase() == "body")
  12087. h -= (g.layout.offset().top - parseInt($('body').css('paddingTop')));
  12088. }
  12089. else
  12090. {
  12091. h = parseInt(p.height);
  12092. }
  12093. h += p.heightDiff;
  12094. g.layout.height(h);
  12095. g.layoutHeight = g.layout.height();
  12096. g.middleWidth = g.layout.width();
  12097. g.middleHeight = g.layout.height();
  12098. if (g.top)
  12099. {
  12100. g.middleHeight -= g.top.height();
  12101. g.middleHeight -= parseInt(g.top.css('borderTopWidth'));
  12102. g.middleHeight -= parseInt(g.top.css('borderBottomWidth'));
  12103. g.middleHeight -= p.space;
  12104. }
  12105. if (g.bottom)
  12106. {
  12107. g.middleHeight -= g.bottom.height();
  12108. g.middleHeight -= parseInt(g.bottom.css('borderTopWidth'));
  12109. g.middleHeight -= parseInt(g.bottom.css('borderBottomWidth'));
  12110. g.middleHeight -= p.space;
  12111. }
  12112. //specific
  12113. g.middleHeight -= 2;
  12114. if (g.hasBind('heightChanged') && g.layoutHeight != oldheight)
  12115. {
  12116. g.trigger('heightChanged', [{ layoutHeight: g.layoutHeight, diff: g.layoutHeight - oldheight, middleHeight: g.middleHeight}]);
  12117. }
  12118. if (g.center)
  12119. {
  12120. g.centerWidth = g.middleWidth;
  12121. if (g.left)
  12122. {
  12123. if (g.isLeftCollapse)
  12124. {
  12125. g.centerWidth -= g.leftCollapse.width();
  12126. g.centerWidth -= parseInt(g.leftCollapse.css('borderLeftWidth'));
  12127. g.centerWidth -= parseInt(g.leftCollapse.css('borderRightWidth'));
  12128. g.centerWidth -= parseInt(g.leftCollapse.css('left'));
  12129. g.centerWidth -= p.space;
  12130. }
  12131. else
  12132. {
  12133. g.centerWidth -= g.leftWidth;
  12134. g.centerWidth -= parseInt(g.left.css('borderLeftWidth'));
  12135. g.centerWidth -= parseInt(g.left.css('borderRightWidth'));
  12136. g.centerWidth -= parseInt(g.left.css('left'));
  12137. g.centerWidth -= p.space;
  12138. }
  12139. }
  12140. if (g.right)
  12141. {
  12142. if (g.isRightCollapse)
  12143. {
  12144. g.centerWidth -= g.rightCollapse.width();
  12145. g.centerWidth -= parseInt(g.rightCollapse.css('borderLeftWidth'));
  12146. g.centerWidth -= parseInt(g.rightCollapse.css('borderRightWidth'));
  12147. g.centerWidth -= parseInt(g.rightCollapse.css('right'));
  12148. g.centerWidth -= p.space;
  12149. }
  12150. else
  12151. {
  12152. g.centerWidth -= g.rightWidth;
  12153. g.centerWidth -= parseInt(g.right.css('borderLeftWidth'));
  12154. g.centerWidth -= parseInt(g.right.css('borderRightWidth'));
  12155. g.centerWidth -= p.space;
  12156. }
  12157. }
  12158. g.centerLeft = 0;
  12159. if (g.left)
  12160. {
  12161. if (g.isLeftCollapse)
  12162. {
  12163. g.centerLeft += g.leftCollapse.width();
  12164. g.centerLeft += parseInt(g.leftCollapse.css('borderLeftWidth'));
  12165. g.centerLeft += parseInt(g.leftCollapse.css('borderRightWidth'));
  12166. g.centerLeft += parseInt(g.leftCollapse.css('left'));
  12167. g.centerLeft += p.space;
  12168. }
  12169. else
  12170. {
  12171. g.centerLeft += g.left.width();
  12172. g.centerLeft += parseInt(g.left.css('borderLeftWidth'));
  12173. g.centerLeft += parseInt(g.left.css('borderRightWidth'));
  12174. g.centerLeft += p.space;
  12175. }
  12176. }
  12177. g.center.css({ left: g.centerLeft });
  12178. g.centerWidth >= 0 && g.center.width(g.centerWidth);
  12179. g.middleHeight >= 0 && g.center.height(g.middleHeight);
  12180. var contentHeight = g.middleHeight;
  12181. if (g.center.header) contentHeight -= g.center.header.height();
  12182. contentHeight >= 0 && g.center.content.height(contentHeight);
  12183. g._updateCenterBottom(true);
  12184. }
  12185. if (g.left)
  12186. {
  12187. g.leftCollapse.height(g.middleHeight);
  12188. g.left.height(g.middleHeight);
  12189. }
  12190. if (g.right)
  12191. {
  12192. g.rightCollapse.height(g.middleHeight);
  12193. g.right.height(g.middleHeight);
  12194. //set left
  12195. g.rightLeft = 0;
  12196. if (g.left)
  12197. {
  12198. if (g.isLeftCollapse)
  12199. {
  12200. g.rightLeft += g.leftCollapse.width();
  12201. g.rightLeft += parseInt(g.leftCollapse.css('borderLeftWidth'));
  12202. g.rightLeft += parseInt(g.leftCollapse.css('borderRightWidth'));
  12203. g.rightLeft += p.space;
  12204. }
  12205. else
  12206. {
  12207. g.rightLeft += g.left.width();
  12208. g.rightLeft += parseInt(g.left.css('borderLeftWidth'));
  12209. g.rightLeft += parseInt(g.left.css('borderRightWidth'));
  12210. g.rightLeft += parseInt(g.left.css('left'));
  12211. g.rightLeft += p.space;
  12212. }
  12213. }
  12214. if (g.center)
  12215. {
  12216. g.rightLeft += g.center.width();
  12217. g.rightLeft += parseInt(g.center.css('borderLeftWidth'));
  12218. g.rightLeft += parseInt(g.center.css('borderRightWidth'));
  12219. g.rightLeft += p.space;
  12220. }
  12221. g.right.css({ left: g.rightLeft });
  12222. }
  12223. if (g.bottom)
  12224. {
  12225. g.bottomTop = g.layoutHeight - g.bottom.height() - 2;
  12226. g.bottom.css({ top: g.bottomTop });
  12227. }
  12228. g._setDropHandlePosition();
  12229. },
  12230. //加了centerBottom以后,需要对centerBottom进行刷新处理一下
  12231. _updateCenterBottom: function (isHeightResize)
  12232. {
  12233. var g = this, p = this.options;
  12234. if (g.centerBottom)
  12235. {
  12236. if (isHeightResize)
  12237. {
  12238. var centerBottomHeight = g.centerBottomHeight || p.centerBottomHeight;
  12239. g.centerBottom.css({ left: g.centerLeft });
  12240. g.centerWidth >= 0 && g.centerBottom.width(g.centerWidth);
  12241. var centerHeight = g.center.height(), centerTop = parseInt(g.center.css("top"));
  12242. g.centerBottom.height(centerBottomHeight)
  12243. g.centerBottom.css({ top: centerTop + centerHeight - centerBottomHeight + 2 });
  12244. g.center.height(centerHeight - centerBottomHeight - 2);
  12245. }
  12246. var centerLeft = parseInt(g.center.css("left"));
  12247. g.centerBottom.width(g.center.width()).css({ left: centerLeft });
  12248. }
  12249. },
  12250. _start: function (dragtype, e)
  12251. {
  12252. var g = this, p = this.options;
  12253. g.dragtype = dragtype;
  12254. if (dragtype == 'leftresize' || dragtype == 'rightresize')
  12255. {
  12256. g.xresize = { startX: e.pageX };
  12257. g.draggingyline.css({ left: e.pageX - g.layout.offset().left, height: g.middleHeight, top: g.middleTop }).show();
  12258. $('body').css('cursor', 'col-resize');
  12259. g.mask.height(g.layout.height()).removeClass("l-layout-ymask").addClass("l-layout-xmask").show();
  12260. }
  12261. else if (dragtype == 'topresize' || dragtype == 'bottomresize')
  12262. {
  12263. g.yresize = { startY: e.pageY };
  12264. g.draggingxline.css({ top: e.pageY - g.layout.offset().top, width: g.layout.width() }).show();
  12265. $('body').css('cursor', 'row-resize');
  12266. g.mask.height(g.layout.height()).removeClass("l-layout-xmask").addClass("l-layout-ymask").show();
  12267. }
  12268. else if (dragtype == 'centerbottomresize')
  12269. {
  12270. g.yresize = { startY: e.pageY };
  12271. g.draggingxline.css({ top: e.pageY - g.layout.offset().top, width: g.layout.width() }).show();
  12272. $('body').css('cursor', 'row-resize');
  12273. g.mask.height(g.layout.height()).removeClass("l-layout-xmask").addClass("l-layout-ymask").show();
  12274. }
  12275. else
  12276. {
  12277. return;
  12278. }
  12279. g.layout.lock.width(g.layout.width());
  12280. g.layout.lock.height(g.layout.height());
  12281. g.layout.lock.show();
  12282. if ($.browser.msie || $.browser.safari) $('body').bind('selectstart', function () { return false; }); // 不能选择
  12283. $(document).bind('mouseup', function ()
  12284. {
  12285. g._stop.apply(g, arguments);
  12286. });
  12287. $(document).bind('mousemove', function ()
  12288. {
  12289. g._drag.apply(g, arguments);
  12290. });
  12291. },
  12292. _drag: function (e)
  12293. {
  12294. var g = this, p = this.options;
  12295. if (g.xresize)
  12296. {
  12297. g.xresize.diff = e.pageX - g.xresize.startX;
  12298. g.draggingyline.css({ left: e.pageX - g.layout.offset().left });
  12299. $('body').css('cursor', 'col-resize');
  12300. }
  12301. else if (g.yresize)
  12302. {
  12303. g.yresize.diff = e.pageY - g.yresize.startY;
  12304. g.draggingxline.css({ top: e.pageY - g.layout.offset().top });
  12305. $('body').css('cursor', 'row-resize');
  12306. }
  12307. },
  12308. _stop: function (e)
  12309. {
  12310. var g = this, p = this.options;
  12311. var diff;
  12312. if (g.xresize && g.xresize.diff != undefined)
  12313. {
  12314. diff = g.xresize.diff;
  12315. if (g.dragtype == 'leftresize')
  12316. {
  12317. if (p.minLeftWidth)
  12318. {
  12319. if (g.leftWidth + g.xresize.diff < p.minLeftWidth)
  12320. return;
  12321. }
  12322. g.leftWidth += g.xresize.diff;
  12323. g.left.width(g.leftWidth);
  12324. if (g.center)
  12325. g.center.width(g.center.width() - g.xresize.diff).css({ left: parseInt(g.center.css('left')) + g.xresize.diff });
  12326. else if (g.right)
  12327. g.right.width(g.left.width() - g.xresize.diff).css({ left: parseInt(g.right.css('left')) + g.xresize.diff });
  12328. }
  12329. else if (g.dragtype == 'rightresize')
  12330. {
  12331. if (p.minRightWidth)
  12332. {
  12333. if (g.rightWidth - g.xresize.diff < p.minRightWidth)
  12334. return;
  12335. }
  12336. g.rightWidth -= g.xresize.diff;
  12337. g.right.width(g.rightWidth).css({ left: parseInt(g.right.css('left')) + g.xresize.diff });
  12338. if (g.center)
  12339. g.center.width(g.center.width() + g.xresize.diff);
  12340. else if (g.left)
  12341. g.left.width(g.left.width() + g.xresize.diff);
  12342. }
  12343. g._updateCenterBottom();
  12344. }
  12345. else if (g.yresize && g.yresize.diff != undefined)
  12346. {
  12347. diff = g.yresize.diff;
  12348. if (g.dragtype == 'topresize')
  12349. {
  12350. g.top.height(g.top.height() + g.yresize.diff);
  12351. g.middleTop += g.yresize.diff;
  12352. g.middleHeight -= g.yresize.diff;
  12353. if (g.left)
  12354. {
  12355. g.left.css({ top: g.middleTop }).height(g.middleHeight);
  12356. g.leftCollapse.css({ top: g.middleTop }).height(g.middleHeight);
  12357. }
  12358. if (g.center) g.center.css({ top: g.middleTop }).height(g.middleHeight);
  12359. if (g.right)
  12360. {
  12361. g.right.css({ top: g.middleTop }).height(g.middleHeight);
  12362. g.rightCollapse.css({ top: g.middleTop }).height(g.middleHeight);
  12363. }
  12364. g._updateCenterBottom(true);
  12365. }
  12366. else if (g.dragtype == 'bottomresize')
  12367. {
  12368. g.bottom.height(g.bottom.height() - g.yresize.diff);
  12369. g.middleHeight += g.yresize.diff;
  12370. g.bottomTop += g.yresize.diff;
  12371. g.bottom.css({ top: g.bottomTop });
  12372. if (g.left)
  12373. {
  12374. g.left.height(g.middleHeight);
  12375. g.leftCollapse.height(g.middleHeight);
  12376. }
  12377. if (g.center) g.center.height(g.middleHeight);
  12378. if (g.right)
  12379. {
  12380. g.right.height(g.middleHeight);
  12381. g.rightCollapse.height(g.middleHeight);
  12382. }
  12383. g._updateCenterBottom(true);
  12384. }
  12385. else if (g.dragtype == 'centerbottomresize')
  12386. {
  12387. g.centerBottomHeight = g.centerBottomHeight || p.centerBottomHeight;
  12388. g.centerBottomHeight -= g.yresize.diff;
  12389. var centerBottomTop = parseInt(g.centerBottom.css("top"));
  12390. g.centerBottom.css("top" , centerBottomTop + g.yresize.diff);
  12391. g.centerBottom.height(g.centerBottom.height() - g.yresize.diff);
  12392. g.center.height(g.center.height() + g.yresize.diff);
  12393. }
  12394. }
  12395. g.trigger('endResize', [{
  12396. direction: g.dragtype ? g.dragtype.replace(/resize/, '') : '',
  12397. diff: diff
  12398. }, e]);
  12399. g._setDropHandlePosition();
  12400. g.draggingxline.hide();
  12401. g.draggingyline.hide();
  12402. g.mask.hide();
  12403. g.xresize = g.yresize = g.dragtype = false;
  12404. g.layout.lock.hide();
  12405. if ($.browser.msie || $.browser.safari)
  12406. $('body').unbind('selectstart');
  12407. $(document).unbind('mousemove', g._drag);
  12408. $(document).unbind('mouseup', g._stop);
  12409. $('body').css('cursor', '');
  12410. }
  12411. });
  12412. })(jQuery);/**
  12413. * jQuery ligerUI 1.2.4
  12414. *
  12415. * http://ligerui.com
  12416. *
  12417. * Author daomi 2014 [ gd_star@163.com ]
  12418. *
  12419. */
  12420. (function ($)
  12421. {
  12422. $.fn.ligerListBox = function (options)
  12423. {
  12424. return $.ligerui.run.call(this, "ligerListBox", arguments);
  12425. };
  12426. $.ligerDefaults.ListBox = {
  12427. isMultiSelect: false, //是否多选
  12428. isShowCheckBox: false, //是否选择复选框
  12429. columns: null, //表格状态
  12430. width: 150, //宽度
  12431. height: 100, //高度
  12432. onSelect: false, //选择前事件
  12433. onSelected: null, //选择值事件
  12434. valueField: 'id', //值成员
  12435. textField: 'text', //显示成员
  12436. valueFieldID: null, //值 隐藏域 表单名
  12437. split: ";", //分隔符
  12438. data: null, //数据
  12439. parms: null, //ajax提交表单
  12440. url: null, //数据源URL(需返回JSON)
  12441. onSuccess: null,
  12442. onError: null,
  12443. render: null, //显示html自定义函数
  12444. css: null, //附加css
  12445. value: null, //值
  12446. valueFieldCssClass: null
  12447. };
  12448. //扩展方法
  12449. $.ligerMethos.ListBox = $.ligerMethos.ListBox || {};
  12450. $.ligerui.controls.ListBox = function (element, options)
  12451. {
  12452. $.ligerui.controls.ListBox.base.constructor.call(this, element, options);
  12453. };
  12454. $.ligerui.controls.ListBox.ligerExtend($.ligerui.controls.Input, {
  12455. __getType: function ()
  12456. {
  12457. return 'ListBox';
  12458. },
  12459. _extendMethods: function ()
  12460. {
  12461. return $.ligerMethos.ListBox;
  12462. },
  12463. _init: function ()
  12464. {
  12465. $.ligerui.controls.ListBox.base._init.call(this);
  12466. },
  12467. _render: function ()
  12468. {
  12469. var g = this, p = this.options;
  12470. g.data = p.data;
  12471. g.valueField = null; //隐藏域(保存值)
  12472. if (p.valueFieldID)
  12473. {
  12474. g.valueField = $("#" + p.valueFieldID + ":input,[name=" + p.valueFieldID + "]:input");
  12475. if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
  12476. g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
  12477. }
  12478. else
  12479. {
  12480. g.valueField = $('<input type="hidden"/>');
  12481. g.valueField[0].id = g.valueField[0].name = g.id + "_val";
  12482. }
  12483. if (g.valueField[0].name == null) g.valueField[0].name = g.valueField[0].id;
  12484. if (p.valueFieldCssClass)
  12485. {
  12486. g.valueField.addClass(p.valueFieldCssClass);
  12487. }
  12488. g.valueField.attr("data-ligerid", g.id);
  12489. //选择框框
  12490. g.selectBox = $(this.element);
  12491. g.selectBox.html('<div class="l-listbox-inner"><table cellpadding="0" cellspacing="0" border="0" class="l-listbox-table"></table></div>').addClass("l-listbox").append(g.valueField);
  12492. g.selectBox.table = $("table:first", g.selectBox);
  12493. g.set(p);
  12494. g._addClickEven();
  12495. },
  12496. destroy: function ()
  12497. {
  12498. if (this.selectBox) this.selectBox.remove();
  12499. this.options = null;
  12500. $.ligerui.remove(this);
  12501. },
  12502. clear : function()
  12503. {
  12504. this._changeValue("");
  12505. this.trigger('clear');
  12506. },
  12507. _setIsShowCheckBox : function(value)
  12508. {
  12509. if (value)
  12510. {
  12511. $("table", this.selectBox).addClass("l-table-checkbox");
  12512. } else
  12513. {
  12514. $("table", this.selectBox).addClass("l-table-nocheckbox");
  12515. }
  12516. },
  12517. _setCss: function (css)
  12518. {
  12519. if (css)
  12520. {
  12521. this.selectBox.addClass(css);
  12522. }
  12523. },
  12524. _setDisabled: function (value)
  12525. {
  12526. //禁用样式
  12527. if (value)
  12528. {
  12529. this.selectBox.addClass('l-text-disabled');
  12530. } else
  12531. {
  12532. this.selectBox.removeClass('l-text-disabled');
  12533. }
  12534. },
  12535. _setWidth: function (value)
  12536. {
  12537. this.selectBox.width(value);
  12538. },
  12539. _setHeight: function (value)
  12540. {
  12541. this.selectBox.height(value);
  12542. },
  12543. //查找Text,适用多选和单选
  12544. findTextByValue: function (value)
  12545. {
  12546. var g = this, p = this.options;
  12547. if (value == null) return "";
  12548. var texts = "";
  12549. var contain = function (checkvalue)
  12550. {
  12551. var targetdata = value.toString().split(p.split);
  12552. for (var i = 0; i < targetdata.length; i++)
  12553. {
  12554. if (targetdata[i] == checkvalue) return true;
  12555. }
  12556. return false;
  12557. };
  12558. $(g.data).each(function (i, item)
  12559. {
  12560. var val = item[p.valueField];
  12561. var txt = item[p.textField];
  12562. if (contain(val))
  12563. {
  12564. texts += txt + p.split;
  12565. }
  12566. });
  12567. if (texts.length > 0) texts = texts.substr(0, texts.length - 1);
  12568. return texts;
  12569. },
  12570. getDataByValue: function (value)
  12571. {
  12572. var g = this, p = this.options;
  12573. for (var i = 0, l = g.data.length; i < l; i++)
  12574. {
  12575. if (g.data[i][p.valueField] == value) return g.data[i];
  12576. }
  12577. return null;
  12578. },
  12579. indexOf: function (item)
  12580. {
  12581. var g = this, p = this.options;
  12582. if (!g.data) return -1;
  12583. var isObj = typeof (item) == "object";
  12584. for (var i = 0, l = g.data.length; i < l; i++)
  12585. {
  12586. if (isObj)
  12587. {
  12588. if (g.data[i] == item) return i;
  12589. } else
  12590. {
  12591. if (g.data[i][p.valueField] && g.data[i][p.valueField].toString() == item.toString()) return i;
  12592. }
  12593. }
  12594. return -1;
  12595. },
  12596. removeItems : function(items)
  12597. {
  12598. var g = this;
  12599. if (!g.data) return;
  12600. $(items).each(function (i,item)
  12601. {
  12602. var index = g.indexOf(item);
  12603. if (index == -1) return;
  12604. g.data.splice(index, 1);
  12605. });
  12606. g.refresh();
  12607. },
  12608. removeItem: function (item)
  12609. {
  12610. if (!this.data) return;
  12611. var index = this.indexOf(item);
  12612. if (index == -1) return;
  12613. this.data.splice(index, 1);
  12614. this.refresh();
  12615. },
  12616. insertItem: function (item,index)
  12617. {
  12618. var g = this;
  12619. if (!g.data) g.data = [];
  12620. g.data.splice(index, 0, item);
  12621. g.refresh();
  12622. },
  12623. addItems: function (items)
  12624. {
  12625. var g = this;
  12626. if (!g.data) g.data = [];
  12627. $(items).each(function (i, item)
  12628. {
  12629. g.data.push(item);
  12630. });
  12631. g.refresh();
  12632. },
  12633. addItem: function (item)
  12634. {
  12635. var g = this;
  12636. if (!g.data) g.data = [];
  12637. g.data.push(item);
  12638. g.refresh();
  12639. },
  12640. getSelectedItems: function()
  12641. {
  12642. var g = this, p = this.options;
  12643. if (!g.data) return null;
  12644. var value = g.getValue();
  12645. if (!value) return null;
  12646. var items = [];
  12647. $(value.split(p.split)).each(function ()
  12648. {
  12649. var index = g.indexOf(this.toString());
  12650. if (index != -1) items.push(g.data[index]);
  12651. });
  12652. return items;
  12653. },
  12654. _setValue: function (value)
  12655. {
  12656. var g = this, p = this.options;
  12657. p.value = value;
  12658. this._dataInit();
  12659. },
  12660. setValue: function (value)
  12661. {
  12662. this._setValue(value);
  12663. },
  12664. _setUrl: function (url)
  12665. {
  12666. if (!url) return;
  12667. var g = this, p = this.options;
  12668. $.ajax({
  12669. type: 'post',
  12670. url: url,
  12671. data: p.parms,
  12672. cache: false,
  12673. dataType: 'json',
  12674. success: function (data)
  12675. {
  12676. g.setData(data);
  12677. g.trigger('success', [data]);
  12678. },
  12679. error: function (XMLHttpRequest, textStatus)
  12680. {
  12681. g.trigger('error', [XMLHttpRequest, textStatus]);
  12682. }
  12683. });
  12684. },
  12685. setUrl: function (url)
  12686. {
  12687. return this._setUrl(url);
  12688. },
  12689. setParm: function (name, value)
  12690. {
  12691. if (!name) return;
  12692. var g = this;
  12693. var parms = g.get('parms');
  12694. if (!parms) parms = {};
  12695. parms[name] = value;
  12696. g.set('parms', parms);
  12697. },
  12698. clearContent: function ()
  12699. {
  12700. var g = this, p = this.options;
  12701. $("table", g.selectBox).html("");
  12702. },
  12703. _setColumns : function(columns)
  12704. {
  12705. var g = this, p = this.options;
  12706. p.columns = columns;
  12707. g.refresh();
  12708. },
  12709. _setData : function(data)
  12710. {
  12711. this.setData(data);
  12712. },
  12713. setData: function (data)
  12714. {
  12715. var g = this, p = this.options;
  12716. if (!data || !data.length) return;
  12717. g.data = data;
  12718. g.refresh();
  12719. g.updateStyle();
  12720. },
  12721. refresh:function()
  12722. {
  12723. var g = this, p = this.options, data = this.data;
  12724. this.clearContent();
  12725. if (!data) return;
  12726. if (p.columns)
  12727. {
  12728. g.selectBox.table.headrow = $("<tr class='l-table-headerow'><td width='18px' class='l-checkboxrow'></td></tr>");
  12729. g.selectBox.table.append(g.selectBox.table.headrow);
  12730. g.selectBox.table.addClass("l-listbox-grid");
  12731. for (var j = 0; j < p.columns.length; j++)
  12732. {
  12733. var headrow = $("<td columnindex='" + j + "' columnname='" + p.columns[j].name + "'>" + p.columns[j].header + "</td>");
  12734. if (p.columns[j].width)
  12735. {
  12736. headrow.width(p.columns[j].width);
  12737. }
  12738. g.selectBox.table.headrow.append(headrow);
  12739. }
  12740. }
  12741. var out = [];
  12742. for (var i = 0; i < data.length; i++)
  12743. {
  12744. var val = data[i][p.valueField];
  12745. var txt = data[i][p.textField];
  12746. var valueIndexStr = " value='" + val + "' index='" + i + "'";
  12747. if (!p.columns)
  12748. {
  12749. out.push("<tr " + valueIndexStr + ">");
  12750. out.push("<td style='width:18px;' class='l-checkboxrow'><input type='checkbox'" + valueIndexStr + "/></td>");
  12751. var itemHtml = txt;
  12752. if (p.render)
  12753. {
  12754. itemHtml = p.render({
  12755. data: data[i],
  12756. value: val,
  12757. text: txt
  12758. });
  12759. }
  12760. out.push("<td align='left'>" + itemHtml + "</td></tr>");
  12761. } else
  12762. {
  12763. out.push("<tr " + valueIndexStr + "><td style='width:18px;' class='l-checkboxrow'><input type='checkbox' " + valueIndexStr + "/></td>");
  12764. for (var j = 0; j < p.columns.length; j++)
  12765. {
  12766. var columnname = p.columns[j].name;
  12767. out.push("<td>" + data[i][columnname] + "</td>");
  12768. }
  12769. out.push('</tr>');
  12770. }
  12771. }
  12772. g.selectBox.table.append(out.join(''));
  12773. },
  12774. _getValue: function ()
  12775. {
  12776. return $(this.valueField).val();
  12777. },
  12778. getValue: function ()
  12779. {
  12780. //获取值
  12781. return this._getValue();
  12782. },
  12783. updateStyle: function ()
  12784. {
  12785. this._dataInit();
  12786. },
  12787. selectAll: function ()
  12788. {
  12789. var g = this, p = this.options;
  12790. var values = [];
  12791. $("tr", g.selectBox).each(function ()
  12792. {
  12793. var jrow = $(this);
  12794. values.push(jrow.attr("value"));
  12795. });
  12796. $("tr", g.selectBox).addClass("l-selected").find(":checkbox").each(function () { this.checked = true; });
  12797. g.valueField.val(values.join(p.split));
  12798. },
  12799. _dataInit: function ()
  12800. {
  12801. var g = this, p = this.options;
  12802. var value = p.value;
  12803. //根据值来初始化
  12804. if (value != null)
  12805. {
  12806. g._changeValue(value);
  12807. }
  12808. else if (g.valueField.val() != "")
  12809. {
  12810. p.value = g.valueField.val();
  12811. }
  12812. var valueArr = (value || "").toString().split(p.split);
  12813. $("tr.l-selected", g.selectBox)
  12814. .removeClass("l-selected")
  12815. .find(":checkbox").each(function () { this.checked = false; });
  12816. $(valueArr).each(function (i, item)
  12817. {
  12818. $("tr[value='" + item + "']", g.selectBox)
  12819. .addClass("l-selected")
  12820. .find(":checkbox").each(function () { this.checked = true; });
  12821. });
  12822. },
  12823. //设置值到 隐藏域
  12824. _changeValue: function (newValue)
  12825. {
  12826. var g = this, p = this.options;
  12827. g.valueField.val(newValue);
  12828. g.selectedValue = newValue;
  12829. },
  12830. //更新值到隐藏域
  12831. _updateValue: function ()
  12832. {
  12833. var g = this, p = this.options;
  12834. var values = [];
  12835. $("tr", g.selectBox).each(function ()
  12836. {
  12837. var jrow = $(this);
  12838. if (jrow.hasClass("l-selected"))
  12839. {
  12840. values.push(jrow.attr("value"));
  12841. }
  12842. });
  12843. g._changeValue(values.join(p.split));
  12844. },
  12845. _addClickEven: function ()
  12846. {
  12847. var g = this, p = this.options;
  12848. //选项点击
  12849. g.selectBox.click(function (e)
  12850. {
  12851. var obj = (e.target || e.srcElement);
  12852. var jrow = $(obj).parents("tr:first");
  12853. if (!jrow.length) return;
  12854. var value = jrow.attr("value");
  12855. var text = g.findTextByValue(value), data = g.getDataByValue(value);
  12856. if (g.hasBind('select'))
  12857. {
  12858. if (g.trigger('select', [value, text, data]) == false)
  12859. {
  12860. return false;
  12861. }
  12862. }
  12863. if (!p.isMultiSelect)
  12864. {
  12865. $("tr.l-selected", g.selectBox).not(jrow)
  12866. .removeClass("l-selected")
  12867. .find(":checkbox").each(function () { this.checked = false });
  12868. }
  12869. if (jrow.hasClass("l-selected"))
  12870. {
  12871. jrow.removeClass("l-selected");
  12872. } else
  12873. {
  12874. jrow.addClass("l-selected");
  12875. }
  12876. jrow.find(":checkbox").each(function () { this.checked = jrow.hasClass("l-selected"); });
  12877. g._updateValue();
  12878. g.trigger('selected', [value, text, data]);
  12879. });
  12880. }
  12881. });
  12882. })(jQuery);/**
  12883. * jQuery ligerUI 1.2.4
  12884. *
  12885. * http://ligerui.com
  12886. *
  12887. * Author daomi 2014 [ gd_star@163.com ]
  12888. *
  12889. */
  12890. (function ($)
  12891. {
  12892. $.ligerMenu = function (options)
  12893. {
  12894. return $.ligerui.run.call(null, "ligerMenu", arguments);
  12895. };
  12896. $.ligerDefaults.Menu = {
  12897. width: 120,
  12898. top: 0,
  12899. left: 0,
  12900. items: null,
  12901. shadow: true
  12902. };
  12903. $.ligerMethos.Menu = {};
  12904. $.ligerui.controls.Menu = function (options)
  12905. {
  12906. $.ligerui.controls.Menu.base.constructor.call(this, null, options);
  12907. };
  12908. $.ligerui.controls.Menu.ligerExtend($.ligerui.core.UIComponent, {
  12909. __getType: function ()
  12910. {
  12911. return 'Menu';
  12912. },
  12913. __idPrev: function ()
  12914. {
  12915. return 'Menu';
  12916. },
  12917. _extendMethods: function ()
  12918. {
  12919. return $.ligerMethos.Menu;
  12920. },
  12921. _render: function ()
  12922. {
  12923. var g = this, p = this.options;
  12924. g.menuItemCount = 0;
  12925. //全部菜单
  12926. g.menus = {};
  12927. //顶级菜单
  12928. g.menu = g.createMenu();
  12929. g.element = g.menu[0];
  12930. g.menu.css({ top: p.top, left: p.left, width: p.width });
  12931. p.items && $(p.items).each(function (i, item)
  12932. {
  12933. g.addItem(item);
  12934. });
  12935. $(document).bind('click.menu', function ()
  12936. {
  12937. for (var menuid in g.menus)
  12938. {
  12939. var menu = g.menus[menuid];
  12940. if (!menu) return;
  12941. menu.hide();
  12942. if (menu.shadow) menu.shadow.hide();
  12943. }
  12944. });
  12945. g.set(p);
  12946. },
  12947. show: function (options, menu)
  12948. {
  12949. var g = this, p = this.options;
  12950. if (menu == undefined) menu = g.menu;
  12951. if (options && options.left != undefined)
  12952. {
  12953. menu.css({ left: options.left });
  12954. }
  12955. if (options && options.top != undefined)
  12956. {
  12957. menu.css({ top: options.top });
  12958. }
  12959. menu.show();
  12960. g.updateShadow(menu);
  12961. },
  12962. updateShadow: function (menu)
  12963. {
  12964. var g = this, p = this.options;
  12965. if (!p.shadow) return;
  12966. menu.shadow.css({
  12967. left: menu.css('left'),
  12968. top: menu.css('top'),
  12969. width: menu.outerWidth(),
  12970. height: menu.outerHeight()
  12971. });
  12972. if (menu.is(":visible"))
  12973. menu.shadow.show();
  12974. else
  12975. menu.shadow.hide();
  12976. },
  12977. hide: function (menu)
  12978. {
  12979. var g = this, p = this.options;
  12980. if (menu == undefined) menu = g.menu;
  12981. g.hideAllSubMenu(menu);
  12982. menu.hide();
  12983. g.updateShadow(menu);
  12984. },
  12985. toggle: function ()
  12986. {
  12987. var g = this, p = this.options;
  12988. g.menu.toggle();
  12989. g.updateShadow(g.menu);
  12990. },
  12991. removeItem: function (itemid)
  12992. {
  12993. var g = this, p = this.options;
  12994. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).remove();
  12995. },
  12996. setEnabled: function (itemid)
  12997. {
  12998. var g = this, p = this.options;
  12999. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).removeClass("l-menu-item-disable");
  13000. },
  13001. setMenuText : function(itemid,text)
  13002. {
  13003. var g = this, p = this.options;
  13004. $("> .l-menu-item[menuitemid=" + itemid + "] >.l-menu-item-text:first", g.menu.items).html(text);
  13005. },
  13006. setDisabled: function (itemid)
  13007. {
  13008. var g = this, p = this.options;
  13009. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).addClass("l-menu-item-disable");
  13010. },
  13011. isEnable: function (itemid)
  13012. {
  13013. var g = this, p = this.options;
  13014. return !$("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).hasClass("l-menu-item-disable");
  13015. },
  13016. getItemCount: function ()
  13017. {
  13018. var g = this, p = this.options;
  13019. return $("> .l-menu-item", g.menu.items).length;
  13020. },
  13021. addItem: function (item, menu)
  13022. {
  13023. var g = this, p = this.options;
  13024. if (!item) return;
  13025. if (menu == undefined) menu = g.menu;
  13026. if (item.line)
  13027. {
  13028. menu.items.append('<div class="l-menu-item-line"></div>');
  13029. return;
  13030. }
  13031. var ditem = $('<div class="l-menu-item"><div class="l-menu-item-text"></div> </div>');
  13032. var itemcount = $("> .l-menu-item", menu.items).length;
  13033. menu.items.append(ditem);
  13034. ditem.attr("ligeruimenutemid", ++g.menuItemCount);
  13035. item.id && ditem.attr("menuitemid", item.id);
  13036. item.text && $(">.l-menu-item-text:first", ditem).html(item.text);
  13037. item.icon && ditem.prepend('<div class="l-menu-item-icon l-icon-' + item.icon + '"></div>');
  13038. item.img && ditem.prepend('<div class="l-menu-item-icon"><img style="width:16px;height:16px;margin:2px;" src="' + item.img + '" /></div>');
  13039. if (item.disable || item.disabled)
  13040. ditem.addClass("l-menu-item-disable");
  13041. if (item.children)
  13042. {
  13043. ditem.append('<div class="l-menu-item-arrow"></div>');
  13044. var newmenu = g.createMenu(ditem.attr("ligeruimenutemid"));
  13045. g.menus[ditem.attr("ligeruimenutemid")] = newmenu;
  13046. newmenu.width(p.width);
  13047. newmenu.hover(null, function ()
  13048. {
  13049. if (!newmenu.showedSubMenu)
  13050. g.hide(newmenu);
  13051. });
  13052. $(item.children).each(function ()
  13053. {
  13054. g.addItem(this, newmenu);
  13055. });
  13056. }
  13057. item.click && ditem.click(function ()
  13058. {
  13059. if ($(this).hasClass("l-menu-item-disable")) return;
  13060. item.click(item, itemcount);
  13061. });
  13062. item.dblclick && ditem.dblclick(function ()
  13063. {
  13064. if ($(this).hasClass("l-menu-item-disable")) return;
  13065. item.dblclick(item, itemcount);
  13066. });
  13067. var menuover = $("> .l-menu-over:first", menu);
  13068. ditem.hover(function ()
  13069. {
  13070. if ($(this).hasClass("l-menu-item-disable")) return;
  13071. var itemtop = $(this).offset().top;
  13072. var top = itemtop - menu.offset().top;
  13073. menuover.css({ top: top });
  13074. g.hideAllSubMenu(menu);
  13075. if (item.children)
  13076. {
  13077. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  13078. if (!ligeruimenutemid) return;
  13079. if (g.menus[ligeruimenutemid])
  13080. {
  13081. g.show({ top: itemtop, left: $(this).offset().left + $(this).width() - 5 }, g.menus[ligeruimenutemid]);
  13082. menu.showedSubMenu = true;
  13083. }
  13084. }
  13085. }, function ()
  13086. {
  13087. if ($(this).hasClass("l-menu-item-disable")) return;
  13088. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  13089. if (item.children)
  13090. {
  13091. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  13092. if (!ligeruimenutemid) return;
  13093. };
  13094. });
  13095. },
  13096. hideAllSubMenu: function (menu)
  13097. {
  13098. var g = this, p = this.options;
  13099. if (menu == undefined) menu = g.menu;
  13100. $("> .l-menu-item", menu.items).each(function ()
  13101. {
  13102. if ($("> .l-menu-item-arrow", this).length > 0)
  13103. {
  13104. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  13105. if (!ligeruimenutemid) return;
  13106. g.menus[ligeruimenutemid] && g.hide(g.menus[ligeruimenutemid]);
  13107. }
  13108. });
  13109. menu.showedSubMenu = false;
  13110. },
  13111. createMenu: function (parentMenuItemID)
  13112. {
  13113. var g = this, p = this.options;
  13114. var menu = $('<div class="l-menu" style="display:none"><div class="l-menu-yline"></div><div class="l-menu-over"><div class="l-menu-over-l"></div> <div class="l-menu-over-r"></div></div><div class="l-menu-inner"></div></div>');
  13115. parentMenuItemID && menu.attr("ligeruiparentmenuitemid", parentMenuItemID);
  13116. menu.items = $("> .l-menu-inner:first", menu);
  13117. menu.appendTo('body');
  13118. if (p.shadow)
  13119. {
  13120. menu.shadow = $('<div class="l-menu-shadow"></div>').insertAfter(menu);
  13121. g.updateShadow(menu);
  13122. }
  13123. menu.hover(null, function ()
  13124. {
  13125. if (!menu.showedSubMenu)
  13126. $("> .l-menu-over:first", menu).css({ top: -24 });
  13127. });
  13128. if (parentMenuItemID)
  13129. g.menus[parentMenuItemID] = menu;
  13130. else
  13131. g.menus[0] = menu;
  13132. return menu;
  13133. }
  13134. });
  13135. //旧写法保留
  13136. $.ligerui.controls.Menu.prototype.setEnable = $.ligerui.controls.Menu.prototype.setEnabled;
  13137. $.ligerui.controls.Menu.prototype.setDisable = $.ligerui.controls.Menu.prototype.setDisabled;
  13138. })(jQuery);/**
  13139. * jQuery ligerUI 1.2.4
  13140. *
  13141. * http://ligerui.com
  13142. *
  13143. * Author daomi 2014 [ gd_star@163.com ]
  13144. *
  13145. */
  13146. (function ($)
  13147. {
  13148. $.fn.ligerMenuBar = function (options)
  13149. {
  13150. return $.ligerui.run.call(this, "ligerMenuBar", arguments);
  13151. };
  13152. $.fn.ligerGetMenuBarManager = function ()
  13153. {
  13154. return $.ligerui.run.call(this, "ligerGetMenuBarManager", arguments);
  13155. };
  13156. $.ligerDefaults.MenuBar = {};
  13157. $.ligerMethos.MenuBar = {};
  13158. $.ligerui.controls.MenuBar = function (element, options)
  13159. {
  13160. $.ligerui.controls.MenuBar.base.constructor.call(this, element, options);
  13161. };
  13162. $.ligerui.controls.MenuBar.ligerExtend($.ligerui.core.UIComponent, {
  13163. __getType: function ()
  13164. {
  13165. return 'MenuBar';
  13166. },
  13167. __idPrev: function ()
  13168. {
  13169. return 'MenuBar';
  13170. },
  13171. _extendMethods: function ()
  13172. {
  13173. return $.ligerMethos.MenuBar;
  13174. },
  13175. _render: function ()
  13176. {
  13177. var g = this, p = this.options;
  13178. g.menubar = $(this.element);
  13179. if (!g.menubar.hasClass("l-menubar")) g.menubar.addClass("l-menubar");
  13180. if (p && p.items)
  13181. {
  13182. $(p.items).each(function (i, item)
  13183. {
  13184. g.addItem(item);
  13185. });
  13186. }
  13187. $(document).click(function ()
  13188. {
  13189. $(".l-panel-btn-selected", g.menubar).removeClass("l-panel-btn-selected");
  13190. });
  13191. g.set(p);
  13192. },
  13193. addItem: function (item)
  13194. {
  13195. var g = this, p = this.options;
  13196. var ditem = $('<div class="l-menubar-item l-panel-btn"><span></span><div class="l-panel-btn-l"></div><div class="l-panel-btn-r"></div><div class="l-menubar-item-down"></div></div>');
  13197. g.menubar.append(ditem);
  13198. item.id && ditem.attr("menubarid", item.id);
  13199. item.text && $("span:first", ditem).html(item.text);
  13200. item.disable && ditem.addClass("l-menubar-item-disable");
  13201. item.click && ditem.click(function () { item.click(item); });
  13202. if (item.menu)
  13203. {
  13204. var menu = $.ligerMenu(item.menu);
  13205. ditem.hover(function ()
  13206. {
  13207. g.actionMenu && g.actionMenu.hide();
  13208. var left = $(this).offset().left;
  13209. var top = $(this).offset().top + $(this).height();
  13210. menu.show({ top: top, left: left });
  13211. g.actionMenu = menu;
  13212. $(this).addClass("l-panel-btn-over l-panel-btn-selected").siblings(".l-menubar-item").removeClass("l-panel-btn-selected");
  13213. }, function ()
  13214. {
  13215. $(this).removeClass("l-panel-btn-over");
  13216. });
  13217. }
  13218. else
  13219. {
  13220. ditem.hover(function ()
  13221. {
  13222. $(this).addClass("l-panel-btn-over");
  13223. }, function ()
  13224. {
  13225. $(this).removeClass("l-panel-btn-over");
  13226. });
  13227. $(".l-menubar-item-down", ditem).remove();
  13228. }
  13229. }
  13230. });
  13231. })(jQuery);/**
  13232. * jQuery ligerUI 1.2.4
  13233. *
  13234. * http://ligerui.com
  13235. *
  13236. * Author daomi 2014 [ gd_star@163.com ]
  13237. *
  13238. */
  13239. (function ($)
  13240. {
  13241. $.ligerMessageBox = function (options)
  13242. {
  13243. return $.ligerui.run.call(null, "ligerMessageBox", arguments, { isStatic: true });
  13244. };
  13245. $.ligerDefaults.MessageBox = {
  13246. isDrag: true
  13247. };
  13248. $.ligerMethos.MessageBox = {};
  13249. $.ligerui.controls.MessageBox = function (options)
  13250. {
  13251. $.ligerui.controls.MessageBox.base.constructor.call(this, null, options);
  13252. };
  13253. $.ligerui.controls.MessageBox.ligerExtend($.ligerui.core.UIComponent, {
  13254. __getType: function ()
  13255. {
  13256. return 'MessageBox';
  13257. },
  13258. __idPrev: function ()
  13259. {
  13260. return 'MessageBox';
  13261. },
  13262. _extendMethods: function ()
  13263. {
  13264. return $.ligerMethos.MessageBox;
  13265. },
  13266. _render: function ()
  13267. {
  13268. var g = this, p = this.options;
  13269. var messageBoxHTML = "";
  13270. messageBoxHTML += '<div class="l-messagebox">';
  13271. messageBoxHTML += ' <div class="l-messagebox-lt"></div><div class="l-messagebox-rt"></div>';
  13272. messageBoxHTML += ' <div class="l-messagebox-l"></div><div class="l-messagebox-r"></div> ';
  13273. messageBoxHTML += ' <div class="l-messagebox-image"></div>';
  13274. messageBoxHTML += ' <div class="l-messagebox-title">';
  13275. messageBoxHTML += ' <div class="l-messagebox-title-inner"></div>';
  13276. messageBoxHTML += ' <div class="l-messagebox-close"></div>';
  13277. messageBoxHTML += ' </div>';
  13278. messageBoxHTML += ' <div class="l-messagebox-content">';
  13279. messageBoxHTML += ' </div>';
  13280. messageBoxHTML += ' <div class="l-messagebox-buttons"><div class="l-messagebox-buttons-inner">';
  13281. messageBoxHTML += ' </div></div>';
  13282. messageBoxHTML += ' </div>';
  13283. g.messageBox = $(messageBoxHTML);
  13284. $('body').append(g.messageBox);
  13285. g.messageBox.close = function ()
  13286. {
  13287. g._removeWindowMask();
  13288. g.messageBox.remove();
  13289. };
  13290. //设置参数属性
  13291. p.width && g.messageBox.width(p.width);
  13292. p.title && $(".l-messagebox-title-inner", g.messageBox).html(p.title);
  13293. p.content && $(".l-messagebox-content", g.messageBox).html(p.content);
  13294. if (p.buttons)
  13295. {
  13296. $(p.buttons).each(function (i, item)
  13297. {
  13298. var btn = $('<div class="l-messagebox-btn"><div class="l-messagebox-btn-l"></div><div class="l-messagebox-btn-r"></div><div class="l-messagebox-btn-inner"></div></div>');
  13299. $(".l-messagebox-btn-inner", btn).html(item.text);
  13300. $(".l-messagebox-buttons-inner", g.messageBox).append(btn);
  13301. item.width && btn.width(item.width);
  13302. item.onclick && btn.click(function () { item.onclick(item, i, g.messageBox) });
  13303. });
  13304. $(".l-messagebox-buttons-inner", g.messageBox).append("<div class='l-clear'></div>");
  13305. }
  13306. var boxWidth = g.messageBox.width();
  13307. var sumBtnWidth = 0;
  13308. $(".l-messagebox-buttons-inner .l-messagebox-btn", g.messageBox).each(function ()
  13309. {
  13310. sumBtnWidth += $(this).width();
  13311. });
  13312. $(".l-messagebox-buttons-inner", g.messageBox).css({ marginLeft: parseInt((boxWidth - sumBtnWidth) * 0.5) });
  13313. //设置背景、拖动支持 和设置图片
  13314. g._applyWindowMask();
  13315. g._applyDrag();
  13316. g._setImage();
  13317. //位置初始化
  13318. var left = 0;
  13319. var top = 0;
  13320. var width = p.width || g.messageBox.width();
  13321. if (p.left != null) left = p.left;
  13322. else p.left = left = 0.5 * ($(window).width() - width);
  13323. if (p.top != null) top = p.top;
  13324. else p.top = top = 0.5 * ($(window).height() - g.messageBox.height()) + $(window).scrollTop() - 10;
  13325. if (left < 0) p.left = left = 0;
  13326. if (top < 0) p.top = top = 0;
  13327. g.messageBox.css({ left: left, top: top });
  13328. //设置事件
  13329. $(".l-messagebox-btn", g.messageBox).hover(function ()
  13330. {
  13331. $(this).addClass("l-messagebox-btn-over");
  13332. }, function ()
  13333. {
  13334. $(this).removeClass("l-messagebox-btn-over");
  13335. });
  13336. $(".l-messagebox-close", g.messageBox).hover(function ()
  13337. {
  13338. $(this).addClass("l-messagebox-close-over");
  13339. }, function ()
  13340. {
  13341. $(this).removeClass("l-messagebox-close-over");
  13342. }).click(function ()
  13343. {
  13344. g.messageBox.close();
  13345. });
  13346. g.set(p);
  13347. },
  13348. close: function ()
  13349. {
  13350. var g = this, p = this.options;
  13351. this.g._removeWindowMask();
  13352. this.messageBox.remove();
  13353. },
  13354. _applyWindowMask: function ()
  13355. {
  13356. var g = this, p = this.options;
  13357. $(".l-window-mask").remove();
  13358. $("<div class='l-window-mask' style='display: block;'></div>").appendTo($("body"));
  13359. },
  13360. _removeWindowMask: function ()
  13361. {
  13362. var g = this, p = this.options;
  13363. $(".l-window-mask").remove();
  13364. },
  13365. _applyDrag: function ()
  13366. {
  13367. var g = this, p = this.options;
  13368. if (p.isDrag && $.fn.ligerDrag)
  13369. g.messageBox.ligerDrag({ handler: '.l-messagebox-title-inner', animate: false });
  13370. },
  13371. _setImage: function ()
  13372. {
  13373. var g = this, p = this.options;
  13374. if (p.type)
  13375. {
  13376. if (p.type == 'success' || p.type == 'donne')
  13377. {
  13378. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-donne").show();
  13379. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  13380. }
  13381. else if (p.type == 'error')
  13382. {
  13383. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-error").show();
  13384. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  13385. }
  13386. else if (p.type == 'warn')
  13387. {
  13388. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-warn").show();
  13389. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  13390. }
  13391. else if (p.type == 'question')
  13392. {
  13393. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-question").show();
  13394. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 40 });
  13395. }
  13396. }
  13397. }
  13398. });
  13399. $.ligerMessageBox.show = function (p)
  13400. {
  13401. return $.ligerMessageBox(p);
  13402. };
  13403. $.ligerMessageBox.alert = function (title, content, type, onBtnClick)
  13404. {
  13405. title = title || "";
  13406. content = content || title;
  13407. var onclick = function (item, index, messageBox)
  13408. {
  13409. messageBox.close();
  13410. if (onBtnClick)
  13411. onBtnClick(item, index, messageBox);
  13412. };
  13413. p = {
  13414. title: title,
  13415. content: content,
  13416. buttons: [{ text: '确定', onclick: onclick}]
  13417. };
  13418. if (type) p.type = type;
  13419. return $.ligerMessageBox(p);
  13420. };
  13421. $.ligerMessageBox.confirm = function (title, content, callback)
  13422. {
  13423. var onclick = function (item, index, messageBox)
  13424. {
  13425. messageBox.close();
  13426. if (callback)
  13427. {
  13428. callback(index == 0);
  13429. }
  13430. };
  13431. p = {
  13432. type: 'question',
  13433. title: title,
  13434. content: content,
  13435. buttons: [{ text: '是', onclick: onclick }, { text: '否', onclick: onclick}]
  13436. };
  13437. return $.ligerMessageBox(p);
  13438. };
  13439. $.ligerMessageBox.success = function (title, content, onBtnClick)
  13440. {
  13441. return $.ligerMessageBox.alert(title, content, 'success', onBtnClick);
  13442. };
  13443. $.ligerMessageBox.error = function (title, content, onBtnClick)
  13444. {
  13445. return $.ligerMessageBox.alert(title, content, 'error', onBtnClick);
  13446. };
  13447. $.ligerMessageBox.warn = function (title, content, onBtnClick)
  13448. {
  13449. return $.ligerMessageBox.alert(title, content, 'warn', onBtnClick);
  13450. };
  13451. $.ligerMessageBox.question = function (title, content)
  13452. {
  13453. return $.ligerMessageBox.alert(title, content, 'question');
  13454. };
  13455. })(jQuery);/**
  13456. * jQuery ligerUI 1.2.4
  13457. *
  13458. * http://ligerui.com
  13459. *
  13460. * Author daomi 2014 [ gd_star@163.com ]
  13461. *
  13462. */
  13463. (function ($)
  13464. {
  13465. $.fn.ligerPanel = function (options)
  13466. {
  13467. return $.ligerui.run.call(this, "ligerPanel", arguments);
  13468. };
  13469. $.ligerDefaults.Panel = {
  13470. width: 400,
  13471. height : 300,
  13472. title: 'Panel',
  13473. content: null, //内容
  13474. url: null, //远程内容Url
  13475. frameName: null, //创建iframe时 作为iframe的name和id
  13476. data: null, //可用于传递到iframe的数据
  13477. showClose: false, //是否显示关闭按钮
  13478. showToggle: true, //是否显示收缩按钮
  13479. icon: null, //左侧按钮
  13480. onClose:null, //关闭前事件
  13481. onClosed:null, //关闭事件
  13482. onLoaded:null //url模式 加载完事件
  13483. };
  13484. $.ligerMethos.Panel = {};
  13485. $.ligerui.controls.Panel = function (element, options)
  13486. {
  13487. $.ligerui.controls.Panel.base.constructor.call(this, element, options);
  13488. };
  13489. $.ligerui.controls.Panel.ligerExtend($.ligerui.core.UIComponent, {
  13490. __getType: function ()
  13491. {
  13492. return 'Panel';
  13493. },
  13494. __idPrev: function ()
  13495. {
  13496. return 'Panel';
  13497. },
  13498. _extendMethods: function ()
  13499. {
  13500. return $.ligerMethos.Panel;
  13501. },
  13502. _init: function ()
  13503. {
  13504. var g = this, p = this.options;
  13505. $.ligerui.controls.Panel.base._init.call(this);
  13506. p.content = p.content || $(g.element).html();
  13507. },
  13508. _render: function ()
  13509. {
  13510. var g = this, p = this.options;
  13511. g.panel = $(g.element).addClass("l-panel").html("");
  13512. g.panel.append('<div class="l-panel-header"><span></span><div class="icons"></div></div><div class="l-panel-content"></div>');
  13513. g.set(p);
  13514. g.panel.bind("click.panel", function (e)
  13515. {
  13516. var obj = (e.target || e.srcElement), jobj = $(obj);
  13517. if (jobj.hasClass("l-panel-header-toggle"))
  13518. {
  13519. g.toggle();
  13520. } else if (jobj.hasClass("l-panel-header-close"))
  13521. {
  13522. g.close();
  13523. }
  13524. });
  13525. },
  13526. _setChildren: function(children)
  13527. {
  13528. var g = this, p = this.options;
  13529. var tagNames = {
  13530. input : ["textbox", "combobox", "select"]
  13531. };
  13532. var PluginNameMatchs =
  13533. {
  13534. "grid" : "ligerGrid",
  13535. "toolbar":"ligerToolBar",
  13536. "tree":"ligerTree",
  13537. "form":"ligerForm",
  13538. "menu":"ligerMenu",
  13539. "menubar":"ligerMenuBar",
  13540. "portal":"ligerPortal",
  13541. "combobox":"ligerComboBox",
  13542. "textbox":"ligerTextBox",
  13543. "spinner":"ligerSpinner",
  13544. "listbox":"ligerListBox",
  13545. "checkbox":"ligerCheckBox",
  13546. "radio":"ligerRadio",
  13547. "checkboxlist":"ligerCheckBoxList",
  13548. "radiolist":"ligerRadioList",
  13549. "popupedit":"ligerPopupEdit",
  13550. "button":"ligerButton",
  13551. "dateeditor":"ligerDateEditor",
  13552. "dialog":"ligerDialog",
  13553. "panel":"ligerPanel",
  13554. "layout":"ligerLayout",
  13555. "accordion":"ligerAccordion",
  13556. "tab":"ligerTab"
  13557. };
  13558. if (!children || !children.length) return;
  13559. for (var i = 0; i < children.length; i++)
  13560. {
  13561. var child = children[i], type = child.type;
  13562. var tagName = tagNames[type] || "div";
  13563. var plugin = PluginNameMatchs[type];
  13564. if (!plugin) continue;
  13565. var element = document.createElement(tagName);
  13566. g.panel.find(".l-panel-content").append(element);
  13567. var childOp = $.extend({},child);
  13568. childOp.type = null;
  13569. $(element)[plugin](childOp);
  13570. }
  13571. },
  13572. collapse: function ()
  13573. {
  13574. var g = this, p = this.options;
  13575. var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
  13576. if (toggle.hasClass("l-panel-header-toggle-hide")) return;
  13577. g.toggle();
  13578. },
  13579. expand: function ()
  13580. {
  13581. var g = this, p = this.options;
  13582. var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
  13583. if (!toggle.hasClass("l-panel-header-toggle-hide")) return;
  13584. g.toggle();
  13585. },
  13586. toggle : function()
  13587. {
  13588. var g = this, p = this.options;
  13589. var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
  13590. if (toggle.hasClass("l-panel-header-toggle-hide"))
  13591. {
  13592. toggle.removeClass("l-panel-header-toggle-hide");
  13593. } else
  13594. {
  13595. toggle.addClass("l-panel-header-toggle-hide");
  13596. }
  13597. g.panel.find(".l-panel-content:first").toggle("normal");
  13598. },
  13599. _setShowToggle:function(v)
  13600. {
  13601. var g = this, p = this.options;
  13602. var header = g.panel.find(".l-panel-header:first");
  13603. if (v)
  13604. {
  13605. var toggle = $("<div class='l-panel-header-toggle'></div>");
  13606. toggle.appendTo(header.find(".icons"));
  13607. } else
  13608. {
  13609. header.find(".l-panel-header-toggle").remove();
  13610. }
  13611. },
  13612. _setContent: function (v)
  13613. {
  13614. var g = this, p = this.options;
  13615. var content = g.panel.find(".l-panel-content:first");
  13616. if (v)
  13617. {
  13618. content.html(v);
  13619. }
  13620. },
  13621. _setUrl: function (url)
  13622. {
  13623. var g = this, p = this.options;
  13624. var content = g.panel.find(".l-panel-content:first");
  13625. if (url)
  13626. {
  13627. g.jiframe = $("<iframe frameborder='0'></iframe>");
  13628. var framename = p.frameName ? p.frameName : "ligerpanel" + new Date().getTime();
  13629. g.jiframe.attr("name", framename);
  13630. g.jiframe.attr("id", framename);
  13631. content.prepend(g.jiframe);
  13632. setTimeout(function ()
  13633. {
  13634. if (content.find(".l-panel-loading:first").length == 0)
  13635. content.append("<div class='l-panel-loading' style='display:block;'></div>");
  13636. var iframeloading = $(".l-panel-loading:first", content);
  13637. g.jiframe[0].panel = g;//增加窗口对panel对象的引用
  13638. /*
  13639. 可以在子窗口这样使用:
  13640. var panel = frameElement.panel;
  13641. var panelData = dialog.get('data');//获取data参数
  13642. panel.set('title','新标题'); //设置标题
  13643. panel.close();//关闭dialog
  13644. */
  13645. g.jiframe.attr("src", p.url).bind('load.panel', function ()
  13646. {
  13647. iframeloading.hide();
  13648. g.trigger('loaded');
  13649. });
  13650. g.frame = window.frames[g.jiframe.attr("name")];
  13651. }, 0);
  13652. }
  13653. },
  13654. _setShowClose: function (v)
  13655. {
  13656. var g = this, p = this.options;
  13657. var header = g.panel.find(".l-panel-header:first");
  13658. if (v)
  13659. {
  13660. var btn = $("<div class='l-panel-header-close'></div>");
  13661. btn.appendTo(header.find(".icons"));
  13662. } else
  13663. {
  13664. header.find(".l-panel-header-close").remove();
  13665. }
  13666. },
  13667. close:function()
  13668. {
  13669. var g = this, p = this.options;
  13670. if (g.trigger('close') == false) return;
  13671. g.panel.remove();
  13672. g.trigger('closed');
  13673. },
  13674. show: function ()
  13675. {
  13676. this.panel.show();
  13677. },
  13678. _setIcon : function(url)
  13679. {
  13680. var g = this;
  13681. if (!url)
  13682. {
  13683. g.panel.removeClass("l-panel-hasicon");
  13684. g.panel.find('img').remove();
  13685. } else
  13686. {
  13687. g.panel.addClass("l-panel-hasicon");
  13688. g.panel.append('<img src="' + url + '" />');
  13689. }
  13690. },
  13691. _setWidth: function (value)
  13692. {
  13693. value && this.panel.width(value);
  13694. },
  13695. _setHeight: function (value)
  13696. {
  13697. var g = this, p = this.options;
  13698. var header = g.panel.find(".l-panel-header:first");
  13699. this.panel.find(".l-panel-content:first").height(value - header.height());
  13700. },
  13701. _setTitle: function (value)
  13702. {
  13703. this.panel.find(".l-panel-header span:first").text(value);
  13704. }
  13705. });
  13706. })(jQuery);/**
  13707. * jQuery ligerUI 1.2.4
  13708. *
  13709. * http://ligerui.com
  13710. *
  13711. * Author daomi 2014 [ gd_star@163.com ]
  13712. *
  13713. */
  13714. (function ($)
  13715. {
  13716. $.fn.ligerPopupEdit = function (options)
  13717. {
  13718. return $.ligerui.run.call(this, "ligerPopupEdit", arguments);
  13719. };
  13720. $.fn.ligerGetPopupEditManager = function ()
  13721. {
  13722. return $.ligerui.run.call(this, "ligerGetPopupEditManager", arguments);
  13723. };
  13724. $.ligerDefaults.PopupEdit = {
  13725. valueFieldID: null, //生成的value input:hidden 字段名
  13726. css: null, //附加css
  13727. onButtonClick: null, //利用这个参数来调用其他函数,比如打开一个新窗口来选择值
  13728. nullText: null, //不能为空时的提示
  13729. disabled: false, //是否无效
  13730. cancelable: true,
  13731. width: 200,
  13732. heigth: null,
  13733. render: null, //显示函数
  13734. split: ';',
  13735. grid: null, //在 可查询、可分页列表的弹出框 中选择值
  13736. condition: null, // 条件字段,比如 {fields:[{ name : 'Title' ,op : 'like', vt : 'string',type:'text' }]}
  13737. valueField: 'id', //值字段
  13738. textField: 'text', //显示字段
  13739. parms: null,
  13740. onSelect: null, //选择事件,可阻止
  13741. onSelected: null, //选择后事件
  13742. valueFieldCssClass : null
  13743. };
  13744. //扩展方法
  13745. $.ligerMethos.PopupEdit = $.ligerMethos.PopupEdit || {};
  13746. $.ligerui.controls.PopupEdit = function (element, options)
  13747. {
  13748. $.ligerui.controls.PopupEdit.base.constructor.call(this, element, options);
  13749. };
  13750. $.ligerui.controls.PopupEdit.ligerExtend($.ligerui.controls.Input, {
  13751. __getType: function ()
  13752. {
  13753. return 'PopupEdit';
  13754. },
  13755. _extendMethods: function ()
  13756. {
  13757. return $.ligerMethos.PopupEdit;
  13758. },
  13759. _init: function ()
  13760. {
  13761. $.ligerui.controls.PopupEdit.base._init.call(this);
  13762. },
  13763. _render: function ()
  13764. {
  13765. var g = this, p = this.options;
  13766. g.inputText = null;
  13767. //文本框初始化
  13768. if (this.element.tagName.toLowerCase() == "input")
  13769. {
  13770. this.element.readOnly = true;
  13771. g.inputText = $(this.element);
  13772. g.textFieldID = this.element.id;
  13773. }
  13774. if (g.inputText[0].name == undefined) g.inputText[0].name = g.textFieldID;
  13775. //隐藏域初始化
  13776. g.valueField = null;
  13777. if (p.valueFieldID)
  13778. {
  13779. g.valueField = $("#" + p.valueFieldID + ":input");
  13780. if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
  13781. g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
  13782. }
  13783. else
  13784. {
  13785. g.valueField = $('<input type="hidden"/>');
  13786. g.valueField[0].id = g.valueField[0].name = g.textFieldID + "_val";
  13787. }
  13788. if (g.valueField[0].name == undefined) g.valueField[0].name = g.valueField[0].id;
  13789. if (p.valueFieldCssClass)
  13790. {
  13791. g.valueField.addClass(p.valueFieldCssClass);
  13792. }
  13793. //开关
  13794. g.link = $('<div class="l-trigger"><div class="l-trigger-icon"></div></div>');
  13795. //外层
  13796. g.wrapper = g.inputText.wrap('<div class="l-text l-text-popup"></div>').parent();
  13797. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  13798. g.wrapper.append(g.link);
  13799. g.wrapper.append(g.valueField);
  13800. g.inputText.addClass("l-text-field");
  13801. //开关 事件
  13802. g.link.hover(function ()
  13803. {
  13804. if (p.disabled) return;
  13805. this.className = "l-trigger-hover";
  13806. }, function ()
  13807. {
  13808. if (p.disabled) return;
  13809. this.className = "l-trigger";
  13810. }).mousedown(function ()
  13811. {
  13812. if (p.disabled) return;
  13813. this.className = "l-trigger-pressed";
  13814. }).mouseup(function ()
  13815. {
  13816. if (p.disabled) return;
  13817. this.className = "l-trigger-hover";
  13818. }).click(function ()
  13819. {
  13820. if (p.disabled) return;
  13821. if (g.trigger('buttonClick') == false) return false;
  13822. });
  13823. g.inputText.click(function ()
  13824. {
  13825. if (p.disabled) return;
  13826. }).blur(function ()
  13827. {
  13828. if (p.disabled) return;
  13829. g.wrapper.removeClass("l-text-focus");
  13830. }).focus(function ()
  13831. {
  13832. if (p.disabled) return;
  13833. g.wrapper.addClass("l-text-focus");
  13834. });
  13835. g.wrapper.hover(function ()
  13836. {
  13837. if (p.disabled) return;
  13838. g.wrapper.addClass("l-text-over");
  13839. }, function ()
  13840. {
  13841. if (p.disabled) return;
  13842. g.wrapper.removeClass("l-text-over");
  13843. });
  13844. g.set(p);
  13845. },
  13846. destroy: function ()
  13847. {
  13848. if (this.wrapper) this.wrapper.remove();
  13849. this.options = null;
  13850. $.ligerui.remove(this);
  13851. },
  13852. clear: function ()
  13853. {
  13854. var g = this, p = this.options;
  13855. g.inputText.val("");
  13856. g.valueField.val("");
  13857. },
  13858. _setCss: function (css)
  13859. {
  13860. if (css)
  13861. {
  13862. this.wrapper.addClass(css);
  13863. }
  13864. },
  13865. //取消选择
  13866. _setCancelable: function (value)
  13867. {
  13868. var g = this, p = this.options;
  13869. if (!value && g.unselect)
  13870. {
  13871. g.unselect.remove();
  13872. g.unselect = null;
  13873. }
  13874. if (!value && !g.unselect) return;
  13875. g.unselect = $('<div class="l-trigger l-trigger-cancel"><div class="l-trigger-icon"></div></div>').hide();
  13876. g.wrapper.hover(function ()
  13877. {
  13878. g.unselect.show();
  13879. }, function ()
  13880. {
  13881. g.unselect.hide();
  13882. })
  13883. if (!p.disabled && p.cancelable)
  13884. {
  13885. g.wrapper.append(g.unselect);
  13886. }
  13887. g.unselect.hover(function ()
  13888. {
  13889. this.className = "l-trigger-hover l-trigger-cancel";
  13890. }, function ()
  13891. {
  13892. this.className = "l-trigger l-trigger-cancel";
  13893. }).click(function ()
  13894. {
  13895. g.clear();
  13896. });
  13897. },
  13898. _setDisabled: function (value)
  13899. {
  13900. if (value)
  13901. {
  13902. this.wrapper.addClass('l-text-disabled');
  13903. } else
  13904. {
  13905. this.wrapper.removeClass('l-text-disabled');
  13906. }
  13907. },
  13908. _setWidth: function (value)
  13909. {
  13910. var g = this;
  13911. if (value > 20)
  13912. {
  13913. g.wrapper.css({ width: value });
  13914. g.inputText.css({ width: value - 20 });
  13915. }
  13916. },
  13917. _setHeight: function (value)
  13918. {
  13919. var g = this;
  13920. if (value > 10)
  13921. {
  13922. g.wrapper.height(value);
  13923. g.inputText.height(value - 2);
  13924. }
  13925. },
  13926. getData : function()
  13927. {
  13928. var g = this, p = this.options;
  13929. var data = [];
  13930. var v = $(g.valueField).val(), t = $(g.inputText).val();
  13931. var values = v ? v.split(p.split) : null, texts = t ? t.split(p.split) : null;
  13932. $(values).each(function (i)
  13933. {
  13934. var o = {};
  13935. o[p.textField] = texts[i];
  13936. o[p.valueField] = values[i];
  13937. data.push(o);
  13938. });
  13939. return data;
  13940. },
  13941. _getText: function ()
  13942. {
  13943. return $(this.inputText).val();
  13944. },
  13945. _getValue: function ()
  13946. {
  13947. return $(this.valueField).val();
  13948. },
  13949. getValue: function ()
  13950. {
  13951. return this._getValue();
  13952. },
  13953. getText: function ()
  13954. {
  13955. return this._getText();
  13956. },
  13957. //设置值到 隐藏域
  13958. setValue: function (value, text)
  13959. {
  13960. var g = this, p = this.options;
  13961. if (arguments.length >= 2)
  13962. {
  13963. g.setValue(value);
  13964. g.setText(text);
  13965. return;
  13966. }
  13967. g.valueField.val(value);
  13968. },
  13969. //设置值到 文本框
  13970. setText: function (text)
  13971. {
  13972. var g = this, p = this.options;
  13973. if (p.render)
  13974. {
  13975. g.inputText.val(p.render(text));
  13976. }
  13977. else
  13978. {
  13979. g.inputText.val(text);
  13980. }
  13981. },
  13982. addValue: function (value, text)
  13983. {
  13984. var g = this, p = this.options;
  13985. if (!value) return;
  13986. var v = g.getValue(), t = g.getText();
  13987. if (!v)
  13988. {
  13989. g.setValue(value);
  13990. g.setText(text);
  13991. } else
  13992. {
  13993. var arrV = [], arrT = [], old = v.split(p.split), value = value.split(p.split), text = text.split(p.split);
  13994. for (var i = 0, l = value.length; i < l; i++)
  13995. {
  13996. if ($.inArray(value[i], old) == -1)
  13997. {
  13998. arrV.push(value[i]);
  13999. arrT.push(text[i]);
  14000. }
  14001. }
  14002. if (arrV.length)
  14003. {
  14004. g.setValue(v + p.split + arrV.join(p.split));
  14005. g.setText(t + p.split + arrT.join(p.split));
  14006. }
  14007. }
  14008. },
  14009. removeValue: function (value, text)
  14010. {
  14011. var g = this, p = this.options;
  14012. if (!value) return;
  14013. var v = g.getValue(), t = g.getText();
  14014. if (!v) return;
  14015. var oldV = v.split(p.split), oldT = t.split(p.split), value = value.split(p.split);
  14016. for (var i = 0, index = -1, l = value.length; i < l; i++)
  14017. {
  14018. if ((index = $.inArray(value[i], oldV)) != -1)
  14019. {
  14020. oldV.splice(index, 1);
  14021. oldT.splice(index, 1);
  14022. }
  14023. }
  14024. g.setValue(oldV.join(p.split));
  14025. g.setText(oldT.join(p.split));
  14026. },
  14027. _setGrid: function (value)
  14028. {
  14029. if (!value) return;
  14030. var g = this, p = this.options;
  14031. var gridOptions = $.extend({
  14032. parms: p.parms
  14033. }, p.grid);
  14034. this.bind('buttonClick', function ()
  14035. {
  14036. if (!g.popupFn)
  14037. {
  14038. var options = {
  14039. grid: gridOptions,
  14040. condition: p.condition,
  14041. valueField: p.valueField,
  14042. textField: p.textField,
  14043. split: p.split,
  14044. lastSelected : g.getData(),
  14045. onSelect: function (e)
  14046. {
  14047. if (g.trigger('select', e) == false) return;
  14048. if (p.grid.checkbox)
  14049. {
  14050. g.addValue(e.value, e.text);
  14051. g.removeValue(e.remvoeValue, e.remvoeText);
  14052. } else
  14053. {
  14054. g.setValue(e.value);
  14055. g.setText(e.text);
  14056. }
  14057. g.trigger('selected', e);
  14058. },
  14059. selectInit: function (rowdata)
  14060. {
  14061. var value = g.getValue();
  14062. if (!value) return false;
  14063. if (!p.valueField || !rowdata[p.valueField]) return false;
  14064. return $.inArray(rowdata[p.valueField].toString(), value.split(p.split)) != -1;
  14065. }
  14066. };
  14067. g.popupFn = $.ligerui.getPopupFn(options);
  14068. }
  14069. g.popupFn();
  14070. });
  14071. }
  14072. });
  14073. //创建一个可查询、可分页列表的选取弹出框 需要dialog,grid,form等插件的支持
  14074. $.ligerui.getPopupFn = function (p)
  14075. {
  14076. p = $.extend({
  14077. title: '选择数据', //窗口标题
  14078. width: 700, //窗口宽度
  14079. height: 320, //列表高度
  14080. top: null,
  14081. left: null,
  14082. split: ';',
  14083. valueField: null, //接收表格的value字段名
  14084. textField: null, //接收表格的text字段名
  14085. grid: null, //表格的参数 同ligerGrid
  14086. condition: null, //搜索表单的参数 同ligerForm
  14087. onSelect: function (p) { }, //选取函数
  14088. selectInit: function (rowdata) { return false } //选择初始化
  14089. }, p);
  14090. if (!p.grid) return;
  14091. var win, grid, condition, lastSelected = p.lastSelected || [];
  14092. return function ()
  14093. {
  14094. show();
  14095. return false;
  14096. };
  14097. function show()
  14098. {
  14099. function getGridHeight(height)
  14100. {
  14101. height = height || p.height;
  14102. height -= conditionPanel.height();
  14103. return height;
  14104. }
  14105. if (win)
  14106. {
  14107. grid._showData();
  14108. win.show();
  14109. grid.refreshSize();
  14110. lastSelected = grid.selected.concat();
  14111. return;
  14112. }
  14113. var panle = $("<div></div>");
  14114. var conditionPanel = $("<div></div>");
  14115. var gridPanel = $("<div></div>");
  14116. panle.append(conditionPanel).append(gridPanel);
  14117. if (p.condition)
  14118. {
  14119. var conditionParm = $.extend({
  14120. labelWidth: 60,
  14121. space: 20
  14122. }, p.condition);
  14123. condition = conditionPanel.ligerForm(conditionParm);
  14124. } else
  14125. {
  14126. conditionPanel.remove();
  14127. }
  14128. var gridParm = $.extend({
  14129. columnWidth: 120,
  14130. alternatingRow: false,
  14131. frozen: true,
  14132. rownumbers: true
  14133. }, p.grid, {
  14134. width: "100%",
  14135. height: getGridHeight(),
  14136. isChecked: p.selectInit,
  14137. isSelected: p.selectInit,
  14138. inWindow: false
  14139. });
  14140. //grid
  14141. grid = gridPanel.ligerGrid(gridParm);
  14142. //搜索按钮
  14143. if (p.condition)
  14144. {
  14145. var containerBtn1 = $('<li style="margin-right:9px"><div></div></li>');
  14146. $("ul:first", conditionPanel).append(containerBtn1).after('<div class="l-clear"></div>');
  14147. $("div", containerBtn1).ligerButton({
  14148. text: '搜索',
  14149. click: function ()
  14150. {
  14151. var rules = $.ligerui.getConditions(conditionPanel);
  14152. grid.setParm('condition', $.ligerui.toJSON(rules));
  14153. grid.reload();
  14154. }
  14155. });
  14156. }
  14157. //dialog
  14158. win = $.ligerDialog.open({
  14159. title: p.title,
  14160. width: p.width,
  14161. height: 'auto',
  14162. top: p.top,
  14163. left: p.left,
  14164. target: panle,
  14165. isResize: true,
  14166. cls: 'l-selectorwin',
  14167. onContentHeightChange: function (height)
  14168. {
  14169. grid.set('height', getGridHeight(height));
  14170. return false;
  14171. },
  14172. onStopResize: function ()
  14173. {
  14174. grid.refreshSize();
  14175. },
  14176. buttons: [
  14177. { text: '选择', onclick: function (item, dialog) { toSelect(); dialog.hide(); } },
  14178. { text: '取消', onclick: function (item, dialog) { dialog.hide(); } }
  14179. ]
  14180. });
  14181. grid.refreshSize();
  14182. }
  14183. function exist(value,data)
  14184. {
  14185. for (var i = 0; data && data[i]; i++)
  14186. {
  14187. var item = data[i];
  14188. if (item[p.valueField] == value) return true;
  14189. }
  14190. return false;
  14191. }
  14192. function toSelect()
  14193. {
  14194. var selected = grid.selected || [];
  14195. var value = [], text = [], data = [];
  14196. $(selected).each(function (i, rowdata)
  14197. {
  14198. p.valueField && value.push(rowdata[p.valueField]);
  14199. p.textField && text.push(rowdata[p.textField]);
  14200. var o = $.extend(true, {}, this);
  14201. grid.formatRecord(o, true);
  14202. data.push(o);
  14203. });
  14204. var unSelected = [];
  14205. $(lastSelected).each(function (i,item)
  14206. {
  14207. if (!exist(item[p.valueField], selected) && exist(item[p.valueField], grid.rows))
  14208. {
  14209. unSelected.push(item);
  14210. }
  14211. });
  14212. var removeValue = [], removeText = [], removeData = [];
  14213. $(unSelected).each(function (i, rowdata)
  14214. {
  14215. p.valueField && removeValue.push(rowdata[p.valueField]);
  14216. p.textField && removeText.push(rowdata[p.textField]);
  14217. var o = $.extend(true, {}, this);
  14218. grid.formatRecord(o, true);
  14219. removeData.push(o);
  14220. });
  14221. p.onSelect({
  14222. value: value.join(p.split),
  14223. text: text.join(p.split),
  14224. data: data,
  14225. remvoeValue: removeValue.join(p.split),
  14226. remvoeText: removeText.join(p.split),
  14227. removeData: removeData
  14228. });
  14229. }
  14230. };
  14231. })(jQuery);/**
  14232. * jQuery ligerUI 1.2.4
  14233. *
  14234. * http://ligerui.com
  14235. *
  14236. * Author daomi 2014 [ gd_star@163.com ]
  14237. *
  14238. */
  14239. (function ($)
  14240. {
  14241. $.fn.ligerPortal = function (options)
  14242. {
  14243. return $.ligerui.run.call(this, "ligerPortal", arguments);
  14244. };
  14245. $.ligerDefaults.Portal = {
  14246. width: null,
  14247. /*行元素:组件允许以纵向方式分割为几块
  14248. 每一块(行)允许自定义N个列(column)
  14249. 每一列允许自定义N个Panel(最小元素)
  14250. rows:[
  14251. {columns:[
  14252. {
  14253. width : '50%',
  14254. panels : [{width:'100%',content:'内容'},{width:'100%',url:@url1}]
  14255. },{
  14256. width : '50%',
  14257. panels : [{width:'100%',url:@url2}]
  14258. }
  14259. ]}
  14260. ]
  14261. */
  14262. rows: null,
  14263. /* 列元素: 组件将认为只存在一个row(块),
  14264. 这一块 允许自定义N个列(column),结构同上
  14265. */
  14266. columns:null,
  14267. url: null, //portal结构定义URL
  14268. method: 'get', //获取数据http方式
  14269. parms: null, //提交到服务器的参数
  14270. draggable: false, //是否允许拖拽
  14271. onLoaded:null //url模式 加载完事件
  14272. };
  14273. $.ligerDefaults.Portal_rows = {
  14274. width: null,
  14275. height: null
  14276. };
  14277. $.ligerDefaults.Portal_columns = {
  14278. width: null,
  14279. height: null
  14280. };
  14281. $.ligerMethos.Portal = {};
  14282. $.ligerui.controls.Portal = function (element, options)
  14283. {
  14284. $.ligerui.controls.Portal.base.constructor.call(this, element, options);
  14285. };
  14286. $.ligerui.controls.Portal.ligerExtend($.ligerui.core.UIComponent, {
  14287. __getType: function ()
  14288. {
  14289. return 'Portal';
  14290. },
  14291. __idPrev: function ()
  14292. {
  14293. return 'Portal';
  14294. },
  14295. _extendMethods: function ()
  14296. {
  14297. return $.ligerMethos.Portal;
  14298. },
  14299. _init: function ()
  14300. {
  14301. var g = this, p = this.options;
  14302. $.ligerui.controls.Portal.base._init.call(this);
  14303. if ($(">div", g.element).length) //如果已经定义了DIV子元素,那么这些元素将会转换为columns,这里暂时保存到tempInitPanels
  14304. {
  14305. p.columns = [];
  14306. $(">div", g.element).each(function (i, jpanel)
  14307. {
  14308. p.columns[i] = {
  14309. panels :[]
  14310. };
  14311. });
  14312. g.tempInitPanels = $("<div></div>");
  14313. $(">div", g.element).appendTo(g.tempInitPanels);
  14314. }
  14315. if (!p.rows && p.columns)
  14316. {
  14317. p.rows = [{
  14318. columns: p.columns
  14319. }];
  14320. }
  14321. },
  14322. _render: function ()
  14323. {
  14324. var g = this, p = this.options;
  14325. g.portal = $(g.element).addClass("l-portal").html("");
  14326. g.set(p);
  14327. },
  14328. _setRows: function (rows)
  14329. {
  14330. var g = this, p = this.options;
  14331. g.rows = [];
  14332. if (rows && rows.length)
  14333. {
  14334. for (var i = 0; i < rows.length; i++)
  14335. {
  14336. var row = rows[i];
  14337. var jrow = $('<div class="l-row"></div>').appendTo(g.portal);
  14338. g.rows[i] = g._renderRow({
  14339. row: row,
  14340. rowIndex: i,
  14341. jrow: jrow
  14342. });
  14343. jrow.append('<div class="l-clear"></div>');
  14344. }
  14345. }
  14346. },
  14347. _renderRow : function(e)
  14348. {
  14349. var row = e.row, rowIndex = e.rowIndex, jrow = e.jrow;
  14350. var g = this, p = this.options;
  14351. var rowObj = {
  14352. element : jrow[0]
  14353. };
  14354. if (row.width) jrow.width(row.width);
  14355. if (row.height) jrow.height(row.height);
  14356. if (row.columns) rowObj.columns = [];
  14357. if (row.columns && row.columns.length)
  14358. {
  14359. for (var i = 0; i < row.columns.length; i++)
  14360. {
  14361. var column = row.columns[i];
  14362. var jcolumn = $('<div class="l-column"></div>').appendTo(jrow);
  14363. rowObj.columns[i] = g._renderColumn({
  14364. column: column,
  14365. columnIndex: i,
  14366. jcolumn: jcolumn,
  14367. rowIndex : rowIndex
  14368. });
  14369. }
  14370. }
  14371. return rowObj;
  14372. },
  14373. remove: function (e)
  14374. {
  14375. var g = this, p = this.options;
  14376. var rowIndex = e.rowIndex, columnIndex = e.columnIndex, index = e.index;
  14377. if (index == null) index = -1;
  14378. if (index >= 0 && g.rows[rowIndex] && g.rows[rowIndex].columns && g.rows[rowIndex].columns[columnIndex] && g.rows[rowIndex].columns[columnIndex].panels)
  14379. {
  14380. var panel = g.rows[rowIndex].columns[columnIndex].panels[index];
  14381. panel && panel.close();
  14382. g._updatePortal();
  14383. }
  14384. },
  14385. add: function (e)
  14386. {
  14387. var g = this, p = this.options;
  14388. var rowIndex = e.rowIndex, columnIndex = e.columnIndex, index = e.index, panel = e.panel;
  14389. if (index == null) index = -1;
  14390. if (!(g.rows[rowIndex] && g.rows[rowIndex].columns && g.rows[rowIndex].columns[columnIndex])) return;
  14391. var gColumn = g.rows[rowIndex].columns[columnIndex], pColumn = p.rows[rowIndex].columns[columnIndex], ligerPanel, jcolumn = $(gColumn.element);
  14392. pColumn.panels = pColumn.panels || [];
  14393. gColumn.panels = gColumn.panels || [];
  14394. pColumn.panels.splice(index, 0, panel);
  14395. if (index < 0)
  14396. {
  14397. var jpanel = $('<div></div>').insertBefore(gColumn.jplace);
  14398. ligerPanel = jpanel.ligerPanel(panel);
  14399. } else if(gColumn.panels[index])
  14400. {
  14401. var jpanel = $('<div></div>').insertBefore(gColumn.panels[index].panel);
  14402. ligerPanel = jpanel.ligerPanel(panel);
  14403. }
  14404. if (ligerPanel)
  14405. {
  14406. ligerPanel.bind('closed', g._createPanelClosed());
  14407. g.setPanelEvent({
  14408. panel: ligerPanel
  14409. });
  14410. gColumn.panels.splice(index, 0, ligerPanel);
  14411. }
  14412. g._updatePortal();
  14413. },
  14414. _createPanelClosed : function ()
  14415. {
  14416. var g = this, p = this.options;
  14417. return function ()
  14418. {
  14419. var panel = this;//ligerPanel对象
  14420. var panels = g.getPanels();
  14421. var rowIndex, columnIndex, index;
  14422. $(panels).each(function ()
  14423. {
  14424. if (this.panel == panel)
  14425. {
  14426. rowIndex = this.rowIndex;
  14427. columnIndex = this.columnIndex;
  14428. index = this.index;
  14429. }
  14430. });
  14431. p.rows[rowIndex].columns[columnIndex].panels.splice(index, 1);
  14432. g.rows[rowIndex].columns[columnIndex].panels.splice(index, 1);
  14433. };
  14434. },
  14435. _renderColumn: function (e)
  14436. {
  14437. var column = e.column, columnIndex = e.columnIndex, jcolumn = e.jcolumn;
  14438. var rowIndex = e.rowIndex;
  14439. var g = this, p = this.options;
  14440. var columnObj = {
  14441. element : jcolumn[0]
  14442. };
  14443. if (column.width) jcolumn.width(column.width);
  14444. if (column.height) jcolumn.height(column.height);
  14445. if (column.panels) columnObj.panels = [];
  14446. if (column.panels && column.panels.length)
  14447. {
  14448. for (var i = 0; i < column.panels.length; i++)
  14449. {
  14450. var panel = column.panels[i];
  14451. var jpanel = $('<div></div>').appendTo(jcolumn);
  14452. columnObj.panels[i] = jpanel.ligerPanel(panel);
  14453. columnObj.panels[i].bind('closed', g._createPanelClosed());
  14454. g.setPanelEvent({
  14455. panel: columnObj.panels[i]
  14456. });
  14457. }
  14458. } else if(g.tempInitPanels)
  14459. {
  14460. var tempPanel = g.tempInitPanels.find(">div:eq(" + columnIndex + ")");
  14461. if (tempPanel.length)
  14462. {
  14463. columnObj.panels = [];
  14464. var panelOptions = {};
  14465. var jelement = tempPanel.clone();
  14466. if (liger.inject && liger.inject.getOptions)
  14467. {
  14468. panelOptions = liger.inject.getOptions({
  14469. jelement: jelement,
  14470. defaults: $.ligerDefaults.Panel,
  14471. config: liger.inject.config.Panel
  14472. });
  14473. }
  14474. columnObj.panels[0] = jelement.appendTo(jcolumn).ligerPanel(panelOptions);
  14475. columnObj.panels[0].bind('closed', g._createPanelClosed());
  14476. g.setPanelEvent({
  14477. panel: columnObj.panels[0]
  14478. });
  14479. }
  14480. }
  14481. columnObj.jplace = $('<div class="l-column-place"></div>').appendTo(jcolumn);
  14482. return columnObj;
  14483. },
  14484. setPanelEvent: function(e)
  14485. {
  14486. //panel:ligerui对象,jpanel:jQuery dom对象
  14487. var panel = e.panel, jpanel = panel.panel;
  14488. var g = this, p = this.options;
  14489. //拖拽支持
  14490. if ($.fn.ligerDrag && p.draggable)
  14491. {
  14492. jpanel.addClass("l-panel-draggable").ligerDrag({
  14493. proxy: false, revert: true,
  14494. handler: ".l-panel-header span:first",
  14495. onRendered: function ()
  14496. {
  14497. },
  14498. onStartDrag: function (current, e)
  14499. {
  14500. g.portal.find(">.l-row").addClass("l-row-dragging");
  14501. this.jplace = $('<div class="l-panel-place"></div>');
  14502. this.jplace.height(jpanel.height());
  14503. jpanel.width(jpanel.width());
  14504. jpanel.addClass("l-panel-dragging");
  14505. jpanel.css("position", "absolute");
  14506. jpanel.after(this.jplace);
  14507. g._updatePortal();
  14508. },
  14509. onDrag: function (current, e)
  14510. {
  14511. var pageX = e.pageX || e.screenX, pageY = e.pageY || e.screenY;
  14512. var height = jpanel.height(), width = jpanel.width(), offset = jpanel.offset();
  14513. var centerX = offset.left + width / 2, centerY = offset.top + 10;
  14514. var panels = g.getPanels(), emptyColumns = g.getEmptyColumns();
  14515. var result = getPositionIn(panels, emptyColumns, centerX, centerY);
  14516. if (result)
  14517. {
  14518. //判断是否跟上次匹配的位置一致
  14519. if (this.placeStatus)
  14520. {
  14521. if (this.placeStatus.panel && result.panel)
  14522. {
  14523. if (this.placeStatus.panel.rowIndex == result.panel.rowIndex &&
  14524. this.placeStatus.panel.columnIndex == result.panel.columnIndex &&
  14525. this.placeStatus.panel.index == result.panel.index &&
  14526. this.placeStatus.position == result.position)
  14527. {
  14528. return;
  14529. }
  14530. }
  14531. if (this.placeStatus.column && result.column) //定位到空元素行
  14532. {
  14533. if (this.placeStatus.column.rowIndex == result.column.rowIndex && this.placeStatus.column.columnIndex == result.column.columnIndex && this.placeStatus.position == result.position)
  14534. {
  14535. return;
  14536. }
  14537. }
  14538. }
  14539. if (result.position == "top")
  14540. {
  14541. this.jplace.insertBefore(result.panel ? result.panel.jpanel : result.column.jplace);
  14542. this.savedPosition = result.panel ? result.panel : result.column
  14543. this.savedPosition.inTop = true;
  14544. } else if (result.position == "bottom")
  14545. {
  14546. this.jplace.insertAfter(result.panel.jpanel);
  14547. this.savedPosition = result.panel;
  14548. this.savedPosition.inTop = false;
  14549. }
  14550. this.placeStatus = result;
  14551. }
  14552. else//没有匹配到
  14553. {
  14554. this.placeStatus = null;
  14555. }
  14556. //从指定的元素集合匹配位置
  14557. function getPositionIn(panels, columns, x, y)
  14558. {
  14559. for (i = 0, l = panels.length; i < l; i++)
  14560. {
  14561. var o = panels[i];
  14562. if (o.panel == panel) //如果是本身
  14563. {
  14564. continue;
  14565. }
  14566. var r = positionIn(o, null, x, y);
  14567. if (r) return r;
  14568. }
  14569. for (i = 0, l = columns.length; i < l; i++)
  14570. {
  14571. var column = columns[i];
  14572. var r = positionIn(null, column, x, y);
  14573. if (r) return r;
  14574. }
  14575. return null;
  14576. }
  14577. //坐标在目标区域范围内 x,y为panel标题栏中间的位置
  14578. function positionIn(panel, column, x, y)
  14579. {
  14580. var jelement = panel ? panel.jpanel : column.jplace;
  14581. if (!jelement) return null;
  14582. var height = jelement.height(), width = jelement.width();
  14583. var left = jelement.offset().left, top = jelement.offset().top;
  14584. var diff = 3;
  14585. if (x > left - diff && x < left + width + diff)
  14586. {
  14587. if (y > top - diff && y < top + height / 2 + diff)
  14588. {
  14589. return {
  14590. panel: panel,
  14591. column: column,
  14592. position: "top"
  14593. };
  14594. }
  14595. if (y > top + height / 2 - diff && y < top + height + diff)
  14596. {
  14597. return {
  14598. panel: panel,
  14599. column: column,
  14600. position: panel ? "bottom" : "top"
  14601. };
  14602. }
  14603. }
  14604. return null;
  14605. }
  14606. },
  14607. onStopDrag: function (current, e)
  14608. {
  14609. g.portal.find(">.l-row").removeClass("l-row-dragging");
  14610. panel.set('width', panel.get('width'));
  14611. jpanel.removeClass("l-panel-dragging");
  14612. //将jpanel替换到jplace的位置
  14613. if (this.jplace)
  14614. {
  14615. jpanel.css({
  14616. "position": "relative",
  14617. "left": null,
  14618. "top": null
  14619. });
  14620. jpanel.insertAfter(this.jplace);
  14621. g.portal.find(">.l-row > .l-column >.l-panel-place").remove();
  14622. if (this.savedPosition)
  14623. {
  14624. var panels = g.getPanels();
  14625. var rowIndex, columnIndex, index;
  14626. $(panels).each(function ()
  14627. {
  14628. if (this.panel == panel)
  14629. {
  14630. rowIndex = this.rowIndex;
  14631. columnIndex = this.columnIndex;
  14632. index = this.index;
  14633. }
  14634. });
  14635. var oldPanelOptions = p.rows[rowIndex].columns[columnIndex].panels[index];
  14636. var oldPanel = g.rows[rowIndex].columns[columnIndex].panels[index];
  14637. p.rows[rowIndex].columns[columnIndex].panels.splice(index, 1);
  14638. g.rows[rowIndex].columns[columnIndex].panels.splice(index, 1);
  14639. if (this.savedPosition.panel)
  14640. {
  14641. p.rows[this.savedPosition.rowIndex].columns[this.savedPosition.columnIndex].panels.splice(this.savedPosition.index + this.savedPosition.inTop ? -1 : 0, 0, oldPanelOptions);
  14642. g.rows[this.savedPosition.rowIndex].columns[this.savedPosition.columnIndex].panels.splice(this.savedPosition.index + this.savedPosition.inTop ? -1 : 0, 0, oldPanel);
  14643. } else
  14644. {
  14645. p.rows[this.savedPosition.rowIndex].columns[this.savedPosition.columnIndex].panels = [oldPanelOptions];
  14646. g.rows[this.savedPosition.rowIndex].columns[this.savedPosition.columnIndex].panels = [oldPanel];
  14647. }
  14648. }
  14649. }
  14650. g._updatePortal();
  14651. return false;
  14652. }
  14653. });
  14654. }
  14655. },
  14656. _updatePortal:function()
  14657. {
  14658. var g = this, p = this.options;
  14659. $(g.rows).each(function (rowIndex)
  14660. {
  14661. $(this.columns).each(function (columnIndex)
  14662. {
  14663. if (this.panels && this.panels.length)
  14664. {
  14665. $(this.element).removeClass("l-column-empty");
  14666. } else
  14667. {
  14668. $(this.element).addClass("l-column-empty");
  14669. }
  14670. });
  14671. });
  14672. },
  14673. getPanels : function ()
  14674. {
  14675. var g = this, p = this.options;
  14676. var panels = [];
  14677. $(g.rows).each(function (rowIndex)
  14678. {
  14679. $(this.columns).each(function (columnIndex)
  14680. {
  14681. $(this.panels).each(function (index)
  14682. {
  14683. panels.push({
  14684. rowIndex: rowIndex,
  14685. columnIndex: columnIndex,
  14686. index: index,
  14687. panel : this,
  14688. jpanel : this.panel
  14689. });
  14690. });
  14691. });
  14692. });
  14693. return panels;
  14694. },
  14695. getPanel: function (e)
  14696. {
  14697. var g = this, p = this.options;
  14698. e = $.extend({
  14699. rowIndex: 0,
  14700. columnIndex: 0,
  14701. index : 0
  14702. }, e);
  14703. var panel = null;
  14704. $(g.rows).each(function (rowIndex)
  14705. {
  14706. $(this.columns).each(function (columnIndex)
  14707. {
  14708. $(this.panels).each(function (index)
  14709. {
  14710. if (panel) return;
  14711. if (rowIndex == e.rowIndex && columnIndex == e.columnIndex && index == e.index)
  14712. {
  14713. panel = this;
  14714. }
  14715. });
  14716. });
  14717. });
  14718. return panel;
  14719. },
  14720. getEmptyColumns:function(){
  14721. var g = this, p = this.options;
  14722. var columns = [];
  14723. $(g.rows).each(function (rowIndex)
  14724. {
  14725. $(this.columns).each(function (columnIndex)
  14726. {
  14727. if (!this.panels || !this.panels.length)
  14728. {
  14729. columns.push({
  14730. rowIndex: rowIndex,
  14731. columnIndex: columnIndex,
  14732. jplace : this.jplace
  14733. });
  14734. }
  14735. });
  14736. });
  14737. return columns;
  14738. },
  14739. _setUrl: function (url)
  14740. {
  14741. var g = this, p = this.options;
  14742. if (!url) return;
  14743. $.ajax({
  14744. url: url, data: p.parms, type: p.method, dataType: 'json',
  14745. success: function (rows)
  14746. {
  14747. g.set('rows', rows);
  14748. }
  14749. });
  14750. },
  14751. _setWidth: function (value)
  14752. {
  14753. value && this.portal.width(value);
  14754. },
  14755. collapseAll: function ()
  14756. {
  14757. var g = this, p = this.options;
  14758. var panels = g.getPanels();
  14759. $(panels).each(function (i,o)
  14760. {
  14761. var panel = o.panel;
  14762. panel.collapse();
  14763. });
  14764. },
  14765. expandAll: function ()
  14766. {
  14767. var g = this, p = this.options;
  14768. var panels = g.getPanels();
  14769. $(panels).each(function (i, o)
  14770. {
  14771. var panel = o.panel;
  14772. panel.expand();
  14773. });
  14774. }
  14775. });
  14776. })(jQuery);/**
  14777. * jQuery ligerUI 1.2.4
  14778. *
  14779. * http://ligerui.com
  14780. *
  14781. * Author daomi 2014 [ gd_star@163.com ]
  14782. *
  14783. */
  14784. (function ($)
  14785. {
  14786. $.fn.ligerRadio = function ()
  14787. {
  14788. return $.ligerui.run.call(this, "ligerRadio", arguments);
  14789. };
  14790. $.fn.ligerGetRadioManager = function ()
  14791. {
  14792. return $.ligerui.run.call(this, "ligerGetRadioManager", arguments);
  14793. };
  14794. $.ligerDefaults.Radio = { disabled: false };
  14795. $.ligerMethos.Radio = {};
  14796. $.ligerui.controls.Radio = function (element, options)
  14797. {
  14798. $.ligerui.controls.Radio.base.constructor.call(this, element, options);
  14799. };
  14800. $.ligerui.controls.Radio.ligerExtend($.ligerui.controls.Input, {
  14801. __getType: function ()
  14802. {
  14803. return 'Radio';
  14804. },
  14805. __idPrev: function ()
  14806. {
  14807. return 'Radio';
  14808. },
  14809. _extendMethods: function ()
  14810. {
  14811. return $.ligerMethos.Radio;
  14812. },
  14813. _render: function ()
  14814. {
  14815. var g = this, p = this.options;
  14816. g.input = $(this.element);
  14817. g.link = $('<a href="javascript:void(0)" class="l-radio"></a>');
  14818. g.wrapper = g.input.addClass('l-hidden').wrap('<div class="l-radio-wrapper"></div>').parent();
  14819. g.wrapper.prepend(g.link);
  14820. g.input.change(function ()
  14821. {
  14822. if (this.checked)
  14823. {
  14824. g.link.addClass('l-radio-checked');
  14825. }
  14826. else
  14827. {
  14828. g.link.removeClass('l-radio-checked');
  14829. }
  14830. return true;
  14831. });
  14832. g.link.click(function ()
  14833. {
  14834. g._doclick();
  14835. });
  14836. g.wrapper.hover(function ()
  14837. {
  14838. if (!p.disabled)
  14839. $(this).addClass("l-over");
  14840. }, function ()
  14841. {
  14842. $(this).removeClass("l-over");
  14843. });
  14844. this.element.checked && g.link.addClass('l-radio-checked');
  14845. if (this.element.id)
  14846. {
  14847. $("label[for=" + this.element.id + "]").click(function ()
  14848. {
  14849. g._doclick();
  14850. });
  14851. }
  14852. g.set(p);
  14853. },
  14854. setValue: function (value)
  14855. {
  14856. var g = this, p = this.options;
  14857. if (!value)
  14858. {
  14859. g.input[0].checked = false;
  14860. g.link.removeClass('l-radio-checked');
  14861. }
  14862. else
  14863. {
  14864. g.input[0].checked = true;
  14865. g.link.addClass('l-radio-checked');
  14866. }
  14867. },
  14868. getValue: function ()
  14869. {
  14870. return this.input[0].checked;
  14871. },
  14872. setEnabled: function ()
  14873. {
  14874. this.input.attr('disabled', false);
  14875. this.wrapper.removeClass("l-disabled");
  14876. this.options.disabled = false;
  14877. },
  14878. setDisabled: function ()
  14879. {
  14880. this.input.attr('disabled', true);
  14881. this.wrapper.addClass("l-disabled");
  14882. this.options.disabled = true;
  14883. },
  14884. updateStyle: function ()
  14885. {
  14886. if (this.input.attr('disabled'))
  14887. {
  14888. this.wrapper.addClass("l-disabled");
  14889. this.options.disabled = true;
  14890. }
  14891. if (this.input[0].checked)
  14892. {
  14893. this.link.addClass('l-checkbox-checked');
  14894. }
  14895. else
  14896. {
  14897. this.link.removeClass('l-checkbox-checked');
  14898. }
  14899. },
  14900. _doclick: function ()
  14901. {
  14902. var g = this, p = this.options;
  14903. if (g.input.attr('disabled')) { return false; }
  14904. g.input.trigger('click').trigger('change');
  14905. var formEle;
  14906. if (g.input[0].form) formEle = g.input[0].form;
  14907. else formEle = document;
  14908. $("input:radio[name=" + g.input[0].name + "]", formEle).not(g.input).trigger("change");
  14909. return false;
  14910. }
  14911. });
  14912. })(jQuery);/**
  14913. * jQuery ligerUI 1.2.4
  14914. *
  14915. * http://ligerui.com
  14916. *
  14917. * Author daomi 2014 [ gd_star@163.com ]
  14918. *
  14919. */
  14920. (function ($)
  14921. {
  14922. $.fn.ligerRadioList = function (options)
  14923. {
  14924. return $.ligerui.run.call(this, "ligerRadioList", arguments);
  14925. };
  14926. $.ligerDefaults.RadioList = {
  14927. rowSize: 3, //每行显示元素数
  14928. valueField: 'id', //值成员
  14929. textField: 'text', //显示成员
  14930. valueFieldID:null, //隐藏域
  14931. name : null, //表单名
  14932. data: null, //数据
  14933. parms: null, //ajax提交表单
  14934. url: null, //数据源URL(需返回JSON)
  14935. onSuccess: null,
  14936. onError: null,
  14937. css: null, //附加css
  14938. value: null, //值
  14939. valueFieldCssClass : null
  14940. };
  14941. //扩展方法
  14942. $.ligerMethos.RadioList = $.ligerMethos.RadioList || {};
  14943. $.ligerui.controls.RadioList = function (element, options)
  14944. {
  14945. $.ligerui.controls.RadioList.base.constructor.call(this, element, options);
  14946. };
  14947. $.ligerui.controls.RadioList.ligerExtend($.ligerui.controls.Input, {
  14948. __getType: function ()
  14949. {
  14950. return 'RadioList';
  14951. },
  14952. _extendMethods: function ()
  14953. {
  14954. return $.ligerMethos.RadioList;
  14955. },
  14956. _init: function ()
  14957. {
  14958. $.ligerui.controls.RadioList.base._init.call(this);
  14959. },
  14960. _render: function ()
  14961. {
  14962. var g = this, p = this.options;
  14963. g.data = p.data;
  14964. g.valueField = null; //隐藏域(保存值)
  14965. if (p.valueFieldID)
  14966. {
  14967. g.valueField = $("#" + p.valueFieldID + ":input,[name=" + p.valueFieldID + "]:input");
  14968. if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
  14969. g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
  14970. }
  14971. else
  14972. {
  14973. g.valueField = $('<input type="hidden"/>');
  14974. g.valueField[0].id = g.valueField[0].name = g.id + "_val";
  14975. }
  14976. if (g.valueField[0].name == null) g.valueField[0].name = g.valueField[0].id;
  14977. if (p.valueFieldCssClass)
  14978. {
  14979. g.valueField.addClass(p.valueFieldCssClass);
  14980. }
  14981. g.valueField.attr("data-ligerid", g.id);
  14982. g.radioList = $(this.element);
  14983. g.radioList.html('<div class="l-radiolist-inner"><table cellpadding="0" cellspacing="0" border="0" class="l-radiolist-table"></table></div>').addClass("l-radiolist").append(g.valueField);
  14984. g.radioList.table = $("table:first", g.radioList);
  14985. p.value = g.valueField.val() || p.value;
  14986. g.set(p);
  14987. g._addClickEven();
  14988. },
  14989. destroy: function ()
  14990. {
  14991. if (this.radioList) this.radioList.remove();
  14992. this.options = null;
  14993. $.ligerui.remove(this);
  14994. },
  14995. clear : function()
  14996. {
  14997. this._changeValue("");
  14998. this.trigger('clear');
  14999. },
  15000. _setCss : function(css)
  15001. {
  15002. if (css) {
  15003. this.radioList.addClass(css);
  15004. }
  15005. },
  15006. _setDisabled: function (value)
  15007. {
  15008. //禁用样式
  15009. if (value)
  15010. {
  15011. this.radioList.addClass('l-radiolist-disabled');
  15012. $("input:radio", this.radioList).attr("disabled", true);
  15013. } else
  15014. {
  15015. this.radioList.removeClass('l-radiolist-disabled');
  15016. $("input:radio", this.radioList).removeAttr("disabled");
  15017. }
  15018. },
  15019. _setWidth: function (value)
  15020. {
  15021. this.radioList.width(value);
  15022. },
  15023. _setHeight: function (value)
  15024. {
  15025. this.radioList.height(value);
  15026. },
  15027. indexOf : function(item)
  15028. {
  15029. var g = this, p = this.options;
  15030. if (!g.data) return -1;
  15031. for (var i = 0, l = g.data.length; i < l; i++)
  15032. {
  15033. if (typeof (item) == "object")
  15034. {
  15035. if (g.data[i] == item) return i;
  15036. } else
  15037. {
  15038. if (g.data[i][p.valueField].toString() == item.toString()) return i;
  15039. }
  15040. }
  15041. return -1;
  15042. },
  15043. removeItems : function(items)
  15044. {
  15045. var g = this;
  15046. if (!g.data) return;
  15047. $(items).each(function (i,item)
  15048. {
  15049. var index = g.indexOf(item);
  15050. if (index == -1) return;
  15051. g.data.splice(index, 1);
  15052. });
  15053. g.refresh();
  15054. },
  15055. removeItem: function (item)
  15056. {
  15057. if (!this.data) return;
  15058. var index = this.indexOf(item);
  15059. if (index == -1) return;
  15060. this.data.splice(index, 1);
  15061. this.refresh();
  15062. },
  15063. insertItem: function (item,index)
  15064. {
  15065. var g = this;
  15066. if (!g.data) g.data = [];
  15067. g.data.splice(index, 0, item);
  15068. g.refresh();
  15069. },
  15070. addItems: function (items)
  15071. {
  15072. var g = this;
  15073. if (!g.data) g.data = [];
  15074. $(items).each(function (i, item)
  15075. {
  15076. g.data.push(item);
  15077. });
  15078. g.refresh();
  15079. },
  15080. addItem: function (item)
  15081. {
  15082. var g = this;
  15083. if (!g.data) g.data = [];
  15084. g.data.push(item);
  15085. g.refresh();
  15086. },
  15087. _setValue: function (value)
  15088. {
  15089. var g = this, p = this.options;
  15090. p.value = value;
  15091. this._dataInit();
  15092. },
  15093. setValue: function (value)
  15094. {
  15095. this._setValue(value);
  15096. },
  15097. _setUrl: function (url) {
  15098. if (!url) return;
  15099. var g = this, p = this.options;
  15100. $.ajax({
  15101. type: 'post',
  15102. url: url,
  15103. data: p.parms,
  15104. cache: false,
  15105. dataType: 'json',
  15106. success: function (data) {
  15107. g.setData(data);
  15108. g.trigger('success', [data]);
  15109. },
  15110. error: function (XMLHttpRequest, textStatus) {
  15111. g.trigger('error', [XMLHttpRequest, textStatus]);
  15112. }
  15113. });
  15114. },
  15115. setUrl: function (url) {
  15116. return this._setUrl(url);
  15117. },
  15118. setParm: function (name, value) {
  15119. if (!name) return;
  15120. var g = this;
  15121. var parms = g.get('parms');
  15122. if (!parms) parms = {};
  15123. parms[name] = value;
  15124. g.set('parms', parms);
  15125. },
  15126. clearContent: function ()
  15127. {
  15128. var g = this, p = this.options;
  15129. $("table", g.radioList).html("");
  15130. },
  15131. _setData : function(data)
  15132. {
  15133. this.setData(data);
  15134. },
  15135. setData: function (data)
  15136. {
  15137. var g = this, p = this.options;
  15138. if (!data || !data.length) return;
  15139. g.data = data;
  15140. g.refresh();
  15141. g.updateStyle();
  15142. },
  15143. refresh:function()
  15144. {
  15145. var g = this, p = this.options, data = this.data;
  15146. this.clearContent();
  15147. if (!data) return;
  15148. var out = [], rowSize = p.rowSize, appendRowStart = false, name = p.name || g.id;
  15149. for (var i = 0; i < data.length; i++)
  15150. {
  15151. var val = data[i][p.valueField], txt = data[i][p.textField], id = g.id + "-" + i;
  15152. var newRow = i % rowSize == 0;
  15153. //0,5,10
  15154. if (newRow)
  15155. {
  15156. if (appendRowStart) out.push('</tr>');
  15157. out.push("<tr>");
  15158. appendRowStart = true;
  15159. }
  15160. out.push("<td><input type='radio' name='" + name + "' value='" + val + "' id='" + id + "'/><label for='" + id + "'>" + txt + "</label></td>");
  15161. }
  15162. if (appendRowStart) out.push('</tr>');
  15163. g.radioList.table.append(out.join(''));
  15164. },
  15165. _getValue: function ()
  15166. {
  15167. var g = this, p = this.options, name = p.name || g.id;
  15168. return $('input:radio[name="' + name + '"]:checked').val();
  15169. },
  15170. getValue: function ()
  15171. {
  15172. //获取值
  15173. return this._getValue();
  15174. },
  15175. updateStyle: function ()
  15176. {
  15177. this._dataInit();
  15178. },
  15179. _dataInit: function ()
  15180. {
  15181. var g = this, p = this.options;
  15182. var value = g.valueField.val() || g._getValue() || p.value;
  15183. g._changeValue(value);
  15184. },
  15185. //设置值到 隐藏域
  15186. _changeValue: function (newValue)
  15187. {
  15188. var g = this, p = this.options, name = p.name || g.id;
  15189. $("input:radio[name='" + name + "']", g.radioList).each(function ()
  15190. {
  15191. this.checked = this.value == newValue;
  15192. });
  15193. g.valueField.val(newValue);
  15194. g.selectedValue = newValue;
  15195. },
  15196. _addClickEven: function ()
  15197. {
  15198. var g = this, p = this.options;
  15199. //选项点击
  15200. g.radioList.click(function (e)
  15201. {
  15202. var value = g.getValue();
  15203. if (value) g.valueField.val(value);
  15204. });
  15205. }
  15206. });
  15207. })(jQuery);/**
  15208. * jQuery ligerUI 1.2.4
  15209. *
  15210. * http://ligerui.com
  15211. *
  15212. * Author daomi 2014 [ gd_star@163.com ]
  15213. *
  15214. */
  15215. (function ($)
  15216. {
  15217. $.fn.ligerResizable = function (options)
  15218. {
  15219. return $.ligerui.run.call(this, "ligerResizable", arguments,
  15220. {
  15221. idAttrName: 'ligeruiresizableid', hasElement: false, propertyToElemnt: 'target'
  15222. });
  15223. };
  15224. $.fn.ligerGetResizableManager = function ()
  15225. {
  15226. return $.ligerui.run.call(this, "ligerGetResizableManager", arguments,
  15227. {
  15228. idAttrName: 'ligeruiresizableid', hasElement: false, propertyToElemnt: 'target'
  15229. });
  15230. };
  15231. $.ligerDefaults.Resizable = {
  15232. handles: 'n, e, s, w, ne, se, sw, nw',
  15233. maxWidth: 2000,
  15234. maxHeight: 2000,
  15235. minWidth: 20,
  15236. minHeight: 20,
  15237. scope: 3,
  15238. animate: false,
  15239. onStartResize: function (e) { },
  15240. onResize: function (e) { },
  15241. onStopResize: function (e) { },
  15242. onEndResize: null
  15243. };
  15244. $.ligerui.controls.Resizable = function (options)
  15245. {
  15246. $.ligerui.controls.Resizable.base.constructor.call(this, null, options);
  15247. };
  15248. $.ligerui.controls.Resizable.ligerExtend($.ligerui.core.UIComponent, {
  15249. __getType: function ()
  15250. {
  15251. return 'Resizable';
  15252. },
  15253. __idPrev: function ()
  15254. {
  15255. return 'Resizable';
  15256. },
  15257. _render: function ()
  15258. {
  15259. var g = this, p = this.options;
  15260. g.target = $(p.target);
  15261. g.set(p);
  15262. g.target.mousemove(function (e)
  15263. {
  15264. if (p.disabled) return;
  15265. g.dir = g._getDir(e);
  15266. if (g.dir)
  15267. g.target.css('cursor', g.dir + '-resize');
  15268. else if (g.target.css('cursor').indexOf('-resize') > 0)
  15269. g.target.css('cursor', 'default');
  15270. if (p.target.ligeruidragid)
  15271. {
  15272. var drag = $.ligerui.get(p.target.ligeruidragid);
  15273. if (drag && g.dir)
  15274. {
  15275. drag.set('disabled', true);
  15276. } else if (drag)
  15277. {
  15278. drag.set('disabled', false);
  15279. }
  15280. }
  15281. }).mousedown(function (e)
  15282. {
  15283. if (p.disabled) return;
  15284. if (g.dir)
  15285. {
  15286. g._start(e);
  15287. }
  15288. });
  15289. },
  15290. _rendered: function ()
  15291. {
  15292. this.options.target.ligeruiresizableid = this.id;
  15293. },
  15294. _getDir: function (e)
  15295. {
  15296. var g = this, p = this.options;
  15297. var dir = '';
  15298. var xy = g.target.offset();
  15299. var width = g.target.width();
  15300. var height = g.target.height();
  15301. var scope = p.scope;
  15302. var pageX = e.pageX || e.screenX;
  15303. var pageY = e.pageY || e.screenY;
  15304. if (pageY >= xy.top && pageY < xy.top + scope)
  15305. {
  15306. dir += 'n';
  15307. }
  15308. else if (pageY <= xy.top + height && pageY > xy.top + height - scope)
  15309. {
  15310. dir += 's';
  15311. }
  15312. if (pageX >= xy.left && pageX < xy.left + scope)
  15313. {
  15314. dir += 'w';
  15315. }
  15316. else if (pageX <= xy.left + width && pageX > xy.left + width - scope)
  15317. {
  15318. dir += 'e';
  15319. }
  15320. if (p.handles == "all" || dir == "") return dir;
  15321. if ($.inArray(dir, g.handles) != -1) return dir;
  15322. return '';
  15323. },
  15324. _setHandles: function (handles)
  15325. {
  15326. if (!handles) return;
  15327. this.handles = handles.replace(/(\s*)/g, '').split(',');
  15328. },
  15329. _createProxy: function ()
  15330. {
  15331. var g = this;
  15332. g.proxy = $('<div class="l-resizable"></div>');
  15333. g.proxy.width(g.target.width()).height(g.target.height())
  15334. g.proxy.attr("resizableid", g.id).appendTo('body');
  15335. },
  15336. _removeProxy: function ()
  15337. {
  15338. var g = this;
  15339. if (g.proxy)
  15340. {
  15341. g.proxy.remove();
  15342. g.proxy = null;
  15343. }
  15344. },
  15345. _start: function (e)
  15346. {
  15347. var g = this, p = this.options;
  15348. g._createProxy();
  15349. g.proxy.css({
  15350. left: g.target.offset().left,
  15351. top: g.target.offset().top,
  15352. position: 'absolute'
  15353. });
  15354. g.current = {
  15355. dir: g.dir,
  15356. left: g.target.offset().left,
  15357. top: g.target.offset().top,
  15358. startX: e.pageX || e.screenX,
  15359. startY: e.pageY || e.clientY,
  15360. width: g.target.width(),
  15361. height: g.target.height()
  15362. };
  15363. $(document).bind("selectstart.resizable", function () { return false; });
  15364. $(document).bind('mouseup.resizable', function ()
  15365. {
  15366. g._stop.apply(g, arguments);
  15367. });
  15368. $(document).bind('mousemove.resizable', function ()
  15369. {
  15370. g._drag.apply(g, arguments);
  15371. });
  15372. g.proxy.show();
  15373. g.trigger('startResize', [g.current, e]);
  15374. },
  15375. changeBy: {
  15376. t: ['n', 'ne', 'nw'],
  15377. l: ['w', 'sw', 'nw'],
  15378. w: ['w', 'sw', 'nw', 'e', 'ne', 'se'],
  15379. h: ['n', 'ne', 'nw', 's', 'se', 'sw']
  15380. },
  15381. _drag: function (e)
  15382. {
  15383. var g = this, p = this.options;
  15384. if (!g.current) return;
  15385. if (!g.proxy) return;
  15386. g.proxy.css('cursor', g.current.dir == '' ? 'default' : g.current.dir + '-resize');
  15387. var pageX = e.pageX || e.screenX;
  15388. var pageY = e.pageY || e.screenY;
  15389. g.current.diffX = pageX - g.current.startX;
  15390. g.current.diffY = pageY - g.current.startY;
  15391. g._applyResize(g.proxy);
  15392. g.trigger('resize', [g.current, e]);
  15393. },
  15394. _stop: function (e)
  15395. {
  15396. var g = this, p = this.options;
  15397. if (g.hasBind('stopResize'))
  15398. {
  15399. if (g.trigger('stopResize', [g.current, e]) != false)
  15400. g._applyResize();
  15401. }
  15402. else
  15403. {
  15404. g._applyResize();
  15405. }
  15406. g._removeProxy();
  15407. g.trigger('endResize', [g.current, e]);
  15408. $(document).unbind("selectstart.resizable");
  15409. $(document).unbind('mousemove.resizable');
  15410. $(document).unbind('mouseup.resizable');
  15411. },
  15412. _applyResize: function (applyResultBody)
  15413. {
  15414. var g = this, p = this.options;
  15415. var cur = {
  15416. left: g.current.left,
  15417. top: g.current.top,
  15418. width: g.current.width,
  15419. height: g.current.height
  15420. };
  15421. var applyToTarget = false;
  15422. if (!applyResultBody)
  15423. {
  15424. applyResultBody = g.target;
  15425. applyToTarget = true;
  15426. if (!isNaN(parseInt(g.target.css('top'))))
  15427. cur.top = parseInt(g.target.css('top'));
  15428. else
  15429. cur.top = 0;
  15430. if (!isNaN(parseInt(g.target.css('left'))))
  15431. cur.left = parseInt(g.target.css('left'));
  15432. else
  15433. cur.left = 0;
  15434. }
  15435. if ($.inArray(g.current.dir, g.changeBy.l) > -1)
  15436. {
  15437. cur.left += g.current.diffX;
  15438. g.current.diffLeft = g.current.diffX;
  15439. }
  15440. else if (applyToTarget)
  15441. {
  15442. delete cur.left;
  15443. }
  15444. if ($.inArray(g.current.dir, g.changeBy.t) > -1)
  15445. {
  15446. cur.top += g.current.diffY;
  15447. g.current.diffTop = g.current.diffY;
  15448. }
  15449. else if (applyToTarget)
  15450. {
  15451. delete cur.top;
  15452. }
  15453. if ($.inArray(g.current.dir, g.changeBy.w) > -1)
  15454. {
  15455. cur.width += (g.current.dir.indexOf('w') == -1 ? 1 : -1) * g.current.diffX;
  15456. g.current.newWidth = cur.width;
  15457. }
  15458. else if (applyToTarget)
  15459. {
  15460. delete cur.width;
  15461. }
  15462. if ($.inArray(g.current.dir, g.changeBy.h) > -1)
  15463. {
  15464. cur.height += (g.current.dir.indexOf('n') == -1 ? 1 : -1) * g.current.diffY;
  15465. g.current.newHeight = cur.height;
  15466. }
  15467. else if (applyToTarget)
  15468. {
  15469. delete cur.height;
  15470. }
  15471. if (applyToTarget && p.animate)
  15472. applyResultBody.animate(cur);
  15473. else
  15474. applyResultBody.css(cur);
  15475. }
  15476. });
  15477. })(jQuery);/**
  15478. * jQuery ligerUI 1.2.4
  15479. *
  15480. * http://ligerui.com
  15481. *
  15482. * Author daomi 2014 [ gd_star@163.com ]
  15483. *
  15484. */
  15485. (function ($)
  15486. {
  15487. $.fn.ligerSpinner = function ()
  15488. {
  15489. return $.ligerui.run.call(this, "ligerSpinner", arguments);
  15490. };
  15491. $.fn.ligerGetSpinnerManager = function ()
  15492. {
  15493. return $.ligerui.run.call(this, "ligerGetSpinnerManager", arguments);
  15494. };
  15495. $.ligerDefaults.Spinner = {
  15496. type: 'float', //类型 float:浮点数 int:整数 time:时间
  15497. isNegative: true, //是否负数
  15498. decimalplace: 2, //小数位 type=float时起作用
  15499. step: 0.1, //每次增加的值
  15500. interval: 50, //间隔,毫秒
  15501. onChangeValue: false, //改变值事件
  15502. minValue: null, //最小值
  15503. maxValue: null, //最大值
  15504. disabled: false,
  15505. readonly: false //是否只读
  15506. };
  15507. $.ligerMethos.Spinner = {};
  15508. $.ligerui.controls.Spinner = function (element, options)
  15509. {
  15510. $.ligerui.controls.Spinner.base.constructor.call(this, element, options);
  15511. };
  15512. $.ligerui.controls.Spinner.ligerExtend($.ligerui.controls.Input, {
  15513. __getType: function ()
  15514. {
  15515. return 'Spinner';
  15516. },
  15517. __idPrev: function ()
  15518. {
  15519. return 'Spinner';
  15520. },
  15521. _extendMethods: function ()
  15522. {
  15523. return $.ligerMethos.Spinner;
  15524. },
  15525. _init: function ()
  15526. {
  15527. $.ligerui.controls.Spinner.base._init.call(this);
  15528. var p = this.options;
  15529. if (p.type == 'float')
  15530. {
  15531. p.step = 0.1;
  15532. p.interval = 50;
  15533. } else if (p.type == 'int')
  15534. {
  15535. p.step = 1;
  15536. p.interval = 100;
  15537. } else if (p.type == 'time')
  15538. {
  15539. p.step = 1;
  15540. p.interval = 100;
  15541. } else
  15542. {
  15543. p.type = "int";
  15544. p.step = 1;
  15545. p.interval = 100;
  15546. }
  15547. },
  15548. _render: function ()
  15549. {
  15550. var g = this, p = this.options;
  15551. g.interval = null;
  15552. g.inputText = null;
  15553. g.value = null;
  15554. g.textFieldID = "";
  15555. if (this.element.tagName.toLowerCase() == "input" && this.element.type && this.element.type == "text")
  15556. {
  15557. g.inputText = $(this.element);
  15558. if (this.element.id)
  15559. g.textFieldID = this.element.id;
  15560. }
  15561. else
  15562. {
  15563. g.inputText = $('<input type="text"/>');
  15564. g.inputText.appendTo($(this.element));
  15565. }
  15566. if (g.textFieldID == "" && p.textFieldID)
  15567. g.textFieldID = p.textFieldID;
  15568. g.link = $('<div class="l-trigger"><div class="l-spinner-up"><div class="l-spinner-icon"></div></div><div class="l-spinner-split"></div><div class="l-spinner-down"><div class="l-spinner-icon"></div></div></div>');
  15569. g.wrapper = g.inputText.wrap('<div class="l-text"></div>').parent();
  15570. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  15571. g.wrapper.append(g.link).after(g.selectBox).after(g.valueField);
  15572. g.link.up = $(".l-spinner-up", g.link);
  15573. g.link.down = $(".l-spinner-down", g.link);
  15574. g.inputText.addClass("l-text-field");
  15575. if (p.disabled)
  15576. {
  15577. g.wrapper.addClass("l-text-disabled");
  15578. }
  15579. //初始化
  15580. if (!g._isVerify(g.inputText.val()))
  15581. {
  15582. g.value = g._getDefaultValue();
  15583. g._showValue(g.value);
  15584. }
  15585. //事件
  15586. g.link.up.hover(function ()
  15587. {
  15588. if (!p.disabled)
  15589. $(this).addClass("l-spinner-up-over");
  15590. }, function ()
  15591. {
  15592. clearInterval(g.interval);
  15593. $(document).unbind("selectstart.spinner");
  15594. $(this).removeClass("l-spinner-up-over");
  15595. }).mousedown(function ()
  15596. {
  15597. if (!p.disabled)
  15598. {
  15599. g._uping.call(g);
  15600. g.interval = setInterval(function ()
  15601. {
  15602. g._uping.call(g);
  15603. }, p.interval);
  15604. $(document).bind("selectstart.spinner", function () { return false; });
  15605. }
  15606. }).mouseup(function ()
  15607. {
  15608. clearInterval(g.interval);
  15609. g.inputText.trigger("change").focus();
  15610. $(document).unbind("selectstart.spinner");
  15611. });
  15612. g.link.down.hover(function ()
  15613. {
  15614. if (!p.disabled)
  15615. $(this).addClass("l-spinner-down-over");
  15616. }, function ()
  15617. {
  15618. clearInterval(g.interval);
  15619. $(document).unbind("selectstart.spinner");
  15620. $(this).removeClass("l-spinner-down-over");
  15621. }).mousedown(function ()
  15622. {
  15623. if (!p.disabled)
  15624. {
  15625. g.interval = setInterval(function ()
  15626. {
  15627. g._downing.call(g);
  15628. }, p.interval);
  15629. $(document).bind("selectstart.spinner", function () { return false; });
  15630. }
  15631. }).mouseup(function ()
  15632. {
  15633. clearInterval(g.interval);
  15634. g.inputText.trigger("change").focus();
  15635. $(document).unbind("selectstart.spinner");
  15636. });
  15637. g.inputText.change(function ()
  15638. {
  15639. var value = g.inputText.val();
  15640. g.value = g._getVerifyValue(value);
  15641. g.trigger('changeValue', [g.value]);
  15642. g._showValue(g.value);
  15643. }).blur(function ()
  15644. {
  15645. g.wrapper.removeClass("l-text-focus");
  15646. }).focus(function ()
  15647. {
  15648. g.wrapper.addClass("l-text-focus");
  15649. });
  15650. g.wrapper.hover(function ()
  15651. {
  15652. if (!p.disabled)
  15653. g.wrapper.addClass("l-text-over");
  15654. }, function ()
  15655. {
  15656. g.wrapper.removeClass("l-text-over");
  15657. });
  15658. g.set(p);
  15659. },
  15660. _setWidth: function (value)
  15661. {
  15662. var g = this;
  15663. if (value > 20)
  15664. {
  15665. g.wrapper.css({ width: value });
  15666. g.inputText.css({ width: value - 20 });
  15667. }
  15668. },
  15669. _setHeight: function (value)
  15670. {
  15671. var g = this;
  15672. if (value > 10)
  15673. {
  15674. g.wrapper.height(value);
  15675. g.inputText.height(value - 2);
  15676. g.link.height(value - 4);
  15677. }
  15678. },
  15679. _setDisabled: function (value)
  15680. {
  15681. if (value)
  15682. {
  15683. this.wrapper.addClass("l-text-disabled");
  15684. }
  15685. else
  15686. {
  15687. this.wrapper.removeClass("l-text-disabled");
  15688. }
  15689. },
  15690. _showValue: function (value)
  15691. {
  15692. var g = this, p = this.options;
  15693. if (!value || value == "NaN") value = 0;
  15694. if (p.type == 'float')
  15695. {
  15696. value = parseFloat(value).toFixed(p.decimalplace);
  15697. }
  15698. this.inputText.val(value)
  15699. },
  15700. _setValue: function (value)
  15701. {
  15702. this._showValue(value);
  15703. },
  15704. setValue: function (value)
  15705. {
  15706. this._showValue(value);
  15707. },
  15708. getValue: function ()
  15709. {
  15710. return this.inputText.val();
  15711. },
  15712. _round: function (v, e)
  15713. {
  15714. var g = this, p = this.options;
  15715. var t = 1;
  15716. for (; e > 0; t *= 10, e--) { }
  15717. for (; e < 0; t /= 10, e++) { }
  15718. return Math.round(v * t) / t;
  15719. },
  15720. _isInt: function (str)
  15721. {
  15722. var g = this, p = this.options;
  15723. var strP = p.isNegative ? /^-?\d+$/ : /^\d+$/;
  15724. if (!strP.test(str)) return false;
  15725. if (parseFloat(str) != str) return false;
  15726. return true;
  15727. },
  15728. _isFloat: function (str)
  15729. {
  15730. var g = this, p = this.options;
  15731. var strP = p.isNegative ? /^-?\d+(\.\d+)?$/ : /^\d+(\.\d+)?$/;
  15732. if (!strP.test(str)) return false;
  15733. if (parseFloat(str) != str) return false;
  15734. return true;
  15735. },
  15736. _isTime: function (str)
  15737. {
  15738. var g = this, p = this.options;
  15739. var a = str.match(/^(\d{1,2}):(\d{1,2})$/);
  15740. if (a == null) return false;
  15741. if (a[1] > 24 || a[2] > 60) return false;
  15742. return true;
  15743. },
  15744. _isVerify: function (str)
  15745. {
  15746. var g = this, p = this.options;
  15747. if (p.type == 'float')
  15748. {
  15749. if (!g._isFloat(str)) return false;
  15750. var value = parseFloat(str);
  15751. if (p.minValue != undefined && p.minValue > value) return false;
  15752. if (p.maxValue != undefined && p.maxValue < value) return false;
  15753. return true;
  15754. } else if (p.type == 'int')
  15755. {
  15756. if (!g._isInt(str)) return false;
  15757. var value = parseInt(str);
  15758. if (p.minValue != undefined && p.minValue > value) return false;
  15759. if (p.maxValue != undefined && p.maxValue < value) return false;
  15760. return true;
  15761. } else if (p.type == 'time')
  15762. {
  15763. return g._isTime(str);
  15764. }
  15765. return false;
  15766. },
  15767. _getVerifyValue: function (value)
  15768. {
  15769. var g = this, p = this.options;
  15770. var newvalue = null;
  15771. if (p.type == 'float')
  15772. {
  15773. newvalue = g._round(value, p.decimalplace);
  15774. }
  15775. else if (p.type == 'int')
  15776. {
  15777. newvalue = parseInt(value);
  15778. } else if (p.type == 'time')
  15779. {
  15780. newvalue = value;
  15781. }
  15782. if (!g._isVerify(newvalue))
  15783. {
  15784. return g.value;
  15785. } else
  15786. {
  15787. return newvalue;
  15788. }
  15789. },
  15790. _isOverValue: function (value)
  15791. {
  15792. var g = this, p = this.options;
  15793. if (p.minValue != null && p.minValue > value) return true;
  15794. if (p.maxValue != null && p.maxValue < value) return true;
  15795. return false;
  15796. },
  15797. _getDefaultValue: function ()
  15798. {
  15799. var g = this, p = this.options;
  15800. if (p.type == 'float' || p.type == 'int') { return 0; }
  15801. else if (p.type == 'time') { return "00:00"; }
  15802. },
  15803. _addValue: function (num)
  15804. {
  15805. var g = this, p = this.options;
  15806. var value = g.inputText.val();
  15807. value = parseFloat(value) + num;
  15808. if (g._isOverValue(value)) return;
  15809. g._showValue(value);
  15810. g.inputText.trigger("change");
  15811. },
  15812. _addTime: function (minute)
  15813. {
  15814. var g = this, p = this.options;
  15815. var value = g.inputText.val();
  15816. var a = value.match(/^(\d{1,2}):(\d{1,2})$/);
  15817. newminute = parseInt(a[2]) + minute;
  15818. if (newminute < 10) newminute = "0" + newminute;
  15819. value = a[1] + ":" + newminute;
  15820. if (g._isOverValue(value)) return;
  15821. g._showValue(value);
  15822. g.inputText.trigger("change");
  15823. },
  15824. _uping: function ()
  15825. {
  15826. var g = this, p = this.options;
  15827. if (p.type == 'float' || p.type == 'int')
  15828. {
  15829. g._addValue(p.step);
  15830. } else if (p.type == 'time')
  15831. {
  15832. g._addTime(p.step);
  15833. }
  15834. },
  15835. _downing: function ()
  15836. {
  15837. var g = this, p = this.options;
  15838. if (p.type == 'float' || p.type == 'int')
  15839. {
  15840. g._addValue(-1 * p.step);
  15841. } else if (p.type == 'time')
  15842. {
  15843. g._addTime(-1 * p.step);
  15844. }
  15845. },
  15846. _isDateTime: function (dateStr)
  15847. {
  15848. var g = this, p = this.options;
  15849. var r = dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  15850. if (r == null) return false;
  15851. var d = new Date(r[1], r[3] - 1, r[4]);
  15852. if (d == "NaN") return false;
  15853. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
  15854. },
  15855. _isLongDateTime: function (dateStr)
  15856. {
  15857. var g = this, p = this.options;
  15858. var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
  15859. var r = dateStr.match(reg);
  15860. if (r == null) return false;
  15861. var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6]);
  15862. if (d == "NaN") return false;
  15863. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6]);
  15864. }
  15865. });
  15866. })(jQuery);/**
  15867. * jQuery ligerUI 1.2.4
  15868. *
  15869. * http://ligerui.com
  15870. *
  15871. * Author daomi 2014 [ gd_star@163.com ]
  15872. *
  15873. */
  15874. (function ($)
  15875. {
  15876. $.fn.ligerTab = function (options)
  15877. {
  15878. return $.ligerui.run.call(this, "ligerTab", arguments);
  15879. };
  15880. $.fn.ligerGetTabManager = function ()
  15881. {
  15882. return $.ligerui.run.call(this, "ligerGetTabManager", arguments);
  15883. };
  15884. $.ligerDefaults.Tab = {
  15885. height: null,
  15886. heightDiff: 0, // 高度补差
  15887. changeHeightOnResize: false,
  15888. contextmenu: true,
  15889. dblClickToClose: false, //是否双击时关闭
  15890. dragToMove: false, //是否允许拖动时改变tab项的位置
  15891. showSwitch: false, //显示切换窗口按钮
  15892. showSwitchInTab: false, //切换窗口按钮显示在最后一项
  15893. onBeforeOverrideTabItem: null,
  15894. onAfterOverrideTabItem: null,
  15895. onBeforeRemoveTabItem: null,
  15896. onAfterRemoveTabItem: null,
  15897. onBeforeAddTabItem: null,
  15898. onAfterAddTabItem: null,
  15899. onBeforeSelectTabItem: null,
  15900. onAfterSelectTabItem: null,
  15901. onCloseOther: null,
  15902. onCloseAll: null,
  15903. onClose: null,
  15904. onReload: null
  15905. };
  15906. $.ligerDefaults.TabString = {
  15907. closeMessage: "关闭当前页",
  15908. closeOtherMessage: "关闭其他",
  15909. closeAllMessage: "关闭所有",
  15910. reloadMessage: "刷新"
  15911. };
  15912. $.ligerMethos.Tab = {};
  15913. $.ligerui.controls.Tab = function (element, options)
  15914. {
  15915. $.ligerui.controls.Tab.base.constructor.call(this, element, options);
  15916. };
  15917. $.ligerui.controls.Tab.ligerExtend($.ligerui.core.UIComponent, {
  15918. __getType: function ()
  15919. {
  15920. return 'Tab';
  15921. },
  15922. __idPrev: function ()
  15923. {
  15924. return 'Tab';
  15925. },
  15926. _extendMethods: function ()
  15927. {
  15928. return $.ligerMethos.Tab;
  15929. },
  15930. _render: function ()
  15931. {
  15932. var g = this, p = this.options;
  15933. if (p.height) g.makeFullHeight = true;
  15934. g.tab = $(this.element);
  15935. g.tab.addClass("l-tab");
  15936. if (p.contextmenu && $.ligerMenu)
  15937. {
  15938. g.tab.menu = $.ligerMenu({ width: 100, items: [
  15939. { text: p.closeMessage, id: 'close', click: function ()
  15940. {
  15941. g._menuItemClick.apply(g, arguments);
  15942. }
  15943. },
  15944. { text: p.closeOtherMessage, id: 'closeother', click: function ()
  15945. {
  15946. g._menuItemClick.apply(g, arguments);
  15947. }
  15948. },
  15949. { text: p.closeAllMessage, id: 'closeall', click: function ()
  15950. {
  15951. g._menuItemClick.apply(g, arguments);
  15952. }
  15953. },
  15954. { text: p.reloadMessage, id: 'reload', click: function ()
  15955. {
  15956. g._menuItemClick.apply(g, arguments);
  15957. }
  15958. }
  15959. ]
  15960. });
  15961. }
  15962. g.tab.content = $('<div class="l-tab-content"></div>');
  15963. $("> div", g.tab).appendTo(g.tab.content);
  15964. g.tab.content.appendTo(g.tab);
  15965. g.tab.links = $('<div class="l-tab-links"><ul style="left: 0px; "></ul><div class="l-tab-switch"></div></div>');
  15966. g.tab.links.prependTo(g.tab);
  15967. g.tab.links.ul = $("ul", g.tab.links);
  15968. var lselecteds = $("> div[lselected=true]", g.tab.content);
  15969. var haslselected = lselecteds.length > 0;
  15970. g.selectedTabId = lselecteds.attr("tabid");
  15971. $("> div", g.tab.content).each(function (i, box)
  15972. {
  15973. var li = $('<li class=""><a></a><div class="l-tab-links-item-left"></div><div class="l-tab-links-item-right"></div></li>');
  15974. var contentitem = $(this);
  15975. if (contentitem.attr("title"))
  15976. {
  15977. $("> a", li).html(contentitem.attr("title"));
  15978. contentitem.attr("title", "");
  15979. }
  15980. var tabid = contentitem.attr("tabid");
  15981. if (tabid == undefined)
  15982. {
  15983. tabid = g.getNewTabid();
  15984. contentitem.attr("tabid", tabid);
  15985. if (contentitem.attr("lselected"))
  15986. {
  15987. g.selectedTabId = tabid;
  15988. }
  15989. }
  15990. li.attr("tabid", tabid);
  15991. if (!haslselected && i == 0) g.selectedTabId = tabid;
  15992. var showClose = contentitem.attr("showClose");
  15993. if (showClose)
  15994. {
  15995. li.append("<div class='l-tab-links-item-close'></div>");
  15996. }
  15997. $("> ul", g.tab.links).append(li);
  15998. if (!contentitem.hasClass("l-tab-content-item")) contentitem.addClass("l-tab-content-item");
  15999. if (contentitem.find("iframe").length > 0)
  16000. {
  16001. var iframe = $("iframe:first", contentitem);
  16002. if (iframe[0].readyState != "complete")
  16003. {
  16004. if (contentitem.find(".l-tab-loading:first").length == 0)
  16005. contentitem.prepend("<div class='l-tab-loading' style='display:block;'></div>");
  16006. var iframeloading = $(".l-tab-loading:first", contentitem);
  16007. iframe.bind('load.tab', function ()
  16008. {
  16009. iframeloading.hide();
  16010. });
  16011. }
  16012. }
  16013. });
  16014. //init
  16015. g.selectTabItem(g.selectedTabId);
  16016. //set content height
  16017. if (p.height)
  16018. {
  16019. if (typeof (p.height) == 'string' && p.height.indexOf('%') > 0)
  16020. {
  16021. g.onResize();
  16022. if (p.changeHeightOnResize)
  16023. {
  16024. $(window).resize(function ()
  16025. {
  16026. g.onResize.call(g);
  16027. });
  16028. }
  16029. } else
  16030. {
  16031. g.setHeight(p.height);
  16032. }
  16033. }
  16034. if (g.makeFullHeight)
  16035. g.setContentHeight();
  16036. //add even
  16037. $("li", g.tab.links).each(function ()
  16038. {
  16039. g._addTabItemEvent($(this));
  16040. });
  16041. g.tab.bind('dblclick.tab', function (e)
  16042. {
  16043. if (!p.dblClickToClose) return;
  16044. g.dblclicking = true;
  16045. var obj = (e.target || e.srcElement);
  16046. var tagName = obj.tagName.toLowerCase();
  16047. if (tagName == "a")
  16048. {
  16049. var tabid = $(obj).parent().attr("tabid");
  16050. var allowClose = $(obj).parent().find("div.l-tab-links-item-close").length ? true : false;
  16051. if (allowClose)
  16052. {
  16053. g.removeTabItem(tabid);
  16054. }
  16055. }
  16056. g.dblclicking = false;
  16057. });
  16058. g.set(p);
  16059. },
  16060. _setShowSwitch: function (value)
  16061. {
  16062. var g = this, p = this.options;
  16063. if (value)
  16064. {
  16065. if (!$(".l-tab-switch", g.tab.links).length)
  16066. {
  16067. $("<div class='l-tab-switch'></div>").appendTo(g.tab.links);
  16068. }
  16069. $(g.tab).addClass("l-tab-switchable");
  16070. $(".l-tab-switch", g.tab).click(function ()
  16071. {
  16072. g.toggleSwitch(this);
  16073. });
  16074. }
  16075. else
  16076. {
  16077. $(g.tab).removeClass("l-tab-switchable");
  16078. $("body > .l-tab-windowsswitch").remove();
  16079. }
  16080. },
  16081. _setShowSwitchInTab:function(value)
  16082. {
  16083. var g = this, p = this.options;
  16084. if (p.showSwitch && value)
  16085. {
  16086. $(g.tab).removeClass("l-tab-switchable");
  16087. $(".l-tab-switch", g.tab).remove();
  16088. var tabitem = $("<li class='l-tab-itemswitch'><a></a><div class='l-tab-links-item-left'></div><div class='l-tab-links-item-right'></div></li>");
  16089. tabitem.appendTo(g.tab.links.ul);
  16090. tabitem.click(function ()
  16091. {
  16092. g.toggleSwitch(this);
  16093. });
  16094. } else
  16095. {
  16096. $(".l-tab-itemswitch", g.tab.ul).remove();
  16097. }
  16098. },
  16099. toggleSwitch: function (btn)
  16100. {
  16101. var g = this, p = this.options;
  16102. if ($("body > .l-tab-windowsswitch").length)
  16103. {
  16104. $("body > .l-tab-windowsswitch").remove();
  16105. return;
  16106. }
  16107. if (btn == null) return;
  16108. var windowsswitch = $("<div class='l-tab-windowsswitch'></div>").appendTo('body');
  16109. var tabItems = g.tab.links.ul.find('>li');
  16110. var selectedTabItemID = g.getSelectedTabItemID();
  16111. tabItems.each(function (i, item)
  16112. {
  16113. var jlink = $("<a href='javascript:void(0)'></a>");
  16114. jlink.text($(item).find("a").text());
  16115. var tabid = $(item).attr("tabid");
  16116. if (tabid == null) return;
  16117. if (tabid == selectedTabItemID)
  16118. {
  16119. jlink.addClass("selected");
  16120. }
  16121. jlink.attr("tabid", tabid);
  16122. windowsswitch.append(jlink);
  16123. });
  16124. windowsswitch.css({
  16125. top: $(btn).offset().top + $(btn).height(),
  16126. left: $(btn).offset().left - windowsswitch.width()
  16127. });
  16128. windowsswitch.bind("click", function (e)
  16129. {
  16130. var obj = (e.target || e.srcElement);
  16131. if (obj.tagName.toLowerCase() == "a")
  16132. {
  16133. var tabid = $(obj).attr("tabid");
  16134. g.selectTabItem(tabid);
  16135. g.moveToTabItem(tabid);
  16136. $("body > .l-tab-windowsswitch").remove();
  16137. return;
  16138. }
  16139. });
  16140. },
  16141. _applyDrag: function (tabItemDom)
  16142. {
  16143. var g = this, p = this.options;
  16144. g.droptip = g.droptip || $("<div class='l-tab-drag-droptip' style='display:none'><div class='l-drop-move-up'></div><div class='l-drop-move-down'></div></div>").appendTo('body');
  16145. var drag = $(tabItemDom).ligerDrag(
  16146. {
  16147. revert: true, animate: false,
  16148. proxy: function ()
  16149. {
  16150. var name = $(this).find("a").html();
  16151. g.dragproxy = $("<div class='l-tab-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div></div>").appendTo('body');
  16152. g.dragproxy.append(name);
  16153. return g.dragproxy;
  16154. },
  16155. onRendered: function ()
  16156. {
  16157. this.set('cursor', 'pointer');
  16158. },
  16159. onStartDrag: function (current, e)
  16160. {
  16161. if (!$(tabItemDom).hasClass("l-selected")) return false;
  16162. if (e.button == 2) return false;
  16163. var obj = e.srcElement || e.target;
  16164. if ($(obj).hasClass("l-tab-links-item-close")) return false;
  16165. },
  16166. onDrag: function (current, e)
  16167. {
  16168. if (g.dropIn == null)
  16169. g.dropIn = -1;
  16170. var tabItems = g.tab.links.ul.find('>li');
  16171. var targetIndex = tabItems.index(current.target);
  16172. tabItems.each(function (i, item)
  16173. {
  16174. if (targetIndex == i)
  16175. {
  16176. return;
  16177. }
  16178. var isAfter = i > targetIndex;
  16179. if (g.dropIn != -1 && g.dropIn != i) return;
  16180. var offset = $(this).offset();
  16181. var range = {
  16182. top: offset.top,
  16183. bottom: offset.top + $(this).height(),
  16184. left: offset.left - 10,
  16185. right: offset.left + 10
  16186. };
  16187. if (isAfter)
  16188. {
  16189. range.left += $(this).width();
  16190. range.right += $(this).width();
  16191. }
  16192. var pageX = e.pageX || e.screenX;
  16193. var pageY = e.pageY || e.screenY;
  16194. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  16195. {
  16196. g.droptip.css({
  16197. left: range.left + 5,
  16198. top: range.top - 9
  16199. }).show();
  16200. g.dropIn = i;
  16201. g.dragproxy.find(".l-drop-icon").removeClass("l-drop-no").addClass("l-drop-yes");
  16202. }
  16203. else
  16204. {
  16205. g.dropIn = -1;
  16206. g.droptip.hide();
  16207. g.dragproxy.find(".l-drop-icon").removeClass("l-drop-yes").addClass("l-drop-no");
  16208. }
  16209. });
  16210. },
  16211. onStopDrag: function (current, e)
  16212. {
  16213. if (g.dropIn > -1)
  16214. {
  16215. var to = g.tab.links.ul.find('>li:eq(' + g.dropIn + ')').attr("tabid");
  16216. var from = $(current.target).attr("tabid");
  16217. setTimeout(function ()
  16218. {
  16219. g.moveTabItem(from, to);
  16220. }, 0);
  16221. g.dropIn = -1;
  16222. g.dragproxy.remove();
  16223. }
  16224. g.droptip.hide();
  16225. this.set('cursor', 'default');
  16226. }
  16227. });
  16228. return drag;
  16229. },
  16230. _setDragToMove: function (value)
  16231. {
  16232. if (!$.fn.ligerDrag) return; //需要ligerDrag的支持
  16233. var g = this, p = this.options;
  16234. if (value)
  16235. {
  16236. if (g.drags) return;
  16237. g.drags = g.drags || [];
  16238. g.tab.links.ul.find('>li').each(function ()
  16239. {
  16240. g.drags.push(g._applyDrag(this));
  16241. });
  16242. }
  16243. },
  16244. moveTabItem: function (fromTabItemID, toTabItemID)
  16245. {
  16246. var g = this;
  16247. var from = g.tab.links.ul.find(">li[tabid=" + fromTabItemID + "]");
  16248. var to = g.tab.links.ul.find(">li[tabid=" + toTabItemID + "]");
  16249. var index1 = g.tab.links.ul.find(">li").index(from);
  16250. var index2 = g.tab.links.ul.find(">li").index(to);
  16251. if (index1 < index2)
  16252. {
  16253. to.after(from);
  16254. }
  16255. else
  16256. {
  16257. to.before(from);
  16258. }
  16259. },
  16260. //设置tab按钮(左和右),显示返回true,隐藏返回false
  16261. setTabButton: function ()
  16262. {
  16263. var g = this, p = this.options;
  16264. var sumwidth = 0;
  16265. $("li", g.tab.links.ul).each(function ()
  16266. {
  16267. sumwidth += $(this).width() + 2;
  16268. });
  16269. var mainwidth = g.tab.width();
  16270. if (sumwidth > mainwidth)
  16271. {
  16272. if (!$(".l-tab-links-left", g.tab).length)
  16273. {
  16274. g.tab.links.append('<div class="l-tab-links-left"><span></span></div><div class="l-tab-links-right"><span></span></div>');
  16275. g.setTabButtonEven();
  16276. }
  16277. return true;
  16278. } else
  16279. {
  16280. g.tab.links.ul.animate({ left: 0 });
  16281. $(".l-tab-links-left,.l-tab-links-right", g.tab.links).remove();
  16282. return false;
  16283. }
  16284. },
  16285. //设置左右按钮的事件 标签超出最大宽度时,可左右拖动
  16286. setTabButtonEven: function ()
  16287. {
  16288. var g = this, p = this.options;
  16289. $(".l-tab-links-left", g.tab.links).hover(function ()
  16290. {
  16291. $(this).addClass("l-tab-links-left-over");
  16292. }, function ()
  16293. {
  16294. $(this).removeClass("l-tab-links-left-over");
  16295. }).click(function ()
  16296. {
  16297. g.moveToPrevTabItem();
  16298. });
  16299. $(".l-tab-links-right", g.tab.links).hover(function ()
  16300. {
  16301. $(this).addClass("l-tab-links-right-over");
  16302. }, function ()
  16303. {
  16304. $(this).removeClass("l-tab-links-right-over");
  16305. }).click(function ()
  16306. {
  16307. g.moveToNextTabItem();
  16308. });
  16309. },
  16310. //切换到上一个tab
  16311. moveToPrevTabItem: function (tabid)
  16312. {
  16313. var g = this, p = this.options;
  16314. var tabItems = $("> li", g.tab.links.ul),
  16315. nextBtn = $(".l-tab-links-right", g.tab),
  16316. prevBtn = $(".l-tab-links-left", g.tab);
  16317. if (!nextBtn.length || !prevBtn.length) return false;
  16318. var nextBtnOffset = nextBtn.offset(), prevBtnOffset = prevBtn.offset();
  16319. //计算应该移动到的标签项,并计算从第一项到这个标签项的上一项的宽度总和
  16320. var moveToTabItem = null, currentWidth = 0;
  16321. var prevBtnLeft = prevBtnOffset.left + prevBtn.outerWidth();
  16322. for (var i = 0, l = tabItems.length; i < l; i++)
  16323. {
  16324. var tabitem = $(tabItems[i]);
  16325. var offset = tabitem.offset();
  16326. var start = offset.left, end = offset.left + tabitem.outerWidth();
  16327. if (tabid != null)
  16328. {
  16329. if (start < prevBtnLeft && tabitem.attr("tabid") == tabid)
  16330. {
  16331. moveToTabItem = tabitem;
  16332. break;
  16333. }
  16334. }
  16335. else if (start < prevBtnLeft && end >= prevBtnLeft)
  16336. {
  16337. moveToTabItem = tabitem;
  16338. break;
  16339. }
  16340. currentWidth += tabitem.outerWidth() + parseInt(tabitem.css("marginLeft"))
  16341. + parseInt(tabitem.css("marginRight"));
  16342. }
  16343. if (moveToTabItem == null) return false;
  16344. //计算出正确的移动位置
  16345. var left = currentWidth - prevBtn.outerWidth();
  16346. g.tab.links.ul.animate({ left: -1 * left });
  16347. return true;
  16348. },
  16349. //切换到下一个tab
  16350. moveToNextTabItem: function (tabid)
  16351. {
  16352. var g = this, p = this.options;
  16353. var tabItems = $("> li", g.tab.links.ul),
  16354. nextBtn = $(".l-tab-links-right", g.tab),
  16355. prevBtn = $(".l-tab-links-left", g.tab);
  16356. if (!nextBtn.length || !prevBtn.length) return false;
  16357. var nextBtnOffset = nextBtn.offset(), prevBtnOffset = prevBtn.offset();
  16358. //计算应该移动到的标签项,并计算从第一项到这个标签项的宽度总和
  16359. var moveToTabItem = null, currentWidth = 0;
  16360. for (var i = 0, l = tabItems.length; i < l; i++)
  16361. {
  16362. var tabitem = $(tabItems[i]);
  16363. currentWidth += tabitem.outerWidth()
  16364. + parseInt(tabitem.css("marginLeft"))
  16365. + parseInt(tabitem.css("marginRight"));
  16366. var offset = tabitem.offset();
  16367. var start = offset.left, end = offset.left + tabitem.outerWidth();
  16368. if (tabid != null)
  16369. {
  16370. if (end > nextBtnOffset.left && tabitem.attr("tabid") == tabid)
  16371. {
  16372. moveToTabItem = tabitem;
  16373. break;
  16374. }
  16375. }
  16376. else if (start <= nextBtnOffset.left && end > nextBtnOffset.left)
  16377. {
  16378. moveToTabItem = tabitem;
  16379. break;
  16380. }
  16381. }
  16382. if (moveToTabItem == null) return false;
  16383. //计算出正确的移动位置
  16384. var left = currentWidth - (nextBtnOffset.left - prevBtnOffset.left)
  16385. + parseInt(moveToTabItem.css("marginLeft")) + parseInt(moveToTabItem.css("marginRight"));
  16386. g.tab.links.ul.animate({ left: -1 * left });
  16387. return true;
  16388. },
  16389. //切换到指定的项目项
  16390. moveToTabItem: function (tabid)
  16391. {
  16392. var g = this, p = this.options;
  16393. if (!g.moveToPrevTabItem(tabid))
  16394. {
  16395. g.moveToNextTabItem(tabid);
  16396. }
  16397. },
  16398. getTabItemCount: function ()
  16399. {
  16400. var g = this, p = this.options;
  16401. return $("li", g.tab.links.ul).length;
  16402. },
  16403. getSelectedTabItemID: function ()
  16404. {
  16405. var g = this, p = this.options;
  16406. return $("li.l-selected", g.tab.links.ul).attr("tabid");
  16407. },
  16408. removeSelectedTabItem: function ()
  16409. {
  16410. var g = this, p = this.options;
  16411. g.removeTabItem(g.getSelectedTabItemID());
  16412. },
  16413. //覆盖选择的tabitem
  16414. overrideSelectedTabItem: function (options)
  16415. {
  16416. var g = this, p = this.options;
  16417. g.overrideTabItem(g.getSelectedTabItemID(), options);
  16418. },
  16419. //覆盖
  16420. overrideTabItem: function (targettabid, options)
  16421. {
  16422. var g = this, p = this.options;
  16423. if (g.trigger('beforeOverrideTabItem', [targettabid]) == false)
  16424. return false;
  16425. var tabid = options.tabid;
  16426. if (tabid == undefined) tabid = g.getNewTabid();
  16427. var url = options.url;
  16428. var content = options.content;
  16429. var target = options.target;
  16430. var text = options.text;
  16431. var showClose = options.showClose;
  16432. var height = options.height;
  16433. //如果已经存在
  16434. if (g.isTabItemExist(tabid))
  16435. {
  16436. return;
  16437. }
  16438. var tabitem = $("li[tabid=" + targettabid + "]", g.tab.links.ul);
  16439. var contentitem = $(".l-tab-content-item[tabid=" + targettabid + "]", g.tab.content);
  16440. if (!tabitem || !contentitem) return;
  16441. tabitem.attr("tabid", tabid);
  16442. contentitem.attr("tabid", tabid);
  16443. if ($("iframe", contentitem).length == 0 && url)
  16444. {
  16445. contentitem.html("<iframe frameborder='0'></iframe>");
  16446. }
  16447. else if (content)
  16448. {
  16449. contentitem.html(content);
  16450. }
  16451. $("iframe", contentitem).attr("name", tabid);
  16452. if (showClose == undefined) showClose = true;
  16453. if (showClose == false) $(".l-tab-links-item-close", tabitem).remove();
  16454. else
  16455. {
  16456. if ($(".l-tab-links-item-close", tabitem).length == 0)
  16457. tabitem.append("<div class='l-tab-links-item-close'></div>");
  16458. }
  16459. if (text == undefined) text = tabid;
  16460. if (height) contentitem.height(height);
  16461. $("a", tabitem).text(text);
  16462. $("iframe", contentitem).attr("src", url);
  16463. g.trigger('afterOverrideTabItem', [targettabid]);
  16464. },
  16465. //设置页签项标题
  16466. setHeader: function(tabid,header)
  16467. {
  16468. $("li[tabid=" + tabid + "] a", this.tab.links.ul).text(header);
  16469. },
  16470. //选中tab项
  16471. selectTabItem: function (tabid)
  16472. {
  16473. var g = this, p = this.options;
  16474. if (g.trigger('beforeSelectTabItem', [tabid]) == false)
  16475. return false;
  16476. g.selectedTabId = tabid;
  16477. $("> .l-tab-content-item[tabid=" + tabid + "]", g.tab.content).show().siblings().hide();
  16478. $("li[tabid=" + tabid + "]", g.tab.links.ul).addClass("l-selected").siblings().removeClass("l-selected");
  16479. g.trigger('afterSelectTabItem', [tabid]);
  16480. },
  16481. //移动到最后一个tab
  16482. moveToLastTabItem: function ()
  16483. {
  16484. var g = this, p = this.options;
  16485. var sumwidth = 0;
  16486. $("li", g.tab.links.ul).each(function ()
  16487. {
  16488. sumwidth += $(this).width() + 2;
  16489. });
  16490. var mainwidth = g.tab.width();
  16491. if (sumwidth > mainwidth)
  16492. {
  16493. var btnWitdth = $(".l-tab-links-right", g.tab.links).width();
  16494. g.tab.links.ul.animate({ left: -1 * (sumwidth - mainwidth + btnWitdth + 2) });
  16495. }
  16496. },
  16497. //判断tab是否存在
  16498. isTabItemExist: function (tabid)
  16499. {
  16500. var g = this, p = this.options;
  16501. return $("li[tabid=" + tabid + "]", g.tab.links.ul).length > 0;
  16502. },
  16503. //增加一个tab
  16504. addTabItem: function (options)
  16505. {
  16506. var g = this, p = this.options;
  16507. if (g.trigger('beforeAddTabItem', [options]) == false)
  16508. return false;
  16509. var tabid = options.tabid;
  16510. if (tabid == undefined) tabid = g.getNewTabid();
  16511. var url = options.url, content = options.content, text = options.text, showClose = options.showClose, height = options.height;
  16512. //如果已经存在
  16513. if (g.isTabItemExist(tabid))
  16514. {
  16515. g.selectTabItem(tabid);
  16516. return;
  16517. }
  16518. var tabitem = $("<li><a></a><div class='l-tab-links-item-left'></div><div class='l-tab-links-item-right'></div><div class='l-tab-links-item-close'></div></li>");
  16519. var contentitem = $("<div class='l-tab-content-item'><div class='l-tab-loading' style='display:block;'></div><iframe frameborder='0'></iframe></div>");
  16520. var iframeloading = $("div:first", contentitem);
  16521. var iframe = $("iframe:first", contentitem);
  16522. if (g.makeFullHeight)
  16523. {
  16524. var newheight = g.tab.height() - g.tab.links.height();
  16525. contentitem.height(newheight);
  16526. }
  16527. tabitem.attr("tabid", tabid);
  16528. contentitem.attr("tabid", tabid);
  16529. if (url)
  16530. {
  16531. iframe[0].tab = g;//增加iframe对tab对象的引用
  16532. iframe.attr("name", tabid)
  16533. .attr("id", tabid)
  16534. .attr("src", url)
  16535. .bind('load.tab', function ()
  16536. {
  16537. iframeloading.hide();
  16538. if (options.callback)
  16539. options.callback();
  16540. });
  16541. }
  16542. else
  16543. {
  16544. iframe.remove();
  16545. iframeloading.remove();
  16546. }
  16547. if (content)
  16548. {
  16549. contentitem.html(content);
  16550. if (options.callback)
  16551. options.callback();
  16552. }
  16553. else if (options.target)
  16554. {
  16555. contentitem.append(options.target);
  16556. if (options.callback)
  16557. options.callback();
  16558. }
  16559. if (showClose == undefined) showClose = true;
  16560. if (showClose == false) $(".l-tab-links-item-close", tabitem).remove();
  16561. if (text == undefined) text = tabid;
  16562. if (height) contentitem.height(height);
  16563. $("a", tabitem).text(text);
  16564. if ($(".l-tab-itemswitch", g.tab.links.ul).length)
  16565. {
  16566. tabitem.insertBefore($(".l-tab-itemswitch", g.tab.links.ul));
  16567. } else
  16568. {
  16569. g.tab.links.ul.append(tabitem);
  16570. }
  16571. g.tab.content.append(contentitem);
  16572. g.selectTabItem(tabid);
  16573. if (g.setTabButton())
  16574. {
  16575. g.moveToTabItem(tabid);
  16576. }
  16577. //增加事件
  16578. g._addTabItemEvent(tabitem);
  16579. if (p.dragToMove && $.fn.ligerDrag)
  16580. {
  16581. g.drags = g.drags || [];
  16582. tabitem.each(function ()
  16583. {
  16584. g.drags.push(g._applyDrag(this));
  16585. });
  16586. }
  16587. g.toggleSwitch();
  16588. g.trigger('afterAddTabItem', [options]);
  16589. },
  16590. _addTabItemEvent: function (tabitem)
  16591. {
  16592. var g = this, p = this.options;
  16593. tabitem.click(function ()
  16594. {
  16595. var tabid = $(this).attr("tabid");
  16596. g.selectTabItem(tabid);
  16597. });
  16598. //右键事件支持
  16599. g.tab.menu && g._addTabItemContextMenuEven(tabitem);
  16600. $(".l-tab-links-item-close", tabitem).hover(function ()
  16601. {
  16602. $(this).addClass("l-tab-links-item-close-over");
  16603. }, function ()
  16604. {
  16605. $(this).removeClass("l-tab-links-item-close-over");
  16606. }).click(function ()
  16607. {
  16608. var tabid = $(this).parent().attr("tabid");
  16609. g.removeTabItem(tabid);
  16610. });
  16611. },
  16612. //移除tab项
  16613. removeTabItem: function (tabid)
  16614. {
  16615. var g = this, p = this.options;
  16616. if (g.trigger('beforeRemoveTabItem', [tabid]) == false)
  16617. return false;
  16618. var currentIsSelected = $("li[tabid=" + tabid + "]", g.tab.links.ul).hasClass("l-selected");
  16619. if (currentIsSelected)
  16620. {
  16621. $(".l-tab-content-item[tabid=" + tabid + "]", g.tab.content).prev().show();
  16622. $("li[tabid=" + tabid + "]", g.tab.links.ul).prev().addClass("l-selected").siblings().removeClass("l-selected");
  16623. }
  16624. var contentItem = $(".l-tab-content-item[tabid=" + tabid + "]", g.tab.content);
  16625. var jframe = $('iframe', contentItem);
  16626. if (jframe.length)
  16627. {
  16628. var frame = jframe[0];
  16629. frame.src = "about:blank";
  16630. frame.contentWindow.document.write('');
  16631. $.browser.msie && CollectGarbage();
  16632. jframe.remove();
  16633. }
  16634. contentItem.remove();
  16635. $("li[tabid=" + tabid + "]", g.tab.links.ul).remove();
  16636. g.setTabButton();
  16637. g.trigger('afterRemoveTabItem', [tabid]);
  16638. },
  16639. addHeight: function (heightDiff)
  16640. {
  16641. var g = this, p = this.options;
  16642. var newHeight = g.tab.height() + heightDiff;
  16643. g.setHeight(newHeight);
  16644. },
  16645. setHeight: function (height)
  16646. {
  16647. var g = this, p = this.options;
  16648. g.tab.height(height);
  16649. g.setContentHeight();
  16650. },
  16651. setContentHeight: function ()
  16652. {
  16653. var g = this, p = this.options;
  16654. var newheight = g.tab.height() - g.tab.links.height();
  16655. g.tab.content.height(newheight);
  16656. $("> .l-tab-content-item", g.tab.content).height(newheight);
  16657. },
  16658. getNewTabid: function ()
  16659. {
  16660. var g = this, p = this.options;
  16661. g.getnewidcount = g.getnewidcount || 0;
  16662. return 'tabitem' + (++g.getnewidcount);
  16663. },
  16664. //notabid 过滤掉tabid的
  16665. //noclose 过滤掉没有关闭按钮的
  16666. getTabidList: function (notabid, noclose)
  16667. {
  16668. var g = this, p = this.options;
  16669. var tabidlist = [];
  16670. $("> li", g.tab.links.ul).each(function ()
  16671. {
  16672. if ($(this).attr("tabid")
  16673. && $(this).attr("tabid") != notabid
  16674. && (!noclose || $(".l-tab-links-item-close", this).length > 0))
  16675. {
  16676. tabidlist.push($(this).attr("tabid"));
  16677. }
  16678. });
  16679. return tabidlist;
  16680. },
  16681. removeOther: function (tabid, compel)
  16682. {
  16683. var g = this, p = this.options;
  16684. var tabidlist = g.getTabidList(tabid, true);
  16685. $(tabidlist).each(function ()
  16686. {
  16687. g.removeTabItem(this);
  16688. });
  16689. },
  16690. reload: function (tabid)
  16691. {
  16692. var g = this, p = this.options;
  16693. var contentitem = $(".l-tab-content-item[tabid=" + tabid + "]");
  16694. var iframeloading = $(".l-tab-loading:first", contentitem);
  16695. var iframe = $("iframe:first", contentitem);
  16696. var url = $(iframe).attr("src");
  16697. iframeloading.show();
  16698. iframe.attr("src", url).unbind('load.tab').bind('load.tab', function ()
  16699. {
  16700. iframeloading.hide();
  16701. });
  16702. },
  16703. removeAll: function (compel)
  16704. {
  16705. var g = this, p = this.options;
  16706. var tabidlist = g.getTabidList(null, true);
  16707. $(tabidlist).each(function ()
  16708. {
  16709. g.removeTabItem(this);
  16710. });
  16711. },
  16712. onResize: function ()
  16713. {
  16714. var g = this, p = this.options;
  16715. if (!p.height || typeof (p.height) != 'string' || p.height.indexOf('%') == -1) return false;
  16716. //set tab height
  16717. if (g.tab.parent()[0].tagName.toLowerCase() == "body")
  16718. {
  16719. var windowHeight = $(window).height();
  16720. windowHeight -= parseInt(g.tab.parent().css('paddingTop'));
  16721. windowHeight -= parseInt(g.tab.parent().css('paddingBottom'));
  16722. g.height = p.heightDiff + windowHeight * parseFloat(g.height) * 0.01;
  16723. }
  16724. else
  16725. {
  16726. g.height = p.heightDiff + (g.tab.parent().height() * parseFloat(p.height) * 0.01);
  16727. }
  16728. g.tab.height(g.height);
  16729. g.setContentHeight();
  16730. },
  16731. _menuItemClick: function (item)
  16732. {
  16733. var g = this, p = this.options;
  16734. if (!item.id || !g.actionTabid) return;
  16735. switch (item.id)
  16736. {
  16737. case "close":
  16738. if (g.trigger('close') == false) return;
  16739. g.removeTabItem(g.actionTabid);
  16740. g.actionTabid = null;
  16741. break;
  16742. case "closeother":
  16743. if (g.trigger('closeother') == false) return;
  16744. g.removeOther(g.actionTabid);
  16745. break;
  16746. case "closeall":
  16747. if (g.trigger('closeall') == false) return;
  16748. g.removeAll();
  16749. g.actionTabid = null;
  16750. break;
  16751. case "reload":
  16752. if (g.trigger('reload', [{ tabid: g.actionTabid }]) == false) return;
  16753. g.selectTabItem(g.actionTabid);
  16754. g.reload(g.actionTabid);
  16755. break;
  16756. }
  16757. },
  16758. _addTabItemContextMenuEven: function (tabitem)
  16759. {
  16760. var g = this, p = this.options;
  16761. tabitem.bind("contextmenu", function (e)
  16762. {
  16763. if (!g.tab.menu) return;
  16764. g.actionTabid = tabitem.attr("tabid");
  16765. g.tab.menu.show({ top: e.pageY, left: e.pageX });
  16766. if ($(".l-tab-links-item-close", this).length == 0)
  16767. {
  16768. g.tab.menu.setDisabled('close');
  16769. }
  16770. else
  16771. {
  16772. g.tab.menu.setEnabled('close');
  16773. }
  16774. return false;
  16775. });
  16776. }
  16777. });
  16778. })(jQuery);/**
  16779. * jQuery ligerUI 1.2.4
  16780. *
  16781. * http://ligerui.com
  16782. *
  16783. * Author daomi 2014 [ gd_star@163.com ]
  16784. *
  16785. */
  16786. (function ($)
  16787. {
  16788. $.fn.ligerTextBox = function ()
  16789. {
  16790. return $.ligerui.run.call(this, "ligerTextBox", arguments);
  16791. };
  16792. $.fn.ligerGetTextBoxManager = function ()
  16793. {
  16794. return $.ligerui.run.call(this, "ligerGetTextBoxManager", arguments);
  16795. };
  16796. $.ligerDefaults.TextBox = {
  16797. onChangeValue: null,
  16798. onMouseOver: null,
  16799. onMouseOut: null,
  16800. onBlur: null,
  16801. onFocus: null,
  16802. width: null,
  16803. disabled: false,
  16804. value: null, //初始化值
  16805. nullText: null, //不能为空时的提示
  16806. digits: false, //是否限定为数字输入框
  16807. number: false, //是否限定为浮点数格式输入框
  16808. currency: false, //是否显示为货币形式
  16809. readonly: false //是否只读
  16810. };
  16811. $.ligerui.controls.TextBox = function (element, options)
  16812. {
  16813. $.ligerui.controls.TextBox.base.constructor.call(this, element, options);
  16814. };
  16815. $.ligerui.controls.TextBox.ligerExtend($.ligerui.controls.Input, {
  16816. __getType: function ()
  16817. {
  16818. return 'TextBox'
  16819. },
  16820. __idPrev: function ()
  16821. {
  16822. return 'TextBox';
  16823. },
  16824. _init: function ()
  16825. {
  16826. $.ligerui.controls.TextBox.base._init.call(this);
  16827. var g = this, p = this.options;
  16828. if (!p.width)
  16829. {
  16830. p.width = $(g.element).width();
  16831. }
  16832. if ($(this.element).attr("readonly"))
  16833. {
  16834. p.readonly = true;
  16835. } else if (p.readonly)
  16836. {
  16837. $(this.element).attr("readonly", true);
  16838. }
  16839. },
  16840. _render: function ()
  16841. {
  16842. var g = this, p = this.options;
  16843. g.inputText = $(this.element);
  16844. //外层
  16845. g.wrapper = g.inputText.wrap('<div class="l-text"></div>').parent();
  16846. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  16847. if (!g.inputText.hasClass("l-text-field"))
  16848. g.inputText.addClass("l-text-field");
  16849. this._setEvent();
  16850. if (p.digits || p.number || p.currency)
  16851. {
  16852. g.inputText.addClass("l-text-field-number");
  16853. }
  16854. g.set(p);
  16855. g.checkValue();
  16856. },
  16857. destroy: function ()
  16858. {
  16859. var g = this;
  16860. if (g.wrapper)
  16861. {
  16862. g.wrapper.remove();
  16863. }
  16864. g.options = null;
  16865. liger.remove(this);
  16866. },
  16867. _getValue: function ()
  16868. {
  16869. return this.inputText.val();
  16870. },
  16871. _setNullText: function ()
  16872. {
  16873. this.checkNotNull();
  16874. },
  16875. checkValue: function ()
  16876. {
  16877. var g = this, p = this.options;
  16878. var v = g.inputText.val() || "";
  16879. if (p.currency) v = v.replace(/\$|\,/g, '');
  16880. var isFloat = p.number || p.currency, isDigits = p.digits;
  16881. if (v != "" && isFloat && !/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(v) || isDigits && !/^\d+$/.test(v))
  16882. {
  16883. if (g.value != null)
  16884. {
  16885. //不符合,恢复到原来的值
  16886. g.inputText.val(g.value);
  16887. }
  16888. else
  16889. {
  16890. g.inputText.val('');
  16891. }
  16892. p.currency && g.inputText.val(currencyFormatter(g.value));
  16893. return;
  16894. }
  16895. g.value = v;
  16896. p.currency && g.inputText.val(currencyFormatter(g.value));
  16897. },
  16898. checkNotNull: function ()
  16899. {
  16900. var g = this, p = this.options;
  16901. if (p.nullText && !p.disabled)
  16902. {
  16903. if (!g.inputText.val())
  16904. {
  16905. g.inputText.addClass("l-text-field-null").val(p.nullText);
  16906. }
  16907. }
  16908. },
  16909. _setEvent: function ()
  16910. {
  16911. var g = this, p = this.options;
  16912. g.inputText.bind('blur.textBox', function ()
  16913. {
  16914. g.trigger('blur');
  16915. g.checkNotNull();
  16916. g.checkValue();
  16917. g.wrapper.removeClass("l-text-focus");
  16918. }).bind('focus.textBox', function ()
  16919. {
  16920. g.trigger('focus');
  16921. if (p.nullText)
  16922. {
  16923. if ($(this).hasClass("l-text-field-null"))
  16924. {
  16925. $(this).removeClass("l-text-field-null").val("");
  16926. }
  16927. }
  16928. g.wrapper.addClass("l-text-focus");
  16929. })
  16930. .change(function ()
  16931. {
  16932. g.trigger('changeValue', [this.value]);
  16933. });
  16934. g.wrapper.hover(function ()
  16935. {
  16936. g.trigger('mouseOver');
  16937. g.wrapper.addClass("l-text-over");
  16938. }, function ()
  16939. {
  16940. g.trigger('mouseOut');
  16941. g.wrapper.removeClass("l-text-over");
  16942. });
  16943. },
  16944. _setDisabled: function (value)
  16945. {
  16946. var g = this, p = this.options;
  16947. if (value)
  16948. {
  16949. this.inputText.attr("readonly", "readonly");
  16950. this.wrapper.addClass("l-text-disabled");
  16951. }
  16952. else if (!p.readonly)
  16953. {
  16954. this.inputText.removeAttr("readonly");
  16955. this.wrapper.removeClass('l-text-disabled');
  16956. }
  16957. },
  16958. _setWidth: function (value)
  16959. {
  16960. if (value > 20)
  16961. {
  16962. this.wrapper.css({ width: value });
  16963. this.inputText.css({ width: value - 4 });
  16964. }
  16965. },
  16966. _setHeight: function (value)
  16967. {
  16968. if (value > 10)
  16969. {
  16970. this.wrapper.height(value);
  16971. this.inputText.height(value - 2);
  16972. }
  16973. },
  16974. _setValue: function (value)
  16975. {
  16976. if (value != null)
  16977. this.inputText.val(value);
  16978. },
  16979. _setLabel: function (value)
  16980. {
  16981. var g = this, p = this.options;
  16982. if (!g.labelwrapper)
  16983. {
  16984. g.labelwrapper = g.wrapper.wrap('<div class="l-labeltext"></div>').parent();
  16985. var lable = $('<div class="l-text-label" style="float:left;">' + value + ':&nbsp</div>');
  16986. g.labelwrapper.prepend(lable);
  16987. g.wrapper.css('float', 'left');
  16988. if (!p.labelWidth)
  16989. {
  16990. p.labelWidth = lable.width();
  16991. }
  16992. else
  16993. {
  16994. g._setLabelWidth(p.labelWidth);
  16995. }
  16996. lable.height(g.wrapper.height());
  16997. if (p.labelAlign)
  16998. {
  16999. g._setLabelAlign(p.labelAlign);
  17000. }
  17001. g.labelwrapper.append('<br style="clear:both;" />');
  17002. g.labelwrapper.width(p.labelWidth + p.width + 2);
  17003. }
  17004. else
  17005. {
  17006. g.labelwrapper.find(".l-text-label").html(value + ':&nbsp');
  17007. }
  17008. },
  17009. _setLabelWidth: function (value)
  17010. {
  17011. var g = this, p = this.options;
  17012. if (!g.labelwrapper) return;
  17013. g.labelwrapper.find(".l-text-label").width(value);
  17014. },
  17015. _setLabelAlign: function (value)
  17016. {
  17017. var g = this, p = this.options;
  17018. if (!g.labelwrapper) return;
  17019. g.labelwrapper.find(".l-text-label").css('text-align', value);
  17020. },
  17021. updateStyle: function ()
  17022. {
  17023. var g = this, p = this.options;
  17024. if (g.inputText.attr('readonly'))
  17025. {
  17026. g.wrapper.addClass("l-text-readonly");
  17027. p.disabled = true;
  17028. }
  17029. else
  17030. {
  17031. g.wrapper.removeClass("l-text-readonly");
  17032. p.disabled = false;
  17033. }
  17034. if (g.inputText.attr('disabled'))
  17035. {
  17036. g.wrapper.addClass("l-text-disabled");
  17037. p.disabled = true;
  17038. }
  17039. else
  17040. {
  17041. g.wrapper.removeClass("l-text-disabled");
  17042. p.disabled = false;
  17043. }
  17044. if (g.inputText.hasClass("l-text-field-null") && g.inputText.val() != p.nullText)
  17045. {
  17046. g.inputText.removeClass("l-text-field-null");
  17047. }
  17048. g.checkValue();
  17049. }
  17050. });
  17051. function currencyFormatter(num)
  17052. {
  17053. if (!num) return "0.00";
  17054. num = num.toString().replace(/\$|\,/g, '');
  17055. if (isNaN(num))
  17056. num = "0.00";
  17057. sign = (num == (num = Math.abs(num)));
  17058. num = Math.floor(num * 100 + 0.50000000001);
  17059. cents = num % 100;
  17060. num = Math.floor(num / 100).toString();
  17061. if (cents < 10)
  17062. cents = "0" + cents;
  17063. for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3) ; i++)
  17064. num = num.substring(0, num.length - (4 * i + 3)) + ',' +
  17065. num.substring(num.length - (4 * i + 3));
  17066. return "" + (((sign) ? '' : '-') + '' + num + '.' + cents);
  17067. }
  17068. })(jQuery);/**
  17069. * jQuery ligerUI 1.2.4
  17070. *
  17071. * http://ligerui.com
  17072. *
  17073. * Author daomi 2014 [ gd_star@163.com ]
  17074. *
  17075. */
  17076. (function ($)
  17077. {
  17078. //气泡,可以在制定位置显示
  17079. $.ligerTip = function (p)
  17080. {
  17081. return $.ligerui.run.call(null, "ligerTip", arguments);
  17082. };
  17083. //在指定Dom Element右侧显示气泡
  17084. //target:将ligerui对象ID附加上
  17085. $.fn.ligerTip = function (options)
  17086. {
  17087. this.each(function ()
  17088. {
  17089. var p = $.extend({}, $.ligerDefaults.ElementTip, options || {});
  17090. p.target = p.target || this;
  17091. //如果是自动模式:鼠标经过时显示,移开时关闭
  17092. if (p.auto || options == undefined)
  17093. {
  17094. if (!p.content)
  17095. {
  17096. p.content = this.title;
  17097. if (p.removeTitle)
  17098. $(this).removeAttr("title");
  17099. }
  17100. p.content = p.content || this.title;
  17101. $(this).bind('mouseover.tip', function ()
  17102. {
  17103. p.x = $(this).offset().left + $(this).width() + (p.distanceX || 0);
  17104. p.y = $(this).offset().top + (p.distanceY || 0);
  17105. $.ligerTip(p);
  17106. }).bind('mouseout.tip', function ()
  17107. {
  17108. var tipmanager = $.ligerui.managers[this.ligeruitipid];
  17109. if (tipmanager)
  17110. {
  17111. tipmanager.remove();
  17112. }
  17113. });
  17114. }
  17115. else
  17116. {
  17117. if (p.target.ligeruitipid) return;
  17118. p.x = $(this).offset().left + $(this).width() + (p.distanceX || 0);
  17119. p.y = $(this).offset().top + (p.distanceY || 0);
  17120. p.x = p.x || 0;
  17121. p.y = p.y || 0;
  17122. $.ligerTip(p);
  17123. }
  17124. });
  17125. return $.ligerui.get(this, 'ligeruitipid');
  17126. };
  17127. //关闭指定在Dom Element(附加了ligerui对象ID,属性名"ligeruitipid")显示的气泡
  17128. $.fn.ligerHideTip = function (options)
  17129. {
  17130. return this.each(function ()
  17131. {
  17132. var p = options || {};
  17133. if (p.isLabel == undefined)
  17134. {
  17135. //如果是lable,将查找指定的input,并找到ligerui对象ID
  17136. p.isLabel = this.tagName.toLowerCase() == "label" && $(this).attr("for") != null;
  17137. }
  17138. var target = this;
  17139. if (p.isLabel)
  17140. {
  17141. var forele = $("#" + $(this).attr("for"));
  17142. if (forele.length == 0) return;
  17143. target = forele[0];
  17144. }
  17145. var tipmanager = $.ligerui.managers[target.ligeruitipid];
  17146. if (tipmanager)
  17147. {
  17148. tipmanager.remove();
  17149. }
  17150. }).unbind('mouseover.tip').unbind('mouseout.tip');
  17151. };
  17152. $.fn.ligerGetTipManager = function ()
  17153. {
  17154. return $.ligerui.get(this);
  17155. };
  17156. $.ligerDefaults = $.ligerDefaults || {};
  17157. //隐藏气泡
  17158. $.ligerDefaults.HideTip = {};
  17159. //气泡
  17160. $.ligerDefaults.Tip = {
  17161. content: null,
  17162. callback: null,
  17163. width: 150,
  17164. height: null,
  17165. x: 0,
  17166. y: 0,
  17167. appendIdTo: null, //保存ID到那一个对象(jQuery)(待移除)
  17168. target: null,
  17169. auto: null, //是否自动模式,如果是,那么:鼠标经过时显示,移开时关闭,并且当content为空时自动读取attr[title]
  17170. removeTitle: true //自动模式时,默认是否移除掉title
  17171. };
  17172. //在指定Dom Element右侧显示气泡,通过$.fn.ligerTip调用
  17173. $.ligerDefaults.ElementTip = {
  17174. distanceX: 1,
  17175. distanceY: -3,
  17176. auto: null,
  17177. removeTitle: true
  17178. };
  17179. $.ligerMethos.Tip = {};
  17180. $.ligerui.controls.Tip = function (options)
  17181. {
  17182. $.ligerui.controls.Tip.base.constructor.call(this, null, options);
  17183. };
  17184. $.ligerui.controls.Tip.ligerExtend($.ligerui.core.UIComponent, {
  17185. __getType: function ()
  17186. {
  17187. return 'Tip';
  17188. },
  17189. __idPrev: function ()
  17190. {
  17191. return 'Tip';
  17192. },
  17193. _extendMethods: function ()
  17194. {
  17195. return $.ligerMethos.Tip;
  17196. },
  17197. _render: function ()
  17198. {
  17199. var g = this, p = this.options;
  17200. var tip = $('<div class="l-verify-tip"><div class="l-verify-tip-corner"></div><div class="l-verify-tip-content"></div></div>');
  17201. g.tip = tip;
  17202. g.tip.attr("id", g.id);
  17203. if (p.content)
  17204. {
  17205. $("> .l-verify-tip-content:first", tip).html(p.content);
  17206. tip.appendTo('body');
  17207. }
  17208. else
  17209. {
  17210. return;
  17211. }
  17212. tip.css({ left: p.x, top: p.y }).show();
  17213. p.width && $("> .l-verify-tip-content:first", tip).width(p.width - 8);
  17214. p.height && $("> .l-verify-tip-content:first", tip).width(p.height);
  17215. eee = p.appendIdTo;
  17216. if (p.appendIdTo)
  17217. {
  17218. p.appendIdTo.attr("ligerTipId", g.id);
  17219. }
  17220. if (p.target)
  17221. {
  17222. $(p.target).attr("ligerTipId", g.id);
  17223. p.target.ligeruitipid = g.id;
  17224. }
  17225. p.callback && p.callback(tip);
  17226. g.set(p);
  17227. },
  17228. _setContent: function (content)
  17229. {
  17230. $("> .l-verify-tip-content:first", this.tip).html(content);
  17231. },
  17232. remove: function ()
  17233. {
  17234. if (this.options.appendIdTo)
  17235. {
  17236. this.options.appendIdTo.removeAttr("ligerTipId");
  17237. }
  17238. if (this.options.target)
  17239. {
  17240. $(this.options.target).removeAttr("ligerTipId");
  17241. this.options.target.ligeruitipid = null;
  17242. }
  17243. this.tip.remove();
  17244. }
  17245. });
  17246. })(jQuery);/**
  17247. * jQuery ligerUI 1.2.4
  17248. *
  17249. * http://ligerui.com
  17250. *
  17251. * Author daomi 2014 [ gd_star@163.com ]
  17252. *
  17253. */
  17254. (function ($)
  17255. {
  17256. $.fn.ligerToolBar = function (options)
  17257. {
  17258. return $.ligerui.run.call(this, "ligerToolBar", arguments);
  17259. };
  17260. $.fn.ligerGetToolBarManager = function ()
  17261. {
  17262. return $.ligerui.run.call(this, "ligerGetToolBarManager", arguments);
  17263. };
  17264. $.ligerDefaults.ToolBar = {};
  17265. $.ligerMethos.ToolBar = {};
  17266. $.ligerui.controls.ToolBar = function (element, options)
  17267. {
  17268. $.ligerui.controls.ToolBar.base.constructor.call(this, element, options);
  17269. };
  17270. $.ligerui.controls.ToolBar.ligerExtend($.ligerui.core.UIComponent, {
  17271. __getType: function ()
  17272. {
  17273. return 'ToolBar';
  17274. },
  17275. __idPrev: function ()
  17276. {
  17277. return 'ToolBar';
  17278. },
  17279. _extendMethods: function ()
  17280. {
  17281. return $.ligerMethos.ToolBar;
  17282. },
  17283. _render: function ()
  17284. {
  17285. var g = this, p = this.options;
  17286. g.toolbarItemCount = 0;
  17287. g.toolBar = $(this.element);
  17288. g.toolBar.addClass("l-toolbar");
  17289. g.set(p);
  17290. },
  17291. _setItems: function (items)
  17292. {
  17293. var g = this;
  17294. g.toolBar.html("");
  17295. $(items).each(function (i, item)
  17296. {
  17297. g.addItem(item);
  17298. });
  17299. },
  17300. removeItem: function (itemid)
  17301. {
  17302. var g = this, p = this.options;
  17303. $("> .l-toolbar-item[toolbarid=" + itemid + "]", g.toolBar).remove();
  17304. },
  17305. setEnabled: function (itemid)
  17306. {
  17307. var g = this, p = this.options;
  17308. $("> .l-toolbar-item[toolbarid=" + itemid + "]", g.toolBar).removeClass("l-toolbar-item-disable");
  17309. },
  17310. setDisabled: function (itemid)
  17311. {
  17312. var g = this, p = this.options;
  17313. $("> .l-toolbar-item[toolbarid=" + itemid + "]", g.toolBar).addClass("l-toolbar-item-disable");
  17314. },
  17315. isEnable: function (itemid)
  17316. {
  17317. var g = this, p = this.options;
  17318. return !$("> .l-toolbar-item[toolbarid=" + itemid + "]", g.toolBar).hasClass("l-toolbar-item-disable");
  17319. },
  17320. addItem: function (item)
  17321. {
  17322. var g = this, p = this.options;
  17323. if (item.line || item.type == "line")
  17324. {
  17325. g.toolBar.append('<div class="l-bar-separator"></div>');
  17326. return;
  17327. }
  17328. if (item.type == "text")
  17329. {
  17330. g.toolBar.append('<div class="l-toolbar-item l-toolbar-text"><span>' + item.text || "" + '</span></div>');
  17331. return;
  17332. }
  17333. var ditem = $('<div class="l-toolbar-item l-panel-btn"><span></span><div class="l-panel-btn-l"></div><div class="l-panel-btn-r"></div></div>');
  17334. g.toolBar.append(ditem);
  17335. if(!item.id) item.id = 'item-'+(++g.toolbarItemCount);
  17336. ditem.attr("toolbarid", item.id);
  17337. if (item.img)
  17338. {
  17339. ditem.append("<img src='" + item.img + "' />");
  17340. ditem.addClass("l-toolbar-item-hasicon");
  17341. }
  17342. else if (item.icon)
  17343. {
  17344. ditem.append("<div class='l-icon l-icon-" + item.icon + "'></div>");
  17345. ditem.addClass("l-toolbar-item-hasicon");
  17346. }
  17347. else if (item.color)
  17348. {
  17349. ditem.append("<div class='l-toolbar-item-color' style='background:"+item.color+"'></div>");
  17350. ditem.addClass("l-toolbar-item-hasicon");
  17351. }
  17352. item.text && $("span:first", ditem).html(item.text);
  17353. item.disable && ditem.addClass("l-toolbar-item-disable");
  17354. item.click && ditem.click(function () { if ($(this).hasClass("l-toolbar-item-disable")) return;item.click(item); });
  17355. if (item.menu)
  17356. {
  17357. item.menu = $.ligerMenu(item.menu);
  17358. ditem.hover(function ()
  17359. {
  17360. if ($(this).hasClass("l-toolbar-item-disable")) return;
  17361. g.actionMenu && g.actionMenu.hide();
  17362. var left = $(this).offset().left;
  17363. var top = $(this).offset().top + $(this).height();
  17364. item.menu.show({ top: top, left: left });
  17365. g.actionMenu = item.menu;
  17366. $(this).addClass("l-panel-btn-over");
  17367. }, function ()
  17368. {
  17369. if ($(this).hasClass("l-toolbar-item-disable")) return;
  17370. $(this).removeClass("l-panel-btn-over");
  17371. });
  17372. }
  17373. else
  17374. {
  17375. ditem.hover(function ()
  17376. {
  17377. if ($(this).hasClass("l-toolbar-item-disable")) return;
  17378. $(this).addClass("l-panel-btn-over");
  17379. }, function ()
  17380. {
  17381. if ($(this).hasClass("l-toolbar-item-disable")) return;
  17382. $(this).removeClass("l-panel-btn-over");
  17383. });
  17384. }
  17385. }
  17386. });
  17387. //旧写法保留
  17388. $.ligerui.controls.ToolBar.prototype.setEnable = $.ligerui.controls.ToolBar.prototype.setEnabled;
  17389. $.ligerui.controls.ToolBar.prototype.setDisable = $.ligerui.controls.ToolBar.prototype.setDisabled;
  17390. })(jQuery);/**
  17391. * jQuery ligerUI 1.2.4
  17392. *
  17393. * http://ligerui.com
  17394. *
  17395. * Author daomi 2014 [ gd_star@163.com ]
  17396. *
  17397. */
  17398. (function ($)
  17399. {
  17400. $.fn.ligerTree = function (options)
  17401. {
  17402. return $.ligerui.run.call(this, "ligerTree", arguments);
  17403. };
  17404. $.fn.ligerGetTreeManager = function ()
  17405. {
  17406. return $.ligerui.run.call(this, "ligerGetTreeManager", arguments);
  17407. };
  17408. $.ligerDefaults.Tree = {
  17409. url: null,
  17410. data: null,
  17411. checkbox: true,
  17412. autoCheckboxEven: true,
  17413. parentIcon: 'folder',
  17414. childIcon: 'leaf',
  17415. textFieldName: 'text',
  17416. attribute: ['id', 'url'],
  17417. treeLine: true, //是否显示line
  17418. nodeWidth: 90,
  17419. statusName: '__status',
  17420. isLeaf: null, //是否子节点的判断函数
  17421. single: false, //是否单选
  17422. needCancel: true, //已选的是否需要取消操作
  17423. onBeforeExpand: function () { },
  17424. onContextmenu: function () { },
  17425. onExpand: function () { },
  17426. onBeforeCollapse: function () { },
  17427. onCollapse: function () { },
  17428. onBeforeSelect: function () { },
  17429. onSelect: function () { },
  17430. onBeforeCancelSelect: function () { },
  17431. onCancelselect: function () { },
  17432. onCheck: function () { },
  17433. onSuccess: function () { },
  17434. onError: function () { },
  17435. onClick: function () { },
  17436. idFieldName: 'id',
  17437. parentIDFieldName: null,
  17438. topParentIDValue: 0,
  17439. onBeforeAppend: function () { }, //加载数据前事件,可以通过return false取消操作
  17440. onAppend: function () { }, //加载数据时事件,对数据进行预处理以后
  17441. onAfterAppend: function () { }, //加载数据完事件
  17442. slide: true, //是否以动画的形式显示
  17443. iconFieldName: 'icon',
  17444. nodeDraggable: false, //是否允许拖拽
  17445. nodeDraggingRender: null,
  17446. btnClickToToggleOnly: true, //是否点击展开/收缩 按钮时才有效
  17447. ajaxType: 'post',
  17448. render: null, //自定义函数
  17449. selectable: null, //可选择判断函数
  17450. /*
  17451. 是否展开
  17452. 1,可以是true/false
  17453. 2,也可以是数字(层次)N 代表第1层到第N层都是展开的,其他收缩
  17454. 3,或者是判断函数 函数参数e(data,level) 返回true/false
  17455. 优先级没有节点数据的isexpand属性高,并没有delay属性高
  17456. */
  17457. isExpand: null,
  17458. /*
  17459. 是否延迟加载
  17460. 1,可以是true/false
  17461. 2,也可以是数字(层次)N 代表第N层延迟加载
  17462. 3,或者是字符串(Url) 加载数据的远程地址
  17463. 4,如果是数组,代表这些层都延迟加载,如[1,2]代表第1、2层延迟加载
  17464. 5,再是函数(运行时动态获取延迟加载参数) 函数参数e(data,level),返回true/false或者{url:...,parms:...}
  17465. 优先级没有节点数据的delay属性高
  17466. */
  17467. delay: null
  17468. };
  17469. $.ligerui.controls.Tree = function (element, options)
  17470. {
  17471. $.ligerui.controls.Tree.base.constructor.call(this, element, options);
  17472. };
  17473. $.ligerui.controls.Tree.ligerExtend($.ligerui.core.UIComponent, {
  17474. _init: function ()
  17475. {
  17476. $.ligerui.controls.Tree.base._init.call(this);
  17477. var g = this, p = this.options;
  17478. if (p.single) p.autoCheckboxEven = false;
  17479. },
  17480. _render: function ()
  17481. {
  17482. var g = this, p = this.options;
  17483. g.set(p, true);
  17484. g.tree = $(g.element);
  17485. g.tree.addClass('l-tree');
  17486. g.toggleNodeCallbacks = [];
  17487. g.sysAttribute = ['isexpand', 'ischecked', 'href', 'style','delay'];
  17488. g.loading = $("<div class='l-tree-loading'></div>");
  17489. g.tree.after(g.loading);
  17490. g.data = [];
  17491. g.maxOutlineLevel = 1;
  17492. g.treedataindex = 0;
  17493. g._applyTree();
  17494. g._setTreeEven();
  17495. g.set(p, false);
  17496. },
  17497. _setTreeLine: function (value)
  17498. {
  17499. if (value) this.tree.removeClass("l-tree-noline");
  17500. else this.tree.addClass("l-tree-noline");
  17501. },
  17502. _setParms: function ()
  17503. {
  17504. var g = this, p = this.options;
  17505. if ($.isFunction(p.parms)) p.parms = p.parms();
  17506. },
  17507. _setUrl: function (url)
  17508. {
  17509. var g = this, p = this.options;
  17510. if (url)
  17511. {
  17512. g.clear();
  17513. g.loadData(null, url);
  17514. }
  17515. },
  17516. _setData: function (data)
  17517. {
  17518. if (data)
  17519. {
  17520. this.clear();
  17521. this.append(null, data);
  17522. }
  17523. },
  17524. setData: function (data)
  17525. {
  17526. this.set('data', data);
  17527. },
  17528. getData: function ()
  17529. {
  17530. return this.data;
  17531. },
  17532. //是否包含子节点
  17533. hasChildren: function (treenodedata)
  17534. {
  17535. if (this.options.isLeaf) return !this.options.isLeaf(treenodedata);
  17536. return treenodedata.children ? true : false;
  17537. },
  17538. //获取父节点 数据
  17539. getParent: function (treenode, level)
  17540. {
  17541. var g = this;
  17542. treenode = g.getNodeDom(treenode);
  17543. var parentTreeNode = g.getParentTreeItem(treenode, level);
  17544. if (!parentTreeNode) return null;
  17545. var parentIndex = $(parentTreeNode).attr("treedataindex");
  17546. return g._getDataNodeByTreeDataIndex(parentIndex);
  17547. },
  17548. //获取父节点
  17549. getParentTreeItem: function (treenode, level)
  17550. {
  17551. var g = this;
  17552. treenode = g.getNodeDom(treenode);
  17553. var treeitem = $(treenode);
  17554. if (treeitem.parent().hasClass("l-tree"))
  17555. return null;
  17556. if (level == undefined)
  17557. {
  17558. if (treeitem.parent().parent("li").length == 0)
  17559. return null;
  17560. return treeitem.parent().parent("li")[0];
  17561. }
  17562. var currentLevel = parseInt(treeitem.attr("outlinelevel"));
  17563. var currenttreeitem = treeitem;
  17564. for (var i = currentLevel - 1; i >= level; i--)
  17565. {
  17566. currenttreeitem = currenttreeitem.parent().parent("li");
  17567. }
  17568. return currenttreeitem[0];
  17569. },
  17570. getChecked: function ()
  17571. {
  17572. var g = this, p = this.options;
  17573. if (!this.options.checkbox) return null;
  17574. var nodes = [];
  17575. $(".l-checkbox-checked", g.tree).parent().parent("li").each(function ()
  17576. {
  17577. var treedataindex = parseInt($(this).attr("treedataindex"));
  17578. nodes.push({ target: this, data: g._getDataNodeByTreeDataIndex(g.data, treedataindex) });
  17579. });
  17580. return nodes;
  17581. },
  17582. //add by superzoc 12/24/2012
  17583. refreshTree: function () {
  17584. var g = this, p = this.options;
  17585. $.each(this.getChecked(),function(k,v){
  17586. g._setParentCheckboxStatus($(v.target));
  17587. });
  17588. },
  17589. getSelected: function ()
  17590. {
  17591. var g = this, p = this.options;
  17592. var node = {};
  17593. node.target = $(".l-selected", g.tree).parent("li")[0];
  17594. if (node.target)
  17595. {
  17596. var treedataindex = parseInt($(node.target).attr("treedataindex"));
  17597. node.data = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  17598. return node;
  17599. }
  17600. return null;
  17601. },
  17602. //升级为父节点级别
  17603. upgrade: function (treeNode)
  17604. {
  17605. var g = this, p = this.options;
  17606. $(".l-note", treeNode).each(function ()
  17607. {
  17608. $(this).removeClass("l-note").addClass("l-expandable-open");
  17609. });
  17610. $(".l-note-last", treeNode).each(function ()
  17611. {
  17612. $(this).removeClass("l-note-last").addClass("l-expandable-open");
  17613. });
  17614. $("." + g._getChildNodeClassName(), treeNode).each(function ()
  17615. {
  17616. $(this)
  17617. .removeClass(g._getChildNodeClassName())
  17618. .addClass(g._getParentNodeClassName(true));
  17619. });
  17620. },
  17621. //降级为叶节点级别
  17622. demotion: function (treeNode)
  17623. {
  17624. var g = this, p = this.options;
  17625. if (!treeNode && treeNode[0].tagName.toLowerCase() != 'li') return;
  17626. var islast = $(treeNode).hasClass("l-last");
  17627. $(".l-expandable-open", treeNode).each(function ()
  17628. {
  17629. $(this).removeClass("l-expandable-open")
  17630. .addClass(islast ? "l-note-last" : "l-note");
  17631. });
  17632. $(".l-expandable-close", treeNode).each(function ()
  17633. {
  17634. $(this).removeClass("l-expandable-close")
  17635. .addClass(islast ? "l-note-last" : "l-note");
  17636. });
  17637. $("." + g._getParentNodeClassName(true), treeNode).each(function ()
  17638. {
  17639. $(this)
  17640. .removeClass(g._getParentNodeClassName(true))
  17641. .addClass(g._getChildNodeClassName());
  17642. });
  17643. },
  17644. collapseAll: function ()
  17645. {
  17646. var g = this, p = this.options;
  17647. $(".l-expandable-open", g.tree).click();
  17648. },
  17649. expandAll: function ()
  17650. {
  17651. var g = this, p = this.options;
  17652. $(".l-expandable-close", g.tree).click();
  17653. },
  17654. loadData: function (node, url, param,e)
  17655. {
  17656. var g = this, p = this.options;
  17657. e = $.extend({
  17658. showLoading: function ()
  17659. {
  17660. g.loading.show();
  17661. },
  17662. hideLoading: function ()
  17663. {
  17664. g.loading.hide();
  17665. }
  17666. }, e || {});
  17667. var ajaxtype = p.ajaxType;
  17668. param = param || [];
  17669. //请求服务器
  17670. $.ajax({
  17671. type: ajaxtype,
  17672. url: url,
  17673. data: param,
  17674. dataType: 'json',
  17675. beforeSend: function ()
  17676. {
  17677. e.showLoading();
  17678. },
  17679. success: function (data)
  17680. {
  17681. if (!data) return;
  17682. e.hideLoading();
  17683. g.append(node, data);
  17684. g.trigger('success', [data]);
  17685. },
  17686. error: function (XMLHttpRequest, textStatus, errorThrown)
  17687. {
  17688. try
  17689. {
  17690. e.hideLoading();
  17691. g.trigger('error', [XMLHttpRequest, textStatus, errorThrown]);
  17692. }
  17693. catch (e)
  17694. {
  17695. }
  17696. }
  17697. });
  17698. },
  17699. //清空
  17700. clear: function ()
  17701. {
  17702. var g = this, p = this.options;
  17703. g.toggleNodeCallbacks = [];
  17704. g.data = null;
  17705. g.data = [];
  17706. g.nodes = null;
  17707. g.tree.html("");
  17708. },
  17709. //parm [treeNode] dom节点(li)、节点数据 或者节点 dataindex
  17710. getNodeDom: function (nodeParm)
  17711. {
  17712. var g = this, p = this.options;
  17713. if (nodeParm == null) return nodeParm;
  17714. if (typeof (nodeParm) == "string" || typeof (nodeParm) == "number")
  17715. {
  17716. return $("li[treedataindex=" + nodeParm + "]", g.tree).get(0);
  17717. }
  17718. else if (typeof (nodeParm) == "object" && 'treedataindex' in nodeParm) //nodedata
  17719. {
  17720. return g.getNodeDom(nodeParm['treedataindex']);
  17721. }
  17722. return nodeParm;
  17723. },
  17724. hide: function (treeNode)
  17725. {
  17726. var g = this, p = this.options;
  17727. treeNode = g.getNodeDom(treeNode);
  17728. if (treeNode) $(treeNode).hide();
  17729. },
  17730. show: function (treeNode)
  17731. {
  17732. var g = this, p = this.options;
  17733. treeNode = g.getNodeDom(treeNode);
  17734. if (treeNode) $(treeNode).show();
  17735. },
  17736. //parm [treeNode] dom节点(li)、节点数据 或者节点 dataindex
  17737. remove: function (treeNode)
  17738. {
  17739. var g = this, p = this.options;
  17740. treeNode = g.getNodeDom(treeNode);
  17741. var treedataindex = parseInt($(treeNode).attr("treedataindex"));
  17742. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  17743. if (treenodedata) g._setTreeDataStatus([treenodedata], 'delete');
  17744. var parentNode = g.getParentTreeItem(treeNode);
  17745. //复选框处理
  17746. if (p.checkbox)
  17747. {
  17748. g._setParentCheckboxStatus($(treeNode));
  17749. }
  17750. $(treeNode).remove();
  17751. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  17752. },
  17753. _updateStyle: function (ul)
  17754. {
  17755. var g = this, p = this.options;
  17756. var itmes = $(" > li", ul);
  17757. var treeitemlength = itmes.length;
  17758. if (!treeitemlength) return;
  17759. //遍历设置子节点的样式
  17760. itmes.each(function (i, item)
  17761. {
  17762. if (i == 0 && !$(this).hasClass("l-first"))
  17763. $(this).addClass("l-first");
  17764. if (i == treeitemlength - 1 && !$(this).hasClass("l-last"))
  17765. $(this).addClass("l-last");
  17766. if (i == 0 && i == treeitemlength - 1)
  17767. $(this).addClass("l-onlychild");
  17768. $("> div .l-note,> div .l-note-last", this)
  17769. .removeClass("l-note l-note-last")
  17770. .addClass(i == treeitemlength - 1 ? "l-note-last" : "l-note");
  17771. g._setTreeItem(this, { isLast: i == treeitemlength - 1 });
  17772. });
  17773. },
  17774. //parm [domnode] dom节点(li)、节点数据 或者节点 dataindex
  17775. update: function (domnode, newnodedata)
  17776. {
  17777. var g = this, p = this.options;
  17778. domnode = g.getNodeDom(domnode);
  17779. var treedataindex = parseInt($(domnode).attr("treedataindex"));
  17780. nodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  17781. for (var attr in newnodedata)
  17782. {
  17783. nodedata[attr] = newnodedata[attr];
  17784. if (attr == p.textFieldName)
  17785. {
  17786. $("> .l-body > span", domnode).text(newnodedata[attr]);
  17787. }
  17788. }
  17789. },
  17790. //增加节点集合
  17791. //parm [newdata] 数据集合 Array
  17792. //parm [parentNode] dom节点(li)、节点数据 或者节点 dataindex
  17793. //parm [nearNode] 附加到节点的上方/下方(非必填)
  17794. //parm [isAfter] 附加到节点的下方(非必填)
  17795. append: function (parentNode, newdata, nearNode, isAfter)
  17796. {
  17797. var g = this, p = this.options;
  17798. parentNode = g.getNodeDom(parentNode);
  17799. if (g.trigger('beforeAppend', [parentNode, newdata]) == false) return false;
  17800. if (!newdata || !newdata.length) return false;
  17801. if (p.idFieldName && p.parentIDFieldName)
  17802. newdata = g.arrayToTree(newdata, p.idFieldName, p.parentIDFieldName);
  17803. g._addTreeDataIndexToData(newdata);
  17804. g._setTreeDataStatus(newdata, 'add');
  17805. if (nearNode != null)
  17806. {
  17807. nearNode = g.getNodeDom(nearNode);
  17808. }
  17809. g.trigger('append', [parentNode, newdata])
  17810. g._appendData(parentNode, newdata);
  17811. if (parentNode == null)//增加到根节点
  17812. {
  17813. var gridhtmlarr = g._getTreeHTMLByData(newdata, 1, [], true);
  17814. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  17815. if (nearNode != null)
  17816. {
  17817. $(nearNode)[isAfter ? 'after' : 'before'](gridhtmlarr.join(''));
  17818. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  17819. }
  17820. else
  17821. {
  17822. //remove last node class
  17823. if ($("> li:last", g.tree).length > 0)
  17824. g._setTreeItem($("> li:last", g.tree)[0], { isLast: false });
  17825. g.tree.append(gridhtmlarr.join(''));
  17826. }
  17827. $(".l-body", g.tree).hover(function ()
  17828. {
  17829. $(this).addClass("l-over");
  17830. }, function ()
  17831. {
  17832. $(this).removeClass("l-over");
  17833. });
  17834. g._upadteTreeWidth();
  17835. g.trigger('afterAppend', [parentNode, newdata])
  17836. return;
  17837. }
  17838. var treeitem = $(parentNode);
  17839. var outlineLevel = parseInt(treeitem.attr("outlinelevel"));
  17840. var hasChildren = $("> ul", treeitem).length > 0;
  17841. if (!hasChildren)
  17842. {
  17843. treeitem.append("<ul class='l-children'></ul>");
  17844. //设置为父节点
  17845. g.upgrade(parentNode);
  17846. }
  17847. var isLast = [];
  17848. for (var i = 1; i <= outlineLevel - 1; i++)
  17849. {
  17850. var currentParentTreeItem = $(g.getParentTreeItem(parentNode, i));
  17851. isLast.push(currentParentTreeItem.hasClass("l-last"));
  17852. }
  17853. isLast.push(treeitem.hasClass("l-last"));
  17854. var gridhtmlarr = g._getTreeHTMLByData(newdata, outlineLevel + 1, isLast, true);
  17855. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  17856. if (nearNode != null)
  17857. {
  17858. $(nearNode)[isAfter ? 'after' : 'before'](gridhtmlarr.join(''));
  17859. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  17860. }
  17861. else
  17862. {
  17863. //remove last node class
  17864. if ($("> .l-children > li:last", treeitem).length > 0)
  17865. g._setTreeItem($("> .l-children > li:last", treeitem)[0], { isLast: false });
  17866. $(">.l-children", parentNode).append(gridhtmlarr.join(''));
  17867. }
  17868. g._upadteTreeWidth();
  17869. $(">.l-children .l-body", parentNode).hover(function ()
  17870. {
  17871. $(this).addClass("l-over");
  17872. }, function ()
  17873. {
  17874. $(this).removeClass("l-over");
  17875. });
  17876. g.trigger('afterAppend', [parentNode, newdata]);
  17877. },
  17878. //parm [nodeParm] dom节点(li)、节点数据 或者节点 dataindex
  17879. cancelSelect: function (nodeParm)
  17880. {
  17881. var g = this, p = this.options;
  17882. var domNode = g.getNodeDom(nodeParm);
  17883. var treeitem = $(domNode);
  17884. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  17885. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  17886. var treeitembody = $(">div:first", treeitem);
  17887. if (p.checkbox)
  17888. $(".l-checkbox", treeitembody).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  17889. else
  17890. treeitembody.removeClass("l-selected");
  17891. g.trigger('cancelSelect', [{ data: treenodedata, target: treeitem[0] }]);
  17892. },
  17893. //选择节点(参数:条件函数、Dom节点或ID值)
  17894. selectNode: function (selectNodeParm)
  17895. {
  17896. var g = this, p = this.options;
  17897. var clause = null;
  17898. if (typeof (selectNodeParm) == "function")
  17899. {
  17900. clause = selectNodeParm;
  17901. }
  17902. else if (typeof (selectNodeParm) == "object")
  17903. {
  17904. var treeitem = $(selectNodeParm);
  17905. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  17906. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  17907. var treeitembody = $(">div:first", treeitem);
  17908. if (!treeitembody.length)
  17909. {
  17910. treeitembody = $("li[treedataindex=" + treedataindex + "] >div:first", g.tree);
  17911. }
  17912. if (p.checkbox)
  17913. {
  17914. $(".l-checkbox", treeitembody).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  17915. }
  17916. else
  17917. {
  17918. $("div.l-selected", g.tree).removeClass("l-selected");
  17919. treeitembody.addClass("l-selected");
  17920. }
  17921. g.trigger('select', [{ data: treenodedata, target: treeitembody.parent().get(0) }]);
  17922. return;
  17923. }
  17924. else
  17925. {
  17926. clause = function (data)
  17927. {
  17928. if (!data[p.idFieldName]) return false;
  17929. return data[p.idFieldName].toString() == selectNodeParm.toString();
  17930. };
  17931. }
  17932. $("li", g.tree).each(function ()
  17933. {
  17934. var treeitem = $(this);
  17935. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  17936. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  17937. if (clause(treenodedata, treedataindex))
  17938. {
  17939. g.selectNode(this);
  17940. }
  17941. else
  17942. {
  17943. g.cancelSelect(this);
  17944. }
  17945. });
  17946. },
  17947. getTextByID: function (id)
  17948. {
  17949. var g = this, p = this.options;
  17950. var data = g.getDataByID(id);
  17951. if (!data) return null;
  17952. return data[p.textFieldName];
  17953. },
  17954. getDataByID: function (id)
  17955. {
  17956. var g = this, p = this.options;
  17957. var data = null;
  17958. $("li", g.tree).each(function ()
  17959. {
  17960. if (data) return;
  17961. var treeitem = $(this);
  17962. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  17963. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  17964. if (treenodedata[p.idFieldName].toString() == id.toString())
  17965. {
  17966. data = treenodedata;
  17967. }
  17968. });
  17969. return data;
  17970. },
  17971. arrayToTree: function (data, id, pid) //将ID、ParentID这种数据格式转换为树格式
  17972. {
  17973. if (!data || !data.length) return [];
  17974. var targetData = []; //存储数据的容器(返回)
  17975. var records = {};
  17976. var itemLength = data.length; //数据集合的个数
  17977. for (var i = 0; i < itemLength; i++)
  17978. {
  17979. var o = data[i];
  17980. records[o[id]] = o;
  17981. }
  17982. for (var i = 0; i < itemLength; i++)
  17983. {
  17984. var currentData = data[i];
  17985. var parentData = records[currentData[pid]];
  17986. if (!parentData)
  17987. {
  17988. targetData.push(currentData);
  17989. continue;
  17990. }
  17991. parentData.children = parentData.children || [];
  17992. parentData.children.push(currentData);
  17993. }
  17994. return targetData;
  17995. },
  17996. //根据数据索引获取数据
  17997. _getDataNodeByTreeDataIndex: function (data, treedataindex)
  17998. {
  17999. var g = this, p = this.options;
  18000. for (var i = 0; i < data.length; i++)
  18001. {
  18002. if (data[i].treedataindex == treedataindex)
  18003. return data[i];
  18004. if (data[i].children)
  18005. {
  18006. var targetData = g._getDataNodeByTreeDataIndex(data[i].children, treedataindex);
  18007. if (targetData) return targetData;
  18008. }
  18009. }
  18010. return null;
  18011. },
  18012. //设置数据状态
  18013. _setTreeDataStatus: function (data, status)
  18014. {
  18015. var g = this, p = this.options;
  18016. $(data).each(function ()
  18017. {
  18018. this[p.statusName] = status;
  18019. if (this.children)
  18020. {
  18021. g._setTreeDataStatus(this.children, status);
  18022. }
  18023. });
  18024. },
  18025. //设置data 索引
  18026. _addTreeDataIndexToData: function (data)
  18027. {
  18028. var g = this, p = this.options;
  18029. $(data).each(function ()
  18030. {
  18031. if (this.treedataindex != undefined) return;
  18032. this.treedataindex = g.treedataindex++;
  18033. if (this.children)
  18034. {
  18035. g._addTreeDataIndexToData(this.children);
  18036. }
  18037. });
  18038. },
  18039. _addToNodes: function (data)
  18040. {
  18041. var g = this, p = this.options;
  18042. g.nodes = g.nodes || [];
  18043. g.nodes.push(data);
  18044. if (!data.children) return;
  18045. $(data.children).each(function (i, item)
  18046. {
  18047. g._addToNodes(item);
  18048. });
  18049. },
  18050. //添加项到g.data
  18051. _appendData: function (treeNode, data)
  18052. {
  18053. var g = this, p = this.options;
  18054. var treedataindex = parseInt($(treeNode).attr("treedataindex"));
  18055. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  18056. if (g.treedataindex == undefined) g.treedataindex = 0;
  18057. if (treenodedata && treenodedata.children == undefined) treenodedata.children = [];
  18058. $(data).each(function (i, item)
  18059. {
  18060. if (treenodedata)
  18061. treenodedata.children[treenodedata.children.length] = item;
  18062. else
  18063. g.data[g.data.length] = item;
  18064. g._addToNodes(item);
  18065. });
  18066. },
  18067. _setTreeItem: function (treeNode, options)
  18068. {
  18069. var g = this, p = this.options;
  18070. if (!options) return;
  18071. treeNode = g.getNodeDom(treeNode);
  18072. var treeItem = $(treeNode);
  18073. var outlineLevel = parseInt(treeItem.attr("outlinelevel"));
  18074. if (options.isLast != undefined)
  18075. {
  18076. if (options.isLast == true)
  18077. {
  18078. treeItem.removeClass("l-last").addClass("l-last");
  18079. $("> div .l-note", treeItem).removeClass("l-note").addClass("l-note-last");
  18080. $(".l-children li", treeItem)
  18081. .find(".l-box:eq(" + (outlineLevel - 1) + ")")
  18082. .removeClass("l-line");
  18083. }
  18084. else if (options.isLast == false)
  18085. {
  18086. treeItem.removeClass("l-last");
  18087. $("> div .l-note-last", treeItem).removeClass("l-note-last").addClass("l-note");
  18088. $(".l-children li", treeItem)
  18089. .find(".l-box:eq(" + (outlineLevel - 1) + ")")
  18090. .removeClass("l-line")
  18091. .addClass("l-line");
  18092. }
  18093. }
  18094. },
  18095. _upadteTreeWidth: function ()
  18096. {
  18097. var g = this, p = this.options;
  18098. var treeWidth = g.maxOutlineLevel * 22;
  18099. if (p.checkbox) treeWidth += 22;
  18100. if (p.parentIcon || p.childIcon) treeWidth += 22;
  18101. treeWidth += p.nodeWidth;
  18102. g.tree.width(treeWidth);
  18103. },
  18104. _getChildNodeClassName: function ()
  18105. {
  18106. var g = this, p = this.options;
  18107. return 'l-tree-icon-' + p.childIcon;
  18108. },
  18109. _getParentNodeClassName: function (isOpen)
  18110. {
  18111. var g = this, p = this.options;
  18112. var nodeclassname = 'l-tree-icon-' + p.parentIcon;
  18113. if (isOpen) nodeclassname += '-open';
  18114. return nodeclassname;
  18115. },
  18116. //判断节点是否展开状态,返回true/false
  18117. _isExpand : function(o,level)
  18118. {
  18119. var g = this, p = this.options;
  18120. var isExpand = o.isExpand != null ? o.isExpand : (o.isexpand != null ? o.isexpand : p.isExpand);
  18121. if (isExpand == null) return true;
  18122. if (typeof (isExpand) == "function") isExpand = p.isExpand({ data: o, level: level });
  18123. if (typeof (isExpand) == "boolean") return isExpand;
  18124. if (typeof (isExpand) == "string") return isExpand == "true";
  18125. if (typeof (isExpand) == "number") return isExpand > level;
  18126. return true;
  18127. },
  18128. //获取节点的延迟加载状态,返回true/false (本地模式) 或者是object({url :'...',parms:null})(远程模式)
  18129. _getDelay: function (o, level)
  18130. {
  18131. var g = this, p = this.options;
  18132. var delay = o.delay != null ? o.delay : p.delay;
  18133. if (delay == null) return false;
  18134. if (typeof (delay) == "function") delay = delay({ data: o, level: level });
  18135. if (typeof (delay) == "boolean") return delay;
  18136. if (typeof (delay) == "string") return { url: delay };
  18137. if (typeof (delay) == "number") delay = [delay];
  18138. if ($.isArray(delay)) return $.inArray(level, delay) != -1;
  18139. if (typeof (delay) == "object" && delay.url) return delay;
  18140. return false;
  18141. },
  18142. //根据data生成最终完整的tree html
  18143. _getTreeHTMLByData: function (data, outlineLevel, isLast, isExpand)
  18144. {
  18145. var g = this, p = this.options;
  18146. if (g.maxOutlineLevel < outlineLevel)
  18147. g.maxOutlineLevel = outlineLevel;
  18148. isLast = isLast || [];
  18149. outlineLevel = outlineLevel || 1;
  18150. var treehtmlarr = [];
  18151. if (!isExpand) treehtmlarr.push('<ul class="l-children" style="display:none">');
  18152. else treehtmlarr.push("<ul class='l-children'>");
  18153. for (var i = 0; i < data.length; i++)
  18154. {
  18155. var o = data[i];
  18156. var isFirst = i == 0;
  18157. var isLastCurrent = i == data.length - 1;
  18158. var delay = g._getDelay(o, outlineLevel);
  18159. var isExpandCurrent = delay ? false : g._isExpand(o, outlineLevel);
  18160. treehtmlarr.push('<li ');
  18161. if (o.treedataindex != undefined)
  18162. treehtmlarr.push('treedataindex="' + o.treedataindex + '" ');
  18163. if (isExpandCurrent)
  18164. treehtmlarr.push('isexpand=' + o.isexpand + ' ');
  18165. treehtmlarr.push('outlinelevel=' + outlineLevel + ' ');
  18166. //增加属性支持
  18167. for (var j = 0; j < g.sysAttribute.length; j++)
  18168. {
  18169. if ($(this).attr(g.sysAttribute[j]))
  18170. data[dataindex][g.sysAttribute[j]] = $(this).attr(g.sysAttribute[j]);
  18171. }
  18172. for (var j = 0; j < p.attribute.length; j++)
  18173. {
  18174. if (o[p.attribute[j]])
  18175. treehtmlarr.push(p.attribute[j] + '="' + o[p.attribute[j]] + '" ');
  18176. }
  18177. //css class
  18178. treehtmlarr.push('class="');
  18179. isFirst && treehtmlarr.push('l-first ');
  18180. isLastCurrent && treehtmlarr.push('l-last ');
  18181. isFirst && isLastCurrent && treehtmlarr.push('l-onlychild ');
  18182. treehtmlarr.push('"');
  18183. treehtmlarr.push('>');
  18184. treehtmlarr.push('<div class="l-body');
  18185. if (p.selectable && p.selectable(o) == false)
  18186. {
  18187. treehtmlarr.push(' l-unselectable');
  18188. }
  18189. treehtmlarr.push('">');
  18190. for (var k = 0; k <= outlineLevel - 2; k++)
  18191. {
  18192. if (isLast[k]) treehtmlarr.push('<div class="l-box"></div>');
  18193. else treehtmlarr.push('<div class="l-box l-line"></div>');
  18194. }
  18195. if (g.hasChildren(o))
  18196. {
  18197. if (isExpandCurrent) treehtmlarr.push('<div class="l-box l-expandable-open"></div>');
  18198. else treehtmlarr.push('<div class="l-box l-expandable-close"></div>');
  18199. if (p.checkbox)
  18200. {
  18201. if (o.ischecked)
  18202. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-checked"></div>');
  18203. else
  18204. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-unchecked"></div>');
  18205. }
  18206. if (p.parentIcon)
  18207. {
  18208. //node icon
  18209. treehtmlarr.push('<div class="l-box l-tree-icon ');
  18210. treehtmlarr.push(g._getParentNodeClassName(isExpandCurrent ? true : false) + " ");
  18211. if (p.iconFieldName && o[p.iconFieldName])
  18212. treehtmlarr.push('l-tree-icon-none');
  18213. treehtmlarr.push('">');
  18214. if (p.iconFieldName && o[p.iconFieldName])
  18215. treehtmlarr.push('<img src="' + o[p.iconFieldName] + '" />');
  18216. treehtmlarr.push('</div>');
  18217. }
  18218. }
  18219. else
  18220. {
  18221. if (isLastCurrent) treehtmlarr.push('<div class="l-box l-note-last"></div>');
  18222. else treehtmlarr.push('<div class="l-box l-note"></div>');
  18223. if (p.checkbox)
  18224. {
  18225. if (o.ischecked)
  18226. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-checked"></div>');
  18227. else
  18228. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-unchecked"></div>');
  18229. }
  18230. if (p.childIcon)
  18231. {
  18232. //node icon
  18233. treehtmlarr.push('<div class="l-box l-tree-icon ');
  18234. treehtmlarr.push(g._getChildNodeClassName() + " ");
  18235. if (p.iconFieldName && o[p.iconFieldName])
  18236. treehtmlarr.push('l-tree-icon-none');
  18237. treehtmlarr.push('">');
  18238. if (p.iconFieldName && o[p.iconFieldName])
  18239. treehtmlarr.push('<img src="' + o[p.iconFieldName] + '" />');
  18240. treehtmlarr.push('</div>');
  18241. }
  18242. }
  18243. if (p.render)
  18244. {
  18245. treehtmlarr.push('<span>' + p.render(o, o[p.textFieldName]) + '</span>');
  18246. } else
  18247. {
  18248. treehtmlarr.push('<span>' + o[p.textFieldName] + '</span>');
  18249. }
  18250. treehtmlarr.push('</div>');
  18251. if (g.hasChildren(o))
  18252. {
  18253. var isLastNew = [];
  18254. for (var k = 0; k < isLast.length; k++)
  18255. {
  18256. isLastNew.push(isLast[k]);
  18257. }
  18258. isLastNew.push(isLastCurrent);
  18259. if (delay)
  18260. {
  18261. if (delay == true)
  18262. {
  18263. g.toggleNodeCallbacks.push({
  18264. data: o,
  18265. callback: function (dom, o)
  18266. {
  18267. var content = g._getTreeHTMLByData(o.children, outlineLevel + 1, isLastNew, isExpandCurrent).join('');
  18268. $(dom).append(content);
  18269. $(">.l-children .l-body", dom).hover(function ()
  18270. {
  18271. $(this).addClass("l-over");
  18272. }, function ()
  18273. {
  18274. $(this).removeClass("l-over");
  18275. });
  18276. g._removeToggleNodeCallback(o);
  18277. }
  18278. });
  18279. }
  18280. else if(delay.url)
  18281. {
  18282. (function (o, url, parms)
  18283. {
  18284. g.toggleNodeCallbacks.push({
  18285. data: o,
  18286. callback: function (dom, o)
  18287. {
  18288. g.loadData(dom, url, parms, {
  18289. showLoading: function ()
  18290. {
  18291. $("div.l-expandable-close:first", dom).addClass("l-box-loading");
  18292. },
  18293. hideLoading: function ()
  18294. {
  18295. $("div.l-box-loading:first", dom).removeClass("l-box-loading");
  18296. }
  18297. });
  18298. g._removeToggleNodeCallback(o);
  18299. }
  18300. });
  18301. })(o, delay.url, delay.parms);
  18302. }
  18303. }
  18304. else
  18305. {
  18306. treehtmlarr.push(g._getTreeHTMLByData(o.children, outlineLevel + 1, isLastNew, isExpandCurrent).join(''));
  18307. }
  18308. }
  18309. treehtmlarr.push('</li>');
  18310. }
  18311. treehtmlarr.push("</ul>");
  18312. return treehtmlarr;
  18313. },
  18314. _removeToggleNodeCallback: function (nodeData)
  18315. {
  18316. var g = this, p = this.options;
  18317. for (var i = 0; i <= g.toggleNodeCallbacks.length; i++)
  18318. {
  18319. if (g.toggleNodeCallbacks[i] && g.toggleNodeCallbacks[i].data == nodeData)
  18320. {
  18321. g.toggleNodeCallbacks.splice(i, 1);
  18322. break;
  18323. }
  18324. }
  18325. },
  18326. //根据简洁的html获取data
  18327. _getDataByTreeHTML: function (treeDom)
  18328. {
  18329. var g = this, p = this.options;
  18330. var data = [];
  18331. $("> li", treeDom).each(function (i, item)
  18332. {
  18333. var dataindex = data.length;
  18334. data[dataindex] =
  18335. {
  18336. treedataindex: g.treedataindex++
  18337. };
  18338. data[dataindex][p.textFieldName] = $("> span,> a", this).html();
  18339. for (var j = 0; j < g.sysAttribute.length; j++)
  18340. {
  18341. if ($(this).attr(g.sysAttribute[j]))
  18342. data[dataindex][g.sysAttribute[j]] = $(this).attr(g.sysAttribute[j]);
  18343. }
  18344. for (var j = 0; j < p.attribute.length; j++)
  18345. {
  18346. if ($(this).attr(p.attribute[j]))
  18347. data[dataindex][p.attribute[j]] = $(this).attr(p.attribute[j]);
  18348. }
  18349. if ($("> ul", this).length > 0)
  18350. {
  18351. data[dataindex].children = g._getDataByTreeHTML($("> ul", this));
  18352. }
  18353. });
  18354. return data;
  18355. },
  18356. _applyTree: function ()
  18357. {
  18358. var g = this, p = this.options;
  18359. g.data = g._getDataByTreeHTML(g.tree);
  18360. var gridhtmlarr = g._getTreeHTMLByData(g.data, 1, [], true);
  18361. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  18362. g.tree.html(gridhtmlarr.join(''));
  18363. g._upadteTreeWidth();
  18364. $(".l-body", g.tree).hover(function ()
  18365. {
  18366. $(this).addClass("l-over");
  18367. }, function ()
  18368. {
  18369. $(this).removeClass("l-over");
  18370. });
  18371. },
  18372. _getSrcElementByEvent: function (e)
  18373. {
  18374. var g = this;
  18375. var obj = (e.target || e.srcElement);
  18376. var tag = obj.tagName.toLowerCase();
  18377. var jobjs = $(obj).parents().add(obj);
  18378. var fn = function (parm)
  18379. {
  18380. for (var i = jobjs.length - 1; i >= 0; i--)
  18381. {
  18382. if ($(jobjs[i]).hasClass(parm)) return jobjs[i];
  18383. }
  18384. return null;
  18385. };
  18386. if (jobjs.index(this.element) == -1) return { out: true };
  18387. var r = {
  18388. tree: fn("l-tree"),
  18389. node: fn("l-body"),
  18390. checkbox: fn("l-checkbox"),
  18391. icon: fn("l-tree-icon"),
  18392. text: tag == "span"
  18393. };
  18394. if (r.node)
  18395. {
  18396. var treedataindex = parseInt($(r.node).parent().attr("treedataindex"));
  18397. r.data = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  18398. }
  18399. return r;
  18400. },
  18401. _setTreeEven: function ()
  18402. {
  18403. var g = this, p = this.options;
  18404. if (g.hasBind('contextmenu'))
  18405. {
  18406. g.tree.bind("contextmenu", function (e)
  18407. {
  18408. var obj = (e.target || e.srcElement);
  18409. var treeitem = null;
  18410. if (obj.tagName.toLowerCase() == "a" || obj.tagName.toLowerCase() == "span" || $(obj).hasClass("l-box"))
  18411. treeitem = $(obj).parent().parent();
  18412. else if ($(obj).hasClass("l-body"))
  18413. treeitem = $(obj).parent();
  18414. else if (obj.tagName.toLowerCase() == "li")
  18415. treeitem = $(obj);
  18416. if (!treeitem) return;
  18417. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  18418. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  18419. return g.trigger('contextmenu', [{ data: treenodedata, target: treeitem[0] }, e]);
  18420. });
  18421. }
  18422. g.tree.click(function (e)
  18423. {
  18424. var obj = (e.target || e.srcElement);
  18425. var treeitem = null;
  18426. if (obj.tagName.toLowerCase() == "a" || obj.tagName.toLowerCase() == "span" || $(obj).hasClass("l-box"))
  18427. treeitem = $(obj).parent().parent();
  18428. else if ($(obj).hasClass("l-body"))
  18429. treeitem = $(obj).parent();
  18430. else
  18431. treeitem = $(obj);
  18432. if (!treeitem) return;
  18433. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  18434. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  18435. var treeitembtn = $("div.l-body:first", treeitem).find("div.l-expandable-open:first,div.l-expandable-close:first");
  18436. var clickOnTreeItemBtn = $(obj).hasClass("l-expandable-open") || $(obj).hasClass("l-expandable-close");
  18437. if (!$(obj).hasClass("l-checkbox") && !clickOnTreeItemBtn)
  18438. {
  18439. if (!treeitem.hasClass("l-unselectable"))
  18440. {
  18441. if ($(">div:first", treeitem).hasClass("l-selected") && p.needCancel)
  18442. {
  18443. if (g.trigger('beforeCancelSelect', [{ data: treenodedata, target: treeitem[0] }]) == false)
  18444. return false;
  18445. $(">div:first", treeitem).removeClass("l-selected");
  18446. g.trigger('cancelSelect', [{ data: treenodedata, target: treeitem[0] }]);
  18447. }
  18448. else
  18449. {
  18450. if (g.trigger('beforeSelect', [{ data: treenodedata, target: treeitem[0] }]) == false)
  18451. return false;
  18452. $(".l-body", g.tree).removeClass("l-selected");
  18453. $(">div:first", treeitem).addClass("l-selected");
  18454. g.trigger('select', [{ data: treenodedata, target: treeitem[0] }])
  18455. }
  18456. }
  18457. }
  18458. //chekcbox even
  18459. if ($(obj).hasClass("l-checkbox"))
  18460. {
  18461. if (p.autoCheckboxEven)
  18462. {
  18463. //状态:未选中
  18464. if ($(obj).hasClass("l-checkbox-unchecked"))
  18465. {
  18466. $(obj).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  18467. $(".l-children .l-checkbox", treeitem)
  18468. .removeClass("l-checkbox-incomplete l-checkbox-unchecked")
  18469. .addClass("l-checkbox-checked");
  18470. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  18471. }
  18472. //状态:选中
  18473. else if ($(obj).hasClass("l-checkbox-checked"))
  18474. {
  18475. $(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  18476. $(".l-children .l-checkbox", treeitem)
  18477. .removeClass("l-checkbox-incomplete l-checkbox-checked")
  18478. .addClass("l-checkbox-unchecked");
  18479. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, false]);
  18480. }
  18481. //状态:未完全选中
  18482. else if ($(obj).hasClass("l-checkbox-incomplete"))
  18483. {
  18484. $(obj).removeClass("l-checkbox-incomplete").addClass("l-checkbox-checked");
  18485. $(".l-children .l-checkbox", treeitem)
  18486. .removeClass("l-checkbox-incomplete l-checkbox-unchecked")
  18487. .addClass("l-checkbox-checked");
  18488. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  18489. }
  18490. g._setParentCheckboxStatus(treeitem);
  18491. }
  18492. else
  18493. {
  18494. //状态:未选中
  18495. if ($(obj).hasClass("l-checkbox-unchecked"))
  18496. {
  18497. $(obj).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  18498. //是否单选
  18499. if (p.single)
  18500. {
  18501. $(".l-checkbox", g.tree).not(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  18502. }
  18503. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  18504. }
  18505. //状态:选中
  18506. else if ($(obj).hasClass("l-checkbox-checked"))
  18507. {
  18508. $(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  18509. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, false]);
  18510. }
  18511. }
  18512. }
  18513. //状态:已经张开
  18514. else if (treeitembtn.hasClass("l-expandable-open") && (!p.btnClickToToggleOnly || clickOnTreeItemBtn))
  18515. {
  18516. if (g.trigger('beforeCollapse', [{ data: treenodedata, target: treeitem[0] }]) == false)
  18517. return false;
  18518. treeitembtn.removeClass("l-expandable-open").addClass("l-expandable-close");
  18519. if (p.slide)
  18520. $("> .l-children", treeitem).slideToggle('fast');
  18521. else
  18522. $("> .l-children", treeitem).hide();
  18523. $("> div ." + g._getParentNodeClassName(true), treeitem)
  18524. .removeClass(g._getParentNodeClassName(true))
  18525. .addClass(g._getParentNodeClassName());
  18526. g.trigger('collapse', [{ data: treenodedata, target: treeitem[0] }]);
  18527. }
  18528. //状态:没有张开
  18529. else if (treeitembtn.hasClass("l-expandable-close") && (!p.btnClickToToggleOnly || clickOnTreeItemBtn))
  18530. {
  18531. if (g.trigger('beforeExpand', [{ data: treenodedata, target: treeitem[0] }]) == false)
  18532. return false;
  18533. $(g.toggleNodeCallbacks).each(function ()
  18534. {
  18535. if (this.data == treenodedata)
  18536. {
  18537. this.callback(treeitem[0], treenodedata);
  18538. }
  18539. });
  18540. treeitembtn.removeClass("l-expandable-close").addClass("l-expandable-open");
  18541. var callback = function ()
  18542. {
  18543. g.trigger('expand', [{ data: treenodedata, target: treeitem[0] }]);
  18544. };
  18545. if (p.slide)
  18546. {
  18547. $("> .l-children", treeitem).slideToggle('fast', callback);
  18548. }
  18549. else
  18550. {
  18551. $("> .l-children", treeitem).show();
  18552. callback();
  18553. }
  18554. $("> div ." + g._getParentNodeClassName(), treeitem)
  18555. .removeClass(g._getParentNodeClassName())
  18556. .addClass(g._getParentNodeClassName(true));
  18557. }
  18558. g.trigger('click', [{ data: treenodedata, target: treeitem[0] }]);
  18559. });
  18560. //节点拖拽支持
  18561. if ($.fn.ligerDrag && p.nodeDraggable)
  18562. {
  18563. g.nodeDroptip = $("<div class='l-drag-nodedroptip' style='display:none'></div>").appendTo('body');
  18564. g.tree.ligerDrag({
  18565. revert: true, animate: false,
  18566. proxyX: 20, proxyY: 20,
  18567. proxy: function (draggable, e)
  18568. {
  18569. var src = g._getSrcElementByEvent(e);
  18570. if (src.node)
  18571. {
  18572. var content = "dragging";
  18573. if (p.nodeDraggingRender)
  18574. {
  18575. content = p.nodeDraggingRender(draggable.draggingNodes, draggable, g);
  18576. }
  18577. else
  18578. {
  18579. content = "";
  18580. var appended = false;
  18581. for (var i in draggable.draggingNodes)
  18582. {
  18583. var node = draggable.draggingNodes[i];
  18584. if (appended) content += ",";
  18585. content += node.text;
  18586. appended = true;
  18587. }
  18588. }
  18589. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div>" + content + "</div>").appendTo('body');
  18590. return proxy;
  18591. }
  18592. },
  18593. onRevert: function () { return false; },
  18594. onRendered: function ()
  18595. {
  18596. this.set('cursor', 'default');
  18597. g.children[this.id] = this;
  18598. },
  18599. onStartDrag: function (current, e)
  18600. {
  18601. if (e.button == 2) return false;
  18602. this.set('cursor', 'default');
  18603. var src = g._getSrcElementByEvent(e);
  18604. if (src.checkbox) return false;
  18605. if (p.checkbox)
  18606. {
  18607. var checked = g.getChecked();
  18608. this.draggingNodes = [];
  18609. for (var i in checked)
  18610. {
  18611. this.draggingNodes.push(checked[i].data);
  18612. }
  18613. if (!this.draggingNodes || !this.draggingNodes.length) return false;
  18614. }
  18615. else
  18616. {
  18617. this.draggingNodes = [src.data];
  18618. }
  18619. this.draggingNode = src.data;
  18620. this.set('cursor', 'move');
  18621. g.nodedragging = true;
  18622. this.validRange = {
  18623. top: g.tree.offset().top,
  18624. bottom: g.tree.offset().top + g.tree.height(),
  18625. left: g.tree.offset().left,
  18626. right: g.tree.offset().left + g.tree.width()
  18627. };
  18628. },
  18629. onDrag: function (current, e)
  18630. {
  18631. var nodedata = this.draggingNode;
  18632. if (!nodedata) return false;
  18633. var nodes = this.draggingNodes ? this.draggingNodes : [nodedata];
  18634. if (g.nodeDropIn == null) g.nodeDropIn = -1;
  18635. var pageX = e.pageX;
  18636. var pageY = e.pageY;
  18637. var visit = false;
  18638. var validRange = this.validRange;
  18639. if (pageX < validRange.left || pageX > validRange.right
  18640. || pageY > validRange.bottom || pageY < validRange.top)
  18641. {
  18642. g.nodeDropIn = -1;
  18643. g.nodeDroptip.hide();
  18644. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  18645. return;
  18646. }
  18647. for (var i = 0, l = g.nodes.length; i < l; i++)
  18648. {
  18649. var nd = g.nodes[i];
  18650. var treedataindex = nd['treedataindex'];
  18651. if (nodedata['treedataindex'] == treedataindex) visit = true;
  18652. if ($.inArray(nd, nodes) != -1) continue;
  18653. var isAfter = visit ? true : false;
  18654. if (g.nodeDropIn != -1 && g.nodeDropIn != treedataindex) continue;
  18655. var jnode = $("li[treedataindex=" + treedataindex + "] div:first", g.tree);
  18656. var offset = jnode.offset();
  18657. var range = {
  18658. top: offset.top,
  18659. bottom: offset.top + jnode.height(),
  18660. left: g.tree.offset().left,
  18661. right: g.tree.offset().left + g.tree.width()
  18662. };
  18663. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  18664. {
  18665. var lineTop = offset.top;
  18666. if (isAfter) lineTop += jnode.height();
  18667. g.nodeDroptip.css({
  18668. left: range.left,
  18669. top: lineTop,
  18670. width: range.right - range.left
  18671. }).show();
  18672. g.nodeDropIn = treedataindex;
  18673. g.nodeDropDir = isAfter ? "bottom" : "top";
  18674. if (pageY > range.top + 7 && pageY < range.bottom - 7)
  18675. {
  18676. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-yes").addClass("l-drop-add");
  18677. g.nodeDroptip.hide();
  18678. g.nodeDropInParent = true;
  18679. }
  18680. else
  18681. {
  18682. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-add").addClass("l-drop-yes");
  18683. g.nodeDroptip.show();
  18684. g.nodeDropInParent = false;
  18685. }
  18686. break;
  18687. }
  18688. else if (g.nodeDropIn != -1)
  18689. {
  18690. g.nodeDropIn = -1;
  18691. g.nodeDropInParent = false;
  18692. g.nodeDroptip.hide();
  18693. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  18694. }
  18695. }
  18696. },
  18697. onStopDrag: function (current, e)
  18698. {
  18699. var nodes = this.draggingNodes;
  18700. g.nodedragging = false;
  18701. if (g.nodeDropIn != -1)
  18702. {
  18703. for (var i = 0; i < nodes.length; i++)
  18704. {
  18705. var children = nodes[i].children;
  18706. if (children)
  18707. {
  18708. nodes = $.grep(nodes, function (node, i)
  18709. {
  18710. var isIn = $.inArray(node, children) == -1;
  18711. return isIn;
  18712. });
  18713. }
  18714. }
  18715. for (var i in nodes)
  18716. {
  18717. var node = nodes[i];
  18718. if (g.nodeDropInParent)
  18719. {
  18720. g.remove(node);
  18721. g.append(g.nodeDropIn, [node]);
  18722. }
  18723. else
  18724. {
  18725. g.remove(node);
  18726. g.append(g.getParent(g.nodeDropIn), [node], g.nodeDropIn, g.nodeDropDir == "bottom")
  18727. }
  18728. }
  18729. g.nodeDropIn = -1;
  18730. }
  18731. g.nodeDroptip.hide();
  18732. this.set('cursor', 'default');
  18733. }
  18734. });
  18735. }
  18736. },
  18737. //递归设置父节点的状态
  18738. _setParentCheckboxStatus: function (treeitem)
  18739. {
  18740. var g = this, p = this.options;
  18741. //当前同级别或低级别的节点是否都选中了
  18742. var isCheckedComplete = $(".l-checkbox-unchecked", treeitem.parent()).length == 0;
  18743. //当前同级别或低级别的节点是否都没有选中
  18744. var isCheckedNull = $(".l-checkbox-checked", treeitem.parent()).length == 0;
  18745. if (isCheckedComplete)
  18746. {
  18747. treeitem.parent().prev().find(".l-checkbox")
  18748. .removeClass("l-checkbox-unchecked l-checkbox-incomplete")
  18749. .addClass("l-checkbox-checked");
  18750. }
  18751. else if (isCheckedNull)
  18752. {
  18753. treeitem.parent().prev().find("> .l-checkbox")
  18754. .removeClass("l-checkbox-checked l-checkbox-incomplete")
  18755. .addClass("l-checkbox-unchecked");
  18756. }
  18757. else
  18758. {
  18759. treeitem.parent().prev().find("> .l-checkbox")
  18760. .removeClass("l-checkbox-unchecked l-checkbox-checked")
  18761. .addClass("l-checkbox-incomplete");
  18762. }
  18763. if (treeitem.parent().parent("li").length > 0)
  18764. g._setParentCheckboxStatus(treeitem.parent().parent("li"));
  18765. }
  18766. });
  18767. })(jQuery);/**
  18768. * jQuery ligerUI 1.2.4
  18769. *
  18770. * http://ligerui.com
  18771. *
  18772. * Author daomi 2014 [ gd_star@163.com ]
  18773. *
  18774. */
  18775. (function ($)
  18776. {
  18777. var l = $.ligerui;
  18778. l.windowCount = 0;
  18779. $.ligerWindow = function (options)
  18780. {
  18781. return l.run.call(null, "ligerWindow", arguments, { isStatic: true });
  18782. };
  18783. $.ligerWindow.show = function (p)
  18784. {
  18785. return $.ligerWindow(p);
  18786. };
  18787. $.ligerDefaults.Window = {
  18788. showClose: true,
  18789. showMax: true,
  18790. showToggle: true,
  18791. showMin: true,
  18792. title: 'window',
  18793. load: false,
  18794. onLoaded: null,
  18795. onClose: null,
  18796. onRegain: null,
  18797. onMax:null,
  18798. modal: false //是否模态窗口
  18799. };
  18800. $.ligerMethos.Window = {};
  18801. l.controls.Window = function (options)
  18802. {
  18803. l.controls.Window.base.constructor.call(this, null, options);
  18804. };
  18805. l.controls.Window.ligerExtend(l.core.Win, {
  18806. __getType: function ()
  18807. {
  18808. return 'Window';
  18809. },
  18810. __idPrev: function ()
  18811. {
  18812. return 'Window';
  18813. },
  18814. _extendMethods: function ()
  18815. {
  18816. return $.ligerMethos.Window;
  18817. },
  18818. _render: function ()
  18819. {
  18820. var g = this, p = this.options;
  18821. g.window = $('<div class="l-window"><div class="l-window-header"><div class="l-window-header-buttons"><div class="l-window-toggle"></div><div class="l-window-max"></div><div class="l-window-close"></div><div class="l-clear"></div></div><div class="l-window-header-inner"></div></div><div class="l-window-content"></div></div>');
  18822. g.element = g.window[0];
  18823. g.window.content = $(".l-window-content", g.window);
  18824. g.window.header = $(".l-window-header", g.window);
  18825. g.window.buttons = $(".l-window-header-buttons:first", g.window);
  18826. if (p.url)
  18827. {
  18828. if (p.load)
  18829. {
  18830. g.window.content.load(p.url, function ()
  18831. {
  18832. g.trigger('loaded');
  18833. });
  18834. g.window.content.addClass("l-window-content-scroll");
  18835. }
  18836. else
  18837. {
  18838. var iframe = $("<iframe frameborder='0' src='" + p.url + "'></iframe>");
  18839. var framename = "ligeruiwindow" + l.windowCount++;
  18840. if (p.name) framename = p.name;
  18841. iframe.attr("name", framename).attr("id", framename);
  18842. p.framename = framename;
  18843. iframe.appendTo(g.window.content);
  18844. g.iframe = iframe;
  18845. }
  18846. }
  18847. else if (p.content)
  18848. {
  18849. var content = $("<div>" + p.content + "</div>");
  18850. content.appendTo(g.window.content);
  18851. }
  18852. else if (p.target)
  18853. {
  18854. g.window.content.append(p.target);
  18855. p.target.show();
  18856. }
  18857. this.mask();
  18858. g.active();
  18859. $('body').append(g.window);
  18860. g.set({ width: p.width, height: p.height });
  18861. //位置初始化
  18862. var left = 0;
  18863. var top = 0;
  18864. if (p.left != null) left = p.left;
  18865. else p.left = left = 0.5 * ($(window).width() - g.window.width());
  18866. if (p.top != null) top = p.top;
  18867. else p.top = top = 0.5 * ($(window).height() - g.window.height()) + $(window).scrollTop() - 10;
  18868. if (left < 0) p.left = left = 0;
  18869. if (top < 0) p.top = top = 0;
  18870. g.set(p);
  18871. p.framename && $(">iframe", g.window.content).attr('name', p.framename);
  18872. if (!p.showToggle) $(".l-window-toggle", g.window).remove();
  18873. if (!p.showMax) $(".l-window-max", g.window).remove();
  18874. if (!p.showClose) $(".l-window-close", g.window).remove();
  18875. g._saveStatus();
  18876. //拖动支持
  18877. if ($.fn.ligerDrag)
  18878. {
  18879. g.draggable = g.window.drag = g.window.ligerDrag({ handler: '.l-window-header-inner', onStartDrag: function ()
  18880. {
  18881. g.active();
  18882. }, onStopDrag: function ()
  18883. {
  18884. g._saveStatus();
  18885. }, animate: false
  18886. });
  18887. }
  18888. //改变大小支持
  18889. if ($.fn.ligerResizable)
  18890. {
  18891. g.resizeable = g.window.resizable = g.window.ligerResizable({
  18892. onStartResize: function ()
  18893. {
  18894. g.active();
  18895. $(".l-window-max", g.window).removeClass("l-window-regain");
  18896. },
  18897. onStopResize: function (current, e)
  18898. {
  18899. var top = 0;
  18900. var left = 0;
  18901. if (!isNaN(parseInt(g.window.css('top'))))
  18902. top = parseInt(g.window.css('top'));
  18903. if (!isNaN(parseInt(g.window.css('left'))))
  18904. left = parseInt(g.window.css('left'));
  18905. if (current.diffTop)
  18906. g.window.css({ top: top + current.diffTop });
  18907. if (current.diffLeft)
  18908. g.window.css({ left: left + current.diffLeft });
  18909. if (current.newWidth)
  18910. g.window.width(current.newWidth);
  18911. if (current.newHeight)
  18912. g.window.content.height(current.newHeight - 28);
  18913. g._saveStatus();
  18914. return false;
  18915. }
  18916. });
  18917. g.window.append("<div class='l-btn-nw-drop'></div>");
  18918. }
  18919. //设置事件
  18920. $(".l-window-toggle", g.window).click(function ()
  18921. {
  18922. if ($(this).hasClass("l-window-toggle-close"))
  18923. {
  18924. g.collapsed = false;
  18925. $(this).removeClass("l-window-toggle-close");
  18926. } else
  18927. {
  18928. g.collapsed = true;
  18929. $(this).addClass("l-window-toggle-close");
  18930. }
  18931. g.window.content.slideToggle();
  18932. }).hover(function ()
  18933. {
  18934. if (g.window.drag)
  18935. g.window.drag.set('disabled', true);
  18936. }, function ()
  18937. {
  18938. if (g.window.drag)
  18939. g.window.drag.set('disabled', false);
  18940. });
  18941. $(".l-window-close", g.window).click(function ()
  18942. {
  18943. if (g.trigger('close') == false) return false;
  18944. g.window.hide();
  18945. l.win.removeTask(g);
  18946. }).hover(function ()
  18947. {
  18948. if (g.window.drag)
  18949. g.window.drag.set('disabled', true);
  18950. }, function ()
  18951. {
  18952. if (g.window.drag)
  18953. g.window.drag.set('disabled', false);
  18954. });
  18955. $(".l-window-max", g.window).click(function ()
  18956. {
  18957. if ($(this).hasClass("l-window-regain"))
  18958. {
  18959. if (g.trigger('regain') == false) return false;
  18960. g.window.width(g._width).css({ left: g._left, top: g._top });
  18961. g.window.content.height(g._height - 28);
  18962. $(this).removeClass("l-window-regain");
  18963. }
  18964. else
  18965. {
  18966. if (g.trigger('max') == false) return false;
  18967. g.window.width($(window).width() - 2).css({ left: 0, top: 0 });
  18968. g.window.content.height($(window).height() - 28).show();
  18969. $(this).addClass("l-window-regain");
  18970. }
  18971. });
  18972. },
  18973. _saveStatus: function ()
  18974. {
  18975. var g = this;
  18976. g._width = g.window.width();
  18977. g._height = g.window.height();
  18978. var top = 0;
  18979. var left = 0;
  18980. if (!isNaN(parseInt(g.window.css('top'))))
  18981. top = parseInt(g.window.css('top'));
  18982. if (!isNaN(parseInt(g.window.css('left'))))
  18983. left = parseInt(g.window.css('left'));
  18984. g._top = top;
  18985. g._left = left;
  18986. },
  18987. min: function ()
  18988. {
  18989. this.window.hide();
  18990. this.minimize = true;
  18991. this.actived = false;
  18992. },
  18993. _setShowMin: function (value)
  18994. {
  18995. var g = this, p = this.options;
  18996. if (value)
  18997. {
  18998. if (!g.winmin)
  18999. {
  19000. g.winmin = $('<div class="l-window-min"></div>').prependTo(g.window.buttons)
  19001. .click(function ()
  19002. {
  19003. g.min();
  19004. });
  19005. l.win.addTask(g);
  19006. }
  19007. }
  19008. else if (g.winmin)
  19009. {
  19010. g.winmin.remove();
  19011. g.winmin = null;
  19012. }
  19013. },
  19014. _setLeft: function (value)
  19015. {
  19016. if (value != null)
  19017. this.window.css({ left: value });
  19018. },
  19019. _setTop: function (value)
  19020. {
  19021. if (value != null)
  19022. this.window.css({ top: value });
  19023. },
  19024. _setWidth: function (value)
  19025. {
  19026. if (value > 0)
  19027. this.window.width(value);
  19028. },
  19029. _setHeight: function (value)
  19030. {
  19031. if (value > 28)
  19032. this.window.content.height(value - 28);
  19033. },
  19034. _setTitle: function (value)
  19035. {
  19036. if (value)
  19037. $(".l-window-header-inner", this.window.header).html(value);
  19038. },
  19039. _setUrl: function (url)
  19040. {
  19041. var g = this, p = this.options;
  19042. p.url = url;
  19043. if (p.load)
  19044. {
  19045. g.window.content.html("").load(p.url, function ()
  19046. {
  19047. if (g.trigger('loaded') == false) return false;
  19048. });
  19049. }
  19050. else if (g.jiframe)
  19051. {
  19052. g.jiframe.attr("src", p.url);
  19053. }
  19054. },
  19055. hide: function ()
  19056. {
  19057. var g = this, p = this.options;
  19058. this.unmask();
  19059. this.window.hide();
  19060. },
  19061. show: function ()
  19062. {
  19063. var g = this, p = this.options;
  19064. this.mask();
  19065. this.window.show();
  19066. },
  19067. remove: function ()
  19068. {
  19069. var g = this, p = this.options;
  19070. this.unmask();
  19071. this.window.remove();
  19072. },
  19073. active: function ()
  19074. {
  19075. var g = this, p = this.options;
  19076. if (g.minimize)
  19077. {
  19078. var width = g._width, height = g._height, left = g._left, top = g._top;
  19079. if (g.maximum)
  19080. {
  19081. width = $(window).width();
  19082. height = $(window).height();
  19083. left = top = 0;
  19084. if (l.win.taskbar)
  19085. {
  19086. height -= l.win.taskbar.outerHeight();
  19087. if (l.win.top) top += l.win.taskbar.outerHeight();
  19088. }
  19089. }
  19090. g.set({ width: width, height: height, left: left, top: top });
  19091. }
  19092. g.actived = true;
  19093. g.minimize = false;
  19094. l.win.setFront(g);
  19095. g.show();
  19096. l.win.setFront(this);
  19097. },
  19098. setUrl: function (url)
  19099. {
  19100. return _setUrl(url);
  19101. }
  19102. });
  19103. })(jQuery);