app-service.js 3.8 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546
  1. if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
  2. Promise.prototype.finally = function(callback) {
  3. const promise = this.constructor;
  4. return this.then(
  5. (value) => promise.resolve(callback()).then(() => value),
  6. (reason) => promise.resolve(callback()).then(() => {
  7. throw reason;
  8. })
  9. );
  10. };
  11. }
  12. ;
  13. if (typeof uni !== "undefined" && uni && uni.requireGlobal) {
  14. const global2 = uni.requireGlobal();
  15. ArrayBuffer = global2.ArrayBuffer;
  16. Int8Array = global2.Int8Array;
  17. Uint8Array = global2.Uint8Array;
  18. Uint8ClampedArray = global2.Uint8ClampedArray;
  19. Int16Array = global2.Int16Array;
  20. Uint16Array = global2.Uint16Array;
  21. Int32Array = global2.Int32Array;
  22. Uint32Array = global2.Uint32Array;
  23. Float32Array = global2.Float32Array;
  24. Float64Array = global2.Float64Array;
  25. BigInt64Array = global2.BigInt64Array;
  26. BigUint64Array = global2.BigUint64Array;
  27. }
  28. ;
  29. if (uni.restoreGlobal) {
  30. uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval);
  31. }
  32. (function(vue) {
  33. "use strict";
  34. var _a, _b;
  35. const stringProp = (defaultVal) => ({
  36. type: String,
  37. default: defaultVal
  38. });
  39. const stringOrObjectProp = (defaultVal) => ({
  40. type: [String, Object],
  41. default: defaultVal
  42. });
  43. const baseProps = {
  44. /**
  45. * 自定义根节点样式
  46. */
  47. customStyle: stringOrObjectProp(""),
  48. /**
  49. * 自定义根节点样式类
  50. */
  51. customClass: stringProp("")
  52. };
  53. function queryParams(data = {}, isPrefix = true, arrayFormat = "brackets") {
  54. const prefix = isPrefix ? "?" : "";
  55. const _result = [];
  56. if (!["indices", "brackets", "repeat", "comma"].includes(arrayFormat))
  57. arrayFormat = "brackets";
  58. for (const key in data) {
  59. const value = data[key];
  60. if (["", void 0, null].includes(value)) {
  61. continue;
  62. }
  63. if (Array.isArray(value)) {
  64. switch (arrayFormat) {
  65. case "indices":
  66. for (let i = 0; i < value.length; i++) {
  67. _result.push(`${key}[${i}]=${value[i]}`);
  68. }
  69. break;
  70. case "brackets":
  71. value.forEach((_value) => {
  72. _result.push(`${key}[]=${_value}`);
  73. });
  74. break;
  75. case "repeat":
  76. value.forEach((_value) => {
  77. _result.push(`${key}=${_value}`);
  78. });
  79. break;
  80. case "comma":
  81. let commaStr = "";
  82. value.forEach((_value) => {
  83. commaStr += (commaStr ? "," : "") + _value;
  84. });
  85. _result.push(`${key}=${commaStr}`);
  86. break;
  87. default:
  88. value.forEach((_value) => {
  89. _result.push(`${key}[]=${_value}`);
  90. });
  91. }
  92. } else {
  93. _result.push(`${key}=${value}`);
  94. }
  95. }
  96. return _result.length ? prefix + _result.join("&") : "";
  97. }
  98. class Router {
  99. // route: (options?: string | RouterConfig, params?: Record<string, any>) => Promise<void>;
  100. constructor() {
  101. this.config = {
  102. type: "navigateTo",
  103. url: "",
  104. delta: 1,
  105. // navigateBack页面后退时,回退的层数
  106. params: {},
  107. // 传递的参数
  108. animationType: "pop-in",
  109. // 窗口动画,只在APP有效
  110. animationDuration: 300,
  111. // 窗口动画持续时间,单位毫秒,只在APP有效
  112. intercept: false
  113. // 是否需要拦截
  114. };
  115. this.route = this.route.bind(this);
  116. }
  117. // 判断url前面是否有"/",如果没有则加上,否则无法跳转
  118. addRootPath(url2) {
  119. return url2[0] === "/" ? url2 : `/${url2}`;
  120. }
  121. // 整合路由参数
  122. mixinParam(url2, params) {
  123. url2 = url2 && this.addRootPath(url2);
  124. let query = "";
  125. if (/.*\/.*\?.*=.*/.test(url2)) {
  126. query = uni.$u.queryParams(params, false);
  127. return url2 + "&" + query;
  128. } else {
  129. query = uni.$u.queryParams(params);
  130. return url2 + query;
  131. }
  132. }
  133. /**
  134. * 路由跳转主方法
  135. * @param options 跳转配置或url字符串
  136. * @param params 跳转参数
  137. */
  138. async route(options = {}, params = {}) {
  139. let mergeConfig = {};
  140. if (typeof options === "string") {
  141. mergeConfig.url = this.mixinParam(options, params);
  142. mergeConfig.type = "navigateTo";
  143. } else {
  144. mergeConfig = uni.$u.deepMerge(this.config, options);
  145. mergeConfig.url = this.mixinParam(options.url || "", options.params || {});
  146. }
  147. if (params.intercept) {
  148. this.config.intercept = params.intercept;
  149. }
  150. mergeConfig.params = params;
  151. mergeConfig = uni.$u.deepMerge(this.config, mergeConfig);
  152. if (uni.$u.routeIntercept && typeof uni.$u.routeIntercept === "function") {
  153. const isNext = await new Promise((resolve2) => {
  154. uni.$u.routeIntercept(mergeConfig, resolve2);
  155. });
  156. isNext && this.openPage(mergeConfig);
  157. } else {
  158. this.openPage(mergeConfig);
  159. }
  160. }
  161. // 执行路由跳转
  162. openPage(config2) {
  163. const { url: url2 = "", type: type2 = "", delta = 1, animationDuration = 300 } = config2;
  164. if (type2 == "navigateTo" || type2 == "to") {
  165. uni.navigateTo({ url: url2, animationDuration });
  166. }
  167. if (type2 == "redirectTo" || type2 == "redirect") {
  168. uni.redirectTo({ url: url2 });
  169. }
  170. if (type2 == "switchTab" || type2 == "tab") {
  171. uni.switchTab({ url: url2 });
  172. }
  173. if (type2 == "reLaunch" || type2 == "launch") {
  174. uni.reLaunch({ url: url2 });
  175. }
  176. if (type2 == "navigateBack" || type2 == "back") {
  177. uni.navigateBack({ delta });
  178. }
  179. }
  180. }
  181. const route = new Router().route;
  182. if (!String.prototype.padStart) {
  183. String.prototype.padStart = function(maxLength2, fillString = " ") {
  184. if (Object.prototype.toString.call(fillString) !== "[object String]")
  185. throw new TypeError("fillString must be String");
  186. let str = this;
  187. if (str.length >= maxLength2)
  188. return String(str);
  189. let fillLength = maxLength2 - str.length, times = Math.ceil(fillLength / fillString.length);
  190. while (times >>= 1) {
  191. fillString += fillString;
  192. if (times === 1) {
  193. fillString += fillString;
  194. }
  195. }
  196. return fillString.slice(0, fillLength) + str;
  197. };
  198. }
  199. function timeFormat(dateTime = null, fmt = "yyyy-mm-dd") {
  200. if (!dateTime)
  201. dateTime = Number(/* @__PURE__ */ new Date());
  202. if (typeof dateTime === "number" || typeof dateTime === "string") {
  203. if (dateTime.toString().length == 10)
  204. dateTime = Number(dateTime) * 1e3;
  205. }
  206. const date2 = new Date(dateTime);
  207. let ret;
  208. const opt = {
  209. "y+": date2.getFullYear().toString(),
  210. // 年
  211. "m+": (date2.getMonth() + 1).toString(),
  212. // 月
  213. "d+": date2.getDate().toString(),
  214. // 日
  215. "h+": date2.getHours().toString(),
  216. // 时
  217. "M+": date2.getMinutes().toString(),
  218. // 分
  219. "s+": date2.getSeconds().toString()
  220. // 秒
  221. // 有其他格式化字符需求可以继续添加,必须转化成字符串
  222. };
  223. for (const k in opt) {
  224. ret = new RegExp("(" + k + ")").exec(fmt);
  225. if (ret) {
  226. fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"));
  227. }
  228. }
  229. return fmt;
  230. }
  231. function timeFrom(dateTime = null, format2 = "yyyy-mm-dd") {
  232. if (!dateTime)
  233. dateTime = Number(/* @__PURE__ */ new Date());
  234. if (typeof dateTime === "number" || typeof dateTime === "string") {
  235. if (dateTime.toString().length == 10)
  236. dateTime = Number(dateTime) * 1e3;
  237. }
  238. const timestamp = +new Date(Number(dateTime));
  239. const timer = (Number(/* @__PURE__ */ new Date()) - timestamp) / 1e3;
  240. let tips = "";
  241. switch (true) {
  242. case timer < 300:
  243. tips = "刚刚";
  244. break;
  245. case (timer >= 300 && timer < 3600):
  246. tips = parseInt(String(timer / 60)) + "分钟前";
  247. break;
  248. case (timer >= 3600 && timer < 86400):
  249. tips = parseInt(String(timer / 3600)) + "小时前";
  250. break;
  251. case (timer >= 86400 && timer < 2592e3):
  252. tips = parseInt(String(timer / 86400)) + "天前";
  253. break;
  254. default:
  255. if (format2 === false) {
  256. if (timer >= 2592e3 && timer < 365 * 86400) {
  257. tips = parseInt(String(timer / (86400 * 30))) + "个月前";
  258. } else {
  259. tips = parseInt(String(timer / (86400 * 365))) + "年前";
  260. }
  261. } else {
  262. tips = timeFormat(timestamp, format2);
  263. }
  264. }
  265. return tips;
  266. }
  267. function colorGradient(startColor = "rgb(0, 0, 0)", endColor = "rgb(255, 255, 255)", step = 10) {
  268. const startRGB = hexToRgb(startColor, false);
  269. const [startR, startG, startB] = startRGB;
  270. const endRGB = hexToRgb(endColor, false);
  271. const [endR, endG, endB] = endRGB;
  272. const sR = (endR - startR) / step;
  273. const sG = (endG - startG) / step;
  274. const sB = (endB - startB) / step;
  275. const colorArr = [];
  276. for (let i = 0; i < step; i++) {
  277. const hex = rgbToHex(
  278. `rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`
  279. );
  280. colorArr.push(hex);
  281. }
  282. return colorArr;
  283. }
  284. function hexToRgb(sColor, str = true) {
  285. const reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
  286. sColor = sColor.toLowerCase();
  287. if (sColor && reg.test(sColor)) {
  288. if (sColor.length === 4) {
  289. let sColorNew = "#";
  290. for (let i = 1; i < 4; i += 1) {
  291. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  292. }
  293. sColor = sColorNew;
  294. }
  295. const sColorChange = [
  296. parseInt("0x" + sColor.slice(1, 3)),
  297. parseInt("0x" + sColor.slice(3, 5)),
  298. parseInt("0x" + sColor.slice(5, 7))
  299. ];
  300. if (!str) {
  301. return sColorChange;
  302. } else {
  303. return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;
  304. }
  305. } else if (/^(rgb|RGB)/.test(sColor)) {
  306. const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  307. return arr.map((val) => Number(val));
  308. } else {
  309. return sColor;
  310. }
  311. }
  312. function rgbToHex(rgb) {
  313. const reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
  314. if (/^(rgb|RGB)/.test(rgb)) {
  315. const aColor = rgb.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  316. let strHex = "#";
  317. for (let i = 0; i < aColor.length; i++) {
  318. let hex = Number(aColor[i]).toString(16);
  319. hex = hex.length == 1 ? "0" + hex : hex;
  320. strHex += hex;
  321. }
  322. if (strHex.length !== 7) {
  323. strHex = rgb;
  324. }
  325. return strHex;
  326. } else if (reg.test(rgb)) {
  327. const aNum = rgb.replace(/#/, "").split("");
  328. if (aNum.length === 6) {
  329. return rgb;
  330. } else if (aNum.length === 3) {
  331. let numHex = "#";
  332. for (let i = 0; i < aNum.length; i += 1) {
  333. numHex += aNum[i] + aNum[i];
  334. }
  335. return numHex;
  336. }
  337. } else {
  338. return rgb;
  339. }
  340. return rgb;
  341. }
  342. function colorToRgba(color2, alpha = 0.3) {
  343. color2 = rgbToHex(color2);
  344. const reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
  345. let sColor = color2.toLowerCase();
  346. if (sColor && reg.test(sColor)) {
  347. if (sColor.length === 4) {
  348. let sColorNew = "#";
  349. for (let i = 1; i < 4; i += 1) {
  350. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  351. }
  352. sColor = sColorNew;
  353. }
  354. const sColorChange = [
  355. parseInt("0x" + sColor.slice(1, 3)),
  356. parseInt("0x" + sColor.slice(3, 5)),
  357. parseInt("0x" + sColor.slice(5, 7))
  358. ];
  359. return `rgba(${sColorChange.join(",")},${alpha})`;
  360. } else {
  361. return sColor;
  362. }
  363. }
  364. const colorGradients = {
  365. colorGradient,
  366. hexToRgb,
  367. rgbToHex,
  368. colorToRgba
  369. };
  370. function guid(len = 32, firstU = true, radix) {
  371. const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
  372. const uuid = [];
  373. const base = radix || chars.length;
  374. if (len) {
  375. for (let i = 0; i < len; i++)
  376. uuid[i] = chars[0 | Math.random() * base];
  377. } else {
  378. let r;
  379. uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
  380. uuid[14] = "4";
  381. for (let i = 0; i < 36; i++) {
  382. if (!uuid[i]) {
  383. r = 0 | Math.random() * 16;
  384. uuid[i] = chars[i == 19 ? r & 3 | 8 : r];
  385. }
  386. }
  387. }
  388. if (firstU) {
  389. uuid.shift();
  390. return "u" + uuid.join("");
  391. } else {
  392. return uuid.join("");
  393. }
  394. }
  395. const version$1 = "0.5.7";
  396. const config$2 = vue.reactive({
  397. v: version$1,
  398. version: version$1,
  399. // 主题名称
  400. type: ["primary", "success", "info", "error", "warning"],
  401. // 默认为官方主题名称
  402. defaultTheme: "uviewpro",
  403. // 默认为亮色模式
  404. defaultDarkMode: "light",
  405. // 默认为中文
  406. defaultLocale: "zh-CN"
  407. });
  408. const lightPalette = {
  409. primary: "#2979ff",
  410. primaryDark: "#2b85e4",
  411. primaryDisabled: "#a0cfff",
  412. primaryLight: "#ecf5ff",
  413. success: "#19be6b",
  414. successDark: "#18b566",
  415. successDisabled: "#71d5a1",
  416. successLight: "#dbf1e1",
  417. warning: "#ff9900",
  418. warningDark: "#f29100",
  419. warningDisabled: "#fcbd71",
  420. warningLight: "#fdf6ec",
  421. error: "#fa3534",
  422. errorDark: "#dd6161",
  423. errorDisabled: "#fab6b6",
  424. errorLight: "#fef0f0",
  425. info: "#909399",
  426. infoDark: "#82848a",
  427. infoDisabled: "#c8c9cc",
  428. infoLight: "#f4f4f5",
  429. whiteColor: "#ffffff",
  430. blackColor: "#000000",
  431. mainColor: "#303133",
  432. contentColor: "#606266",
  433. tipsColor: "#909399",
  434. lightColor: "#c0c4cc",
  435. borderColor: "#dcdfe6",
  436. dividerColor: "#e4e7ed",
  437. maskColor: "rgba(0, 0, 0, 0.4)",
  438. shadowColor: "rgba(0, 0, 0, 0.1)",
  439. bgColor: "#f3f4f6",
  440. bgWhite: "#ffffff",
  441. bgGrayLight: "#f1f1f1",
  442. bgGrayDark: "#2f343c",
  443. bgBlack: "#000000"
  444. };
  445. const darkPalette = {
  446. primary: "#8ab4ff",
  447. primaryDark: "#5f8dff",
  448. primaryDisabled: "#3d4f74",
  449. primaryLight: "#1d273f",
  450. success: "#4ade80",
  451. successDark: "#1f9d57",
  452. successDisabled: "#2f4d3d",
  453. successLight: "#10291f",
  454. warning: "#fbbf24",
  455. warningDark: "#c88f00",
  456. warningDisabled: "#4a3b17",
  457. warningLight: "#2b1f05",
  458. error: "#ff6b6b",
  459. errorDark: "#d83a3a",
  460. errorDisabled: "#4f2323",
  461. errorLight: "#2d1414",
  462. info: "#a0a7b8",
  463. infoDark: "#7c8394",
  464. infoDisabled: "#3b3f4c",
  465. infoLight: "#1d2029",
  466. whiteColor: "#f5f6f7",
  467. blackColor: "#f5f6f7",
  468. mainColor: "#f5f6f7",
  469. contentColor: "#cfd3dc",
  470. tipsColor: "#9aa1af",
  471. lightColor: "#6b7082",
  472. borderColor: "#3a4251",
  473. dividerColor: "#3a4251",
  474. maskColor: "rgba(0, 0, 0, 0.6)",
  475. shadowColor: "rgba(0, 0, 0, 0.3)",
  476. bgColor: "#111827",
  477. bgWhite: "#000000",
  478. bgGrayLight: "#1a1a1a",
  479. bgGrayDark: "#f5f7fa",
  480. bgBlack: "#ffffff"
  481. };
  482. const lightCss = {
  483. "--u-background": "#ffffff",
  484. "--u-surface": "#f7f8fa",
  485. "--u-text": "#303133"
  486. };
  487. const darkCss = {
  488. "--u-background": "#0f1115",
  489. "--u-surface": "#1c2233",
  490. "--u-text": "#f5f6f7"
  491. };
  492. const defaultThemes = [
  493. {
  494. name: config$2.defaultTheme,
  495. label: "默认蓝",
  496. description: "uView Pro 默认主题,支持亮色与暗黑模式",
  497. color: lightPalette,
  498. darkColor: darkPalette,
  499. css: lightCss,
  500. darkCss
  501. }
  502. ];
  503. const color = vue.reactive({ ...lightPalette });
  504. function getSystemDarkMode() {
  505. try {
  506. if (typeof uni !== "undefined" && typeof uni.getSystemInfoSync === "function") {
  507. const systemInfo2 = uni.getSystemInfoSync();
  508. const theme2 = systemInfo2.osTheme || systemInfo2.theme || "light";
  509. if (theme2 === "dark") {
  510. return "dark";
  511. }
  512. if (theme2 === "light") {
  513. return "light";
  514. }
  515. }
  516. } catch (e) {
  517. console.warn("[system-theme] getSystemDarkMode failed", e);
  518. }
  519. return "light";
  520. }
  521. const zhCN = {
  522. name: "zh-CN",
  523. label: "简体中文",
  524. locale: "zh-Hans",
  525. uActionSheet: {
  526. cancelText: "取消"
  527. },
  528. uUpload: {
  529. uploadText: "选择图片",
  530. retry: "点击重试",
  531. overSize: "超出允许的文件大小",
  532. overMaxCount: "超出最大允许的文件个数",
  533. reUpload: "重新上传",
  534. uploadFailed: "上传失败,请重试",
  535. modalTitle: "提示",
  536. deleteConfirm: "您确定要删除此项吗?",
  537. terminatedRemove: "已终止移除",
  538. removeSuccess: "移除成功",
  539. previewFailed: "预览图片失败",
  540. notAllowedExt: "不允许选择{ext}格式的文件",
  541. noAction: "请配置上传地址"
  542. },
  543. uVerificationCode: {
  544. startText: "获取验证码",
  545. changeText: "X秒重新获取",
  546. endText: "重新获取"
  547. },
  548. uSection: {
  549. subTitle: "更多"
  550. },
  551. uSelect: {
  552. cancelText: "取消",
  553. confirmText: "确认"
  554. },
  555. uSearch: {
  556. placeholder: "请输入关键字",
  557. actionText: "搜索"
  558. },
  559. uNoNetwork: {
  560. tips: "哎呀,网络信号丢失",
  561. checkNetwork: "请检查网络,或前往",
  562. setting: "设置",
  563. retry: "重试",
  564. noConnection: "无网络连接",
  565. connected: "网络已连接"
  566. },
  567. uReadMore: {
  568. closeText: "展开阅读全文",
  569. openText: "收起"
  570. },
  571. uPagination: {
  572. prevText: "上一页",
  573. nextText: "下一页"
  574. },
  575. uPicker: {
  576. cancelText: "取消",
  577. confirmText: "确认"
  578. },
  579. uModal: {
  580. title: "提示",
  581. content: "内容",
  582. confirmText: "确认",
  583. cancelText: "取消"
  584. },
  585. uLoadmore: {
  586. loadmore: "加载更多",
  587. loading: "正在加载...",
  588. nomore: "没有更多了"
  589. },
  590. uLink: {
  591. mpTips: "链接已复制,请在浏览器打开"
  592. },
  593. uKeyboard: {
  594. cancelText: "取消",
  595. confirmText: "确认",
  596. number: "数字键盘",
  597. idCard: "身份证键盘",
  598. plate: "车牌号键盘"
  599. },
  600. uInput: {
  601. placeholder: "请输入内容"
  602. },
  603. uCalendar: {
  604. startText: "开始",
  605. endText: "结束",
  606. toolTip: "选择日期",
  607. outOfRange: "日期超出范围啦~",
  608. year: "年",
  609. month: "月",
  610. sun: "日",
  611. mon: "一",
  612. tue: "二",
  613. wed: "三",
  614. thu: "四",
  615. fri: "五",
  616. sat: "六",
  617. confirmText: "确定",
  618. to: "至"
  619. },
  620. uEmpty: {
  621. car: "购物车为空",
  622. page: "页面不存在",
  623. search: "没有搜索结果",
  624. address: "没有收货地址",
  625. wifi: "没有WiFi",
  626. order: "订单为空",
  627. coupon: "没有优惠券",
  628. favor: "暂无收藏",
  629. permission: "无权限",
  630. history: "无历史记录",
  631. news: "无新闻列表",
  632. message: "消息列表为空",
  633. list: "列表为空",
  634. data: "数据为空"
  635. },
  636. uCountDown: {
  637. day: "天",
  638. hour: "时",
  639. minute: "分",
  640. second: "秒"
  641. },
  642. uFullScreen: {
  643. title: "发现新版本",
  644. upgrade: "升级"
  645. }
  646. };
  647. const enUS = {
  648. name: "en-US",
  649. label: "English",
  650. locale: "en",
  651. uActionSheet: {
  652. cancelText: "Cancel"
  653. },
  654. uUpload: {
  655. uploadText: "Select Image",
  656. retry: "Retry",
  657. overSize: "File size exceeds allowed limit",
  658. overMaxCount: "Exceeds maximum allowed number of files",
  659. reUpload: "Re-upload",
  660. uploadFailed: "Upload failed, please try again",
  661. modalTitle: "Notice",
  662. deleteConfirm: "Are you sure you want to delete this item?",
  663. terminatedRemove: "Removal cancelled",
  664. removeSuccess: "Removed successfully",
  665. previewFailed: "Failed to preview image",
  666. notAllowedExt: "Files with {ext} format are not allowed",
  667. noAction: "Please configure upload address"
  668. },
  669. uVerificationCode: {
  670. startText: "Get Code",
  671. changeText: "Retry in Xs",
  672. endText: "Retry"
  673. },
  674. uSection: {
  675. subTitle: "More"
  676. },
  677. uSelect: {
  678. cancelText: "Cancel",
  679. confirmText: "Confirm"
  680. },
  681. uSearch: {
  682. placeholder: "Please enter keywords",
  683. actionText: "Search"
  684. },
  685. uNoNetwork: {
  686. tips: "Ooops, network disconnected",
  687. checkNetwork: "Please check network or go to",
  688. setting: "Settings",
  689. retry: "Retry",
  690. noConnection: "No network connection",
  691. connected: "Network connected"
  692. },
  693. uReadMore: {
  694. closeText: "Read More",
  695. openText: "Collapse"
  696. },
  697. uPagination: {
  698. prevText: "Prev",
  699. nextText: "Next"
  700. },
  701. uPicker: {
  702. cancelText: "Cancel",
  703. confirmText: "Confirm"
  704. },
  705. uModal: {
  706. title: "Notice",
  707. content: "Content",
  708. confirmText: "Confirm",
  709. cancelText: "Cancel"
  710. },
  711. uLoadmore: {
  712. loadmore: "Load more",
  713. loading: "Loading...",
  714. nomore: "No more"
  715. },
  716. uLink: {
  717. mpTips: "Link copied, please open it in browser"
  718. },
  719. uKeyboard: {
  720. cancelText: "Cancel",
  721. confirmText: "Confirm",
  722. number: "Number Keyboard",
  723. idCard: "ID Card Keyboard",
  724. plate: "Plate Keyboard"
  725. },
  726. uInput: {
  727. placeholder: "Please enter"
  728. },
  729. uCalendar: {
  730. startText: "Start",
  731. endText: "End",
  732. toolTip: "Select date",
  733. outOfRange: "Date out of range",
  734. year: "",
  735. month: "",
  736. sun: "Sun",
  737. mon: "Mon",
  738. tue: "Tue",
  739. wed: "Wed",
  740. thu: "Thu",
  741. fri: "Fri",
  742. sat: "Sat",
  743. confirmText: "Confirm",
  744. to: " to "
  745. },
  746. uEmpty: {
  747. car: "Shopping cart is empty",
  748. page: "Page not found",
  749. search: "No search results",
  750. address: "No shipping address",
  751. wifi: "No WiFi",
  752. order: "No orders",
  753. coupon: "No coupons",
  754. favor: "No favorites",
  755. permission: "No permission",
  756. history: "No history",
  757. news: "No news",
  758. message: "No messages",
  759. list: "No list",
  760. data: "No data"
  761. },
  762. uCountDown: {
  763. day: "days",
  764. hour: "hours",
  765. minute: "minutes",
  766. second: "Second"
  767. },
  768. uFullScreen: {
  769. title: "New Version Available",
  770. upgrade: "Upgrade"
  771. }
  772. };
  773. const localePack = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
  774. __proto__: null,
  775. enUS,
  776. zhCN
  777. }, Symbol.toStringTag, { value: "Module" }));
  778. const THEME_STORAGE_KEY$1 = "uview-pro-theme";
  779. const DARK_MODE_STORAGE_KEY$1 = "uview-pro-dark-mode";
  780. const LOCALE_STORAGE_KEY = "uview-pro-locale";
  781. const DEFAULT_LIGHT_TOKENS = ((_a = defaultThemes[0]) == null ? void 0 : _a.color) || {};
  782. const DEFAULT_DARK_TOKENS = ((_b = defaultThemes[0]) == null ? void 0 : _b.darkColor) || {};
  783. const STRUCTURAL_TOKENS = /* @__PURE__ */ new Set([
  784. "bgColor",
  785. "bgWhite",
  786. "bgGrayLight",
  787. "bgGrayDark",
  788. "bgBlack",
  789. "borderColor",
  790. "lightColor",
  791. "mainColor",
  792. "contentColor",
  793. "tipsColor",
  794. "whiteColor",
  795. "blackColor",
  796. "dividerColor",
  797. "maskColor",
  798. "shadowColor"
  799. ]);
  800. class ConfigProvider {
  801. constructor() {
  802. this.themesRef = vue.ref([]);
  803. this.currentThemeRef = vue.ref(null);
  804. this.darkModeRef = vue.ref(config$2.defaultDarkMode);
  805. this.cssVarsRef = vue.ref({});
  806. this.localesRef = vue.ref([]);
  807. this.currentLocaleRef = vue.ref(null);
  808. this.baseColorTokens = DEFAULT_LIGHT_TOKENS;
  809. this.baseDarkColorTokens = DEFAULT_DARK_TOKENS;
  810. this.debug = false;
  811. this.systemDarkModeMediaQuery = null;
  812. this.lastAppliedCssKeys = [];
  813. this.interval = 0;
  814. this.initSystemDarkModeListener();
  815. }
  816. /**
  817. * 初始化系统暗黑模式监听器
  818. * 支持 H5、App、小程序等平台
  819. */
  820. initSystemDarkModeListener() {
  821. try {
  822. if (typeof window !== "undefined" && window.matchMedia) {
  823. this.systemDarkModeMediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
  824. const listener = () => {
  825. if (this.darkModeRef.value === "auto") {
  826. this.applyTheme(this.currentThemeRef.value);
  827. }
  828. };
  829. if (this.systemDarkModeMediaQuery.addEventListener) {
  830. this.systemDarkModeMediaQuery.addEventListener("change", listener);
  831. } else if (this.systemDarkModeMediaQuery.addListener) {
  832. this.systemDarkModeMediaQuery.addListener(listener);
  833. }
  834. }
  835. } catch (e) {
  836. if (this.debug)
  837. console.warn("[ConfigProvider] H5 system dark mode listener failed", e);
  838. }
  839. try {
  840. if (typeof uni !== "undefined" && typeof uni.onThemeChange === "function") {
  841. uni.onThemeChange((res) => {
  842. console.log("[ConfigProvider] system theme changed", res);
  843. if (this.darkModeRef.value === "auto") {
  844. this.applyTheme(this.currentThemeRef.value);
  845. }
  846. });
  847. }
  848. } catch (e) {
  849. if (this.debug)
  850. console.warn("[ConfigProvider] uni-app system dark mode listener failed", e);
  851. }
  852. this.initAppEvent();
  853. }
  854. /**
  855. * App 平台事件监听
  856. * 经测试 uni.onThemeChange 在 App 平台目前没生效,暂时只能通过定时检查
  857. */
  858. initAppEvent() {
  859. try {
  860. if (this.interval)
  861. clearInterval(this.interval);
  862. this.interval = setInterval(() => {
  863. if (this.darkModeRef.value === "auto") {
  864. this.applyTheme(this.currentThemeRef.value);
  865. }
  866. }, 5e3);
  867. } catch (e) {
  868. if (this.debug)
  869. console.warn("[ConfigProvider] setInterval failed", e);
  870. }
  871. }
  872. /**
  873. * 检测当前是否应该使用暗黑模式
  874. */
  875. isSystemDarkMode() {
  876. try {
  877. if (this.systemDarkModeMediaQuery) {
  878. return this.systemDarkModeMediaQuery.matches;
  879. }
  880. } catch (e) {
  881. if (this.debug)
  882. console.warn("[ConfigProvider] matchMedia check failed", e);
  883. }
  884. try {
  885. return getSystemDarkMode() === "dark";
  886. } catch (e) {
  887. if (this.debug)
  888. console.warn("[ConfigProvider] native system theme check failed", e);
  889. return false;
  890. }
  891. }
  892. /**
  893. * 初始化主题系统
  894. * @param themes 可用主题数组
  895. * @param defaultTheme 可选默认主题名
  896. */
  897. initTheme(themes, defaultConfig, isForce) {
  898. const normalizedThemes = this.normalizeThemes(themes);
  899. if (!normalizedThemes.length) {
  900. console.warn("[ConfigProvider] init called with empty themes");
  901. return;
  902. }
  903. if (defaultConfig) {
  904. if (typeof defaultConfig === "string") {
  905. config$2.defaultTheme = defaultConfig || config$2.defaultTheme;
  906. } else if (typeof defaultConfig === "object") {
  907. const { defaultTheme, defaultDarkMode } = defaultConfig;
  908. config$2.defaultTheme = defaultTheme || config$2.defaultTheme;
  909. config$2.defaultDarkMode = defaultDarkMode || config$2.defaultDarkMode;
  910. }
  911. }
  912. this.themesRef.value = normalizedThemes.slice();
  913. const saved = this.readStorage(THEME_STORAGE_KEY$1);
  914. let initialName = saved || config$2.defaultTheme || this.themesRef.value[0].name;
  915. if (isForce && config$2.defaultTheme)
  916. initialName = config$2.defaultTheme;
  917. let found = this.themesRef.value.find((t2) => t2.name === initialName);
  918. if (!found)
  919. found = this.themesRef.value.find((t2) => t2.name === config$2.defaultTheme);
  920. if (!found)
  921. found = this.themesRef.value[0];
  922. this.currentThemeRef.value = found;
  923. this.initDarkMode(config$2.defaultDarkMode, isForce);
  924. this.applyTheme(found);
  925. if (this.debug)
  926. console.log("[ConfigProvider] initialized, theme=", found.name, "darkMode=", this.darkModeRef.value);
  927. return this;
  928. }
  929. /**
  930. * 初始化暗黑模式设置
  931. * @param darkMode
  932. */
  933. initDarkMode(darkMode, isForce) {
  934. const savedDarkMode = this.readStorage(DARK_MODE_STORAGE_KEY$1);
  935. let darkModeValue = savedDarkMode || darkMode || config$2.defaultDarkMode;
  936. if (isForce && darkMode)
  937. darkModeValue = darkMode;
  938. this.darkModeRef.value = darkModeValue;
  939. }
  940. /**
  941. * 初始化国际化数据
  942. * @param locales 可选的 locale 列表(对象数组,包含 name 字段)
  943. * @param defaultLocaleName 可选默认 locale 名称
  944. */
  945. initLocales(locales, defaultLocaleName, isForce) {
  946. const normalized = this.normalizeLocales(locales);
  947. if (!normalized.length) {
  948. if (this.debug)
  949. console.warn("[ConfigProvider] initLocales called with empty locales");
  950. return;
  951. }
  952. this.localesRef.value = normalized.slice();
  953. const saved = this.readStorage(LOCALE_STORAGE_KEY);
  954. let initialName = saved || defaultLocaleName || config$2.defaultLocale;
  955. if (isForce && defaultLocaleName)
  956. initialName = defaultLocaleName;
  957. let found = this.localesRef.value.find((l) => l.name === initialName);
  958. if (!found)
  959. found = this.localesRef.value.find((l) => l.name === config$2.defaultLocale);
  960. if (!found)
  961. found = this.localesRef.value[0];
  962. this.currentLocaleRef.value = found;
  963. if (this.debug)
  964. console.log("[ConfigProvider] locales initialized, locale=", found == null ? void 0 : found.name);
  965. return this;
  966. }
  967. /**
  968. * 归一化 locale 配置,保证始终至少有一个默认 locale
  969. */
  970. normalizeLocales(locales) {
  971. let builtinList = [];
  972. try {
  973. builtinList = Object.values(localePack || {}).filter((v) => v && typeof v === "object");
  974. } catch (e) {
  975. if (this.debug)
  976. console.warn("[ConfigProvider] normalizeLocales read builtin failed", e);
  977. }
  978. if (!Array.isArray(locales) || !locales.length) {
  979. return builtinList.slice();
  980. }
  981. const map = /* @__PURE__ */ new Map();
  982. builtinList.forEach((item) => {
  983. if (item && item.name) {
  984. map.set(item.name, { ...item || {} });
  985. }
  986. });
  987. locales.forEach((loc) => {
  988. if (!loc || !loc.name)
  989. return;
  990. const existing = map.get(loc.name);
  991. if (!existing) {
  992. map.set(loc.name, { ...loc || {} });
  993. return;
  994. }
  995. const merged = { ...existing };
  996. Object.keys(loc).forEach((k) => {
  997. const v = loc[k];
  998. if (v != null && typeof v === "object" && !Array.isArray(v) && typeof merged[k] === "object") {
  999. merged[k] = { ...merged[k] || {}, ...v || {} };
  1000. } else {
  1001. merged[k] = v;
  1002. }
  1003. });
  1004. map.set(loc.name, merged);
  1005. });
  1006. return Array.from(map.values());
  1007. }
  1008. /**
  1009. * 获取所有可用 locale
  1010. */
  1011. getLocales() {
  1012. return this.localesRef.value.slice();
  1013. }
  1014. /**
  1015. * 获取当前 locale 对象
  1016. */
  1017. getCurrentLocale() {
  1018. return this.currentLocaleRef.value;
  1019. }
  1020. /**
  1021. * 切换 locale 并持久化
  1022. */
  1023. setLocale(localeName) {
  1024. if (!this.localesRef.value || this.localesRef.value.length === 0) {
  1025. console.warn("[ConfigProvider] setLocale called but locales list empty");
  1026. return;
  1027. }
  1028. const locale = this.localesRef.value.find((l) => l.name === localeName);
  1029. if (!locale) {
  1030. console.warn("[ConfigProvider] locale not found:", localeName);
  1031. return;
  1032. }
  1033. this.currentLocaleRef.value = locale;
  1034. this.writeStorage(LOCALE_STORAGE_KEY, localeName);
  1035. if (this.debug)
  1036. console.log("[ConfigProvider] setLocale ->", localeName);
  1037. }
  1038. /**
  1039. * 翻译函数
  1040. * 支持 key 路径,例如 'calendar.placeholder'
  1041. * replacements 支持数组或对象替换占位符 {0} 或 {name}
  1042. */
  1043. t(key, replacements, localeName) {
  1044. try {
  1045. if (!Array.isArray(this.localesRef.value) || this.localesRef.value.length === 0) {
  1046. this.initLocales();
  1047. }
  1048. } catch (e) {
  1049. if (this.debug)
  1050. console.warn("[ConfigProvider] lazy initLocales failed", e);
  1051. }
  1052. const localeObj = localeName && this.localesRef.value.find((l) => l.name === localeName) || this.currentLocaleRef.value;
  1053. if (!localeObj)
  1054. return key;
  1055. const parts = key.split(".");
  1056. let cur = localeObj;
  1057. for (let i = 0; i < parts.length; i++) {
  1058. if (cur == null)
  1059. break;
  1060. cur = cur[parts[i]];
  1061. }
  1062. let text = typeof cur === "string" ? cur : key;
  1063. if (replacements != null) {
  1064. if (Array.isArray(replacements)) {
  1065. replacements.forEach((val, idx) => {
  1066. text = text.split(`{${idx}}`).join(String(val));
  1067. });
  1068. } else if (typeof replacements === "object") {
  1069. Object.keys(replacements).forEach((k) => {
  1070. text = text.split(`{${k}}`).join(String(replacements[k]));
  1071. });
  1072. }
  1073. }
  1074. return text;
  1075. }
  1076. /**
  1077. * 获取所有可用主题
  1078. */
  1079. getThemes() {
  1080. return this.themesRef.value.slice();
  1081. }
  1082. /**
  1083. * 获取当前主题
  1084. */
  1085. getCurrentTheme() {
  1086. return this.currentThemeRef.value;
  1087. }
  1088. /**
  1089. * 切换主题并持久化
  1090. */
  1091. setTheme(themeName) {
  1092. if (!this.themesRef.value || this.themesRef.value.length === 0) {
  1093. console.warn("[ConfigProvider] setTheme called but themes list empty");
  1094. return;
  1095. }
  1096. const theme2 = this.themesRef.value.find((t2) => t2.name === themeName);
  1097. if (!theme2) {
  1098. console.warn("[ConfigProvider] theme not found:", themeName);
  1099. return;
  1100. }
  1101. this.currentThemeRef.value = theme2;
  1102. this.applyTheme(theme2);
  1103. this.writeStorage(THEME_STORAGE_KEY$1, themeName);
  1104. if (this.debug)
  1105. console.log("[ConfigProvider] setTheme ->", themeName);
  1106. }
  1107. /**
  1108. * 运行时更新当前主题颜色并应用(不持久化)
  1109. * @param colors 主题颜色键值,支持部分更新
  1110. */
  1111. setThemeColor(colors) {
  1112. if (!colors || Object.keys(colors).length === 0)
  1113. return;
  1114. if (!this.currentThemeRef.value) {
  1115. console.warn("[ConfigProvider] setThemeColor called but no current theme");
  1116. return;
  1117. }
  1118. const mode = this.getActiveMode();
  1119. if (mode === "dark") {
  1120. const existing = this.currentThemeRef.value.darkColor || {};
  1121. this.currentThemeRef.value.darkColor = {
  1122. ...existing,
  1123. ...colors
  1124. };
  1125. } else {
  1126. const existing = this.currentThemeRef.value.color || {};
  1127. this.currentThemeRef.value.color = {
  1128. ...existing,
  1129. ...colors
  1130. };
  1131. }
  1132. this.applyTheme(this.currentThemeRef.value);
  1133. if (this.debug)
  1134. console.log("[ConfigProvider] setThemeColor ->", colors);
  1135. }
  1136. /**
  1137. * 获取当前暗黑模式设置
  1138. */
  1139. getDarkMode() {
  1140. return this.darkModeRef.value;
  1141. }
  1142. /**
  1143. * 设置暗黑模式
  1144. * @param mode 'auto' (跟随系统) | 'light' (强制亮色) | 'dark' (强制暗黑)
  1145. */
  1146. setDarkMode(mode) {
  1147. this.darkModeRef.value = mode;
  1148. this.writeStorage(DARK_MODE_STORAGE_KEY$1, mode);
  1149. this.applyTheme(this.currentThemeRef.value);
  1150. if (this.debug)
  1151. console.log("[ConfigProvider] setDarkMode ->", mode);
  1152. }
  1153. /**
  1154. * 检查当前是否处于暗黑模式
  1155. */
  1156. isInDarkMode() {
  1157. const mode = this.darkModeRef.value;
  1158. if (mode === "dark")
  1159. return true;
  1160. if (mode === "light")
  1161. return false;
  1162. return this.isSystemDarkMode();
  1163. }
  1164. /**
  1165. * 归一化主题配置,保证始终至少有一个默认主题
  1166. */
  1167. normalizeThemes(themes) {
  1168. if (Array.isArray(themes) && themes.length) {
  1169. return this.mergeThemes(defaultThemes, themes);
  1170. }
  1171. return defaultThemes.slice();
  1172. }
  1173. mergeThemes(...lists) {
  1174. const map = /* @__PURE__ */ new Map();
  1175. lists.filter((list2) => Array.isArray(list2) && list2.length > 0).forEach((list2) => {
  1176. list2.forEach((theme2) => {
  1177. const normalized = this.ensureDarkVariant({
  1178. ...theme2,
  1179. color: this.applyColorFallbacks(theme2.color),
  1180. darkColor: theme2.darkColor ? { ...theme2.darkColor } : void 0,
  1181. css: theme2.css ? { ...theme2.css } : void 0,
  1182. darkCss: theme2.darkCss ? { ...theme2.darkCss } : void 0
  1183. });
  1184. map.set(normalized.name, normalized);
  1185. });
  1186. });
  1187. return Array.from(map.values());
  1188. }
  1189. ensureDarkVariant(theme2) {
  1190. const finalDark = this.buildDarkPalette(theme2);
  1191. return {
  1192. ...theme2,
  1193. darkColor: this.applyDarkFallbacks(finalDark)
  1194. };
  1195. }
  1196. buildDarkPalette(theme2) {
  1197. const provided = theme2.darkColor || {};
  1198. const generated = this.generateDarkFromLight(theme2.color || {}, provided);
  1199. return {
  1200. ...generated,
  1201. ...provided
  1202. };
  1203. }
  1204. /**
  1205. * 应用亮色主题
  1206. */
  1207. applyColorFallbacks(color2) {
  1208. return {
  1209. ...this.baseColorTokens || {},
  1210. ...color2 || {}
  1211. };
  1212. }
  1213. /**
  1214. * 应用暗黑主题
  1215. */
  1216. applyDarkFallbacks(color2) {
  1217. return {
  1218. ...this.baseDarkColorTokens || {},
  1219. ...color2 || {}
  1220. };
  1221. }
  1222. filterNonStructuralTokens(palette) {
  1223. const result = {};
  1224. Object.entries(palette || {}).forEach(([key, value]) => {
  1225. if (!this.isStructuralToken(key)) {
  1226. result[key] = value;
  1227. }
  1228. });
  1229. return result;
  1230. }
  1231. generateDarkFromLight(palette, provided) {
  1232. const result = {};
  1233. const nonStructural = this.filterNonStructuralTokens(palette);
  1234. Object.entries(nonStructural).forEach(([key, value]) => {
  1235. var _a2;
  1236. if (typeof value !== "string")
  1237. return;
  1238. if (provided && Object.prototype.hasOwnProperty.call(provided, key)) {
  1239. return;
  1240. }
  1241. const fallback = (_a2 = this.baseDarkColorTokens) == null ? void 0 : _a2[key];
  1242. result[key] = this.createDarkVariantFromLight(value, fallback);
  1243. });
  1244. return result;
  1245. }
  1246. createDarkVariantFromLight(color2, fallback) {
  1247. const normalized = this.normalizeHex(color2);
  1248. const fallbackHex = fallback ? this.normalizeHex(fallback) : null;
  1249. if (normalized && fallbackHex) {
  1250. return this.mixHex(normalized, fallbackHex, 0.6);
  1251. }
  1252. if (fallbackHex)
  1253. return fallbackHex;
  1254. return normalized || color2;
  1255. }
  1256. normalizeHex(color2) {
  1257. if (!color2)
  1258. return null;
  1259. const hex = color2.trim();
  1260. if (/^#([0-9a-fA-F]{6})$/.test(hex))
  1261. return hex.toLowerCase();
  1262. return null;
  1263. }
  1264. mixHex(fromHex, toHex, ratio) {
  1265. const from = this.hexToRgb(fromHex);
  1266. const to = this.hexToRgb(toHex);
  1267. if (!from || !to)
  1268. return toHex;
  1269. const clamp = (val) => Math.min(255, Math.max(0, Math.round(val)));
  1270. const r = clamp(from.r * (1 - ratio) + to.r * ratio);
  1271. const g = clamp(from.g * (1 - ratio) + to.g * ratio);
  1272. const b = clamp(from.b * (1 - ratio) + to.b * ratio);
  1273. return this.rgbToHex(r, g, b);
  1274. }
  1275. hexToRgb(hex) {
  1276. const match = /^#([0-9a-fA-F]{6})$/.exec(hex);
  1277. if (!match)
  1278. return null;
  1279. return {
  1280. r: parseInt(match[1].slice(0, 2), 16),
  1281. g: parseInt(match[1].slice(2, 4), 16),
  1282. b: parseInt(match[1].slice(4, 6), 16)
  1283. };
  1284. }
  1285. rgbToHex(r, g, b) {
  1286. const toHex = (val) => val.toString(16).padStart(2, "0");
  1287. return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
  1288. }
  1289. isStructuralToken(token) {
  1290. return STRUCTURAL_TOKENS.has(token);
  1291. }
  1292. /**
  1293. * 运行时同步主题颜色($u.color)
  1294. * 更新响应式 color 对象,确保所有使用 $u.color 的地方都能响应式更新
  1295. */
  1296. syncRuntimeTheme(palette) {
  1297. var _a2;
  1298. try {
  1299. const defaultPalette = this.getActiveMode() === "dark" ? this.baseDarkColorTokens : this.baseColorTokens;
  1300. const mergedPalette = {
  1301. ...defaultPalette,
  1302. ...palette
  1303. };
  1304. Object.keys(mergedPalette).forEach((key) => {
  1305. const value = mergedPalette[key];
  1306. if (value != null) {
  1307. color[key] = value;
  1308. }
  1309. });
  1310. if (typeof uni !== "undefined" && ((_a2 = uni == null ? void 0 : uni.$u) == null ? void 0 : _a2.color)) {
  1311. uni.$u.color = color;
  1312. }
  1313. } catch (e) {
  1314. if (this.debug)
  1315. console.warn("[ConfigProvider] sync runtime theme failed", e);
  1316. }
  1317. }
  1318. /**
  1319. * 获取当前激活的模式
  1320. */
  1321. getActiveMode() {
  1322. return this.isInDarkMode() ? "dark" : "light";
  1323. }
  1324. /**
  1325. * 获取当前主题的配色方案
  1326. */
  1327. getPaletteForMode(theme2, mode) {
  1328. if (mode === "dark") {
  1329. return theme2.darkColor && Object.keys(theme2.darkColor).length ? theme2.darkColor : theme2.color || {};
  1330. }
  1331. return theme2.color || {};
  1332. }
  1333. /**
  1334. * 获取当前主题的CSS变量覆盖
  1335. */
  1336. getCssOverrides(theme2, mode) {
  1337. if (mode === "dark") {
  1338. return (theme2.darkCss && Object.keys(theme2.darkCss).length ? theme2.darkCss : theme2.css) || {};
  1339. }
  1340. return theme2.css || {};
  1341. }
  1342. /**
  1343. * 读取Storage key
  1344. */
  1345. readStorage(key) {
  1346. try {
  1347. if (typeof uni === "undefined" || typeof uni.getStorageSync !== "function")
  1348. return null;
  1349. const value = uni.getStorageSync(key);
  1350. return value ?? null;
  1351. } catch (e) {
  1352. if (this.debug)
  1353. console.warn("[ConfigProvider] failed to read storage", e);
  1354. return null;
  1355. }
  1356. }
  1357. /**
  1358. * 写入Storage key value
  1359. */
  1360. writeStorage(key, value) {
  1361. try {
  1362. if (typeof uni === "undefined" || typeof uni.setStorageSync !== "function")
  1363. return;
  1364. uni.setStorageSync(key, value);
  1365. } catch (e) {
  1366. if (this.debug)
  1367. console.warn("[ConfigProvider] failed to write storage", e);
  1368. }
  1369. }
  1370. /**
  1371. * 更新文档主题模式 H5
  1372. */
  1373. updateDocumentMode(mode) {
  1374. if (typeof document === "undefined" || !document.documentElement)
  1375. return;
  1376. const root = document.documentElement;
  1377. root.dataset.uThemeMode = mode;
  1378. root.classList.remove("u-theme-light", "u-theme-dark");
  1379. root.classList.add(`u-theme-${mode}`);
  1380. }
  1381. /**
  1382. * 转换为 CSS 变量名称
  1383. */
  1384. toCssVarName(key, prefix = "--u") {
  1385. const types2 = config$2.type;
  1386. if (types2.some((type2) => key.startsWith(type2))) {
  1387. prefix += "-type";
  1388. }
  1389. const kebab = key.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
  1390. return `${prefix}-${kebab}`;
  1391. }
  1392. /**
  1393. * 添加 RGB 值
  1394. */
  1395. attachRgbVar(target, varName, value) {
  1396. if (typeof value !== "string")
  1397. return;
  1398. const hex = value.startsWith("#") ? value.slice(1) : "";
  1399. if (!/^[0-9a-fA-F]{6}$/.test(hex))
  1400. return;
  1401. const r = parseInt(hex.slice(0, 2), 16);
  1402. const g = parseInt(hex.slice(2, 4), 16);
  1403. const b = parseInt(hex.slice(4, 6), 16);
  1404. target[`${varName}-rgb`] = `${r}, ${g}, ${b}`;
  1405. }
  1406. /**
  1407. * 构建 CSS 变量映射表
  1408. * 生成格式:
  1409. */
  1410. buildCssVarMap(theme2, mode) {
  1411. const map = {
  1412. "--u-theme-mode": mode
  1413. };
  1414. const palette = this.getPaletteForMode(theme2, mode);
  1415. const cssOverrides = this.getCssOverrides(theme2, mode);
  1416. const applyEntry = (key, value) => {
  1417. if (value == null)
  1418. return;
  1419. const strValue = String(value);
  1420. if (key.startsWith("--")) {
  1421. map[key] = strValue;
  1422. this.attachRgbVar(map, key, strValue);
  1423. return;
  1424. }
  1425. const cssVarName = this.toCssVarName(key);
  1426. map[cssVarName] = strValue;
  1427. this.attachRgbVar(map, cssVarName, strValue);
  1428. };
  1429. Object.entries(palette || {}).forEach(([key, value]) => applyEntry(key, value));
  1430. Object.entries(cssOverrides || {}).forEach(([key, value]) => applyEntry(key, value));
  1431. return map;
  1432. }
  1433. /**
  1434. * 刷新 CSS 变量 H5
  1435. */
  1436. flushCssVars(vars) {
  1437. if (typeof document === "undefined" || !document.documentElement)
  1438. return;
  1439. const root = document.documentElement;
  1440. this.lastAppliedCssKeys.forEach((key) => {
  1441. root.style.removeProperty(key);
  1442. });
  1443. Object.entries(vars).forEach(([key, value]) => {
  1444. root.style.setProperty(key, value);
  1445. });
  1446. this.lastAppliedCssKeys = Object.keys(vars);
  1447. }
  1448. /**
  1449. * 将主题应用到运行时:
  1450. * - 1) 调用 uni.$u.setColor(theme.color) 如果存在
  1451. * - 2) 在 H5 环境中,将 css map 注入到 document.documentElement 的 CSS 变量中
  1452. * - 3) 支持暗黑模式:根据 darkColor 或 color 应用相应的颜色
  1453. */
  1454. applyTheme(theme2) {
  1455. if (!theme2)
  1456. return;
  1457. const mode = this.getActiveMode();
  1458. const palette = this.getPaletteForMode(theme2, mode);
  1459. this.syncRuntimeTheme(palette);
  1460. const cssVarMap = this.buildCssVarMap(theme2, mode);
  1461. this.cssVarsRef.value = cssVarMap;
  1462. this.flushCssVars(cssVarMap);
  1463. this.updateDocumentMode(mode);
  1464. }
  1465. }
  1466. const configProvider = new ConfigProvider();
  1467. function getColor(name) {
  1468. if (color[name]) {
  1469. return color[name];
  1470. }
  1471. return lightPalette[name] || "";
  1472. }
  1473. function setColor(theme2) {
  1474. if (theme2) {
  1475. configProvider.setThemeColor(theme2);
  1476. }
  1477. }
  1478. function type2icon(type2 = "success", fill = false) {
  1479. if (!["primary", "info", "error", "warning", "success"].includes(type2))
  1480. type2 = "success";
  1481. let iconName = "";
  1482. switch (type2) {
  1483. case "primary":
  1484. iconName = "info-circle";
  1485. break;
  1486. case "info":
  1487. iconName = "info-circle";
  1488. break;
  1489. case "error":
  1490. iconName = "close-circle";
  1491. break;
  1492. case "warning":
  1493. iconName = "error-circle";
  1494. break;
  1495. case "success":
  1496. iconName = "checkmark-circle";
  1497. break;
  1498. default:
  1499. iconName = "checkmark-circle";
  1500. }
  1501. if (fill)
  1502. iconName += "-fill";
  1503. return iconName;
  1504. }
  1505. function randomArray(array2 = []) {
  1506. return array2.sort(() => Math.random() - 0.5);
  1507. }
  1508. function deepClone(obj, cache2 = /* @__PURE__ */ new WeakMap()) {
  1509. if (obj === null || typeof obj !== "object")
  1510. return obj;
  1511. if (cache2.has(obj))
  1512. return cache2.get(obj);
  1513. let clone;
  1514. if (obj instanceof Date) {
  1515. clone = new Date(obj.getTime());
  1516. } else if (obj instanceof RegExp) {
  1517. clone = new RegExp(obj);
  1518. } else if (obj instanceof Map) {
  1519. clone = new Map(Array.from(obj, ([key, value]) => [key, deepClone(value, cache2)]));
  1520. } else if (obj instanceof Set) {
  1521. clone = new Set(Array.from(obj, (value) => deepClone(value, cache2)));
  1522. } else if (Array.isArray(obj)) {
  1523. clone = obj.map((value) => deepClone(value, cache2));
  1524. } else if (Object.prototype.toString.call(obj) === "[object Object]") {
  1525. clone = Object.create(Object.getPrototypeOf(obj));
  1526. cache2.set(obj, clone);
  1527. for (const [key, value] of Object.entries(obj)) {
  1528. clone[key] = deepClone(value, cache2);
  1529. }
  1530. } else {
  1531. clone = Object.assign({}, obj);
  1532. }
  1533. cache2.set(obj, clone);
  1534. return clone;
  1535. }
  1536. function deepMerge$1(target = {}, source = {}) {
  1537. target = deepClone(target);
  1538. if (typeof target !== "object" || target === null || typeof source !== "object" || source === null)
  1539. return target;
  1540. const merged = Array.isArray(target) ? target.slice() : Object.assign({}, target);
  1541. for (const prop in source) {
  1542. if (!Object.prototype.hasOwnProperty.call(source, prop))
  1543. continue;
  1544. const sourceValue = source[prop];
  1545. const targetValue = merged[prop];
  1546. if (sourceValue instanceof Date) {
  1547. merged[prop] = new Date(sourceValue);
  1548. } else if (sourceValue instanceof RegExp) {
  1549. merged[prop] = new RegExp(sourceValue);
  1550. } else if (sourceValue instanceof Map) {
  1551. merged[prop] = new Map(sourceValue);
  1552. } else if (sourceValue instanceof Set) {
  1553. merged[prop] = new Set(sourceValue);
  1554. } else if (typeof sourceValue === "object" && sourceValue !== null) {
  1555. merged[prop] = deepMerge$1(targetValue, sourceValue);
  1556. } else {
  1557. merged[prop] = sourceValue;
  1558. }
  1559. }
  1560. return merged;
  1561. }
  1562. function email(value) {
  1563. return /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(
  1564. value
  1565. );
  1566. }
  1567. function mobile(value) {
  1568. return /^1[3-9]\d{9}$/.test(value);
  1569. }
  1570. function url(value) {
  1571. return /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/.test(value);
  1572. }
  1573. function date$1(value) {
  1574. return !/Invalid|NaN/.test(new Date(value).toString());
  1575. }
  1576. function dateISO(value) {
  1577. return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value);
  1578. }
  1579. function number$2(value) {
  1580. return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value);
  1581. }
  1582. function digits(value) {
  1583. return /^\d+$/.test(value);
  1584. }
  1585. function idCard(value) {
  1586. return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value);
  1587. }
  1588. function carNo(value) {
  1589. const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
  1590. const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
  1591. if (value.length === 7) {
  1592. return creg.test(value);
  1593. } else if (value.length === 8) {
  1594. return xreg.test(value);
  1595. } else {
  1596. return false;
  1597. }
  1598. }
  1599. function amount(value) {
  1600. return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value);
  1601. }
  1602. function chinese(value) {
  1603. let reg = /^[\u4e00-\u9fa5]+$/gi;
  1604. return reg.test(value);
  1605. }
  1606. function letter(value) {
  1607. return /^[a-zA-Z]*$/.test(value);
  1608. }
  1609. function enOrNum(value) {
  1610. let reg = /^[0-9a-zA-Z]*$/g;
  1611. return reg.test(value);
  1612. }
  1613. function contains(value, param) {
  1614. return value.indexOf(param) >= 0;
  1615. }
  1616. function range$1(value, param) {
  1617. return value >= param[0] && value <= param[1];
  1618. }
  1619. function rangeLength(value, param) {
  1620. return value.length >= param[0] && value.length <= param[1];
  1621. }
  1622. function landline(value) {
  1623. let reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
  1624. return reg.test(value);
  1625. }
  1626. function empty(value) {
  1627. switch (typeof value) {
  1628. case "undefined":
  1629. return true;
  1630. case "string":
  1631. if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, "").length == 0)
  1632. return true;
  1633. break;
  1634. case "boolean":
  1635. if (!value)
  1636. return true;
  1637. break;
  1638. case "number":
  1639. if (0 === value || isNaN(value))
  1640. return true;
  1641. break;
  1642. case "object":
  1643. if (null === value || value.length === 0)
  1644. return true;
  1645. for (var i in value) {
  1646. return false;
  1647. }
  1648. return true;
  1649. }
  1650. return false;
  1651. }
  1652. function jsonString(value) {
  1653. if (typeof value == "string") {
  1654. try {
  1655. var obj = JSON.parse(value);
  1656. if (typeof obj == "object" && obj) {
  1657. return true;
  1658. } else {
  1659. return false;
  1660. }
  1661. } catch (e) {
  1662. return false;
  1663. }
  1664. }
  1665. return false;
  1666. }
  1667. function array$1(value) {
  1668. if (typeof Array.isArray === "function") {
  1669. return Array.isArray(value);
  1670. } else {
  1671. return Object.prototype.toString.call(value) === "[object Array]";
  1672. }
  1673. }
  1674. function object$1(value) {
  1675. return Object.prototype.toString.call(value) === "[object Object]";
  1676. }
  1677. function code(value, len = 6) {
  1678. return new RegExp(`^\\d{${len}}$`).test(value);
  1679. }
  1680. function func(value) {
  1681. return typeof value === "function";
  1682. }
  1683. function promise(value) {
  1684. return object$1(value) && func(value.then) && func(value.catch);
  1685. }
  1686. function image(value) {
  1687. const newValue = value.split("?")[0];
  1688. const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
  1689. return IMAGE_REGEXP.test(newValue);
  1690. }
  1691. function video(value) {
  1692. const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
  1693. return VIDEO_REGEXP.test(value);
  1694. }
  1695. function regExp(o) {
  1696. return o && Object.prototype.toString.call(o) === "[object RegExp]";
  1697. }
  1698. function string$1(value) {
  1699. return typeof value === "string";
  1700. }
  1701. const test$1 = {
  1702. email,
  1703. mobile,
  1704. url,
  1705. date: date$1,
  1706. dateISO,
  1707. number: number$2,
  1708. digits,
  1709. idCard,
  1710. carNo,
  1711. amount,
  1712. chinese,
  1713. letter,
  1714. enOrNum,
  1715. contains,
  1716. range: range$1,
  1717. rangeLength,
  1718. empty,
  1719. isEmpty: empty,
  1720. jsonString,
  1721. landline,
  1722. object: object$1,
  1723. array: array$1,
  1724. code,
  1725. func,
  1726. promise,
  1727. video,
  1728. image,
  1729. regExp,
  1730. string: string$1
  1731. };
  1732. function addUnit$1(value = "auto", unit = "rpx") {
  1733. const strValue = String(value);
  1734. if (!strValue)
  1735. return "";
  1736. if (strValue === "auto")
  1737. return strValue;
  1738. if (strValue.includes(" ")) {
  1739. return strValue.split(" ").map((s) => {
  1740. if (s === "auto" || /^-?\d*\.?\d+(%|px|rpx|em|rem|vh|vw)$/.test(s))
  1741. return s;
  1742. return test$1.number(s) ? `${s}${unit}` : s;
  1743. }).join(" ");
  1744. }
  1745. if (/^-?\d*\.?\d+(%|px|rpx|em|rem|vh|vw)$/.test(strValue))
  1746. return strValue;
  1747. return test$1.number(strValue) ? `${strValue}${unit}` : strValue;
  1748. }
  1749. function random(min, max) {
  1750. if (min >= 0 && max > 0 && max >= min) {
  1751. const gab = max - min + 1;
  1752. return Math.floor(Math.random() * gab + min);
  1753. } else {
  1754. return 0;
  1755. }
  1756. }
  1757. function trim(str, pos = "both") {
  1758. if (pos === "both") {
  1759. return str.replace(/^\s+|\s+$/g, "");
  1760. } else if (pos === "left") {
  1761. return str.replace(/^\s*/, "");
  1762. } else if (pos === "right") {
  1763. return str.replace(/(\s*$)/g, "");
  1764. } else if (pos === "all") {
  1765. return str.replace(/\s+/g, "");
  1766. } else {
  1767. return str;
  1768. }
  1769. }
  1770. function toast(title, option = 1500) {
  1771. uni.showToast({
  1772. title,
  1773. icon: typeof option === "string" ? option : typeof option === "object" ? option.icon || "none" : "none",
  1774. duration: typeof option === "number" ? option : typeof option === "object" ? option.duration || "1500" : 1500
  1775. });
  1776. }
  1777. function getParent$1(name, keys) {
  1778. var _a2;
  1779. let parent = this.$parent;
  1780. while (parent) {
  1781. if (((_a2 = parent.$options) == null ? void 0 : _a2.name) !== name) {
  1782. parent = parent.$parent;
  1783. } else {
  1784. const data = {};
  1785. if (Array.isArray(keys)) {
  1786. keys.forEach((val) => {
  1787. data[val] = (parent == null ? void 0 : parent[val]) ? parent[val] : "";
  1788. });
  1789. } else {
  1790. for (const i in keys) {
  1791. if (Array.isArray(keys[i])) {
  1792. if (keys[i].length) {
  1793. data[i] = keys[i];
  1794. } else {
  1795. data[i] = parent[i];
  1796. }
  1797. } else if (keys[i] && keys[i].constructor === Object) {
  1798. if (Object.keys(keys[i]).length) {
  1799. data[i] = keys[i];
  1800. } else {
  1801. data[i] = parent[i];
  1802. }
  1803. } else {
  1804. data[i] = keys[i] || keys[i] === false ? keys[i] : parent[i];
  1805. }
  1806. }
  1807. }
  1808. return data;
  1809. }
  1810. }
  1811. return {};
  1812. }
  1813. function $parent(componentName, _instance = null) {
  1814. var _a2;
  1815. const instance = _instance || vue.getCurrentInstance();
  1816. let parent = instance && instance.parent;
  1817. if (!componentName)
  1818. return parent;
  1819. while (parent) {
  1820. const name = (_a2 = parent.type) == null ? void 0 : _a2.name;
  1821. if (name === componentName) {
  1822. return parent;
  1823. }
  1824. parent = parent.parent;
  1825. }
  1826. return null;
  1827. }
  1828. function os() {
  1829. return uni.getSystemInfoSync().platform;
  1830. }
  1831. function sys() {
  1832. return uni.getSystemInfoSync();
  1833. }
  1834. let timeout = null;
  1835. function debounce(func2, wait2 = 500, immediate = false) {
  1836. if (timeout !== null)
  1837. clearTimeout(timeout);
  1838. if (immediate) {
  1839. const callNow = !timeout;
  1840. timeout = setTimeout(() => {
  1841. timeout = null;
  1842. }, wait2);
  1843. if (callNow)
  1844. typeof func2 === "function" && func2();
  1845. } else {
  1846. timeout = setTimeout(() => {
  1847. typeof func2 === "function" && func2();
  1848. }, wait2);
  1849. }
  1850. }
  1851. let flag;
  1852. function throttle(func2, wait2 = 500, immediate = true) {
  1853. if (immediate) {
  1854. if (!flag) {
  1855. flag = true;
  1856. typeof func2 === "function" && func2();
  1857. setTimeout(() => {
  1858. flag = false;
  1859. }, wait2);
  1860. }
  1861. } else {
  1862. if (!flag) {
  1863. flag = true;
  1864. setTimeout(() => {
  1865. flag = false;
  1866. typeof func2 === "function" && func2();
  1867. }, wait2);
  1868. }
  1869. }
  1870. }
  1871. function getRect(selector, _instance = null, all = false) {
  1872. const instance = _instance || vue.getCurrentInstance();
  1873. return new Promise((resolve2) => {
  1874. uni.createSelectorQuery().in(instance == null ? void 0 : instance.proxy)[all ? "selectAll" : "select"](selector).boundingClientRect((rect) => {
  1875. if (all && Array.isArray(rect) && rect.length) {
  1876. resolve2(rect);
  1877. }
  1878. if (!all && rect) {
  1879. resolve2(rect);
  1880. }
  1881. }).exec();
  1882. });
  1883. }
  1884. function UniCopy(text, config2) {
  1885. const opt = Object.assign({ data: text }, config2);
  1886. uni.setClipboardData(opt);
  1887. }
  1888. function clipboard(content, options) {
  1889. const text = String(content);
  1890. const defaultOpt = {
  1891. showToast: true,
  1892. success: () => {
  1893. },
  1894. fail: () => {
  1895. },
  1896. complete: () => {
  1897. }
  1898. };
  1899. const config2 = Object.assign(defaultOpt, options);
  1900. UniCopy(text, config2);
  1901. }
  1902. const zIndex = {
  1903. toast: 10090,
  1904. noNetwork: 10080,
  1905. // popup包含popup,actionSheet,keyboard,picker的值
  1906. popup: 10075,
  1907. mask: 10070,
  1908. navbar: 980,
  1909. topTips: 975,
  1910. sticky: 970,
  1911. indexListSticky: 965,
  1912. tabbar: 998
  1913. };
  1914. function mitt(all) {
  1915. all = all || /* @__PURE__ */ new Map();
  1916. return {
  1917. /**
  1918. * A Map of event names to registered handler functions.
  1919. */
  1920. all,
  1921. /**
  1922. * Register an event handler for the given type.
  1923. * @param {string|symbol} type Type of event to listen for, or `'*'` for all events
  1924. * @param {Function} handler Function to call in response to given event
  1925. * @memberOf mitt
  1926. */
  1927. on(type2, handler) {
  1928. const handlers = all.get(type2);
  1929. if (handlers) {
  1930. handlers.push(handler);
  1931. } else {
  1932. all.set(type2, [handler]);
  1933. }
  1934. },
  1935. /**
  1936. * Remove an event handler for the given type.
  1937. * If `handler` is omitted, all handlers of the given type are removed.
  1938. * @param {string|symbol} type Type of event to unregister `handler` from (`'*'` to remove a wildcard handler)
  1939. * @param {Function} [handler] Handler function to remove
  1940. * @memberOf mitt
  1941. */
  1942. off(type2, handler) {
  1943. const handlers = all.get(type2);
  1944. if (handlers) {
  1945. if (handler) {
  1946. handlers.splice(handlers.indexOf(handler) >>> 0, 1);
  1947. } else {
  1948. all.set(type2, []);
  1949. }
  1950. }
  1951. },
  1952. /**
  1953. * Invoke all handlers for the given type.
  1954. * If present, `'*'` handlers are invoked after type-matched handlers.
  1955. *
  1956. * Note: Manually firing '*' handlers is not supported.
  1957. *
  1958. * @param {string|symbol} type The event type to invoke
  1959. * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler
  1960. * @memberOf mitt
  1961. */
  1962. emit(type2, evt) {
  1963. let handlers = all.get(type2);
  1964. if (handlers) {
  1965. [...handlers].forEach((handler) => {
  1966. handler(evt);
  1967. });
  1968. }
  1969. handlers = all.get("*");
  1970. if (handlers) {
  1971. [...handlers].forEach((handler) => {
  1972. handler(type2, evt);
  1973. });
  1974. }
  1975. },
  1976. /**
  1977. * Clear all
  1978. */
  1979. clear() {
  1980. this.all.clear();
  1981. }
  1982. };
  1983. }
  1984. const IGNORE_REQUEST_KEYS = ["baseUrl", "meta"];
  1985. class Request {
  1986. constructor() {
  1987. this.config = {
  1988. baseUrl: "",
  1989. // 请求的根域名
  1990. header: {},
  1991. // 默认的请求头
  1992. method: "POST",
  1993. // 请求方式
  1994. dataType: "json",
  1995. // 设置为json,返回后uni.request会对数据进行一次JSON.parse
  1996. responseType: "text",
  1997. // 此参数无需处理,因为5+和支付宝小程序不支持,默认为text即可
  1998. timeout: 6e4,
  1999. meta: {
  2000. originalData: true,
  2001. // 是否在拦截器中返回服务端的原始数据,见文档说明
  2002. toast: false,
  2003. // 是否在请求出错时,弹出toast
  2004. loading: false
  2005. // 是否显示加载中
  2006. }
  2007. };
  2008. this.interceptor = {
  2009. request: null,
  2010. response: null
  2011. };
  2012. }
  2013. /**
  2014. * 将全局配置合并到本次请求的 options 中
  2015. * - 忽略 IGNORE_REQUEST_KEYS 中的字段(如 meta)
  2016. * - 对 header 使用深合并(全局 header 为默认,options.header 优先)
  2017. * - 对对象类型的字段尝试深合并,基础类型以 options 值优先
  2018. * - 处理 baseUrl:若存在全局 baseUrl 且 options.url 非完整 url(非 http 开头),则合并成完整 URL
  2019. */
  2020. mergeGlobalConfigToOptions(options) {
  2021. const mergedOptions = { ...options };
  2022. for (const key of Object.keys(this.config)) {
  2023. if (IGNORE_REQUEST_KEYS.includes(key)) {
  2024. continue;
  2025. }
  2026. const cfgVal = this.config[key];
  2027. const optVal = options[key];
  2028. if (cfgVal === void 0)
  2029. continue;
  2030. if (key === "header") {
  2031. mergedOptions.header = deepMerge$1(cfgVal || {}, optVal || {});
  2032. continue;
  2033. }
  2034. if (typeof cfgVal === "string" || typeof cfgVal === "number" || typeof cfgVal === "boolean") {
  2035. mergedOptions[key] = optVal !== void 0 ? optVal : cfgVal;
  2036. continue;
  2037. }
  2038. if (typeof cfgVal === "object" && !Array.isArray(cfgVal)) {
  2039. mergedOptions[key] = deepMerge$1(cfgVal || {}, optVal || {});
  2040. continue;
  2041. }
  2042. if (optVal === void 0) {
  2043. mergedOptions[key] = cfgVal;
  2044. }
  2045. }
  2046. const baseUrl = this.config.baseUrl;
  2047. if (baseUrl && mergedOptions.url && typeof mergedOptions.url === "string" && mergedOptions.url.indexOf("http") !== 0) {
  2048. mergedOptions.url = baseUrl + (mergedOptions.url.indexOf("/") === 0 ? mergedOptions.url : `/${mergedOptions.url}`);
  2049. }
  2050. if (!mergedOptions.url) {
  2051. mergedOptions.url = "";
  2052. }
  2053. return mergedOptions;
  2054. }
  2055. /**
  2056. * 设置全局默认配置
  2057. * @param customConfig 自定义配置
  2058. */
  2059. setConfig(customConfig) {
  2060. this.config = deepMerge$1(this.config, customConfig);
  2061. }
  2062. /**
  2063. * 主要请求部分
  2064. * @param options 请求参数
  2065. */
  2066. request(options) {
  2067. const mergedMeta = {
  2068. ...this.config.meta,
  2069. ...options.meta || {}
  2070. };
  2071. options.meta = mergedMeta;
  2072. options.url = options.url || "";
  2073. options.params = options.params || {};
  2074. options = this.mergeGlobalConfigToOptions(options);
  2075. if (this.interceptor.request && typeof this.interceptor.request === "function") {
  2076. const interceptorRequest = this.interceptor.request(options);
  2077. if (!interceptorRequest) {
  2078. return new Promise(() => {
  2079. });
  2080. }
  2081. this.options = interceptorRequest;
  2082. }
  2083. return new Promise((resolve2, reject) => {
  2084. options.complete = (response) => {
  2085. const meta = options.meta || this.config.meta || {};
  2086. const originalData = meta.originalData ?? false;
  2087. response.config = options;
  2088. if (originalData) {
  2089. if (this.interceptor.response && typeof this.interceptor.response === "function") {
  2090. const resInterceptors = this.interceptor.response(response);
  2091. if (resInterceptors !== false) {
  2092. resolve2(resInterceptors);
  2093. } else {
  2094. reject(response);
  2095. }
  2096. } else {
  2097. resolve2(response);
  2098. }
  2099. } else {
  2100. if (response.statusCode === 200) {
  2101. if (this.interceptor.response && typeof this.interceptor.response === "function") {
  2102. const resInterceptors = this.interceptor.response(response.data);
  2103. if (resInterceptors !== false) {
  2104. resolve2(resInterceptors);
  2105. } else {
  2106. reject(response.data);
  2107. }
  2108. } else {
  2109. resolve2(response.data);
  2110. }
  2111. } else {
  2112. reject(response);
  2113. }
  2114. }
  2115. };
  2116. uni.request(options);
  2117. });
  2118. }
  2119. get(url2, data = {}, options = {}) {
  2120. return this.request({
  2121. method: "GET",
  2122. url: url2,
  2123. data,
  2124. header: options.header || {},
  2125. meta: options.meta
  2126. });
  2127. }
  2128. post(url2, data = {}, options = {}) {
  2129. return this.request({
  2130. url: url2,
  2131. method: "POST",
  2132. data,
  2133. header: options.header || {},
  2134. meta: options.meta
  2135. });
  2136. }
  2137. put(url2, data = {}, options = {}) {
  2138. return this.request({
  2139. url: url2,
  2140. method: "PUT",
  2141. data,
  2142. header: options.header || {},
  2143. meta: options.meta
  2144. });
  2145. }
  2146. delete(url2, data = {}, options = {}) {
  2147. return this.request({
  2148. url: url2,
  2149. method: "DELETE",
  2150. data,
  2151. header: options.header || {},
  2152. meta: options.meta
  2153. });
  2154. }
  2155. }
  2156. const httpInstance = new Request();
  2157. const originalConsole = {
  2158. log: console.log,
  2159. info: console.info,
  2160. warn: console.warn,
  2161. error: console.error,
  2162. debug: console.debug,
  2163. trace: console.trace,
  2164. table: console.table,
  2165. time: console.time,
  2166. timeEnd: console.timeEnd,
  2167. group: console.group,
  2168. groupEnd: console.groupEnd,
  2169. groupCollapsed: console.groupCollapsed,
  2170. assert: console.assert,
  2171. clear: console.clear,
  2172. count: console.count,
  2173. countReset: console.countReset
  2174. };
  2175. Object.keys(originalConsole).forEach((key) => {
  2176. const methodKey = key;
  2177. if (!originalConsole[methodKey]) {
  2178. originalConsole[methodKey] = () => {
  2179. };
  2180. }
  2181. });
  2182. class Logger {
  2183. constructor() {
  2184. this.debugMode = false;
  2185. this.prefix = "[uViewPro]";
  2186. this.showCallerInfo = true;
  2187. }
  2188. /**
  2189. * 设置调试模式
  2190. * @param enabled 是否启用调试模式
  2191. */
  2192. setDebugMode(enabled) {
  2193. this.debugMode = !!enabled;
  2194. if (this.debugMode) {
  2195. console.log("[uViewPro] Debug mode enabled");
  2196. } else {
  2197. console.log("[uViewPro] Debug mode disabled");
  2198. }
  2199. return this;
  2200. }
  2201. /**
  2202. * 设置是否显示调用者信息(文件名和行号)
  2203. * @param show 是否显示调用者信息
  2204. */
  2205. setShowCallerInfo(show) {
  2206. this.showCallerInfo = !!show;
  2207. return this;
  2208. }
  2209. /**
  2210. * 设置日志前缀
  2211. * @param prefix 日志前缀
  2212. */
  2213. setPrefix(prefix) {
  2214. if (prefix)
  2215. this.prefix = prefix;
  2216. return this;
  2217. }
  2218. /**
  2219. * 获取当前调试模式状态
  2220. * @returns 当前调试模式状态
  2221. */
  2222. getDebugMode() {
  2223. return this.debugMode;
  2224. }
  2225. /**
  2226. * 从文件路径中提取纯净的文件名(去除查询参数和路径)
  2227. * @param filePath 文件路径
  2228. * @returns 纯净的文件名
  2229. */
  2230. extractFileName(filePath) {
  2231. if (!filePath)
  2232. return "";
  2233. const withoutQuery = filePath.split("?")[0];
  2234. const parts = withoutQuery.split(/[/\\]/);
  2235. const fileNameWithExt = parts.pop() || "";
  2236. return fileNameWithExt;
  2237. }
  2238. /**
  2239. * 获取调用者信息(文件名和行号)
  2240. * @returns 调用者信息字符串
  2241. */
  2242. getCallerInfo() {
  2243. if (!this.showCallerInfo)
  2244. return "";
  2245. try {
  2246. const error = new Error();
  2247. const stack = error.stack;
  2248. if (!stack)
  2249. return "";
  2250. const stackLines = stack.split("\n");
  2251. for (let i = 3; i < stackLines.length; i++) {
  2252. const line = stackLines[i].trim();
  2253. if (line && !line.includes("logger.ts") && !line.includes("Logger.") && !line.includes("at Object.")) {
  2254. const match = line.match(/\(?(.*):(\d+):(\d+)\)?/);
  2255. if (match) {
  2256. const filePath = match[1];
  2257. const lineNumber = match[2];
  2258. const fileName = this.extractFileName(filePath);
  2259. return `[${fileName}:${lineNumber}]`;
  2260. }
  2261. break;
  2262. }
  2263. }
  2264. } catch (e) {
  2265. }
  2266. return "";
  2267. }
  2268. /**
  2269. * 通用日志输出方法
  2270. * @param level 日志级别
  2271. * @param args 日志参数
  2272. */
  2273. output(level, ...args) {
  2274. if (!this.debugMode || !originalConsole[level])
  2275. return;
  2276. const method2 = originalConsole[level];
  2277. const callerInfo = this.getCallerInfo();
  2278. if (this.prefix) {
  2279. if (callerInfo) {
  2280. method2(`${this.prefix}${callerInfo}`, ...args);
  2281. } else {
  2282. method2(this.prefix, ...args);
  2283. }
  2284. } else {
  2285. if (callerInfo) {
  2286. method2(callerInfo, ...args);
  2287. } else {
  2288. method2(...args);
  2289. }
  2290. }
  2291. }
  2292. /**
  2293. * 普通日志
  2294. * @param args 日志参数
  2295. */
  2296. log(...args) {
  2297. this.output("log", ...args);
  2298. }
  2299. /**
  2300. * 信息日志
  2301. * @param args 日志参数
  2302. */
  2303. info(...args) {
  2304. this.output("info", ...args);
  2305. }
  2306. /**
  2307. * 警告日志
  2308. * @param args 日志参数
  2309. */
  2310. warn(...args) {
  2311. this.output("warn", ...args);
  2312. }
  2313. /**
  2314. * 错误日志
  2315. * @param args 日志参数
  2316. */
  2317. error(...args) {
  2318. this.output("error", ...args);
  2319. }
  2320. /**
  2321. * 调试日志
  2322. * @param args 日志参数
  2323. */
  2324. debug(...args) {
  2325. if (!originalConsole.debug)
  2326. return;
  2327. this.output("debug", ...args);
  2328. }
  2329. /**
  2330. * 堆栈跟踪
  2331. * @param args 日志参数
  2332. */
  2333. trace(...args) {
  2334. if (!originalConsole.trace)
  2335. return;
  2336. this.output("trace", ...args);
  2337. }
  2338. /**
  2339. * 表格输出
  2340. * @param data 表格数据
  2341. * @param columns 列名(可选)
  2342. */
  2343. table(data, columns) {
  2344. if (!this.debugMode || !originalConsole.table)
  2345. return;
  2346. if (this.prefix) {
  2347. originalConsole.log(this.prefix);
  2348. }
  2349. originalConsole.table(data, columns);
  2350. }
  2351. /**
  2352. * 开始计时
  2353. * @param label 计时器标签
  2354. */
  2355. time(label) {
  2356. if (!this.debugMode || !originalConsole.time)
  2357. return;
  2358. const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
  2359. originalConsole.time(fullLabel);
  2360. }
  2361. /**
  2362. * 结束计时
  2363. * @param label 计时器标签
  2364. */
  2365. timeEnd(label) {
  2366. if (!this.debugMode || !originalConsole.timeEnd)
  2367. return;
  2368. const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
  2369. originalConsole.timeEnd(fullLabel);
  2370. }
  2371. /**
  2372. * 分组日志
  2373. * @param label 分组标签
  2374. */
  2375. group(label) {
  2376. if (!this.debugMode || !originalConsole.group)
  2377. return;
  2378. const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
  2379. originalConsole.group(fullLabel);
  2380. }
  2381. /**
  2382. * 结束分组
  2383. */
  2384. groupEnd() {
  2385. if (!this.debugMode || !originalConsole.groupEnd)
  2386. return;
  2387. originalConsole.groupEnd();
  2388. }
  2389. /**
  2390. * 分组日志(默认折叠)
  2391. * @param label 分组标签
  2392. */
  2393. groupCollapsed(label) {
  2394. if (!this.debugMode || !originalConsole.groupCollapsed)
  2395. return;
  2396. const fullLabel = this.prefix ? `${this.prefix} ${label}` : label;
  2397. originalConsole.groupCollapsed(fullLabel);
  2398. }
  2399. /**
  2400. * 断言
  2401. * @param condition 条件
  2402. * @param message 错误消息
  2403. */
  2404. assert(condition, ...message) {
  2405. if (!this.debugMode || !originalConsole.assert)
  2406. return;
  2407. if (this.prefix) {
  2408. originalConsole.assert(condition, this.prefix, ...message);
  2409. } else {
  2410. originalConsole.assert(condition, ...message);
  2411. }
  2412. }
  2413. /**
  2414. * 清空控制台
  2415. */
  2416. clear() {
  2417. if (!this.debugMode || !originalConsole.clear)
  2418. return;
  2419. originalConsole.clear();
  2420. }
  2421. /**
  2422. * 计数器
  2423. * @param label 计数器标签
  2424. */
  2425. count(label) {
  2426. if (!this.debugMode || !originalConsole.count)
  2427. return;
  2428. const fullLabel = this.prefix && label ? `${this.prefix} ${label}` : label || this.prefix;
  2429. originalConsole.count(fullLabel);
  2430. }
  2431. /**
  2432. * 重置计数器
  2433. * @param label 计数器标签
  2434. */
  2435. countReset(label) {
  2436. if (!this.debugMode || !originalConsole.countReset)
  2437. return;
  2438. const fullLabel = this.prefix && label ? `${this.prefix} ${label}` : label || this.prefix;
  2439. originalConsole.countReset(fullLabel);
  2440. }
  2441. /**
  2442. * 带样式的日志
  2443. * @param style CSS样式
  2444. * @param message 消息内容
  2445. */
  2446. styled(style, message) {
  2447. if (!this.debugMode)
  2448. return;
  2449. const callerInfo = this.getCallerInfo();
  2450. const fullMessage = callerInfo ? `${message} ${callerInfo}` : message;
  2451. if (this.prefix) {
  2452. console.log(`%c${this.prefix} ${fullMessage}`, style);
  2453. } else {
  2454. console.log(`%c${fullMessage}`, style);
  2455. }
  2456. }
  2457. }
  2458. const logger = new Logger();
  2459. const PARENT_CONTEXT_SYMBOL = Symbol("parent_context");
  2460. function generateInstanceId(componentName) {
  2461. return `${componentName}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
  2462. }
  2463. function findParentInstance(name, instance) {
  2464. var _a2, _b2;
  2465. if (!instance)
  2466. return null;
  2467. let parent = instance.parent;
  2468. while (parent) {
  2469. const parentName = ((_a2 = parent.type) == null ? void 0 : _a2.name) || ((_b2 = parent.type) == null ? void 0 : _b2.__name);
  2470. if (parentName === name) {
  2471. return parent;
  2472. }
  2473. parent = parent.parent;
  2474. }
  2475. return null;
  2476. }
  2477. function getParentContext(name, instance) {
  2478. var _a2;
  2479. const parentInstance = findParentInstance(name, instance);
  2480. return ((_a2 = parentInstance == null ? void 0 : parentInstance.proxy) == null ? void 0 : _a2[PARENT_CONTEXT_SYMBOL]) || null;
  2481. }
  2482. function findAllChildComponents(componentName, instance) {
  2483. const components = [];
  2484. function traverse(currentInstance) {
  2485. var _a2;
  2486. if (!(currentInstance == null ? void 0 : currentInstance.subTree))
  2487. return;
  2488. const subTree = ((_a2 = currentInstance.subTree) == null ? void 0 : _a2.children) || [];
  2489. const children = Array.isArray(subTree) ? subTree : [subTree];
  2490. children.forEach((vnode) => {
  2491. var _a3, _b2;
  2492. const child = vnode.component;
  2493. if (!child)
  2494. return;
  2495. const name = ((_a3 = child.type) == null ? void 0 : _a3.name) || ((_b2 = child.type) == null ? void 0 : _b2.__name);
  2496. if (name === componentName) {
  2497. components.push(child);
  2498. }
  2499. traverse(child);
  2500. });
  2501. }
  2502. traverse(instance);
  2503. logger.log(`Found ${components.length} ${componentName} components`);
  2504. return components;
  2505. }
  2506. function useParent(componentName) {
  2507. const instance = vue.getCurrentInstance();
  2508. if (!instance) {
  2509. throw new Error("useParent must be called within setup function");
  2510. }
  2511. const name = componentName || instance.type.name || instance.type.__name;
  2512. if (!name) {
  2513. throw new Error("Component name is required for useParent");
  2514. }
  2515. const children = vue.reactive([]);
  2516. const childrenMap = /* @__PURE__ */ new Map();
  2517. const broadcast = (event, data, childIds) => {
  2518. const targetChildren = childIds ? (Array.isArray(childIds) ? childIds : [childIds]).map((id) => childrenMap.get(id)).filter(Boolean) : Array.from(childrenMap.values());
  2519. logger.log(`Parent ${name} broadcasting event: ${event} to ${targetChildren.length} children`);
  2520. targetChildren.forEach((child) => {
  2521. const exposed = child.getExposed();
  2522. if (exposed && typeof exposed[event] === "function") {
  2523. try {
  2524. exposed[event](data);
  2525. } catch (error) {
  2526. logger.warn(`Error calling child method ${event}:`, error);
  2527. }
  2528. }
  2529. });
  2530. };
  2531. const broadcastToChildren = (componentName2, event, data) => {
  2532. logger.log(`Parent ${name} broadcasting event: ${event} to all ${componentName2} components`);
  2533. const childComponents = findAllChildComponents(componentName2, instance);
  2534. let successCount = 0;
  2535. childComponents.forEach((childComponent) => {
  2536. const exposed = childComponent.exposed || childComponent.proxy;
  2537. if (exposed && typeof exposed[event] === "function") {
  2538. try {
  2539. exposed[event](data);
  2540. successCount++;
  2541. } catch (error) {
  2542. logger.warn(`Error calling ${componentName2} method ${event}:`, error);
  2543. }
  2544. }
  2545. });
  2546. logger.log(
  2547. `Parent ${name} successfully called ${successCount} of ${childComponents.length} ${componentName2} components`
  2548. );
  2549. };
  2550. const parentContext = {
  2551. name,
  2552. addChild(child) {
  2553. if (!childrenMap.has(child.id)) {
  2554. childrenMap.set(child.id, child);
  2555. children.push(child);
  2556. logger.log(`Parent ${name} added child: ${child.name}`);
  2557. }
  2558. },
  2559. removeChild(childId) {
  2560. if (childrenMap.has(childId)) {
  2561. childrenMap.get(childId);
  2562. childrenMap.delete(childId);
  2563. const index = children.findIndex((c2) => c2.id === childId);
  2564. if (index > -1)
  2565. children.splice(index, 1);
  2566. logger.log(`Parent ${name} removed child: ${childId}`);
  2567. }
  2568. },
  2569. broadcast,
  2570. broadcastToChildren,
  2571. getChildren: () => Array.from(childrenMap.values()),
  2572. getExposed: () => instance.exposed || {},
  2573. getChildExposed(childId) {
  2574. var _a2;
  2575. const child = childrenMap.get(childId);
  2576. return ((_a2 = child == null ? void 0 : child.getExposed) == null ? void 0 : _a2.call(child)) || {};
  2577. },
  2578. getChildrenExposed() {
  2579. return Array.from(childrenMap.values()).filter((child) => child.getExposed).map((child) => ({
  2580. id: child.id,
  2581. name: child.name,
  2582. exposed: child.getExposed()
  2583. })).filter((item) => Object.keys(item.exposed).length > 0);
  2584. },
  2585. getInstance: () => instance
  2586. };
  2587. if (instance.proxy) {
  2588. instance.proxy[PARENT_CONTEXT_SYMBOL] = parentContext;
  2589. }
  2590. vue.onUnmounted(() => {
  2591. childrenMap.forEach((_, childId) => parentContext.removeChild(childId));
  2592. if (instance.proxy) {
  2593. delete instance.proxy[PARENT_CONTEXT_SYMBOL];
  2594. }
  2595. logger.log(`Parent ${name} unmounted and cleaned up`);
  2596. });
  2597. return {
  2598. parentName: name,
  2599. children,
  2600. broadcast,
  2601. broadcastToChildren,
  2602. getChildren: parentContext.getChildren,
  2603. getChildExposed: parentContext.getChildExposed,
  2604. getChildrenExposed: parentContext.getChildrenExposed,
  2605. getExposed: parentContext.getExposed,
  2606. getInstance: parentContext.getInstance
  2607. };
  2608. }
  2609. function useChildren(componentName, parentName) {
  2610. const instance = vue.getCurrentInstance();
  2611. if (!instance) {
  2612. throw new Error("useChildren must be called within setup function");
  2613. }
  2614. const name = componentName || instance.type.name || instance.type.__name;
  2615. const instanceId = generateInstanceId(name || "anonymous");
  2616. const parentRef = vue.ref(null);
  2617. const parentExposed = vue.ref({});
  2618. const createSimulatedParentContext = (parentInstance) => {
  2619. var _a2, _b2;
  2620. return {
  2621. name: ((_a2 = parentInstance == null ? void 0 : parentInstance.type) == null ? void 0 : _a2.name) || ((_b2 = parentInstance == null ? void 0 : parentInstance.type) == null ? void 0 : _b2.__name) || "unknown",
  2622. addChild: () => logger.log("Simulated parent added child"),
  2623. removeChild: () => logger.log("Simulated parent removed child"),
  2624. broadcast: () => logger.log("Simulated parent broadcasting"),
  2625. broadcastToChildren: () => logger.log("Simulated parent broadcasting to children"),
  2626. getChildren: () => [],
  2627. getExposed: () => (parentInstance == null ? void 0 : parentInstance.exposed) || {},
  2628. getChildExposed: () => ({}),
  2629. getChildrenExposed: () => [],
  2630. getInstance: () => parentInstance
  2631. };
  2632. };
  2633. const getParentExposed = () => {
  2634. if (parentRef.value) {
  2635. const exposed = parentRef.value.getExposed();
  2636. parentExposed.value = exposed;
  2637. return exposed;
  2638. }
  2639. return {};
  2640. };
  2641. const getExposed = () => instance.exposed || {};
  2642. const findParent = () => {
  2643. var _a2;
  2644. if (parentName) {
  2645. const parentContext = getParentContext(parentName, instance);
  2646. if (parentContext) {
  2647. if (!parentContext.getInstance) {
  2648. parentContext.getInstance = () => findParentInstance(parentName, instance);
  2649. }
  2650. return parentContext;
  2651. }
  2652. const parentInstance = findParentInstance(parentName, instance);
  2653. if (parentInstance) {
  2654. return createSimulatedParentContext(parentInstance);
  2655. }
  2656. }
  2657. let current = instance.parent;
  2658. while (current) {
  2659. const context = (_a2 = current.proxy) == null ? void 0 : _a2[PARENT_CONTEXT_SYMBOL];
  2660. if (context) {
  2661. if (!context.getInstance) {
  2662. context.getInstance = () => current;
  2663. }
  2664. return context;
  2665. }
  2666. current = current.parent;
  2667. }
  2668. return instance.parent ? createSimulatedParentContext(instance.parent) : null;
  2669. };
  2670. const linkParent = () => {
  2671. const parent = findParent();
  2672. if (parent) {
  2673. parentRef.value = parent;
  2674. if (parent.addChild && childContext) {
  2675. parent.addChild(childContext);
  2676. }
  2677. getParentExposed();
  2678. logger.log(`Child ${name || "anonymous"} linked to parent ${parent.name}`);
  2679. return true;
  2680. }
  2681. logger.log(`Child ${name || "anonymous"} no parent found, working in standalone mode`);
  2682. return false;
  2683. };
  2684. const emitToParent = (event, data) => {
  2685. if (parentRef.value) {
  2686. const exposed = getParentExposed();
  2687. if (exposed && typeof exposed[event] === "function") {
  2688. try {
  2689. exposed[event](data, instanceId, name);
  2690. } catch (error) {
  2691. logger.warn(`Error calling parent method ${event}:`, error);
  2692. }
  2693. }
  2694. }
  2695. };
  2696. const getChildIndex = () => {
  2697. if (!parentRef.value)
  2698. return -1;
  2699. try {
  2700. const children = parentRef.value.getChildren();
  2701. return children.findIndex((child) => child.id === instanceId);
  2702. } catch (error) {
  2703. return -1;
  2704. }
  2705. };
  2706. const childContext = {
  2707. id: instanceId,
  2708. name: name || "anonymous",
  2709. getChildIndex,
  2710. emitToParent,
  2711. getParentExposed,
  2712. getInstance: () => instance,
  2713. getExposed
  2714. };
  2715. logger.log(`Child ${name || "anonymous"} registered, looking for parent`);
  2716. vue.onMounted(() => {
  2717. let connected = linkParent();
  2718. vue.nextTick(() => {
  2719. connected = linkParent();
  2720. if (!connected) {
  2721. setTimeout(linkParent, 500);
  2722. }
  2723. });
  2724. });
  2725. vue.onUnmounted(() => {
  2726. var _a2;
  2727. if ((_a2 = parentRef.value) == null ? void 0 : _a2.removeChild) {
  2728. parentRef.value.removeChild(instanceId);
  2729. }
  2730. logger.log(`Child ${name || "anonymous"} unmounted`);
  2731. });
  2732. return {
  2733. childId: instanceId,
  2734. childName: name || "anonymous",
  2735. childIndex: vue.computed(getChildIndex),
  2736. parent: parentRef,
  2737. emitToParent,
  2738. getParentExposed,
  2739. parentExposed: vue.computed(() => parentExposed.value),
  2740. getExposed
  2741. };
  2742. }
  2743. const THEME_STORAGE_KEY = "uview-pro-theme";
  2744. const DARK_MODE_STORAGE_KEY = "uview-pro-dark-mode";
  2745. const themesRef = configProvider.themesRef;
  2746. const currentTheme = configProvider.currentThemeRef;
  2747. const darkModeRef = configProvider.darkModeRef;
  2748. function saveThemeToStorage(themeName) {
  2749. try {
  2750. uni.setStorageSync(THEME_STORAGE_KEY, themeName);
  2751. } catch (e) {
  2752. console.warn("[useTheme] failed to write storage", e);
  2753. }
  2754. }
  2755. function saveDarkModeToStorage(mode) {
  2756. try {
  2757. uni.setStorageSync(DARK_MODE_STORAGE_KEY, mode);
  2758. } catch (e) {
  2759. console.warn("[useTheme] failed to write storage", e);
  2760. }
  2761. }
  2762. function setTheme(themeName) {
  2763. configProvider.setTheme(themeName);
  2764. currentTheme.value = configProvider.getCurrentTheme();
  2765. saveThemeToStorage(themeName);
  2766. }
  2767. function getCurrentTheme() {
  2768. return currentTheme.value || configProvider.getCurrentTheme();
  2769. }
  2770. function getAvailableThemes() {
  2771. return configProvider.getThemes();
  2772. }
  2773. function initTheme(themes, defaultConfig, isForce) {
  2774. if (Array.isArray(themes) && themes.length > 0) {
  2775. configProvider.initTheme(themes, defaultConfig, isForce);
  2776. return;
  2777. }
  2778. configProvider.initTheme(defaultThemes, defaultConfig);
  2779. }
  2780. function initDarkMode(darkMode, isForce) {
  2781. configProvider.initDarkMode(darkMode, isForce);
  2782. }
  2783. function getDarkMode() {
  2784. return configProvider.getDarkMode();
  2785. }
  2786. function setDarkMode(mode) {
  2787. configProvider.setDarkMode(mode);
  2788. darkModeRef.value = mode;
  2789. saveDarkModeToStorage(mode);
  2790. }
  2791. function isInDarkMode() {
  2792. return configProvider.isInDarkMode();
  2793. }
  2794. function toggleDarkMode() {
  2795. const current = getDarkMode();
  2796. const nextMode = current === "dark" ? "light" : "dark";
  2797. setDarkMode(nextMode);
  2798. }
  2799. function useTheme() {
  2800. return {
  2801. // 响应式引用
  2802. currentTheme,
  2803. themes: themesRef,
  2804. darkMode: darkModeRef,
  2805. cssVars: configProvider.cssVarsRef,
  2806. // 主题相关方法
  2807. initTheme,
  2808. setTheme,
  2809. getCurrentTheme,
  2810. getAvailableThemes,
  2811. // 暗黑模式相关方法
  2812. initDarkMode,
  2813. getDarkMode,
  2814. setDarkMode,
  2815. isInDarkMode,
  2816. toggleDarkMode
  2817. };
  2818. }
  2819. function useLocale(namespace) {
  2820. const createTranslateFunction = (ns) => {
  2821. return (key, replacements, localeName) => {
  2822. const fullKey = ns ? `${ns}.${key}` : key;
  2823. return configProvider.t(fullKey, replacements, localeName);
  2824. };
  2825. };
  2826. return {
  2827. // 响应式引用
  2828. currentLocale: configProvider.currentLocaleRef,
  2829. locales: configProvider.localesRef,
  2830. // 方法
  2831. t: createTranslateFunction(namespace),
  2832. setLocale: (name) => configProvider.setLocale(name),
  2833. getLocales: () => configProvider.getLocales(),
  2834. getCurrentLocale: () => configProvider.getCurrentLocale(),
  2835. initLocales: (locales, defaultLocaleName, isForce) => configProvider.initLocales(locales, defaultLocaleName, isForce)
  2836. };
  2837. }
  2838. const U_TOAST_EVENT_SHOW = "uview-pro:u-toast:show";
  2839. const U_TOAST_EVENT_HIDE = "uview-pro:u-toast:hide";
  2840. const U_TOAST_GLOBAL_EVENT_SHOW = "uview-pro:u-toast:global:show";
  2841. const U_TOAST_GLOBAL_EVENT_HIDE = "uview-pro:u-toast:global:hide";
  2842. const U_MODAL_EVENT_SHOW = "uview-pro:u-modal:show";
  2843. const U_MODAL_EVENT_HIDE = "uview-pro:u-modal:hide";
  2844. const U_MODAL_EVENT_CLEAR_LOADING = "uview-pro:u-modal:clear-loading";
  2845. const U_MODAL_GLOBAL_EVENT_SHOW = "uview-pro:u-modal:global:show";
  2846. const U_MODAL_GLOBAL_EVENT_HIDE = "uview-pro:u-modal:global:hide";
  2847. const U_MODAL_GLOBAL_EVENT_CLEAR_LOADING = "uview-pro:u-modal:global:clear-loading";
  2848. function formatPrice(number2, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
  2849. function round(num, precision) {
  2850. const factor = Math.pow(10, precision);
  2851. return (Math.round(num * factor) / factor).toFixed(precision);
  2852. }
  2853. let numStr = String(number2).replace(/[^0-9+\-Ee.]/g, "");
  2854. const n = !isFinite(+numStr) ? 0 : +numStr;
  2855. const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
  2856. const sep = thousandsSeparator ?? ",";
  2857. const dec = decimalPoint ?? ".";
  2858. let s = [];
  2859. s = (prec ? round(n, prec) : Math.round(n).toString()).split(".");
  2860. const re = /(-?\d+)(\d{3})/;
  2861. while (re.test(s[0])) {
  2862. s[0] = s[0].replace(re, `$1${sep}$2`);
  2863. }
  2864. if ((s[1] || "").length < prec) {
  2865. s[1] = s[1] || "";
  2866. s[1] += "0".repeat(prec - s[1].length);
  2867. }
  2868. return s.join(dec);
  2869. }
  2870. function formatName(name) {
  2871. if (name.length === 2) {
  2872. return name.charAt(0) + "*";
  2873. } else if (name.length > 2) {
  2874. const masked = "*".repeat(name.length - 2);
  2875. return name.charAt(0) + masked + name.charAt(name.length - 1);
  2876. } else {
  2877. return name;
  2878. }
  2879. }
  2880. function addStyle(customStyle, target = "object") {
  2881. if (test$1.empty(customStyle) || typeof customStyle === "object" && target === "object" || target === "string" && typeof customStyle === "string") {
  2882. return customStyle;
  2883. }
  2884. if (target === "object") {
  2885. const trimmedStyle = trim(customStyle);
  2886. const styleArray = trimmedStyle.split(";");
  2887. const style = {};
  2888. for (let i = 0; i < styleArray.length; i++) {
  2889. if (styleArray[i]) {
  2890. const item = styleArray[i].split(":");
  2891. if (item.length === 2) {
  2892. style[trim(item[0])] = trim(item[1]);
  2893. }
  2894. }
  2895. }
  2896. return style;
  2897. }
  2898. let string2 = "";
  2899. for (const i in customStyle) {
  2900. if (Object.prototype.hasOwnProperty.call(customStyle, i)) {
  2901. const key = i.replace(/([A-Z])/g, "-$1").toLowerCase();
  2902. string2 += `${key}:${customStyle[i]};`;
  2903. }
  2904. }
  2905. return trim(string2);
  2906. }
  2907. function toStyle(...styles) {
  2908. if (styles.length === 1 && Array.isArray(styles[0])) {
  2909. styles = styles[0].slice();
  2910. }
  2911. const map = /* @__PURE__ */ new Map();
  2912. const processString = (str) => {
  2913. if (!str)
  2914. return;
  2915. const parts = str.split(";");
  2916. for (let part of parts) {
  2917. part = part.trim();
  2918. if (!part)
  2919. continue;
  2920. const idx = part.indexOf(":");
  2921. if (idx === -1)
  2922. continue;
  2923. const key = trim(part.slice(0, idx));
  2924. const val = trim(part.slice(idx + 1));
  2925. if (key === "" || val === "")
  2926. continue;
  2927. const k = kebabCase(key);
  2928. map.set(k, val);
  2929. }
  2930. };
  2931. const processObject = (obj) => {
  2932. if (!obj)
  2933. return;
  2934. Object.keys(obj).forEach((key) => {
  2935. const val = obj[key];
  2936. if (val == null || val === "")
  2937. return;
  2938. const k = kebabCase(key);
  2939. map.set(k, val);
  2940. });
  2941. };
  2942. for (const item of styles) {
  2943. if (item == null || item === "")
  2944. continue;
  2945. if (test$1.string(item)) {
  2946. processString(item);
  2947. } else if (test$1.array(item)) {
  2948. item.forEach((el) => {
  2949. if (test$1.string(el))
  2950. processString(el);
  2951. else if (test$1.object(el))
  2952. processObject(el);
  2953. });
  2954. } else if (test$1.object(item)) {
  2955. processObject(item);
  2956. }
  2957. }
  2958. if (map.size === 0)
  2959. return "";
  2960. const result = Array.from(map.entries()).map(([k, v]) => `${k}:${String(v)}`).join(";");
  2961. return result ? result.endsWith(";") ? result : result + ";" : "";
  2962. }
  2963. function kebabCase(word) {
  2964. const newWord = word.replace(/[A-Z]/g, function(match) {
  2965. return "-" + match;
  2966. }).toLowerCase();
  2967. return newWord;
  2968. }
  2969. function sleep$1(value = 30) {
  2970. return new Promise((resolve2) => {
  2971. setTimeout(() => {
  2972. resolve2(true);
  2973. }, value);
  2974. });
  2975. }
  2976. const $u = {
  2977. queryParams,
  2978. route,
  2979. timeFormat,
  2980. date: timeFormat,
  2981. // 另名date
  2982. timeFrom,
  2983. colorGradient: colorGradients.colorGradient,
  2984. colorToRgba: colorGradients.colorToRgba,
  2985. guid,
  2986. color,
  2987. getColor,
  2988. setColor,
  2989. sys,
  2990. os,
  2991. type2icon,
  2992. randomArray,
  2993. hexToRgb: colorGradients.hexToRgb,
  2994. rgbToHex: colorGradients.rgbToHex,
  2995. test: test$1,
  2996. random,
  2997. deepClone,
  2998. deepMerge: deepMerge$1,
  2999. getParent: getParent$1,
  3000. $parent,
  3001. clipboard,
  3002. addUnit: addUnit$1,
  3003. trim,
  3004. type: ["primary", "success", "error", "warning", "info"],
  3005. http: httpInstance,
  3006. toast,
  3007. config: config$2,
  3008. // uView配置信息相关,比如版本号
  3009. zIndex,
  3010. debounce,
  3011. throttle,
  3012. mitt: mitt(),
  3013. getRect,
  3014. formatPrice,
  3015. formatName,
  3016. addStyle,
  3017. toStyle,
  3018. kebabCase,
  3019. sleep: sleep$1
  3020. };
  3021. const ConfigProviderProps = {
  3022. ...baseProps,
  3023. /**
  3024. * 主题风格,可选值:
  3025. * - 'light': 强制亮色模式(默认)
  3026. * - 'dark': 强制暗黑模式
  3027. * - 'auto': 自动跟随系统设置
  3028. */
  3029. darkMode: {
  3030. type: String,
  3031. default: () => config$2.defaultDarkMode
  3032. },
  3033. /**
  3034. * 当前主题名称(用于多主题切换)
  3035. */
  3036. currentTheme: {
  3037. type: String,
  3038. default: () => {
  3039. var _a2;
  3040. return ((_a2 = configProvider.getCurrentTheme()) == null ? void 0 : _a2.name) ?? config$2.defaultTheme;
  3041. }
  3042. },
  3043. /**
  3044. * 自定义主题列表
  3045. */
  3046. themes: {
  3047. type: Array,
  3048. default: () => configProvider.getThemes()
  3049. },
  3050. /**
  3051. * 国际化配置:传入 locale 列表(数组)并可指定默认语言 currentLocale
  3052. */
  3053. locales: {
  3054. type: Array,
  3055. default: () => []
  3056. },
  3057. currentLocale: {
  3058. type: String,
  3059. default: () => {
  3060. var _a2;
  3061. return ((_a2 = configProvider.getCurrentLocale()) == null ? void 0 : _a2.name) ?? "";
  3062. }
  3063. }
  3064. };
  3065. const __default__$p = {
  3066. name: "u-config-provider",
  3067. options: {
  3068. addGlobalClass: true,
  3069. virtualHost: true,
  3070. styleIsolation: "shared"
  3071. }
  3072. };
  3073. const _sfc_main$1x = /* @__PURE__ */ vue.defineComponent({
  3074. ...__default__$p,
  3075. props: ConfigProviderProps,
  3076. emits: ["theme-change", "mode-change"],
  3077. setup(__props, { expose: __expose, emit: __emit }) {
  3078. __expose();
  3079. const props = __props;
  3080. const emit = __emit;
  3081. const darkMode = vue.computed(() => configProvider.isInDarkMode() ? "dark" : "light");
  3082. const bootstrapTheme = () => {
  3083. const existingThemes = configProvider.getThemes();
  3084. if (existingThemes.length > 0) {
  3085. if (props.currentTheme) {
  3086. configProvider.setTheme(props.currentTheme);
  3087. }
  3088. if (props.darkMode) {
  3089. configProvider.setDarkMode(props.darkMode);
  3090. }
  3091. return;
  3092. }
  3093. if (props.themes && props.themes.length) {
  3094. configProvider.initTheme(props.themes, props.currentTheme);
  3095. } else {
  3096. const { initTheme: initTheme2 } = useTheme();
  3097. initTheme2(void 0, props.currentTheme);
  3098. }
  3099. if (props.currentTheme) {
  3100. configProvider.setTheme(props.currentTheme);
  3101. }
  3102. if (props.darkMode) {
  3103. configProvider.setDarkMode(props.darkMode);
  3104. }
  3105. };
  3106. const bootstrapLocale = () => {
  3107. try {
  3108. const { initLocales, setLocale: setLocale2, getLocales } = useLocale();
  3109. const existingLocales = getLocales();
  3110. if (existingLocales.length > 0) {
  3111. if (props.currentLocale) {
  3112. setLocale2(props.currentLocale);
  3113. }
  3114. } else {
  3115. if (props.locales && props.locales.length) {
  3116. initLocales(props.locales, props.currentLocale);
  3117. } else {
  3118. initLocales(void 0, props.currentLocale);
  3119. }
  3120. }
  3121. } catch (e) {
  3122. console.warn("[u-config-provider] init locales failed", e);
  3123. }
  3124. };
  3125. vue.onMounted(() => {
  3126. bootstrapTheme();
  3127. bootstrapLocale();
  3128. });
  3129. vue.watch(
  3130. () => props.themes,
  3131. (val) => {
  3132. if (val && val.length && val !== configProvider.themesRef.value) {
  3133. configProvider.initTheme(val, props.currentTheme);
  3134. }
  3135. },
  3136. { deep: true }
  3137. );
  3138. vue.watch(
  3139. () => props.currentTheme,
  3140. (val) => {
  3141. if (val) {
  3142. configProvider.setTheme(val);
  3143. }
  3144. }
  3145. );
  3146. vue.watch(
  3147. () => props.darkMode,
  3148. (val) => {
  3149. if (val && val !== configProvider.getDarkMode()) {
  3150. configProvider.setDarkMode(val);
  3151. emit("mode-change", darkMode.value);
  3152. }
  3153. }
  3154. );
  3155. vue.watch(
  3156. () => props.locales,
  3157. (val) => {
  3158. if (val && val.length) {
  3159. const { initLocales } = useLocale();
  3160. initLocales(val, props.currentLocale);
  3161. }
  3162. },
  3163. { deep: true }
  3164. );
  3165. vue.watch(
  3166. () => props.currentLocale,
  3167. (val) => {
  3168. if (val) {
  3169. const { setLocale: setLocale2 } = useLocale();
  3170. setLocale2(val);
  3171. }
  3172. }
  3173. );
  3174. vue.watch(
  3175. () => configProvider.currentThemeRef.value,
  3176. (val, oldVal) => {
  3177. if (val && val.name !== (oldVal == null ? void 0 : oldVal.name)) {
  3178. emit("theme-change", val.name);
  3179. }
  3180. },
  3181. { immediate: true }
  3182. );
  3183. vue.watch(
  3184. () => configProvider.darkModeRef.value,
  3185. () => {
  3186. emit("mode-change", darkMode.value);
  3187. }
  3188. );
  3189. const mergedThemeStyle = vue.computed(() => {
  3190. return $u.toStyle(configProvider.cssVarsRef.value, props.customStyle);
  3191. });
  3192. const __returned__ = { props, emit, darkMode, bootstrapTheme, bootstrapLocale, mergedThemeStyle };
  3193. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3194. return __returned__;
  3195. }
  3196. });
  3197. const _export_sfc = (sfc, props) => {
  3198. const target = sfc.__vccOpts || sfc;
  3199. for (const [key, val] of props) {
  3200. target[key] = val;
  3201. }
  3202. return target;
  3203. };
  3204. function _sfc_render$1w(_ctx, _cache, $props, $setup, $data, $options) {
  3205. return vue.openBlock(), vue.createElementBlock(
  3206. "view",
  3207. {
  3208. class: vue.normalizeClass(["u-config-provider", `u-theme-${$setup.darkMode}`, _ctx.customClass]),
  3209. style: vue.normalizeStyle($setup.mergedThemeStyle)
  3210. },
  3211. [
  3212. vue.renderSlot(_ctx.$slots, "default")
  3213. ],
  3214. 6
  3215. /* CLASS, STYLE */
  3216. );
  3217. }
  3218. const __unplugin_components_1$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1x, [["render", _sfc_render$1w], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-config-provider/u-config-provider.vue"]]);
  3219. const GapProps = {
  3220. ...baseProps,
  3221. /** 背景颜色 */
  3222. bgColor: { type: String, default: "transparent" },
  3223. /** 高度 */
  3224. height: { type: [String, Number], default: 30 },
  3225. /** 与上一个组件的距离 */
  3226. marginTop: { type: [String, Number], default: 0 },
  3227. /** 与下一个组件的距离 */
  3228. marginBottom: { type: [String, Number], default: 0 }
  3229. };
  3230. const install = (app, options) => {
  3231. var _a2, _b2, _c;
  3232. try {
  3233. if (options) {
  3234. if (options == null ? void 0 : options.theme) {
  3235. const optTheme = options.theme;
  3236. if (Array.isArray(optTheme)) {
  3237. initTheme(optTheme);
  3238. } else if (typeof optTheme === "object" && optTheme.themes) {
  3239. initTheme(
  3240. optTheme.themes,
  3241. {
  3242. defaultTheme: optTheme.defaultTheme,
  3243. defaultDarkMode: optTheme.defaultDarkMode
  3244. },
  3245. optTheme.isForce
  3246. );
  3247. } else {
  3248. const defaultTheme = defaultThemes[0];
  3249. if (defaultTheme) {
  3250. const mergedTheme = {
  3251. ...defaultTheme,
  3252. color: {
  3253. ...defaultTheme.color,
  3254. ...optTheme
  3255. }
  3256. };
  3257. initTheme([mergedTheme], defaultTheme.name);
  3258. }
  3259. }
  3260. } else {
  3261. initTheme();
  3262. }
  3263. try {
  3264. if (options == null ? void 0 : options.locale) {
  3265. const optLocale = options.locale;
  3266. if (typeof optLocale === "string") {
  3267. configProvider.initLocales(void 0, optLocale);
  3268. } else if (Array.isArray(optLocale)) {
  3269. configProvider.initLocales(optLocale);
  3270. } else if (optLocale && typeof optLocale === "object") {
  3271. configProvider.initLocales(optLocale.locales, optLocale.defaultLocale, optLocale.isForce);
  3272. } else {
  3273. configProvider.initLocales();
  3274. }
  3275. } else {
  3276. configProvider.initLocales();
  3277. }
  3278. } catch (e) {
  3279. console.error("[install locales] Error:", e);
  3280. }
  3281. logger.setDebugMode(((_a2 = options == null ? void 0 : options.log) == null ? void 0 : _a2.debug) ?? false).setPrefix(((_b2 = options == null ? void 0 : options.log) == null ? void 0 : _b2.prefix) || "").setShowCallerInfo(((_c = options == null ? void 0 : options.log) == null ? void 0 : _c.showCallerInfo) ?? true);
  3282. } else {
  3283. initTheme();
  3284. configProvider.initLocales();
  3285. }
  3286. } catch (error) {
  3287. console.error("[install options] Error:", error);
  3288. }
  3289. uni.$u = $u;
  3290. app.config.globalProperties.$u = $u;
  3291. };
  3292. const uViewPro = {
  3293. install
  3294. };
  3295. const __default__$o = {
  3296. name: "u-gap",
  3297. options: {
  3298. addGlobalClass: true,
  3299. virtualHost: true,
  3300. styleIsolation: "shared"
  3301. }
  3302. };
  3303. const _sfc_main$1w = /* @__PURE__ */ vue.defineComponent({
  3304. ...__default__$o,
  3305. props: GapProps,
  3306. setup(__props, { expose: __expose }) {
  3307. __expose();
  3308. const props = __props;
  3309. const gapStyle = vue.computed(() => {
  3310. return {
  3311. backgroundColor: props.bgColor,
  3312. height: $u.addUnit(props.height),
  3313. marginTop: $u.addUnit(props.marginTop),
  3314. marginBottom: $u.addUnit(props.marginBottom)
  3315. };
  3316. });
  3317. const __returned__ = { props, gapStyle, get $u() {
  3318. return $u;
  3319. } };
  3320. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3321. return __returned__;
  3322. }
  3323. });
  3324. function _sfc_render$1v(_ctx, _cache, $props, $setup, $data, $options) {
  3325. return vue.openBlock(), vue.createElementBlock(
  3326. "view",
  3327. {
  3328. class: "u-gap",
  3329. style: vue.normalizeStyle($setup.$u.toStyle($setup.gapStyle, _ctx.customStyle))
  3330. },
  3331. null,
  3332. 4
  3333. /* STYLE */
  3334. );
  3335. }
  3336. const __unplugin_components_2$5 = /* @__PURE__ */ _export_sfc(_sfc_main$1w, [["render", _sfc_render$1v], ["__scopeId", "data-v-6c90497d"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-gap/u-gap.vue"]]);
  3337. const BadgeProps = {
  3338. ...baseProps,
  3339. /** 使用预设的背景颜色 primary,warning,success,error,info */
  3340. type: { type: String, default: "error" },
  3341. /** Badge的尺寸,default, mini */
  3342. size: { type: String, default: "default" },
  3343. /** 是否是圆点 */
  3344. isDot: { type: Boolean, default: false },
  3345. /** 显示的数值内容 */
  3346. count: { type: [Number, String], default: void 0 },
  3347. /** 展示封顶的数字值 */
  3348. overflowCount: { type: Number, default: 99 },
  3349. /** 当数值为 0 时,是否展示 Badge */
  3350. showZero: { type: Boolean, default: false },
  3351. /** 位置偏移 [number, number] */
  3352. offset: { type: Array, default: () => [20, 20] },
  3353. /** 是否开启绝对定位,开启了offset才会起作用 */
  3354. absolute: { type: Boolean, default: true },
  3355. /** 字体大小 */
  3356. fontSize: { type: [String, Number], default: "24" },
  3357. /** 字体颜色 */
  3358. color: { type: String, default: "var(--u-white-color)" },
  3359. /** badge的背景颜色 */
  3360. bgColor: { type: String, default: "" },
  3361. /** 是否让badge组件的中心点和父组件右上角重合,配置的话,offset将会失效 */
  3362. isCenter: { type: Boolean, default: false }
  3363. };
  3364. const __default__$n = {
  3365. name: "u-badge",
  3366. options: {
  3367. addGlobalClass: true,
  3368. virtualHost: true,
  3369. styleIsolation: "shared"
  3370. }
  3371. };
  3372. const _sfc_main$1v = /* @__PURE__ */ vue.defineComponent({
  3373. ...__default__$n,
  3374. props: BadgeProps,
  3375. setup(__props, { expose: __expose }) {
  3376. __expose();
  3377. const props = __props;
  3378. const boxStyle = vue.computed(() => {
  3379. let style = {};
  3380. if (props.isCenter) {
  3381. style.top = 0;
  3382. style.right = 0;
  3383. style.transform = "translateY(-50%) translateX(50%)";
  3384. } else {
  3385. style.top = props.offset[0] + "rpx";
  3386. style.right = props.offset[1] + "rpx";
  3387. style.transform = "translateY(0) translateX(0)";
  3388. }
  3389. if (props.size === "mini") {
  3390. style.transform = style.transform + " scale(0.8)";
  3391. }
  3392. return style;
  3393. });
  3394. const showText = vue.computed(() => {
  3395. if (props.isDot)
  3396. return "";
  3397. else {
  3398. if (Number(props.count) > props.overflowCount)
  3399. return `${props.overflowCount}+`;
  3400. else
  3401. return props.count;
  3402. }
  3403. });
  3404. const show = vue.computed(() => {
  3405. if (Number(props.count) === 0 && props.showZero === false)
  3406. return false;
  3407. else
  3408. return true;
  3409. });
  3410. const __returned__ = { props, boxStyle, showText, show, get $u() {
  3411. return $u;
  3412. } };
  3413. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3414. return __returned__;
  3415. }
  3416. });
  3417. function _sfc_render$1u(_ctx, _cache, $props, $setup, $data, $options) {
  3418. return $setup.show ? (vue.openBlock(), vue.createElementBlock(
  3419. "view",
  3420. {
  3421. key: 0,
  3422. class: vue.normalizeClass(["u-badge", [
  3423. _ctx.isDot ? "u-badge-dot" : "",
  3424. _ctx.size === "mini" ? "u-badge-mini" : "",
  3425. _ctx.type ? "u-badge--bg--" + _ctx.type : "",
  3426. _ctx.customClass
  3427. ]]),
  3428. style: vue.normalizeStyle(
  3429. $setup.$u.toStyle(
  3430. {
  3431. top: _ctx.offset[0] + "rpx",
  3432. right: _ctx.offset[1] + "rpx",
  3433. fontSize: _ctx.fontSize + "rpx",
  3434. position: _ctx.absolute ? "absolute" : "static",
  3435. color: _ctx.color,
  3436. backgroundColor: _ctx.bgColor
  3437. },
  3438. $setup.boxStyle,
  3439. _ctx.customStyle
  3440. )
  3441. )
  3442. },
  3443. vue.toDisplayString($setup.showText),
  3444. 7
  3445. /* TEXT, CLASS, STYLE */
  3446. )) : vue.createCommentVNode("v-if", true);
  3447. }
  3448. const __unplugin_components_0$6 = /* @__PURE__ */ _export_sfc(_sfc_main$1v, [["render", _sfc_render$1u], ["__scopeId", "data-v-8337ffeb"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-badge/u-badge.vue"]]);
  3449. const IconProps = {
  3450. ...baseProps,
  3451. /** 图标名称,见示例图标集 */
  3452. name: { type: String, default: "" },
  3453. /** 图标颜色,可接受主题色 */
  3454. color: { type: String, default: "" },
  3455. /** 字体大小,单位rpx(默认32) */
  3456. size: { type: [Number, String], default: "inherit" },
  3457. /** 是否显示粗体 */
  3458. bold: { type: Boolean, default: false },
  3459. /** 点击图标的时候传递事件出去的index(用于区分点击了哪一个) */
  3460. index: { type: [Number, String], default: "" },
  3461. /** 触摸图标时的类名 */
  3462. hoverClass: { type: String, default: "" },
  3463. /** 自定义扩展前缀,方便用户扩展自己的图标库 */
  3464. customPrefix: { type: String, default: "uicon" },
  3465. /** 图标右边或者下面的文字 */
  3466. label: { type: [String, Number], default: "" },
  3467. /** label的位置,只能右边或者下边 */
  3468. labelPos: { type: String, default: "right" },
  3469. /** label的大小,单位rpx(默认28) */
  3470. labelSize: { type: [String, Number], default: "28" },
  3471. /** label的颜色 */
  3472. labelColor: { type: String, default: "var(--u-content-color)" },
  3473. /** label与图标的距离(横向排列),单位rpx(默认6) */
  3474. marginLeft: { type: [String, Number], default: "6" },
  3475. /** label与图标的距离(竖向排列),单位rpx(默认6) */
  3476. marginTop: { type: [String, Number], default: "6" },
  3477. /** label与图标的距离(竖向排列),单位rpx(默认6) */
  3478. marginRight: { type: [String, Number], default: "6" },
  3479. /** label与图标的距离(竖向排列),单位rpx(默认6) */
  3480. marginBottom: { type: [String, Number], default: "6" },
  3481. /** label与图标的距离,单位rpx,权重高于 margin */
  3482. space: { type: [String, Number], default: "" },
  3483. /** 图片的mode,参考uni-app image组件 */
  3484. imgMode: { type: String, default: "widthFix" },
  3485. /** 用于显示图片小图标时,图片的宽度,单位rpx */
  3486. width: { type: [String, Number], default: "" },
  3487. /** 用于显示图片小图标时,图片的高度,单位rpx */
  3488. height: { type: [String, Number], default: "" },
  3489. /** 用于解决某些情况下,让图标垂直居中的用途,单位rpx */
  3490. top: { type: [String, Number], default: 0 },
  3491. /** 是否为DecimalIcon */
  3492. showDecimalIcon: { type: Boolean, default: false },
  3493. /** 背景颜色,可接受主题色,仅Decimal时有效 */
  3494. inactiveColor: { type: String, default: "var(--u-divider-color)" },
  3495. /** 显示的百分比,仅Decimal时有效 */
  3496. percent: { type: [Number, String], default: "50" }
  3497. };
  3498. const __default__$m = {
  3499. name: "u-icon",
  3500. options: {
  3501. addGlobalClass: true,
  3502. virtualHost: true,
  3503. styleIsolation: "shared"
  3504. }
  3505. };
  3506. const _sfc_main$1u = /* @__PURE__ */ vue.defineComponent({
  3507. ...__default__$m,
  3508. props: IconProps,
  3509. emits: ["click", "touchstart"],
  3510. setup(__props, { expose: __expose, emit: __emit }) {
  3511. __expose();
  3512. const emit = __emit;
  3513. const props = __props;
  3514. const iconClass = vue.computed(() => {
  3515. let classes = [];
  3516. classes.push(props.customPrefix + "-" + props.name);
  3517. if (props.customPrefix === "uicon") {
  3518. classes.push("u-iconfont");
  3519. } else {
  3520. classes.push(props.customPrefix);
  3521. }
  3522. if (props.showDecimalIcon && props.inactiveColor && $u.config.type.includes(props.inactiveColor)) {
  3523. classes.push("u-icon__icon--" + props.inactiveColor);
  3524. } else if (props.color && $u.config.type.includes(props.color)) {
  3525. classes.push("u-icon__icon--" + props.color);
  3526. }
  3527. return classes;
  3528. });
  3529. const iconStyle = vue.computed(() => {
  3530. const style = {
  3531. fontSize: props.size === "inherit" ? "inherit" : $u.addUnit(props.size),
  3532. fontWeight: props.bold ? "bold" : "normal",
  3533. // 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
  3534. top: $u.addUnit(props.top)
  3535. };
  3536. if (props.showDecimalIcon && props.inactiveColor && !$u.config.type.includes(props.inactiveColor)) {
  3537. style.color = props.inactiveColor;
  3538. } else if (props.color && !$u.config.type.includes(props.color)) {
  3539. style.color = props.color;
  3540. }
  3541. return style;
  3542. });
  3543. const isImg = vue.computed(() => {
  3544. return props.name.indexOf("/") !== -1;
  3545. });
  3546. const imgStyle = vue.computed(() => {
  3547. const style = {
  3548. width: props.width ? $u.addUnit(props.width) : $u.addUnit(props.size),
  3549. height: props.height ? $u.addUnit(props.height) : $u.addUnit(props.size)
  3550. };
  3551. return style;
  3552. });
  3553. const decimalIconStyle = vue.computed(() => {
  3554. const style = {
  3555. fontSize: props.size === "inherit" ? "inherit" : $u.addUnit(props.size),
  3556. fontWeight: props.bold ? "bold" : "normal",
  3557. // 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
  3558. top: $u.addUnit(props.top),
  3559. width: props.percent + "%"
  3560. };
  3561. if (props.color && !$u.config.type.includes(props.color)) {
  3562. style.color = props.color;
  3563. }
  3564. return style;
  3565. });
  3566. const decimalIconClass = vue.computed(() => {
  3567. let classes = [];
  3568. classes.push(props.customPrefix + "-" + props.name);
  3569. if (props.customPrefix === "uicon") {
  3570. classes.push("u-iconfont");
  3571. } else {
  3572. classes.push(props.customPrefix);
  3573. }
  3574. if (props.color && $u.config.type.includes(props.color)) {
  3575. classes.push("u-icon__icon--" + props.color);
  3576. } else {
  3577. classes.push("u-icon__icon--primary");
  3578. }
  3579. return classes;
  3580. });
  3581. const labelStyle = vue.computed(() => {
  3582. return {
  3583. color: props.labelColor,
  3584. fontSize: $u.addUnit(props.labelSize),
  3585. marginLeft: props.labelPos === "right" ? $u.addUnit(props.space || props.marginLeft) : 0,
  3586. marginTop: props.labelPos === "bottom" ? $u.addUnit(props.space || props.marginTop) : 0,
  3587. marginRight: props.labelPos === "left" ? $u.addUnit(props.space || props.marginRight) : 0,
  3588. marginBottom: props.labelPos === "top" ? $u.addUnit(props.space || props.marginBottom) : 0
  3589. };
  3590. });
  3591. function onClick(event) {
  3592. emit("click", props.index || event);
  3593. }
  3594. function onTouchstart(event) {
  3595. emit("touchstart", props.index || event);
  3596. }
  3597. const __returned__ = { emit, props, iconClass, iconStyle, isImg, imgStyle, decimalIconStyle, decimalIconClass, labelStyle, onClick, onTouchstart, get $u() {
  3598. return $u;
  3599. } };
  3600. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3601. return __returned__;
  3602. }
  3603. });
  3604. function _sfc_render$1t(_ctx, _cache, $props, $setup, $data, $options) {
  3605. return vue.openBlock(), vue.createElementBlock(
  3606. "view",
  3607. {
  3608. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle)),
  3609. class: vue.normalizeClass(["u-icon", ["u-icon--" + _ctx.labelPos, _ctx.customClass]]),
  3610. onClick: $setup.onClick
  3611. },
  3612. [
  3613. $setup.isImg ? (vue.openBlock(), vue.createElementBlock("image", {
  3614. key: 0,
  3615. class: "u-icon__img",
  3616. src: $setup.props.name,
  3617. mode: _ctx.imgMode,
  3618. style: vue.normalizeStyle([$setup.imgStyle])
  3619. }, null, 12, ["src", "mode"])) : (vue.openBlock(), vue.createElementBlock("text", {
  3620. key: 1,
  3621. class: vue.normalizeClass(["u-icon__icon", $setup.iconClass]),
  3622. style: vue.normalizeStyle($setup.$u.toStyle($setup.iconStyle)),
  3623. "hover-class": _ctx.hoverClass,
  3624. onTouchstart: $setup.onTouchstart
  3625. }, [
  3626. _ctx.showDecimalIcon ? (vue.openBlock(), vue.createElementBlock("text", {
  3627. key: 0,
  3628. style: vue.normalizeStyle($setup.$u.toStyle($setup.decimalIconStyle)),
  3629. class: vue.normalizeClass([$setup.decimalIconClass, "u-icon__decimal"]),
  3630. "hover-class": _ctx.hoverClass
  3631. }, null, 14, ["hover-class"])) : vue.createCommentVNode("v-if", true)
  3632. ], 46, ["hover-class"])),
  3633. _ctx.label !== "" ? (vue.openBlock(), vue.createElementBlock(
  3634. "text",
  3635. {
  3636. key: 2,
  3637. class: "u-icon__label",
  3638. style: vue.normalizeStyle($setup.labelStyle)
  3639. },
  3640. vue.toDisplayString(_ctx.label),
  3641. 5
  3642. /* TEXT, STYLE */
  3643. )) : vue.createCommentVNode("v-if", true)
  3644. ],
  3645. 6
  3646. /* CLASS, STYLE */
  3647. );
  3648. }
  3649. const __unplugin_components_0$5 = /* @__PURE__ */ _export_sfc(_sfc_main$1u, [["render", _sfc_render$1t], ["__scopeId", "data-v-b85e76d0"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-icon/u-icon.vue"]]);
  3650. const TabbarProps = {
  3651. ...baseProps,
  3652. /** 是否显示tabbar */
  3653. show: { type: Boolean, default: true },
  3654. /** v-model绑定当前激活项的值 */
  3655. modelValue: { type: [String, Number], default: 0 },
  3656. /** tabbar背景色 */
  3657. bgColor: { type: String, default: "var(--u-bg-white)" },
  3658. /** tabbar高度,单位任意,数值默认rpx */
  3659. height: { type: [String, Number], default: "50px" },
  3660. /** 非凸起图标的大小,单位任意,数值默认rpx */
  3661. iconSize: { type: [String, Number], default: 40 },
  3662. /** 凸起图标的大小,单位任意,数值默认rpx */
  3663. midButtonSize: { type: [String, Number], default: 100 },
  3664. /** 文本大小,单位任意,数值默认rpx */
  3665. textSize: { type: [String, Number], default: 26 },
  3666. /** 激活时的颜色 */
  3667. activeColor: { type: String, default: "var(--u-main-color)" },
  3668. /** 未激活时的颜色 */
  3669. inactiveColor: { type: String, default: "var(--u-content-color)" },
  3670. /** 是否显示中部凸起按钮 */
  3671. midButton: { type: Boolean, default: false },
  3672. /** tabbar配置项数组 */
  3673. list: { type: Array, default: () => [] },
  3674. /** 切换前回调,返回true或Promise */
  3675. beforeSwitch: {
  3676. type: Function,
  3677. default: null
  3678. },
  3679. /** 是否显示顶部横线 */
  3680. borderTop: { type: Boolean, default: true },
  3681. /** 是否隐藏原生tabbar */
  3682. hideTabBar: { type: Boolean, default: true },
  3683. /** z-index层级 */
  3684. zIndex: { type: [String, Number], default: zIndex.tabbar },
  3685. /** icon和text的间距,单位任意,数值默认rpx */
  3686. gap: { type: [String, Number], default: 8 }
  3687. };
  3688. const __default__$l = {
  3689. name: "u-tabbar",
  3690. options: {
  3691. addGlobalClass: true,
  3692. virtualHost: true,
  3693. styleIsolation: "shared"
  3694. }
  3695. };
  3696. const _sfc_main$1t = /* @__PURE__ */ vue.defineComponent({
  3697. ...__default__$l,
  3698. props: TabbarProps,
  3699. emits: ["change", "update:modelValue"],
  3700. setup(__props, { expose: __expose, emit: __emit }) {
  3701. __expose();
  3702. const props = __props;
  3703. const emit = __emit;
  3704. const uZIndex = vue.computed(() => (props == null ? void 0 : props.zIndex) ?? $u.zIndex.tabbar);
  3705. const midButtonLeft = vue.ref("50%");
  3706. const pageUrl = vue.ref("");
  3707. vue.onMounted(() => {
  3708. if (props.hideTabBar)
  3709. uni.hideTabBar();
  3710. const pages = getCurrentPages();
  3711. pageUrl.value = pages[pages.length - 1].route;
  3712. if (props.midButton)
  3713. getMidButtonLeft();
  3714. });
  3715. const elIconPath = vue.computed(() => {
  3716. return (index) => {
  3717. var _a2;
  3718. const pagePath = (_a2 = props.list[index]) == null ? void 0 : _a2.pagePath;
  3719. if (pagePath) {
  3720. if (pagePath === pageUrl.value || pagePath === "/" + pageUrl.value) {
  3721. return props.list[index].selectedIconPath;
  3722. } else {
  3723. return props.list[index].iconPath;
  3724. }
  3725. } else {
  3726. return index == props.modelValue ? props.list[index].selectedIconPath : props.list[index].iconPath;
  3727. }
  3728. };
  3729. });
  3730. const elColor = vue.computed(() => {
  3731. return (index) => {
  3732. var _a2;
  3733. const pagePath = (_a2 = props.list[index]) == null ? void 0 : _a2.pagePath;
  3734. if (pagePath) {
  3735. if (pagePath === pageUrl.value || pagePath === "/" + pageUrl.value)
  3736. return props.activeColor;
  3737. else
  3738. return props.inactiveColor;
  3739. } else {
  3740. return index == props.modelValue ? props.activeColor : props.inactiveColor;
  3741. }
  3742. };
  3743. });
  3744. function getCustomPrefix(index) {
  3745. var _a2;
  3746. const customIcon = (_a2 = props.list[index]) == null ? void 0 : _a2.customIcon;
  3747. if (customIcon === void 0 || customIcon === null || customIcon === "") {
  3748. return "uicon";
  3749. }
  3750. if (typeof customIcon === "string") {
  3751. return customIcon;
  3752. }
  3753. if (typeof customIcon === "boolean") {
  3754. return customIcon ? "custom-icon" : "uicon";
  3755. }
  3756. return "uicon";
  3757. }
  3758. async function clickHandler(index) {
  3759. if (props.beforeSwitch && typeof props.beforeSwitch === "function") {
  3760. let beforeSwitchResult = props.beforeSwitch(index);
  3761. if (typeof beforeSwitchResult === "object" && beforeSwitchResult !== null && typeof beforeSwitchResult.then === "function") {
  3762. await beforeSwitchResult.then(() => {
  3763. switchTab(index);
  3764. }).catch(() => {
  3765. });
  3766. } else if (beforeSwitchResult === true) {
  3767. switchTab(index);
  3768. }
  3769. } else {
  3770. switchTab(index);
  3771. }
  3772. }
  3773. function switchTab(index) {
  3774. var _a2;
  3775. emit("change", index);
  3776. if ((_a2 = props.list[index]) == null ? void 0 : _a2.pagePath) {
  3777. uni.switchTab({ url: props.list[index].pagePath });
  3778. } else {
  3779. emit("update:modelValue", index);
  3780. }
  3781. }
  3782. function getOffsetRight(count, isDot) {
  3783. if (isDot) {
  3784. return -20;
  3785. } else if (count > 9) {
  3786. return -40;
  3787. } else {
  3788. return -30;
  3789. }
  3790. }
  3791. function getBadgeOffsetTop(count, isDot) {
  3792. return -2;
  3793. }
  3794. function getIconSize(index) {
  3795. const item = props.list[index] || {};
  3796. if (props.midButton && item.midButton) {
  3797. return props.midButtonSize;
  3798. }
  3799. if (item.iconSize !== void 0 && item.iconSize !== null && item.iconSize !== "") {
  3800. return item.iconSize;
  3801. }
  3802. return props.iconSize;
  3803. }
  3804. function getTextSize(index) {
  3805. const item = props.list[index] || {};
  3806. if (item.textSize !== void 0 && item.textSize !== null && item.textSize !== "") {
  3807. return item.textSize;
  3808. }
  3809. return props.textSize;
  3810. }
  3811. function getMidButtonLeft() {
  3812. const windowWidth2 = $u.sys().windowWidth;
  3813. midButtonLeft.value = windowWidth2 / 2 + "px";
  3814. }
  3815. function containerStyle(index) {
  3816. const style = {};
  3817. const item = props.list[index] || {};
  3818. if (props.midButton && item.midButton) {
  3819. const iconSizeRaw = getIconSize(index);
  3820. const numericSize = parseFloat(String(iconSizeRaw)) || parseFloat(String(props.midButtonSize)) || 100;
  3821. style.paddingTop = $u.addUnit(numericSize / 2 + 8);
  3822. style.boxSizing = "border-box";
  3823. }
  3824. return $u.toStyle(style);
  3825. }
  3826. const __returned__ = { props, emit, uZIndex, midButtonLeft, pageUrl, elIconPath, elColor, getCustomPrefix, clickHandler, switchTab, getOffsetRight, getBadgeOffsetTop, getIconSize, getTextSize, getMidButtonLeft, containerStyle, get $u() {
  3827. return $u;
  3828. } };
  3829. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  3830. return __returned__;
  3831. }
  3832. });
  3833. function _sfc_render$1s(_ctx, _cache, $props, $setup, $data, $options) {
  3834. const _component_u_icon = __unplugin_components_0$5;
  3835. const _component_u_badge = __unplugin_components_0$6;
  3836. const _component_u_gap = __unplugin_components_2$5;
  3837. return $setup.props.show ? (vue.openBlock(), vue.createElementBlock(
  3838. "view",
  3839. {
  3840. key: 0,
  3841. class: vue.normalizeClass(["u-tabbar", _ctx.customClass]),
  3842. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle)),
  3843. onTouchmove: vue.withModifiers(() => {
  3844. }, ["stop", "prevent"])
  3845. },
  3846. [
  3847. vue.createElementVNode(
  3848. "view",
  3849. {
  3850. class: vue.normalizeClass(["u-tabbar__content safe-area-inset-bottom", { "u-border-top": $setup.props.borderTop }]),
  3851. style: vue.normalizeStyle({ height: $setup.$u.addUnit($setup.props.height), backgroundColor: $setup.props.bgColor, zIndex: $setup.uZIndex })
  3852. },
  3853. [
  3854. (vue.openBlock(true), vue.createElementBlock(
  3855. vue.Fragment,
  3856. null,
  3857. vue.renderList($setup.props.list, (item, index) => {
  3858. return vue.openBlock(), vue.createElementBlock("view", {
  3859. class: vue.normalizeClass(["u-tabbar__content__item", { "u-tabbar__content__circle": $setup.props.midButton && item.midButton }]),
  3860. key: index,
  3861. onClick: vue.withModifiers(($event) => $setup.clickHandler(index), ["stop"]),
  3862. style: vue.normalizeStyle({ backgroundColor: $setup.props.bgColor })
  3863. }, [
  3864. vue.createElementVNode(
  3865. "view",
  3866. {
  3867. class: vue.normalizeClass(["u-tabbar__content__item__container", { "u-tabbar__content__circle__container": $setup.props.midButton && item.midButton }]),
  3868. style: vue.normalizeStyle($setup.containerStyle(index))
  3869. },
  3870. [
  3871. item.iconPath || item.selectedIconPath ? (vue.openBlock(), vue.createElementBlock(
  3872. "view",
  3873. {
  3874. key: 0,
  3875. class: vue.normalizeClass([
  3876. $setup.props.midButton && item.midButton ? "u-tabbar__content__circle__icon" : "u-tabbar__content__item__icon"
  3877. ])
  3878. },
  3879. [
  3880. vue.createVNode(_component_u_icon, {
  3881. size: $setup.getIconSize(index),
  3882. name: $setup.elIconPath(index),
  3883. "img-mode": "scaleToFill",
  3884. color: $setup.elColor(index),
  3885. "custom-prefix": $setup.getCustomPrefix(index)
  3886. }, null, 8, ["size", "name", "color", "custom-prefix"]),
  3887. item.count || item.isDot ? (vue.openBlock(), vue.createBlock(_component_u_badge, {
  3888. key: 0,
  3889. count: item.count,
  3890. "is-dot": item.isDot,
  3891. offset: [
  3892. $setup.getBadgeOffsetTop(item.count || 0, item.isDot || false),
  3893. $setup.getOffsetRight(item.count || 0, item.isDot || false)
  3894. ]
  3895. }, null, 8, ["count", "is-dot", "offset"])) : vue.createCommentVNode("v-if", true)
  3896. ],
  3897. 2
  3898. /* CLASS */
  3899. )) : vue.createCommentVNode("v-if", true),
  3900. vue.createVNode(_component_u_gap, { height: _ctx.gap }, null, 8, ["height"]),
  3901. item.text ? (vue.openBlock(), vue.createElementBlock(
  3902. "view",
  3903. {
  3904. key: 1,
  3905. class: vue.normalizeClass(["u-tabbar__content__item__text", {
  3906. "u-tabbar__content__item__text--center": item.text && !(item.iconPath || item.selectedIconPath)
  3907. }])
  3908. },
  3909. [
  3910. vue.createElementVNode(
  3911. "text",
  3912. {
  3913. class: "u-line-1",
  3914. style: vue.normalizeStyle({ color: $setup.elColor(index), fontSize: $setup.$u.addUnit($setup.getTextSize(index)) })
  3915. },
  3916. vue.toDisplayString(item.text),
  3917. 5
  3918. /* TEXT, STYLE */
  3919. )
  3920. ],
  3921. 2
  3922. /* CLASS */
  3923. )) : vue.createCommentVNode("v-if", true)
  3924. ],
  3925. 6
  3926. /* CLASS, STYLE */
  3927. )
  3928. ], 14, ["onClick"]);
  3929. }),
  3930. 128
  3931. /* KEYED_FRAGMENT */
  3932. )),
  3933. $setup.props.midButton ? (vue.openBlock(), vue.createElementBlock(
  3934. "view",
  3935. {
  3936. key: 0,
  3937. class: vue.normalizeClass(["u-tabbar__content__circle__border", { "u-border": $setup.props.borderTop }]),
  3938. style: vue.normalizeStyle({ backgroundColor: $setup.props.bgColor, left: $setup.midButtonLeft })
  3939. },
  3940. null,
  3941. 6
  3942. /* CLASS, STYLE */
  3943. )) : vue.createCommentVNode("v-if", true)
  3944. ],
  3945. 6
  3946. /* CLASS, STYLE */
  3947. ),
  3948. vue.createCommentVNode(" 这里加上一个48rpx的高度,是为了增高有凸起按钮时的防塌陷高度(也即按钮凸出来部分的高度) "),
  3949. vue.createCommentVNode(" calc 计算0时单位不一致会计算失败,这里+1px "),
  3950. vue.createElementVNode(
  3951. "view",
  3952. {
  3953. class: "u-fixed-placeholder safe-area-inset-bottom",
  3954. style: vue.normalizeStyle({ height: `calc(${$setup.$u.addUnit($setup.props.height)} + ${$setup.props.midButton ? "60rpx" : "1px"})` })
  3955. },
  3956. null,
  3957. 4
  3958. /* STYLE */
  3959. )
  3960. ],
  3961. 38
  3962. /* CLASS, STYLE, NEED_HYDRATION */
  3963. )) : vue.createCommentVNode("v-if", true);
  3964. }
  3965. const __unplugin_components_0$4 = /* @__PURE__ */ _export_sfc(_sfc_main$1t, [["render", _sfc_render$1s], ["__scopeId", "data-v-bf3787de"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-tabbar/u-tabbar.vue"]]);
  3966. const theme = [
  3967. {
  3968. "name": "melbet",
  3969. "label": "橙色",
  3970. "description": "黑橙",
  3971. "color": {
  3972. "primary": "#f8b932",
  3973. "primaryDark": "#c69428",
  3974. "primaryDisabled": "#f5dba3",
  3975. "primaryLight": "#fef2da",
  3976. "bgColor": "#f3f4f6",
  3977. "bgWhite": "#ffffff",
  3978. "bgGrayLight": "#f1f1f1",
  3979. "bgGrayDark": "#2f343c",
  3980. "bgBlack": "#212121",
  3981. "info": "#909399",
  3982. "infoDark": "#82848a",
  3983. "infoDisabled": "#c8c9cc",
  3984. "infoLight": "#f4f4f5",
  3985. "warning": "#ff9900",
  3986. "warningDark": "#f29100",
  3987. "warningDisabled": "#fcbd71",
  3988. "warningLight": "#fdf6ec",
  3989. "error": "#fa3534",
  3990. "errorDark": "#dd6161",
  3991. "errorDisabled": "#fab6b6",
  3992. "errorLight": "#fef0f0",
  3993. "success": "#19be6b",
  3994. "successDark": "#18b566",
  3995. "successDisabled": "#71d5a1",
  3996. "successLight": "#dbf1e1",
  3997. "mainColor": "#303133",
  3998. "contentColor": "#606266",
  3999. "tipsColor": "#909399",
  4000. "lightColor": "#c0c4cc",
  4001. "borderColor": "#dcdfe6",
  4002. "whiteColor": "#ffffff",
  4003. "blackColor": "#000000",
  4004. "dividerColor": "#ebeef5",
  4005. "maskColor": "rgba(0, 0, 0, 0.4)",
  4006. "shadowColor": "rgba(0, 0, 0, 0.1)"
  4007. },
  4008. "darkColor": {}
  4009. }
  4010. ];
  4011. const _sfc_main$1s = {
  4012. __name: "App.ku",
  4013. setup(__props, { expose: __expose }) {
  4014. __expose();
  4015. const currentPath = vue.computed(() => {
  4016. const pages = getCurrentPages();
  4017. if (pages && pages.length > 0) {
  4018. return "/" + pages[pages.length - 1].route;
  4019. }
  4020. return "/";
  4021. });
  4022. const paths = vue.ref([
  4023. "/",
  4024. "/pages/Tabbar/Home/index",
  4025. "/pages/Tabbar/SportsBetting/index",
  4026. "/pages/Tabbar/WorldCup/index",
  4027. "/pages/Tabbar/Entertainment/index",
  4028. "/pages/Tabbar/My/index"
  4029. ]);
  4030. const list2 = vue.ref([
  4031. {
  4032. iconPath: "/static/images/tabbar/g1.png",
  4033. selectedIconPath: "/static/images/tabbar/g.png",
  4034. pagePath: "/pages/Tabbar/Home/index",
  4035. text: uni.$t("首页"),
  4036. customIcon: false
  4037. },
  4038. {
  4039. iconPath: "/static/images/tabbar/b.png",
  4040. selectedIconPath: "/static/images/tabbar/b1.png",
  4041. pagePath: "/pages/Tabbar/SportsBetting/index",
  4042. text: uni.$t("体育博彩"),
  4043. customIcon: false
  4044. },
  4045. {
  4046. // 中间凸起大按钮
  4047. iconPath: "/static/images/sjb.gif",
  4048. selectedIconPath: "/static/images/sjb.gif",
  4049. text: "",
  4050. // 纯图标,不设文字
  4051. midButton: true,
  4052. // 核心属性:标记为凸起按钮
  4053. customIcon: false,
  4054. // 如果点击中间按钮不需要跳转特定页面(例如弹出层),不写 pagePath 即可
  4055. // 如果需要跳转,加上 pagePath: "/pages/XXX" 即可
  4056. pagePath: "/pages/Tabbar/WorldCup/index"
  4057. },
  4058. {
  4059. iconPath: "/static/images/tabbar/j.png",
  4060. selectedIconPath: "/static/images/tabbar/j1.png",
  4061. pagePath: "/pages/Tabbar/Entertainment/index",
  4062. text: uni.$t("彩票"),
  4063. customIcon: false
  4064. },
  4065. {
  4066. iconPath: "/static/images/tabbar/h1.png",
  4067. selectedIconPath: "/static/images/tabbar/h.png",
  4068. pagePath: "/pages/Tabbar/My/index",
  4069. text: uni.$t("我的"),
  4070. customIcon: false
  4071. }
  4072. ]);
  4073. const __returned__ = { currentPath, paths, list: list2, get themes() {
  4074. return theme;
  4075. } };
  4076. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  4077. return __returned__;
  4078. }
  4079. };
  4080. function _sfc_render$1r(_ctx, _cache, $props, $setup, $data, $options) {
  4081. const _component_u_tabbar = __unplugin_components_0$4;
  4082. const _component_u_config_provider = __unplugin_components_1$2;
  4083. return vue.openBlock(), vue.createBlock(_component_u_config_provider, {
  4084. "current-theme": "melbet",
  4085. themes: $setup.themes
  4086. }, {
  4087. default: vue.withCtx(() => [
  4088. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
  4089. vue.createVNode(_component_u_tabbar, {
  4090. style: vue.normalizeStyle({ display: $setup.paths.includes($setup.currentPath) ? "flex" : "none" }),
  4091. list: $setup.list,
  4092. "mid-button": true,
  4093. "active-color": "#f8b932",
  4094. "inactive-color": "#999999",
  4095. "bg-color": "#FFFFFF",
  4096. "icon-size": "35",
  4097. "mid-button-size": "110",
  4098. "text-size": "22"
  4099. }, null, 8, ["style", "list"])
  4100. ]),
  4101. _: 3
  4102. /* FORWARDED */
  4103. }, 8, ["themes"]);
  4104. }
  4105. const GlobalKuRoot = /* @__PURE__ */ _export_sfc(_sfc_main$1s, [["render", _sfc_render$1r], ["__scopeId", "data-v-4c3bdea0"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/App.ku.vue"]]);
  4106. const MaskProps = {
  4107. ...baseProps,
  4108. /** 是否显示遮罩 */
  4109. show: {
  4110. type: Boolean,
  4111. default: false
  4112. },
  4113. /** 层级z-index */
  4114. zIndex: {
  4115. type: [Number, String],
  4116. default: ""
  4117. },
  4118. /** 遮罩的动画样式,是否使用zoom进行scale进行缩放 */
  4119. zoom: {
  4120. type: Boolean,
  4121. default: true
  4122. },
  4123. /** 遮罩的过渡时间,单位为ms */
  4124. duration: {
  4125. type: [Number, String],
  4126. default: 300
  4127. },
  4128. /** 是否可以通过点击遮罩进行关闭 */
  4129. maskClickAble: {
  4130. type: Boolean,
  4131. default: true
  4132. }
  4133. };
  4134. const __default__$k = {
  4135. name: "u-mask",
  4136. options: {
  4137. addGlobalClass: true,
  4138. virtualHost: true,
  4139. styleIsolation: "shared"
  4140. }
  4141. };
  4142. const _sfc_main$1r = /* @__PURE__ */ vue.defineComponent({
  4143. ...__default__$k,
  4144. props: MaskProps,
  4145. emits: ["click"],
  4146. setup(__props, { expose: __expose, emit: __emit }) {
  4147. __expose();
  4148. const props = __props;
  4149. const emit = __emit;
  4150. const zoomStyle = vue.ref({ transform: "" });
  4151. const scale = "scale(1.2, 1.2)";
  4152. vue.watch(
  4153. () => props.show,
  4154. (n) => {
  4155. if (n && props.zoom) {
  4156. zoomStyle.value.transform = "scale(1, 1)";
  4157. } else if (!n && props.zoom) {
  4158. zoomStyle.value.transform = scale;
  4159. }
  4160. }
  4161. );
  4162. const maskStyle = vue.computed(() => {
  4163. let style = {};
  4164. style.backgroundColor = "rgba(0, 0, 0, 0.6)";
  4165. if (props.show)
  4166. style.zIndex = props.zIndex ? props.zIndex : $u.zIndex.mask;
  4167. else
  4168. style.zIndex = -1;
  4169. style.transition = `all ${Number(props.duration) / 1e3}s ease-in-out`;
  4170. return style;
  4171. });
  4172. function click2() {
  4173. if (!props.maskClickAble)
  4174. return;
  4175. emit("click");
  4176. }
  4177. const __returned__ = { props, emit, zoomStyle, scale, maskStyle, click: click2, get $u() {
  4178. return $u;
  4179. } };
  4180. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  4181. return __returned__;
  4182. }
  4183. });
  4184. function _sfc_render$1q(_ctx, _cache, $props, $setup, $data, $options) {
  4185. return vue.openBlock(), vue.createElementBlock(
  4186. "view",
  4187. {
  4188. class: vue.normalizeClass(["u-mask", [
  4189. {
  4190. "u-mask-zoom": $setup.props.zoom,
  4191. "u-mask-show": $setup.props.show
  4192. },
  4193. _ctx.customClass
  4194. ]]),
  4195. "hover-stop-propagation": "",
  4196. style: vue.normalizeStyle($setup.$u.toStyle($setup.maskStyle, $setup.zoomStyle, _ctx.customStyle)),
  4197. onClick: $setup.click,
  4198. onTouchmove: vue.withModifiers(() => {
  4199. }, ["stop", "prevent"])
  4200. },
  4201. [
  4202. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  4203. ],
  4204. 38
  4205. /* CLASS, STYLE, NEED_HYDRATION */
  4206. );
  4207. }
  4208. const __unplugin_components_2$4 = /* @__PURE__ */ _export_sfc(_sfc_main$1r, [["render", _sfc_render$1q], ["__scopeId", "data-v-db7121f0"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-mask/u-mask.vue"]]);
  4209. const PopupProps = {
  4210. ...baseProps,
  4211. /** 显示状态 */
  4212. show: { type: Boolean, default: false },
  4213. /** 弹出方向,left|right|top|bottom|center */
  4214. mode: { type: String, default: "left" },
  4215. /** 是否显示遮罩 */
  4216. mask: { type: Boolean, default: true },
  4217. /** 抽屉的宽度(mode=left|right),或者高度(mode=top|bottom),单位rpx,或者"auto",或者百分比"50%",表示由内容撑开高度或者宽度 */
  4218. length: { type: [Number, String], default: "auto" },
  4219. /** 是否开启缩放动画,只在mode=center时有效 */
  4220. zoom: { type: Boolean, default: true },
  4221. /** 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 */
  4222. safeAreaInsetBottom: { type: Boolean, default: false },
  4223. /** 是否可以通过点击遮罩进行关闭 */
  4224. maskCloseAble: { type: Boolean, default: true },
  4225. /** v-model 控制弹窗显示 */
  4226. modelValue: { type: Boolean, default: false },
  4227. /** 内部参数,解决多层调用报错不能修改props值的问题 */
  4228. popup: { type: Boolean, default: true },
  4229. /** 圆角 */
  4230. borderRadius: { type: [Number, String], default: 0 },
  4231. /** 弹窗z-index */
  4232. zIndex: { type: [Number, String], default: zIndex.popup },
  4233. /** 是否显示关闭图标 */
  4234. closeable: { type: Boolean, default: false },
  4235. /** 关闭图标的名称,只能uView的内置图标 */
  4236. closeIcon: { type: String, default: "close" },
  4237. /** 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角 */
  4238. closeIconPos: { type: String, default: "top-right" },
  4239. /** 关闭图标的颜色 */
  4240. closeIconColor: { type: String, default: "var(--u-tips-color)" },
  4241. /** 关闭图标的大小,单位rpx */
  4242. closeIconSize: { type: [String, Number], default: "30" },
  4243. /** 弹窗宽度 */
  4244. width: { type: String, default: "" },
  4245. /** 弹窗高度 */
  4246. height: { type: String, default: "" },
  4247. /** 负top定位,支持rpx/px/百分比 */
  4248. negativeTop: { type: [String, Number], default: 0 },
  4249. /** 遮罩自定义样式 */
  4250. maskCustomStyle: { type: Object, default: () => ({}) },
  4251. /** 动画时长,单位ms */
  4252. duration: { type: [String, Number], default: 250 }
  4253. };
  4254. const __default__$j = {
  4255. name: "u-popup",
  4256. options: {
  4257. addGlobalClass: true,
  4258. virtualHost: true,
  4259. styleIsolation: "shared"
  4260. }
  4261. };
  4262. const _sfc_main$1q = /* @__PURE__ */ vue.defineComponent({
  4263. ...__default__$j,
  4264. props: PopupProps,
  4265. emits: ["update:modelValue", "open", "close"],
  4266. setup(__props, { expose: __expose, emit: __emit }) {
  4267. __expose();
  4268. const props = __props;
  4269. const emit = __emit;
  4270. const visibleSync = vue.ref(false);
  4271. const showDrawer = vue.ref(false);
  4272. const timer = vue.ref(null);
  4273. const closeFromInner = vue.ref(false);
  4274. const style = vue.computed(() => {
  4275. let style2 = {};
  4276. if (props.mode == "left" || props.mode == "right") {
  4277. style2 = {
  4278. width: props.width ? getUnitValue(props.width) : getUnitValue(props.length),
  4279. height: "100%",
  4280. transform: `translate3D(${props.mode == "left" ? "-100%" : "100%"},0px,0px)`
  4281. };
  4282. } else if (props.mode == "top" || props.mode == "bottom") {
  4283. style2 = {
  4284. width: "100%",
  4285. height: props.height ? getUnitValue(props.height) : getUnitValue(props.length),
  4286. transform: `translate3D(0px,${props.mode == "top" ? "-100%" : "100%"},0px)`
  4287. };
  4288. }
  4289. style2.zIndex = uZIndex.value;
  4290. if (props.borderRadius) {
  4291. switch (props.mode) {
  4292. case "left":
  4293. style2.borderRadius = `0 ${props.borderRadius}rpx ${props.borderRadius}rpx 0`;
  4294. break;
  4295. case "top":
  4296. style2.borderRadius = `0 0 ${props.borderRadius}rpx ${props.borderRadius}rpx`;
  4297. break;
  4298. case "right":
  4299. style2.borderRadius = `${props.borderRadius}rpx 0 0 ${props.borderRadius}rpx`;
  4300. break;
  4301. case "bottom":
  4302. style2.borderRadius = `${props.borderRadius}rpx ${props.borderRadius}rpx 0 0`;
  4303. break;
  4304. }
  4305. style2.overflow = "hidden";
  4306. }
  4307. if (props.duration)
  4308. style2.transition = `all ${Number(props.duration) / 1e3}s linear`;
  4309. return style2;
  4310. });
  4311. const centerStyle = vue.computed(() => {
  4312. let style2 = {};
  4313. style2.width = props.width ? getUnitValue(props.width) : getUnitValue(props.length);
  4314. style2.height = props.height ? getUnitValue(props.height) : "auto";
  4315. style2.zIndex = uZIndex.value;
  4316. style2.marginTop = `-${$u.addUnit(props.negativeTop)}`;
  4317. if (props.borderRadius) {
  4318. style2.borderRadius = `${props.borderRadius}rpx`;
  4319. style2.overflow = "hidden";
  4320. }
  4321. return style2;
  4322. });
  4323. const uZIndex = vue.computed(() => props.zIndex ? props.zIndex : $u.zIndex.popup);
  4324. vue.watch(
  4325. () => props.modelValue,
  4326. (val) => {
  4327. if (val) {
  4328. open2();
  4329. } else if (!closeFromInner.value) {
  4330. close();
  4331. }
  4332. closeFromInner.value = false;
  4333. }
  4334. );
  4335. vue.onMounted(() => {
  4336. if (props.modelValue)
  4337. open2();
  4338. });
  4339. function getUnitValue(val) {
  4340. if (/(%|px|rpx|auto)$/.test(String(val)))
  4341. return val;
  4342. else
  4343. return val + "rpx";
  4344. }
  4345. function maskClick() {
  4346. close();
  4347. }
  4348. function close() {
  4349. closeFromInner.value = true;
  4350. change("showDrawer", "visibleSync", false);
  4351. }
  4352. function modeCenterClose(mode) {
  4353. if (mode != "center" || !props.maskCloseAble)
  4354. return;
  4355. close();
  4356. }
  4357. function open2() {
  4358. change("visibleSync", "showDrawer", true);
  4359. }
  4360. function change(param1, param2, status) {
  4361. if (props.popup === true) {
  4362. emit("update:modelValue", status);
  4363. }
  4364. (param1 === "showDrawer" ? showDrawer : visibleSync).value = status;
  4365. if (status) {
  4366. vue.nextTick(() => {
  4367. (param2 === "showDrawer" ? showDrawer : visibleSync).value = status;
  4368. emit(status ? "open" : "close");
  4369. });
  4370. } else {
  4371. timer.value = setTimeout(() => {
  4372. (param2 === "showDrawer" ? showDrawer : visibleSync).value = status;
  4373. emit(status ? "open" : "close");
  4374. }, Number(props.duration));
  4375. }
  4376. }
  4377. const __returned__ = { props, emit, visibleSync, showDrawer, timer, closeFromInner, style, centerStyle, uZIndex, getUnitValue, maskClick, close, modeCenterClose, open: open2, change, get $u() {
  4378. return $u;
  4379. } };
  4380. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  4381. return __returned__;
  4382. }
  4383. });
  4384. function _sfc_render$1p(_ctx, _cache, $props, $setup, $data, $options) {
  4385. const _component_u_mask = __unplugin_components_2$4;
  4386. const _component_u_icon = __unplugin_components_0$5;
  4387. return $setup.visibleSync ? (vue.openBlock(), vue.createElementBlock(
  4388. "view",
  4389. {
  4390. key: 0,
  4391. class: vue.normalizeClass(["u-drawer", _ctx.customClass]),
  4392. style: vue.normalizeStyle($setup.$u.toStyle({ zIndex: Number($setup.uZIndex) - 1 }, _ctx.customStyle)),
  4393. "hover-stop-propagation": ""
  4394. },
  4395. [
  4396. vue.createVNode(_component_u_mask, {
  4397. duration: _ctx.duration,
  4398. "custom-style": _ctx.maskCustomStyle,
  4399. maskClickAble: _ctx.maskCloseAble,
  4400. "z-index": Number($setup.uZIndex) - 2,
  4401. show: $setup.showDrawer && _ctx.mask,
  4402. onClick: $setup.maskClick
  4403. }, null, 8, ["duration", "custom-style", "maskClickAble", "z-index", "show"]),
  4404. vue.createElementVNode(
  4405. "view",
  4406. {
  4407. class: vue.normalizeClass(["u-drawer-content", [
  4408. _ctx.safeAreaInsetBottom ? "safe-area-inset-bottom" : "",
  4409. "u-drawer-" + _ctx.mode,
  4410. $setup.showDrawer ? "u-drawer-content-visible" : "",
  4411. _ctx.zoom && _ctx.mode == "center" ? "u-animation-zoom" : ""
  4412. ]]),
  4413. onClick: _cache[2] || (_cache[2] = ($event) => $setup.modeCenterClose(_ctx.mode)),
  4414. onTouchmove: _cache[3] || (_cache[3] = vue.withModifiers(() => {
  4415. }, ["stop", "prevent"])),
  4416. style: vue.normalizeStyle([$setup.style])
  4417. },
  4418. [
  4419. _ctx.mode == "center" ? (vue.openBlock(), vue.createElementBlock(
  4420. "view",
  4421. {
  4422. key: 0,
  4423. class: "u-mode-center-box",
  4424. onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
  4425. }, ["stop", "prevent"])),
  4426. onTouchmove: _cache[1] || (_cache[1] = vue.withModifiers(() => {
  4427. }, ["stop", "prevent"])),
  4428. style: vue.normalizeStyle([$setup.centerStyle])
  4429. },
  4430. [
  4431. _ctx.closeable ? (vue.openBlock(), vue.createElementBlock(
  4432. "view",
  4433. {
  4434. key: 0,
  4435. onClick: $setup.close,
  4436. class: vue.normalizeClass(["u-close", ["u-close--" + _ctx.closeIconPos]])
  4437. },
  4438. [
  4439. vue.createVNode(_component_u_icon, {
  4440. name: _ctx.closeIcon,
  4441. color: _ctx.closeIconColor,
  4442. size: _ctx.closeIconSize
  4443. }, null, 8, ["name", "color", "size"])
  4444. ],
  4445. 2
  4446. /* CLASS */
  4447. )) : vue.createCommentVNode("v-if", true),
  4448. vue.createElementVNode("scroll-view", {
  4449. class: "u-drawer__scroll-view",
  4450. "scroll-y": true
  4451. }, [
  4452. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  4453. ])
  4454. ],
  4455. 36
  4456. /* STYLE, NEED_HYDRATION */
  4457. )) : (vue.openBlock(), vue.createElementBlock("scroll-view", {
  4458. key: 1,
  4459. class: "u-drawer__scroll-view",
  4460. "scroll-y": true
  4461. }, [
  4462. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  4463. ])),
  4464. _ctx.mode != "center" && _ctx.closeable ? (vue.openBlock(), vue.createElementBlock(
  4465. "view",
  4466. {
  4467. key: 2,
  4468. onClick: $setup.close,
  4469. class: vue.normalizeClass(["u-close", ["u-close--" + _ctx.closeIconPos]])
  4470. },
  4471. [
  4472. vue.createVNode(_component_u_icon, {
  4473. name: _ctx.closeIcon,
  4474. color: _ctx.closeIconColor,
  4475. size: _ctx.closeIconSize
  4476. }, null, 8, ["name", "color", "size"])
  4477. ],
  4478. 2
  4479. /* CLASS */
  4480. )) : vue.createCommentVNode("v-if", true)
  4481. ],
  4482. 38
  4483. /* CLASS, STYLE, NEED_HYDRATION */
  4484. )
  4485. ],
  4486. 6
  4487. /* CLASS, STYLE */
  4488. )) : vue.createCommentVNode("v-if", true);
  4489. }
  4490. const __unplugin_components_2$3 = /* @__PURE__ */ _export_sfc(_sfc_main$1q, [["render", _sfc_render$1p], ["__scopeId", "data-v-4924bdd9"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-popup/u-popup.vue"]]);
  4491. const LoadingProps = {
  4492. ...baseProps,
  4493. /** 动画的类型 */
  4494. mode: {
  4495. type: String,
  4496. default: "circle"
  4497. },
  4498. /** 动画的颜色 */
  4499. color: {
  4500. type: String,
  4501. default: "var(--u-light-color)"
  4502. },
  4503. /** 加载图标的大小,单位rpx */
  4504. size: {
  4505. type: [String, Number],
  4506. default: "34"
  4507. },
  4508. /** 是否显示动画 */
  4509. show: {
  4510. type: Boolean,
  4511. default: true
  4512. }
  4513. };
  4514. const __default__$i = {
  4515. name: "u-loading",
  4516. options: {
  4517. addGlobalClass: true,
  4518. virtualHost: true,
  4519. styleIsolation: "shared"
  4520. }
  4521. };
  4522. const _sfc_main$1p = /* @__PURE__ */ vue.defineComponent({
  4523. ...__default__$i,
  4524. props: LoadingProps,
  4525. setup(__props, { expose: __expose }) {
  4526. __expose();
  4527. const props = __props;
  4528. const cricleStyle = vue.computed(() => {
  4529. let style = {};
  4530. style.width = props.size + "rpx";
  4531. style.height = props.size + "rpx";
  4532. if (props.mode === "circle") {
  4533. style.borderColor = `var(--u-divider-color) var(--u-divider-color) var(--u-divider-color) ${props.color ? props.color : "var(--u-light-color)"}`;
  4534. }
  4535. return style;
  4536. });
  4537. const __returned__ = { props, cricleStyle, get $u() {
  4538. return $u;
  4539. } };
  4540. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  4541. return __returned__;
  4542. }
  4543. });
  4544. function _sfc_render$1o(_ctx, _cache, $props, $setup, $data, $options) {
  4545. return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
  4546. "view",
  4547. {
  4548. key: 0,
  4549. class: vue.normalizeClass(["u-loading", [_ctx.mode === "circle" ? "u-loading-circle" : "u-loading-flower", _ctx.customClass]]),
  4550. style: vue.normalizeStyle($setup.$u.toStyle($setup.cricleStyle, _ctx.customStyle))
  4551. },
  4552. null,
  4553. 6
  4554. /* CLASS, STYLE */
  4555. )) : vue.createCommentVNode("v-if", true);
  4556. }
  4557. const __unplugin_components_3$3 = /* @__PURE__ */ _export_sfc(_sfc_main$1p, [["render", _sfc_render$1o], ["__scopeId", "data-v-9666de9c"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-loading/u-loading.vue"]]);
  4558. const { t: t$5 } = useLocale();
  4559. const ModalProps = {
  4560. ...baseProps,
  4561. /** 是否显示模态框 */
  4562. modelValue: {
  4563. type: Boolean,
  4564. default: false
  4565. },
  4566. /** 层级z-index */
  4567. zIndex: {
  4568. type: [Number, String],
  4569. default: ""
  4570. },
  4571. /** 标题 */
  4572. title: {
  4573. type: String,
  4574. default: () => t$5("uModal.title")
  4575. },
  4576. /** 弹窗宽度 */
  4577. width: {
  4578. type: [Number, String],
  4579. default: 600
  4580. },
  4581. /** 弹窗内容 */
  4582. content: {
  4583. type: String,
  4584. default: ""
  4585. },
  4586. /** 是否显示标题 */
  4587. showTitle: {
  4588. type: Boolean,
  4589. default: true
  4590. },
  4591. /** 是否显示确认按钮 */
  4592. showConfirmButton: {
  4593. type: Boolean,
  4594. default: true
  4595. },
  4596. /** 是否显示取消按钮 */
  4597. showCancelButton: {
  4598. type: Boolean,
  4599. default: false
  4600. },
  4601. /** 确认文案 */
  4602. confirmText: {
  4603. type: String,
  4604. default: () => t$5("uModal.confirmText")
  4605. },
  4606. /** 取消文案 */
  4607. cancelText: {
  4608. type: String,
  4609. default: () => t$5("uModal.cancelText")
  4610. },
  4611. /** 确认按钮颜色 */
  4612. confirmColor: {
  4613. type: String,
  4614. default: () => getColor("primary")
  4615. },
  4616. /** 取消文字颜色 */
  4617. cancelColor: {
  4618. type: String,
  4619. default: () => getColor("contentColor")
  4620. },
  4621. /** 圆角值 */
  4622. borderRadius: {
  4623. type: [Number, String],
  4624. default: 16
  4625. },
  4626. /** 标题的样式 */
  4627. titleStyle: {
  4628. type: Object,
  4629. default: () => ({})
  4630. },
  4631. /** 内容的样式 */
  4632. contentStyle: {
  4633. type: Object,
  4634. default: () => ({})
  4635. },
  4636. /** 取消按钮的样式 */
  4637. cancelStyle: {
  4638. type: Object,
  4639. default: () => ({})
  4640. },
  4641. /** 确定按钮的样式 */
  4642. confirmStyle: {
  4643. type: Object,
  4644. default: () => ({})
  4645. },
  4646. /** 是否开启缩放效果 */
  4647. zoom: {
  4648. type: Boolean,
  4649. default: true
  4650. },
  4651. /** 是否异步关闭,只对确定按钮有效 */
  4652. asyncClose: {
  4653. type: Boolean,
  4654. default: false
  4655. },
  4656. /** 是否允许点击遮罩关闭modal */
  4657. maskCloseAble: {
  4658. type: Boolean,
  4659. default: false
  4660. },
  4661. /** 给一个负的margin-top,往上偏移,避免和键盘重合的情况 */
  4662. negativeTop: {
  4663. type: [String, Number],
  4664. default: 0
  4665. },
  4666. /** 是否作为全局根部 modal(通常放在 App.vue 中,给 useModal() 使用) */
  4667. global: {
  4668. type: Boolean,
  4669. default: false
  4670. },
  4671. /** 是否作为页面级 modal(通常放在页面中,给 useModal({ page: true }) 使用) */
  4672. page: {
  4673. type: Boolean,
  4674. default: false
  4675. }
  4676. };
  4677. const __default__$h = {
  4678. name: "u-modal",
  4679. options: {
  4680. addGlobalClass: true,
  4681. virtualHost: true,
  4682. styleIsolation: "shared"
  4683. }
  4684. };
  4685. const _sfc_main$1o = /* @__PURE__ */ vue.defineComponent({
  4686. ...__default__$h,
  4687. props: ModalProps,
  4688. emits: ["update:modelValue", "confirm", "cancel"],
  4689. setup(__props, { expose: __expose, emit: __emit }) {
  4690. const props = __props;
  4691. const emit = __emit;
  4692. const slots = vue.useSlots();
  4693. const loading = vue.ref(false);
  4694. const isGlobal = vue.computed(() => props.global);
  4695. const isPage = vue.computed(() => props.page);
  4696. const showEvent = vue.computed(() => isGlobal.value ? U_MODAL_GLOBAL_EVENT_SHOW : isPage.value ? U_MODAL_EVENT_SHOW : "");
  4697. const hideEvent = vue.computed(() => isGlobal.value ? U_MODAL_GLOBAL_EVENT_HIDE : isPage.value ? U_MODAL_EVENT_HIDE : "");
  4698. const clearLoadingEvent = vue.computed(
  4699. () => isGlobal.value ? U_MODAL_GLOBAL_EVENT_CLEAR_LOADING : isPage.value ? U_MODAL_EVENT_CLEAR_LOADING : ""
  4700. );
  4701. let userOnConfirm = null;
  4702. let userOnCancel = null;
  4703. const MERGE_PROPS_KEYS = [
  4704. "title",
  4705. "content",
  4706. "showTitle",
  4707. "showConfirmButton",
  4708. "showCancelButton",
  4709. "confirmText",
  4710. "cancelText",
  4711. "confirmColor",
  4712. "cancelColor",
  4713. "confirmStyle",
  4714. "cancelStyle",
  4715. "titleStyle",
  4716. "contentStyle",
  4717. "asyncClose",
  4718. "borderRadius",
  4719. "width",
  4720. "zoom",
  4721. "maskCloseAble",
  4722. "negativeTop",
  4723. "zIndex",
  4724. "customStyle",
  4725. "customClass"
  4726. ];
  4727. const tempConfig = vue.ref({});
  4728. const internalShow = vue.ref(false);
  4729. const effectiveConfig = vue.computed(() => {
  4730. if (Object.keys(tempConfig.value).length > 0) {
  4731. const result = {};
  4732. for (const key of MERGE_PROPS_KEYS) {
  4733. result[key] = tempConfig.value[key] ?? props[key];
  4734. }
  4735. result.zIndex = tempConfig.value.zIndex ?? props.zIndex ?? $u.zIndex.popup;
  4736. return result;
  4737. }
  4738. return props;
  4739. });
  4740. const cancelBtnStyle = vue.computed(() => {
  4741. return Object.assign({ color: effectiveConfig.value.cancelColor }, effectiveConfig.value.cancelStyle);
  4742. });
  4743. const confirmBtnStyle = vue.computed(() => {
  4744. return Object.assign({ color: effectiveConfig.value.confirmColor }, effectiveConfig.value.confirmStyle);
  4745. });
  4746. const uZIndex = vue.computed(() => effectiveConfig.value.zIndex ?? $u.zIndex.popup);
  4747. const useInternalShow = vue.computed(() => isGlobal.value || isPage.value);
  4748. const finalShow = vue.computed(() => {
  4749. if (useInternalShow.value) {
  4750. return internalShow.value;
  4751. }
  4752. return props.modelValue;
  4753. });
  4754. const popupValue = vue.computed({
  4755. get: () => finalShow.value,
  4756. set: (val) => {
  4757. if (useInternalShow.value) {
  4758. internalShow.value = val;
  4759. } else {
  4760. emit("update:modelValue", val);
  4761. }
  4762. }
  4763. });
  4764. vue.watch(
  4765. () => popupValue.value,
  4766. (n) => {
  4767. if (n === true)
  4768. loading.value = false;
  4769. }
  4770. );
  4771. function confirm() {
  4772. const onConfirm = userOnConfirm;
  4773. if (effectiveConfig.value.asyncClose) {
  4774. loading.value = true;
  4775. } else {
  4776. popupValue.value = false;
  4777. setTimeout(() => resetTempConfig(), 300);
  4778. }
  4779. emit("confirm");
  4780. onConfirm == null ? void 0 : onConfirm();
  4781. }
  4782. function cancel() {
  4783. const onCancel = userOnCancel;
  4784. setTimeout(() => resetTempConfig(), 300);
  4785. emit("cancel");
  4786. popupValue.value = false;
  4787. onCancel == null ? void 0 : onCancel();
  4788. setTimeout(() => {
  4789. loading.value = false;
  4790. }, 300);
  4791. }
  4792. function popupClose() {
  4793. popupValue.value = false;
  4794. resetTempConfig();
  4795. }
  4796. function clearLoading() {
  4797. loading.value = false;
  4798. }
  4799. function onServiceShow(payload) {
  4800. userOnConfirm = payload.onConfirm ?? null;
  4801. userOnCancel = payload.onCancel ?? null;
  4802. const { onConfirm, onCancel, ...rest } = payload;
  4803. tempConfig.value = rest;
  4804. internalShow.value = true;
  4805. }
  4806. function onServiceHide() {
  4807. internalShow.value = false;
  4808. resetTempConfig();
  4809. }
  4810. function resetTempConfig() {
  4811. tempConfig.value = {};
  4812. userOnConfirm = null;
  4813. userOnCancel = null;
  4814. }
  4815. vue.onMounted(() => {
  4816. if (showEvent.value) {
  4817. (uni == null ? void 0 : uni.$on) && uni.$on(showEvent.value, onServiceShow);
  4818. }
  4819. if (hideEvent.value) {
  4820. (uni == null ? void 0 : uni.$on) && uni.$on(hideEvent.value, onServiceHide);
  4821. }
  4822. if (clearLoadingEvent.value) {
  4823. (uni == null ? void 0 : uni.$on) && uni.$on(clearLoadingEvent.value, clearLoading);
  4824. }
  4825. });
  4826. vue.onBeforeUnmount(() => {
  4827. if (showEvent.value) {
  4828. (uni == null ? void 0 : uni.$off) && uni.$off(showEvent.value, onServiceShow);
  4829. }
  4830. if (hideEvent.value) {
  4831. (uni == null ? void 0 : uni.$off) && uni.$off(hideEvent.value, onServiceHide);
  4832. }
  4833. if (clearLoadingEvent.value) {
  4834. (uni == null ? void 0 : uni.$off) && uni.$off(clearLoadingEvent.value, clearLoading);
  4835. }
  4836. });
  4837. __expose({
  4838. clearLoading
  4839. });
  4840. const __returned__ = { props, emit, slots, loading, isGlobal, isPage, showEvent, hideEvent, clearLoadingEvent, get userOnConfirm() {
  4841. return userOnConfirm;
  4842. }, set userOnConfirm(v) {
  4843. userOnConfirm = v;
  4844. }, get userOnCancel() {
  4845. return userOnCancel;
  4846. }, set userOnCancel(v) {
  4847. userOnCancel = v;
  4848. }, MERGE_PROPS_KEYS, tempConfig, internalShow, effectiveConfig, cancelBtnStyle, confirmBtnStyle, uZIndex, useInternalShow, finalShow, popupValue, confirm, cancel, popupClose, clearLoading, onServiceShow, onServiceHide, resetTempConfig, get $u() {
  4849. return $u;
  4850. } };
  4851. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  4852. return __returned__;
  4853. }
  4854. });
  4855. function _sfc_render$1n(_ctx, _cache, $props, $setup, $data, $options) {
  4856. const _component_u_loading = __unplugin_components_3$3;
  4857. const _component_u_popup = __unplugin_components_2$3;
  4858. return vue.openBlock(), vue.createElementBlock("view", null, [
  4859. vue.createVNode(_component_u_popup, {
  4860. modelValue: $setup.popupValue,
  4861. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.popupValue = $event),
  4862. mode: "center",
  4863. zoom: $setup.effectiveConfig.zoom,
  4864. popup: false,
  4865. "z-index": $setup.uZIndex,
  4866. length: $setup.effectiveConfig.width,
  4867. "mask-close-able": $setup.effectiveConfig.maskCloseAble,
  4868. "border-radius": $setup.effectiveConfig.borderRadius,
  4869. "negative-top": $setup.effectiveConfig.negativeTop,
  4870. "custom-class": $setup.effectiveConfig.customClass,
  4871. onClose: $setup.popupClose
  4872. }, {
  4873. default: vue.withCtx(() => [
  4874. vue.createElementVNode(
  4875. "view",
  4876. {
  4877. class: "u-model",
  4878. style: vue.normalizeStyle($setup.$u.toStyle($setup.effectiveConfig.customStyle))
  4879. },
  4880. [
  4881. $setup.effectiveConfig.showTitle ? (vue.openBlock(), vue.createElementBlock(
  4882. "view",
  4883. {
  4884. key: 0,
  4885. class: "u-model__title u-line-1",
  4886. style: vue.normalizeStyle($setup.$u.toStyle($setup.effectiveConfig.titleStyle))
  4887. },
  4888. vue.toDisplayString($setup.effectiveConfig.title),
  4889. 5
  4890. /* TEXT, STYLE */
  4891. )) : vue.createCommentVNode("v-if", true),
  4892. vue.createElementVNode("view", { class: "u-model__content" }, [
  4893. $setup.slots.default ? (vue.openBlock(), vue.createElementBlock(
  4894. "view",
  4895. {
  4896. key: 0,
  4897. style: vue.normalizeStyle($setup.$u.toStyle($setup.effectiveConfig.contentStyle))
  4898. },
  4899. [
  4900. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  4901. ],
  4902. 4
  4903. /* STYLE */
  4904. )) : (vue.openBlock(), vue.createElementBlock(
  4905. "view",
  4906. {
  4907. key: 1,
  4908. class: "u-model__content__message",
  4909. style: vue.normalizeStyle($setup.$u.toStyle($setup.effectiveConfig.contentStyle))
  4910. },
  4911. vue.toDisplayString($setup.effectiveConfig.content),
  4912. 5
  4913. /* TEXT, STYLE */
  4914. ))
  4915. ]),
  4916. $setup.effectiveConfig.showCancelButton || $setup.effectiveConfig.showConfirmButton ? (vue.openBlock(), vue.createElementBlock("view", {
  4917. key: 1,
  4918. class: "u-model__footer u-border-top"
  4919. }, [
  4920. $setup.effectiveConfig.showCancelButton ? (vue.openBlock(), vue.createElementBlock(
  4921. "view",
  4922. {
  4923. key: 0,
  4924. "hover-stay-time": 100,
  4925. "hover-class": "u-model__btn--hover",
  4926. class: "u-model__footer__button",
  4927. style: vue.normalizeStyle($setup.$u.toStyle($setup.cancelBtnStyle)),
  4928. onClick: $setup.cancel
  4929. },
  4930. vue.toDisplayString($setup.effectiveConfig.cancelText),
  4931. 5
  4932. /* TEXT, STYLE */
  4933. )) : vue.createCommentVNode("v-if", true),
  4934. $setup.effectiveConfig.showConfirmButton || $setup.slots["confirm-button"] ? (vue.openBlock(), vue.createElementBlock("view", {
  4935. key: 1,
  4936. class: "u-model__footer__button hairline-left",
  4937. "hover-stay-time": 100,
  4938. "hover-class": $setup.effectiveConfig.asyncClose ? "none" : "u-model__btn--hover",
  4939. style: vue.normalizeStyle([$setup.confirmBtnStyle]),
  4940. onClick: $setup.confirm
  4941. }, [
  4942. $setup.slots["confirm-button"] ? vue.renderSlot(_ctx.$slots, "confirm-button", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createElementBlock(
  4943. vue.Fragment,
  4944. { key: 1 },
  4945. [
  4946. $setup.loading ? (vue.openBlock(), vue.createBlock(_component_u_loading, {
  4947. key: 0,
  4948. mode: "circle",
  4949. color: $setup.effectiveConfig.confirmColor
  4950. }, null, 8, ["color"])) : (vue.openBlock(), vue.createElementBlock(
  4951. vue.Fragment,
  4952. { key: 1 },
  4953. [
  4954. vue.createTextVNode(
  4955. vue.toDisplayString($setup.effectiveConfig.confirmText),
  4956. 1
  4957. /* TEXT */
  4958. )
  4959. ],
  4960. 64
  4961. /* STABLE_FRAGMENT */
  4962. ))
  4963. ],
  4964. 64
  4965. /* STABLE_FRAGMENT */
  4966. ))
  4967. ], 12, ["hover-class"])) : vue.createCommentVNode("v-if", true)
  4968. ])) : vue.createCommentVNode("v-if", true)
  4969. ],
  4970. 4
  4971. /* STYLE */
  4972. )
  4973. ]),
  4974. _: 3
  4975. /* FORWARDED */
  4976. }, 8, ["modelValue", "zoom", "z-index", "length", "mask-close-able", "border-radius", "negative-top", "custom-class"])
  4977. ]);
  4978. }
  4979. const __unplugin_components_4$3 = /* @__PURE__ */ _export_sfc(_sfc_main$1o, [["render", _sfc_render$1n], ["__scopeId", "data-v-3477805f"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-modal/u-modal.vue"]]);
  4980. const { t: t$4 } = useLocale();
  4981. const InputProps = {
  4982. ...baseProps,
  4983. /** 用于双向绑定输入框的值 */
  4984. modelValue: {
  4985. type: [String, Number],
  4986. default: ""
  4987. },
  4988. /** 输入框的类型,textarea,text,number */
  4989. type: {
  4990. type: String,
  4991. default: "text"
  4992. },
  4993. /** 输入框文字的对齐方式(默认left) */
  4994. inputAlign: {
  4995. type: String,
  4996. default: "left"
  4997. },
  4998. /** placeholder显示值(默认 '请输入内容') */
  4999. placeholder: {
  5000. type: String,
  5001. default: () => t$4("uInput.placeholder")
  5002. },
  5003. /** 是否禁用输入框(默认false) */
  5004. disabled: {
  5005. type: Boolean,
  5006. default: false
  5007. },
  5008. /** 输入框的最大可输入长度(默认140) */
  5009. maxlength: {
  5010. type: [Number, String],
  5011. default: 140
  5012. },
  5013. // 是否显示统计字数,仅textarea有效
  5014. count: {
  5015. type: Boolean,
  5016. default: false
  5017. },
  5018. /** placeholder的样式,字符串形式,如"color: red;"(默认 "color: var(--u-light-color);") */
  5019. placeholderStyle: {
  5020. type: String,
  5021. default: "color: var(--u-light-color);"
  5022. },
  5023. /** 设置键盘右下角按钮的文字,仅在type为text时生效(默认done) */
  5024. confirmType: {
  5025. type: String,
  5026. default: "done"
  5027. },
  5028. /** 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true */
  5029. fixed: {
  5030. type: Boolean,
  5031. default: false
  5032. },
  5033. /** 是否自动获得焦点(默认false) */
  5034. focus: {
  5035. type: Boolean,
  5036. default: false
  5037. },
  5038. /** 密码类型时,是否显示右侧的密码图标(默认true) */
  5039. passwordIcon: {
  5040. type: Boolean,
  5041. default: true
  5042. },
  5043. /** input|textarea是否显示边框(默认false) */
  5044. border: {
  5045. type: Boolean,
  5046. default: false
  5047. },
  5048. /** 输入框的边框颜色(默认var(--u-border-color)) */
  5049. borderColor: {
  5050. type: String,
  5051. default: "var(--u-border-color)"
  5052. },
  5053. /** 是否自动增高输入区域,type为textarea时有效(默认true) */
  5054. autoHeight: {
  5055. type: Boolean,
  5056. default: true
  5057. },
  5058. /** type=select时,旋转右侧的图标,标识当前处于打开还是关闭select的状态 */
  5059. selectOpen: {
  5060. type: Boolean,
  5061. default: false
  5062. },
  5063. /** 高度,单位rpx */
  5064. height: {
  5065. type: [Number, String],
  5066. default: ""
  5067. },
  5068. /** 是否可清空(默认true) */
  5069. clearable: {
  5070. type: Boolean,
  5071. default: true
  5072. },
  5073. /** 指定光标与键盘的距离,单位 px(默认0) */
  5074. cursorSpacing: {
  5075. type: [Number, String],
  5076. default: 0
  5077. },
  5078. /** 光标起始位置,自动聚焦时有效,需与selection-end搭配使用(默认-1) */
  5079. selectionStart: {
  5080. type: [Number, String],
  5081. default: -1
  5082. },
  5083. /** 光标结束位置,自动聚焦时有效,需与selection-start搭配使用(默认-1) */
  5084. selectionEnd: {
  5085. type: [Number, String],
  5086. default: -1
  5087. },
  5088. /** 是否自动去除两端的空格(默认true) */
  5089. trim: {
  5090. type: Boolean,
  5091. default: true
  5092. },
  5093. /** 是否显示键盘上方带有”完成“按钮那一栏(默认true) */
  5094. showConfirmbar: {
  5095. type: Boolean,
  5096. default: true
  5097. },
  5098. /** 弹出键盘时是否自动调节高度,uni-app默认值是true */
  5099. adjustPosition: {
  5100. type: Boolean,
  5101. default: true
  5102. },
  5103. /** 输入框的验证状态,用于错误时,边框是否改为红色 */
  5104. validateState: {
  5105. type: Boolean,
  5106. default: false
  5107. }
  5108. };
  5109. const __default__$g = {
  5110. name: "u-input",
  5111. options: {
  5112. addGlobalClass: true,
  5113. virtualHost: true,
  5114. styleIsolation: "shared"
  5115. }
  5116. };
  5117. const _sfc_main$1n = /* @__PURE__ */ vue.defineComponent({
  5118. ...__default__$g,
  5119. props: InputProps,
  5120. emits: ["update:modelValue", "input", "blur", "focus", "confirm", "click"],
  5121. setup(__props, { expose: __expose, emit: __emit }) {
  5122. const props = __props;
  5123. const emit = __emit;
  5124. const { emitToParent } = useChildren("u-input", "u-form-item");
  5125. const inputHeight = 70;
  5126. const textareaHeight = 100;
  5127. const validateState = vue.ref(props.validateState);
  5128. const focused = vue.ref(false);
  5129. const showPassword = vue.ref(false);
  5130. const lastValue = vue.ref("");
  5131. const inputValue = vue.computed(() => {
  5132. if (props.modelValue === void 0 || props.modelValue === null)
  5133. return "";
  5134. return String(props.modelValue);
  5135. });
  5136. vue.watch(
  5137. () => inputValue.value,
  5138. (nVal, oVal) => {
  5139. if (nVal != oVal && props.type == "select")
  5140. handleInput({ detail: { value: nVal } });
  5141. }
  5142. );
  5143. vue.watch(
  5144. () => props.validateState,
  5145. (val) => {
  5146. validateState.value = val;
  5147. }
  5148. );
  5149. const inputMaxlength = vue.computed(() => Number(props.maxlength));
  5150. const getStyle = vue.computed(() => {
  5151. let style = {};
  5152. style.minHeight = props.height ? props.height + "rpx" : props.type == "textarea" ? `${textareaHeight}rpx` : `${inputHeight}rpx`;
  5153. return $u.toStyle(style, props.customStyle);
  5154. });
  5155. const getCursorSpacing = vue.computed(() => Number(props.cursorSpacing));
  5156. const uSelectionStart = vue.computed(() => String(props.selectionStart));
  5157. const uSelectionEnd = vue.computed(() => String(props.selectionEnd));
  5158. function handleInput(event) {
  5159. let value = event.detail.value;
  5160. if (props.trim)
  5161. value = $u.trim(value);
  5162. emit("update:modelValue", value);
  5163. emit("input", value);
  5164. setTimeout(() => {
  5165. emitToParent("onFormChange", value);
  5166. }, 40);
  5167. }
  5168. function handleBlur(event) {
  5169. setTimeout(() => {
  5170. focused.value = false;
  5171. }, 100);
  5172. setTimeout(() => {
  5173. let value = inputValue.value;
  5174. emit("blur", value);
  5175. emitToParent("onFormBlur", value);
  5176. }, 40);
  5177. }
  5178. function onFormItemError(status) {
  5179. validateState.value = status;
  5180. }
  5181. function onFocus(e) {
  5182. focused.value = true;
  5183. emit("focus", e.detail.value);
  5184. }
  5185. function onConfirm(e) {
  5186. emit("confirm", e.detail.value);
  5187. }
  5188. function onClear(event) {
  5189. try {
  5190. event.stopPropagation();
  5191. } catch (e) {
  5192. console.log(e);
  5193. }
  5194. handleInput({ detail: { value: "" } });
  5195. }
  5196. function inputClick() {
  5197. emit("click");
  5198. }
  5199. __expose({
  5200. onFormItemError
  5201. });
  5202. const __returned__ = { props, emit, emitToParent, inputHeight, textareaHeight, validateState, focused, showPassword, lastValue, inputValue, inputMaxlength, getStyle, getCursorSpacing, uSelectionStart, uSelectionEnd, handleInput, handleBlur, onFormItemError, onFocus, onConfirm, onClear, inputClick };
  5203. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  5204. return __returned__;
  5205. }
  5206. });
  5207. function _sfc_render$1m(_ctx, _cache, $props, $setup, $data, $options) {
  5208. const _component_u_icon = __unplugin_components_0$5;
  5209. return vue.openBlock(), vue.createElementBlock(
  5210. "view",
  5211. {
  5212. class: vue.normalizeClass(["u-input", [
  5213. {
  5214. "u-input--border": _ctx.border,
  5215. "u-input--error": $setup.validateState
  5216. },
  5217. _ctx.customClass
  5218. ]]),
  5219. style: vue.normalizeStyle({
  5220. padding: _ctx.type === "textarea" ? _ctx.border ? "20rpx" : "0" : `0 ${_ctx.border ? 20 : 0}rpx`,
  5221. borderColor: _ctx.borderColor,
  5222. textAlign: _ctx.inputAlign
  5223. }),
  5224. onClick: vue.withModifiers($setup.inputClick, ["stop"])
  5225. },
  5226. [
  5227. _ctx.type == "textarea" ? (vue.openBlock(), vue.createElementBlock("textarea", {
  5228. key: 0,
  5229. class: "u-input__input u-input__textarea",
  5230. style: vue.normalizeStyle($setup.getStyle),
  5231. value: $setup.inputValue,
  5232. placeholder: _ctx.placeholder,
  5233. placeholderStyle: _ctx.placeholderStyle,
  5234. disabled: _ctx.disabled,
  5235. maxlength: $setup.inputMaxlength,
  5236. fixed: _ctx.fixed,
  5237. focus: _ctx.focus,
  5238. autoHeight: _ctx.autoHeight,
  5239. "selection-end": Number($setup.uSelectionEnd),
  5240. "selection-start": Number($setup.uSelectionStart),
  5241. "cursor-spacing": $setup.getCursorSpacing,
  5242. "show-confirm-bar": _ctx.showConfirmbar,
  5243. "adjust-position": _ctx.adjustPosition,
  5244. onInput: $setup.handleInput,
  5245. onBlur: $setup.handleBlur,
  5246. onFocus: $setup.onFocus,
  5247. onConfirm: $setup.onConfirm
  5248. }, null, 44, ["value", "placeholder", "placeholderStyle", "disabled", "maxlength", "fixed", "focus", "autoHeight", "selection-end", "selection-start", "cursor-spacing", "show-confirm-bar", "adjust-position"])) : (vue.openBlock(), vue.createElementBlock(
  5249. vue.Fragment,
  5250. { key: 1 },
  5251. [
  5252. vue.createCommentVNode(" prettier-ignore "),
  5253. vue.createElementVNode("input", {
  5254. class: "u-input__input",
  5255. type: _ctx.type == "password" ? "text" : _ctx.type,
  5256. style: vue.normalizeStyle($setup.getStyle),
  5257. value: $setup.inputValue,
  5258. password: _ctx.type == "password" && !$setup.showPassword,
  5259. placeholder: _ctx.placeholder,
  5260. placeholderStyle: _ctx.placeholderStyle,
  5261. disabled: _ctx.disabled || _ctx.type === "select",
  5262. maxlength: $setup.inputMaxlength,
  5263. focus: _ctx.focus,
  5264. confirmType: _ctx.confirmType,
  5265. "cursor-spacing": $setup.getCursorSpacing,
  5266. "selection-end": Number($setup.uSelectionEnd),
  5267. "selection-start": Number($setup.uSelectionStart),
  5268. "show-confirm-bar": _ctx.showConfirmbar,
  5269. "adjust-position": _ctx.adjustPosition,
  5270. onFocus: $setup.onFocus,
  5271. onBlur: $setup.handleBlur,
  5272. onInput: $setup.handleInput,
  5273. onConfirm: $setup.onConfirm
  5274. }, null, 44, ["type", "value", "password", "placeholder", "placeholderStyle", "disabled", "maxlength", "focus", "confirmType", "cursor-spacing", "selection-end", "selection-start", "show-confirm-bar", "adjust-position"])
  5275. ],
  5276. 2112
  5277. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  5278. )),
  5279. _ctx.type === "select" ? (vue.openBlock(), vue.createElementBlock("view", {
  5280. key: 2,
  5281. class: "u-input__select-overlay",
  5282. onClick: vue.withModifiers($setup.inputClick, ["stop"])
  5283. })) : vue.createCommentVNode("v-if", true),
  5284. vue.createElementVNode("view", { class: "u-input__right-icon u-flex" }, [
  5285. _ctx.clearable && $setup.inputValue !== "" && !_ctx.disabled ? (vue.openBlock(), vue.createElementBlock("view", {
  5286. key: 0,
  5287. class: "u-input__right-icon__clear u-input__right-icon__item",
  5288. onClick: vue.withModifiers($setup.onClear, ["stop"])
  5289. }, [
  5290. vue.createVNode(_component_u_icon, {
  5291. size: "32",
  5292. name: "close-circle-fill",
  5293. color: "var(--u-light-color)"
  5294. })
  5295. ])) : vue.createCommentVNode("v-if", true),
  5296. _ctx.passwordIcon && _ctx.type == "password" ? (vue.openBlock(), vue.createElementBlock("view", {
  5297. key: 1,
  5298. class: "u-input__right-icon__clear u-input__right-icon__item"
  5299. }, [
  5300. vue.createVNode(_component_u_icon, {
  5301. size: "32",
  5302. name: !$setup.showPassword ? "eye" : "eye-fill",
  5303. color: "var(--u-light-color)",
  5304. onClick: _cache[0] || (_cache[0] = ($event) => $setup.showPassword = !$setup.showPassword)
  5305. }, null, 8, ["name"])
  5306. ])) : vue.createCommentVNode("v-if", true),
  5307. _ctx.type == "select" ? (vue.openBlock(), vue.createElementBlock(
  5308. "view",
  5309. {
  5310. key: 2,
  5311. class: vue.normalizeClass(["u-input__right-icon--select u-input__right-icon__item", {
  5312. "u-input__right-icon--select--reverse": _ctx.selectOpen
  5313. }])
  5314. },
  5315. [
  5316. vue.createVNode(_component_u_icon, {
  5317. name: "arrow-down-fill",
  5318. size: "26",
  5319. color: "var(--u-light-color)"
  5320. })
  5321. ],
  5322. 2
  5323. /* CLASS */
  5324. )) : vue.createCommentVNode("v-if", true)
  5325. ]),
  5326. $setup.props.type === "textarea" && $setup.props.count ? (vue.openBlock(), vue.createElementBlock(
  5327. "text",
  5328. {
  5329. key: 3,
  5330. class: "u-input__count",
  5331. style: vue.normalizeStyle({
  5332. "background-color": $setup.props.disabled ? "transparent" : "var(--u-bg-white)"
  5333. })
  5334. },
  5335. vue.toDisplayString($setup.inputValue.length) + "/" + vue.toDisplayString($setup.props.maxlength),
  5336. 5
  5337. /* TEXT, STYLE */
  5338. )) : vue.createCommentVNode("v-if", true)
  5339. ],
  5340. 6
  5341. /* CLASS, STYLE */
  5342. );
  5343. }
  5344. const __unplugin_components_3$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1n, [["render", _sfc_render$1m], ["__scopeId", "data-v-d205c001"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-input/u-input.vue"]]);
  5345. const TagProps = {
  5346. ...baseProps,
  5347. /** 类型,primary、success、info、warning、error */
  5348. type: { type: String, default: "primary" },
  5349. /** 是否禁用 */
  5350. disabled: { type: [Boolean, String], default: false },
  5351. /** 尺寸,default/mini/medium */
  5352. size: { type: String, default: "default" },
  5353. /** 形状,square为方形,circle为圆形 */
  5354. shape: { type: String, default: "square" },
  5355. /** 显示的文本内容 */
  5356. text: { type: [String, Number], default: "" },
  5357. /** 文字颜色 */
  5358. color: { type: String, default: "" },
  5359. /** 背景颜色 */
  5360. bgColor: { type: String, default: "" },
  5361. /** 边框颜色 */
  5362. borderColor: { type: String, default: "" },
  5363. /** 关闭按钮颜色 */
  5364. closeColor: { type: String, default: "" },
  5365. /** 索引值 */
  5366. index: { type: [String, Number], default: "" },
  5367. /** 模式,light/dark/plain等 */
  5368. mode: { type: String, default: "light" },
  5369. /** 是否可关闭 */
  5370. closeable: { type: Boolean, default: false },
  5371. /** 是否显示 */
  5372. show: { type: Boolean, default: true }
  5373. };
  5374. const __default__$f = {
  5375. name: "u-tag",
  5376. options: {
  5377. addGlobalClass: true,
  5378. virtualHost: true,
  5379. styleIsolation: "shared"
  5380. }
  5381. };
  5382. const _sfc_main$1m = /* @__PURE__ */ vue.defineComponent({
  5383. ...__default__$f,
  5384. props: TagProps,
  5385. emits: ["click", "close"],
  5386. setup(__props, { expose: __expose, emit: __emit }) {
  5387. __expose();
  5388. const emit = __emit;
  5389. const props = __props;
  5390. const tagStyle = vue.computed(() => {
  5391. let style = {};
  5392. if (props.color)
  5393. style.color = props.color;
  5394. if (props.bgColor)
  5395. style.backgroundColor = props.bgColor;
  5396. if (props.mode === "plain" && props.color && !props.borderColor)
  5397. style.borderColor = props.color;
  5398. else
  5399. style.borderColor = props.borderColor;
  5400. return style;
  5401. });
  5402. const iconStyle = vue.computed(() => {
  5403. if (!props.closeable)
  5404. return void 0;
  5405. let style = {};
  5406. if (props.size === "mini")
  5407. style.fontSize = "20rpx";
  5408. else
  5409. style.fontSize = "22rpx";
  5410. if (props.mode === "plain" || props.mode === "light")
  5411. style.color = props.type;
  5412. else if (props.mode === "dark")
  5413. style.color = "var(--u-white-color)";
  5414. if (props.closeColor)
  5415. style.color = props.closeColor;
  5416. return style;
  5417. });
  5418. const closeIconColor = vue.computed(() => {
  5419. if (props.closeColor)
  5420. return props.closeColor;
  5421. else if (props.color)
  5422. return props.color;
  5423. else if (props.mode === "dark")
  5424. return "var(--u-white-color)";
  5425. else
  5426. return props.type;
  5427. });
  5428. function clickTag() {
  5429. if (props.disabled)
  5430. return;
  5431. emit("click", props.index);
  5432. }
  5433. function close() {
  5434. emit("close", props.index);
  5435. }
  5436. const __returned__ = { emit, props, tagStyle, iconStyle, closeIconColor, clickTag, close, get $u() {
  5437. return $u;
  5438. } };
  5439. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  5440. return __returned__;
  5441. }
  5442. });
  5443. function _sfc_render$1l(_ctx, _cache, $props, $setup, $data, $options) {
  5444. const _component_u_icon = __unplugin_components_0$5;
  5445. return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
  5446. "view",
  5447. {
  5448. key: 0,
  5449. class: vue.normalizeClass([[
  5450. _ctx.disabled ? "u-disabled" : "",
  5451. "u-size-" + _ctx.size,
  5452. "u-shape-" + _ctx.shape,
  5453. "u-mode-" + _ctx.mode + "-" + _ctx.type,
  5454. _ctx.customClass
  5455. ], "u-tag"]),
  5456. style: vue.normalizeStyle($setup.$u.toStyle($setup.tagStyle, _ctx.customStyle)),
  5457. onClick: $setup.clickTag
  5458. },
  5459. [
  5460. vue.renderSlot(_ctx.$slots, "default", {}, () => [
  5461. vue.createTextVNode(
  5462. vue.toDisplayString(_ctx.text),
  5463. 1
  5464. /* TEXT */
  5465. )
  5466. ], true),
  5467. vue.createElementVNode("view", {
  5468. class: "u-icon-wrap",
  5469. onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
  5470. }, ["stop"]))
  5471. }, [
  5472. _ctx.closeable ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  5473. key: 0,
  5474. onClick: $setup.close,
  5475. size: "22",
  5476. color: $setup.closeIconColor,
  5477. name: "close",
  5478. class: "u-close-icon",
  5479. style: vue.normalizeStyle([$setup.iconStyle])
  5480. }, null, 8, ["color", "style"])) : vue.createCommentVNode("v-if", true)
  5481. ])
  5482. ],
  5483. 6
  5484. /* CLASS, STYLE */
  5485. )) : vue.createCommentVNode("v-if", true);
  5486. }
  5487. const __unplugin_components_2$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1m, [["render", _sfc_render$1l], ["__scopeId", "data-v-2ea57d76"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-tag/u-tag.vue"]]);
  5488. const NavbarProps = {
  5489. /** 导航栏高度,单位px,非rpx */
  5490. height: {
  5491. type: [String, Number],
  5492. default: ""
  5493. },
  5494. /** 返回箭头的颜色 */
  5495. backIconColor: {
  5496. type: String,
  5497. default: "var(--u-content-color)"
  5498. },
  5499. /** 左边返回的图标 */
  5500. backIconName: {
  5501. type: String,
  5502. default: "nav-back"
  5503. },
  5504. /** 左边返回图标的大小,rpx */
  5505. backIconSize: {
  5506. type: [String, Number],
  5507. default: "44"
  5508. },
  5509. /** 返回的文字提示 */
  5510. backText: {
  5511. type: String,
  5512. default: ""
  5513. },
  5514. /** 返回的文字的 样式 */
  5515. backTextStyle: {
  5516. type: Object,
  5517. default: () => ({ color: "var(--u-content-color)" })
  5518. },
  5519. /** 导航栏标题 */
  5520. title: {
  5521. type: String,
  5522. default: ""
  5523. },
  5524. /** 标题的宽度,单位rpx */
  5525. titleWidth: {
  5526. type: [String, Number],
  5527. default: "250"
  5528. },
  5529. /** 标题的颜色 */
  5530. titleColor: {
  5531. type: String,
  5532. default: "var(--u-content-color)"
  5533. },
  5534. /** 标题字体是否加粗 */
  5535. titleBold: {
  5536. type: Boolean,
  5537. default: false
  5538. },
  5539. /** 标题的字体大小 */
  5540. titleSize: {
  5541. type: [String, Number],
  5542. default: 32
  5543. },
  5544. /** 是否显示导航栏左边返回图标和辅助文字 */
  5545. isBack: {
  5546. type: [Boolean, String],
  5547. default: true
  5548. },
  5549. /** 导航栏背景设置 */
  5550. background: {
  5551. type: Object,
  5552. default: () => ({ background: "var(--u-bg-white)" })
  5553. },
  5554. /** 导航栏是否固定在顶部 */
  5555. isFixed: {
  5556. type: Boolean,
  5557. default: true
  5558. },
  5559. /** 是否沉浸式,允许fixed定位后导航栏塌陷,仅fixed定位下生效 */
  5560. immersive: {
  5561. type: Boolean,
  5562. default: false
  5563. },
  5564. /** 是否显示导航栏的下边框 */
  5565. borderBottom: {
  5566. type: Boolean,
  5567. default: true
  5568. },
  5569. /** 固定在顶部时的z-index值 */
  5570. zIndex: {
  5571. type: [String, Number],
  5572. default: zIndex.navbar
  5573. },
  5574. /** 自定义返回逻辑方法 */
  5575. customBack: {
  5576. type: Function,
  5577. default: null
  5578. }
  5579. };
  5580. const __default__$e = {
  5581. name: "u-navbar",
  5582. options: {
  5583. addGlobalClass: true,
  5584. virtualHost: true,
  5585. styleIsolation: "shared"
  5586. }
  5587. };
  5588. const _sfc_main$1l = /* @__PURE__ */ vue.defineComponent({
  5589. ...__default__$e,
  5590. props: NavbarProps,
  5591. setup(__props, { expose: __expose }) {
  5592. __expose();
  5593. const props = __props;
  5594. const systemInfo2 = uni.getSystemInfoSync();
  5595. let menuButtonInfo = {};
  5596. const statusBarHeight = vue.ref(0);
  5597. statusBarHeight.value = systemInfo2.statusBarHeight || 0;
  5598. const navbarHeight = vue.computed(() => {
  5599. return props.height ? props.height : 44;
  5600. });
  5601. const navbarPlaceholderHeight = vue.computed(() => {
  5602. return Number(navbarHeight.value) + Number(statusBarHeight.value);
  5603. });
  5604. const navbarInnerStyle = vue.computed(() => {
  5605. let style = {};
  5606. style.height = String(navbarHeight.value) + "px";
  5607. return style;
  5608. });
  5609. const navbarStyle = vue.computed(() => {
  5610. let style = {};
  5611. style.zIndex = props.zIndex ? props.zIndex : $u.zIndex.navbar;
  5612. Object.assign(style, props.background);
  5613. return style;
  5614. });
  5615. const titleStyle = vue.computed(() => {
  5616. let style = {};
  5617. style.left = (systemInfo2.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + "px";
  5618. style.right = (systemInfo2.windowWidth - uni.upx2px(Number(props.titleWidth))) / 2 + "px";
  5619. style.width = uni.upx2px(Number(props.titleWidth)) + "px";
  5620. return style;
  5621. });
  5622. function goBack() {
  5623. if (typeof props.customBack === "function") {
  5624. props.customBack();
  5625. } else {
  5626. uni.navigateBack();
  5627. }
  5628. }
  5629. const __returned__ = { props, systemInfo: systemInfo2, get menuButtonInfo() {
  5630. return menuButtonInfo;
  5631. }, set menuButtonInfo(v) {
  5632. menuButtonInfo = v;
  5633. }, statusBarHeight, navbarHeight, navbarPlaceholderHeight, navbarInnerStyle, navbarStyle, titleStyle, goBack };
  5634. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  5635. return __returned__;
  5636. }
  5637. });
  5638. function _sfc_render$1k(_ctx, _cache, $props, $setup, $data, $options) {
  5639. const _component_u_icon = __unplugin_components_0$5;
  5640. return vue.openBlock(), vue.createElementBlock("view", null, [
  5641. vue.createElementVNode(
  5642. "view",
  5643. {
  5644. class: vue.normalizeClass(["u-navbar", { "u-navbar-fixed": $setup.props.isFixed, "u-border-bottom": $setup.props.borderBottom }]),
  5645. style: vue.normalizeStyle($setup.navbarStyle)
  5646. },
  5647. [
  5648. vue.createElementVNode(
  5649. "view",
  5650. {
  5651. class: "u-status-bar",
  5652. style: vue.normalizeStyle({ height: $setup.statusBarHeight + "px" })
  5653. },
  5654. null,
  5655. 4
  5656. /* STYLE */
  5657. ),
  5658. vue.createElementVNode(
  5659. "view",
  5660. {
  5661. class: "u-navbar-inner",
  5662. style: vue.normalizeStyle($setup.navbarInnerStyle)
  5663. },
  5664. [
  5665. $setup.props.isBack ? (vue.openBlock(), vue.createElementBlock("view", {
  5666. key: 0,
  5667. class: "u-back-wrap",
  5668. onClick: $setup.goBack
  5669. }, [
  5670. vue.createElementVNode("view", { class: "u-icon-wrap" }, [
  5671. vue.createVNode(_component_u_icon, {
  5672. name: $setup.props.backIconName,
  5673. color: $setup.props.backIconColor,
  5674. size: $setup.props.backIconSize
  5675. }, null, 8, ["name", "color", "size"])
  5676. ]),
  5677. $setup.props.backText ? (vue.openBlock(), vue.createElementBlock(
  5678. "view",
  5679. {
  5680. key: 0,
  5681. class: "u-icon-wrap u-back-text u-line-1",
  5682. style: vue.normalizeStyle($setup.props.backTextStyle)
  5683. },
  5684. vue.toDisplayString($setup.props.backText),
  5685. 5
  5686. /* TEXT, STYLE */
  5687. )) : vue.createCommentVNode("v-if", true)
  5688. ])) : vue.createCommentVNode("v-if", true),
  5689. vue.createElementVNode("view", { class: "u-slot-left" }, [
  5690. vue.renderSlot(_ctx.$slots, "left", {}, void 0, true)
  5691. ]),
  5692. $setup.props.title ? (vue.openBlock(), vue.createElementBlock(
  5693. "view",
  5694. {
  5695. key: 1,
  5696. class: "u-navbar-content-title",
  5697. style: vue.normalizeStyle($setup.titleStyle)
  5698. },
  5699. [
  5700. vue.createElementVNode(
  5701. "view",
  5702. {
  5703. class: "u-title u-line-1",
  5704. style: vue.normalizeStyle({
  5705. color: $setup.props.titleColor,
  5706. fontSize: $setup.props.titleSize + "rpx",
  5707. fontWeight: $setup.props.titleBold ? "bold" : "normal"
  5708. })
  5709. },
  5710. vue.toDisplayString($setup.props.title),
  5711. 5
  5712. /* TEXT, STYLE */
  5713. )
  5714. ],
  5715. 4
  5716. /* STYLE */
  5717. )) : vue.createCommentVNode("v-if", true),
  5718. vue.createElementVNode("view", { class: "u-slot-content" }, [
  5719. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  5720. ]),
  5721. vue.createElementVNode("view", { class: "u-slot-right" }, [
  5722. vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
  5723. ])
  5724. ],
  5725. 4
  5726. /* STYLE */
  5727. )
  5728. ],
  5729. 6
  5730. /* CLASS, STYLE */
  5731. ),
  5732. vue.createCommentVNode(" 解决fixed定位后导航栏塌陷的问题 "),
  5733. $setup.props.isFixed && !$setup.props.immersive ? (vue.openBlock(), vue.createElementBlock(
  5734. "view",
  5735. {
  5736. key: 0,
  5737. class: "u-navbar-placeholder",
  5738. style: vue.normalizeStyle({ width: "100%", height: `${Number($setup.navbarPlaceholderHeight)}px` })
  5739. },
  5740. null,
  5741. 4
  5742. /* STYLE */
  5743. )) : vue.createCommentVNode("v-if", true)
  5744. ]);
  5745. }
  5746. const __unplugin_components_3$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1l, [["render", _sfc_render$1k], ["__scopeId", "data-v-5731e8cb"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-navbar/u-navbar.vue"]]);
  5747. const { t: t$3 } = useLocale();
  5748. const SelectProps = {
  5749. ...baseProps,
  5750. /** 列数据 */
  5751. list: { type: Array, default: () => [] },
  5752. /** 是否显示边框 */
  5753. border: { type: Boolean, default: true },
  5754. /** 通过双向绑定控制组件的弹出与收起 */
  5755. modelValue: { type: Boolean, default: false },
  5756. /** "取消"按钮的颜色 */
  5757. cancelColor: { type: String, default: () => getColor("contentColor") },
  5758. /** "确定"按钮的颜色 */
  5759. confirmColor: { type: String, default: () => getColor("primary") },
  5760. /** 弹出的z-index值 */
  5761. zIndex: { type: [String, Number], default: 0 },
  5762. /** 是否开启底部安全区适配 */
  5763. safeAreaInsetBottom: { type: Boolean, default: false },
  5764. /** 是否允许通过点击遮罩关闭Picker */
  5765. maskCloseAble: { type: Boolean, default: true },
  5766. /** 提供的默认选中的下标 */
  5767. defaultValue: { type: Array, default: () => [0] },
  5768. /** 是否保留用户上次确认的选择(true:优先使用已保存的选择;false:优先使用外部传入的 defaultValue) */
  5769. preserveSelection: { type: Boolean, default: true },
  5770. /** 模式选择,single-column-单列,mutil-column-多列,mutil-column-auto-多列联动 */
  5771. mode: { type: String, default: "single-column" },
  5772. /** 自定义value属性名 */
  5773. valueName: { type: String, default: "value" },
  5774. /** 自定义label属性名 */
  5775. labelName: { type: String, default: "label" },
  5776. /** 自定义多列联动模式的children属性名 */
  5777. childName: { type: String, default: "children" },
  5778. /** 顶部标题 */
  5779. title: { type: String, default: "" },
  5780. /** 取消按钮的文字 */
  5781. cancelText: { type: String, default: () => t$3("uSelect.cancelText") },
  5782. /** 确认按钮的文字 */
  5783. confirmText: { type: String, default: () => t$3("uSelect.confirmText") }
  5784. };
  5785. const __default__$d = {
  5786. name: "u-select",
  5787. options: {
  5788. addGlobalClass: true,
  5789. virtualHost: true,
  5790. styleIsolation: "shared"
  5791. }
  5792. };
  5793. const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({
  5794. ...__default__$d,
  5795. props: SelectProps,
  5796. emits: ["update:modelValue", "confirm", "cancel", "click"],
  5797. setup(__props, { expose: __expose, emit: __emit }) {
  5798. __expose();
  5799. const props = __props;
  5800. const emit = __emit;
  5801. const defaultSelector = vue.ref([0]);
  5802. const columnData = vue.ref([]);
  5803. const readyToRender = vue.ref(false);
  5804. const savedSelector = vue.ref(
  5805. props.defaultValue && props.defaultValue.length ? props.defaultValue.slice() : null
  5806. );
  5807. const selectValue = vue.ref([]);
  5808. const lastSelectIndex = vue.ref([]);
  5809. const columnNum = vue.ref(0);
  5810. const moving = vue.ref(false);
  5811. const uZIndex = vue.computed(() => props.zIndex ? props.zIndex : $u.zIndex.popup);
  5812. const popupValue = vue.computed({
  5813. get: () => props.modelValue,
  5814. set: (val) => emit("update:modelValue", val)
  5815. });
  5816. vue.watch(
  5817. () => props.modelValue,
  5818. async (val) => {
  5819. if (val) {
  5820. await vue.nextTick();
  5821. await new Promise((resolve2) => setTimeout(resolve2, 20));
  5822. init();
  5823. readyToRender.value = true;
  5824. } else {
  5825. readyToRender.value = false;
  5826. }
  5827. },
  5828. { immediate: true }
  5829. );
  5830. function pickstart() {
  5831. }
  5832. function pickend() {
  5833. }
  5834. function init() {
  5835. setColumnNum();
  5836. setDefaultSelector();
  5837. setColumnData();
  5838. selectValue.value = [];
  5839. setSelectValue();
  5840. }
  5841. function setDefaultSelector() {
  5842. let useDefault = null;
  5843. if (props.preserveSelection) {
  5844. useDefault = savedSelector.value && savedSelector.value.length ? savedSelector.value : props.defaultValue;
  5845. } else {
  5846. useDefault = props.defaultValue && props.defaultValue.length ? props.defaultValue : savedSelector.value;
  5847. }
  5848. defaultSelector.value = useDefault && useDefault.length == columnNum.value ? useDefault.slice() : Array(columnNum.value).fill(0);
  5849. lastSelectIndex.value = [...defaultSelector.value];
  5850. }
  5851. function setColumnNum() {
  5852. if (props.mode == "single-column")
  5853. columnNum.value = 1;
  5854. else if (props.mode == "mutil-column")
  5855. columnNum.value = props.list.length;
  5856. else if (props.mode == "mutil-column-auto") {
  5857. let num = 1;
  5858. let column = props.list;
  5859. while (Array.isArray(column) && column[0] && typeof column[0] === "object" && props.childName in column[0]) {
  5860. column = column[0][props.childName];
  5861. num++;
  5862. }
  5863. columnNum.value = num;
  5864. }
  5865. }
  5866. function setColumnData() {
  5867. let data = [];
  5868. selectValue.value = [];
  5869. if (props.mode == "mutil-column-auto") {
  5870. let column = props.list[defaultSelector.value.length ? defaultSelector.value[0] : 0];
  5871. for (let i = 0; i < columnNum.value; i++) {
  5872. if (i == 0) {
  5873. data[i] = is2DList(props.list) ? props.list[i] || [] : props.list;
  5874. column = column && typeof column === "object" ? column[props.childName] : [];
  5875. } else {
  5876. data[i] = Array.isArray(column) ? column : [];
  5877. column = Array.isArray(column) && column[defaultSelector.value[i]] && typeof column[defaultSelector.value[i]] === "object" ? column[defaultSelector.value[i]][props.childName] : [];
  5878. }
  5879. }
  5880. } else if (props.mode == "single-column") {
  5881. data[0] = Array.isArray(props.list) && !is2DList(props.list) ? props.list : [];
  5882. } else if (props.mode == "mutil-column") {
  5883. data = is2DList(props.list) ? props.list : [props.list];
  5884. }
  5885. columnData.value = data;
  5886. }
  5887. function setSelectValue() {
  5888. for (let i = 0; i < columnNum.value; i++) {
  5889. const tmp = columnData.value[i][defaultSelector.value[i]];
  5890. let data = {
  5891. value: tmp ? tmp[props.valueName] : null,
  5892. label: tmp ? tmp[props.labelName] : null
  5893. };
  5894. if (tmp && tmp.extra !== void 0)
  5895. data.extra = tmp.extra;
  5896. selectValue.value.push(data);
  5897. }
  5898. }
  5899. function columnChange(e) {
  5900. let index = -1;
  5901. const columnIndex = e.detail.value;
  5902. selectValue.value = [];
  5903. defaultSelector.value = columnIndex;
  5904. if (props.mode == "mutil-column-auto") {
  5905. lastSelectIndex.value.map((val, idx) => {
  5906. if (val != columnIndex[idx])
  5907. index = idx;
  5908. });
  5909. for (let i = index + 1; i < columnNum.value; i++) {
  5910. const prevCol = columnData.value[i - 1];
  5911. const prevIdx = i - 1 == index ? columnIndex[index] : 0;
  5912. columnData.value[i] = Array.isArray(prevCol) && prevCol[prevIdx] && typeof prevCol[prevIdx] === "object" ? prevCol[prevIdx][props.childName] : [];
  5913. defaultSelector.value[i] = 0;
  5914. }
  5915. columnIndex.map((item, idx) => {
  5916. let data = columnData.value[idx][columnIndex[idx]];
  5917. let tmp = {
  5918. value: data ? data[props.valueName] : null,
  5919. label: data ? data[props.labelName] : null
  5920. };
  5921. if (data && data.extra !== void 0)
  5922. tmp.extra = data.extra;
  5923. selectValue.value.push(tmp);
  5924. });
  5925. lastSelectIndex.value = [...columnIndex];
  5926. } else if (props.mode == "single-column") {
  5927. let data = columnData.value[0][columnIndex[0]];
  5928. let tmp = {
  5929. value: data ? data[props.valueName] : null,
  5930. label: data ? data[props.labelName] : null
  5931. };
  5932. if (data && data.extra !== void 0)
  5933. tmp.extra = data.extra;
  5934. selectValue.value.push(tmp);
  5935. } else if (props.mode == "mutil-column") {
  5936. columnIndex.map((item, idx) => {
  5937. let data = columnData.value[idx][columnIndex[idx]];
  5938. let tmp = {
  5939. value: data ? data[props.valueName] : null,
  5940. label: data ? data[props.labelName] : null
  5941. };
  5942. if (data && data.extra !== void 0)
  5943. tmp.extra = data.extra;
  5944. selectValue.value.push(tmp);
  5945. });
  5946. }
  5947. }
  5948. function close() {
  5949. emit("update:modelValue", false);
  5950. }
  5951. function getResult(event = null) {
  5952. if (event)
  5953. emit(event, selectValue.value);
  5954. if (event === "confirm") {
  5955. savedSelector.value = defaultSelector.value ? defaultSelector.value.slice() : null;
  5956. }
  5957. close();
  5958. }
  5959. function selectHandler() {
  5960. emit("click");
  5961. }
  5962. function is2DList(list2) {
  5963. return Array.isArray(list2) && list2.length > 0 && Array.isArray(list2[0]);
  5964. }
  5965. const __returned__ = { props, emit, defaultSelector, columnData, readyToRender, savedSelector, selectValue, lastSelectIndex, columnNum, moving, uZIndex, popupValue, pickstart, pickend, init, setDefaultSelector, setColumnNum, setColumnData, setSelectValue, columnChange, close, getResult, selectHandler, is2DList, get $u() {
  5966. return $u;
  5967. } };
  5968. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  5969. return __returned__;
  5970. }
  5971. });
  5972. function _sfc_render$1j(_ctx, _cache, $props, $setup, $data, $options) {
  5973. const _component_u_popup = __unplugin_components_2$3;
  5974. return vue.openBlock(), vue.createElementBlock(
  5975. "view",
  5976. {
  5977. class: vue.normalizeClass(["u-select", _ctx.customClass]),
  5978. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle))
  5979. },
  5980. [
  5981. vue.createCommentVNode(` <view class="u-select__action" :class="{\r
  5982. 'u-select--border': border\r
  5983. }" @tap.stop="selectHandler">\r
  5984. <view class="u-select__action__icon" :class="{\r
  5985. 'u-select__action__icon--reverse': value == true\r
  5986. }">\r
  5987. <u-icon name="arrow-down-fill" size="26" color="var(--u-light-color)"></u-icon>\r
  5988. </view>\r
  5989. </view> `),
  5990. vue.createVNode(_component_u_popup, {
  5991. maskCloseAble: _ctx.maskCloseAble,
  5992. mode: "bottom",
  5993. popup: false,
  5994. modelValue: $setup.popupValue,
  5995. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.popupValue = $event),
  5996. length: "auto",
  5997. safeAreaInsetBottom: _ctx.safeAreaInsetBottom,
  5998. onClose: $setup.close,
  5999. "z-index": $setup.uZIndex
  6000. }, {
  6001. default: vue.withCtx(() => [
  6002. vue.createElementVNode("view", { class: "u-select" }, [
  6003. vue.createElementVNode(
  6004. "view",
  6005. {
  6006. class: "u-select__header",
  6007. onTouchmove: _cache[3] || (_cache[3] = vue.withModifiers(() => {
  6008. }, ["stop", "prevent"]))
  6009. },
  6010. [
  6011. vue.createElementVNode(
  6012. "view",
  6013. {
  6014. class: "u-select__header__cancel u-select__header__btn",
  6015. style: vue.normalizeStyle({ color: _ctx.cancelColor }),
  6016. "hover-class": "u-hover-class",
  6017. "hover-stay-time": 150,
  6018. onClick: _cache[0] || (_cache[0] = ($event) => $setup.getResult("cancel"))
  6019. },
  6020. vue.toDisplayString(_ctx.cancelText),
  6021. 5
  6022. /* TEXT, STYLE */
  6023. ),
  6024. vue.createElementVNode(
  6025. "view",
  6026. { class: "u-select__header__title u-line-1" },
  6027. vue.toDisplayString(_ctx.title),
  6028. 1
  6029. /* TEXT */
  6030. ),
  6031. vue.createElementVNode(
  6032. "view",
  6033. {
  6034. class: "u-select__header__confirm u-select__header__btn",
  6035. style: vue.normalizeStyle({ color: $setup.moving ? _ctx.cancelColor : _ctx.confirmColor }),
  6036. "hover-class": "u-hover-class",
  6037. "hover-stay-time": 150,
  6038. onTouchmove: _cache[1] || (_cache[1] = vue.withModifiers(() => {
  6039. }, ["stop"])),
  6040. onClick: _cache[2] || (_cache[2] = vue.withModifiers(($event) => $setup.getResult("confirm"), ["stop"]))
  6041. },
  6042. vue.toDisplayString(_ctx.confirmText),
  6043. 37
  6044. /* TEXT, STYLE, NEED_HYDRATION */
  6045. )
  6046. ],
  6047. 32
  6048. /* NEED_HYDRATION */
  6049. ),
  6050. vue.createElementVNode("view", { class: "u-select__body" }, [
  6051. _ctx.modelValue && $setup.readyToRender ? (vue.openBlock(), vue.createElementBlock("picker-view", {
  6052. key: 0,
  6053. value: $setup.defaultSelector,
  6054. class: "u-select__body__picker-view",
  6055. "mask-class": "u-picker-view-mask",
  6056. "indicator-class": "u-picker-view-indicator",
  6057. onPickstart: $setup.pickstart,
  6058. onPickend: $setup.pickend,
  6059. onChange: $setup.columnChange
  6060. }, [
  6061. (vue.openBlock(true), vue.createElementBlock(
  6062. vue.Fragment,
  6063. null,
  6064. vue.renderList($setup.columnData, (item, index) => {
  6065. return vue.openBlock(), vue.createElementBlock("picker-view-column", { key: index }, [
  6066. (vue.openBlock(true), vue.createElementBlock(
  6067. vue.Fragment,
  6068. null,
  6069. vue.renderList(item, (item1, index1) => {
  6070. return vue.openBlock(), vue.createElementBlock("view", {
  6071. class: "u-select__body__picker-view__item",
  6072. key: index1
  6073. }, [
  6074. vue.createElementVNode(
  6075. "view",
  6076. { class: "u-line-1" },
  6077. vue.toDisplayString(item1[_ctx.labelName]),
  6078. 1
  6079. /* TEXT */
  6080. )
  6081. ]);
  6082. }),
  6083. 128
  6084. /* KEYED_FRAGMENT */
  6085. ))
  6086. ]);
  6087. }),
  6088. 128
  6089. /* KEYED_FRAGMENT */
  6090. ))
  6091. ], 40, ["value"])) : vue.createCommentVNode("v-if", true)
  6092. ])
  6093. ])
  6094. ]),
  6095. _: 1
  6096. /* STABLE */
  6097. }, 8, ["maskCloseAble", "modelValue", "safeAreaInsetBottom", "z-index"])
  6098. ],
  6099. 6
  6100. /* CLASS, STYLE */
  6101. );
  6102. }
  6103. const __unplugin_components_5$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1k, [["render", _sfc_render$1j], ["__scopeId", "data-v-2e60fab0"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-select/u-select.vue"]]);
  6104. const ON_SHOW = "onShow";
  6105. const ON_HIDE = "onHide";
  6106. const ON_LAUNCH = "onLaunch";
  6107. const ON_LOAD = "onLoad";
  6108. function formatAppLog(type2, filename, ...args) {
  6109. if (uni.__log__) {
  6110. uni.__log__(type2, filename, ...args);
  6111. } else {
  6112. console[type2].apply(console, [...args, filename]);
  6113. }
  6114. }
  6115. function resolveEasycom(component, easycom) {
  6116. return typeof component === "string" ? easycom : component;
  6117. }
  6118. const createHook$1 = (lifecycle) => (hook, target = vue.getCurrentInstance()) => {
  6119. !vue.isInSSRComponentSetup && vue.injectHook(lifecycle, hook, target);
  6120. };
  6121. const onShow = /* @__PURE__ */ createHook$1(ON_SHOW);
  6122. const onHide = /* @__PURE__ */ createHook$1(ON_HIDE);
  6123. const onLaunch = /* @__PURE__ */ createHook$1(ON_LAUNCH);
  6124. const onLoad = /* @__PURE__ */ createHook$1(ON_LOAD);
  6125. /*!
  6126. * @intlify/shared v9.1.9
  6127. * (c) 2021 kazuya kawaguchi
  6128. * Released under the MIT License.
  6129. */
  6130. const inBrowser = typeof window !== "undefined";
  6131. let mark;
  6132. let measure;
  6133. {
  6134. const perf2 = inBrowser && window.performance;
  6135. if (perf2 && perf2.mark && perf2.measure && perf2.clearMarks && perf2.clearMeasures) {
  6136. mark = (tag) => perf2.mark(tag);
  6137. measure = (name, startTag, endTag) => {
  6138. perf2.measure(name, startTag, endTag);
  6139. perf2.clearMarks(startTag);
  6140. perf2.clearMarks(endTag);
  6141. };
  6142. }
  6143. }
  6144. const RE_ARGS$1 = /\{([0-9a-zA-Z]+)\}/g;
  6145. function format$2(message, ...args) {
  6146. if (args.length === 1 && isObject$5(args[0])) {
  6147. args = args[0];
  6148. }
  6149. if (!args || !args.hasOwnProperty) {
  6150. args = {};
  6151. }
  6152. return message.replace(RE_ARGS$1, (match, identifier) => {
  6153. return args.hasOwnProperty(identifier) ? args[identifier] : "";
  6154. });
  6155. }
  6156. const hasSymbol = typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol";
  6157. const makeSymbol = (name) => hasSymbol ? Symbol(name) : name;
  6158. const generateFormatCacheKey = (locale, key, source) => friendlyJSONstringify({ l: locale, k: key, s: source });
  6159. const friendlyJSONstringify = (json) => JSON.stringify(json).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/\u0027/g, "\\u0027");
  6160. const isNumber$1 = (val) => typeof val === "number" && isFinite(val);
  6161. const isDate = (val) => toTypeString$1(val) === "[object Date]";
  6162. const isRegExp = (val) => toTypeString$1(val) === "[object RegExp]";
  6163. const isEmptyObject = (val) => isPlainObject$2(val) && Object.keys(val).length === 0;
  6164. function warn$1(msg, err) {
  6165. if (typeof console !== "undefined") {
  6166. console.warn(`[intlify] ` + msg);
  6167. if (err) {
  6168. console.warn(err.stack);
  6169. }
  6170. }
  6171. }
  6172. const assign$2 = Object.assign;
  6173. let _globalThis;
  6174. const getGlobalThis = () => {
  6175. return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {});
  6176. };
  6177. function escapeHtml(rawText) {
  6178. return rawText.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
  6179. }
  6180. const hasOwnProperty$2 = Object.prototype.hasOwnProperty;
  6181. function hasOwn$2(obj, key) {
  6182. return hasOwnProperty$2.call(obj, key);
  6183. }
  6184. const isArray$2 = Array.isArray;
  6185. const isFunction$2 = (val) => typeof val === "function";
  6186. const isString$2 = (val) => typeof val === "string";
  6187. const isBoolean = (val) => typeof val === "boolean";
  6188. const isObject$5 = (val) => (
  6189. // eslint-disable-line
  6190. val !== null && typeof val === "object"
  6191. );
  6192. const objectToString$1 = Object.prototype.toString;
  6193. const toTypeString$1 = (value) => objectToString$1.call(value);
  6194. const isPlainObject$2 = (val) => toTypeString$1(val) === "[object Object]";
  6195. const RANGE = 2;
  6196. function generateCodeFrame(source, start = 0, end = source.length) {
  6197. const lines = source.split(/\r?\n/);
  6198. let count = 0;
  6199. const res = [];
  6200. for (let i = 0; i < lines.length; i++) {
  6201. count += lines[i].length + 1;
  6202. if (count >= start) {
  6203. for (let j = i - RANGE; j <= i + RANGE || end > count; j++) {
  6204. if (j < 0 || j >= lines.length)
  6205. continue;
  6206. const line = j + 1;
  6207. res.push(`${line}${" ".repeat(3 - String(line).length)}| ${lines[j]}`);
  6208. const lineLength = lines[j].length;
  6209. if (j === i) {
  6210. const pad = start - (count - lineLength) + 1;
  6211. const length = Math.max(1, end > count ? lineLength - pad : end - start);
  6212. res.push(` | ` + " ".repeat(pad) + "^".repeat(length));
  6213. } else if (j > i) {
  6214. if (end > count) {
  6215. const length = Math.max(Math.min(end - count, lineLength), 1);
  6216. res.push(` | ` + "^".repeat(length));
  6217. }
  6218. count += lineLength + 1;
  6219. }
  6220. }
  6221. break;
  6222. }
  6223. }
  6224. return res.join("\n");
  6225. }
  6226. function createEmitter() {
  6227. const events = /* @__PURE__ */ new Map();
  6228. const emitter = {
  6229. events,
  6230. on(event, handler) {
  6231. const handlers = events.get(event);
  6232. const added = handlers && handlers.push(handler);
  6233. if (!added) {
  6234. events.set(event, [handler]);
  6235. }
  6236. },
  6237. off(event, handler) {
  6238. const handlers = events.get(event);
  6239. if (handlers) {
  6240. handlers.splice(handlers.indexOf(handler) >>> 0, 1);
  6241. }
  6242. },
  6243. emit(event, payload) {
  6244. (events.get(event) || []).slice().map((handler) => handler(payload));
  6245. (events.get("*") || []).slice().map((handler) => handler(event, payload));
  6246. }
  6247. };
  6248. return emitter;
  6249. }
  6250. /*!
  6251. * @intlify/message-resolver v9.1.10
  6252. * (c) 2022 kazuya kawaguchi
  6253. * Released under the MIT License.
  6254. */
  6255. const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
  6256. function hasOwn$1(obj, key) {
  6257. return hasOwnProperty$1.call(obj, key);
  6258. }
  6259. const isObject$4 = (val) => (
  6260. // eslint-disable-line
  6261. val !== null && typeof val === "object"
  6262. );
  6263. const pathStateMachine = [];
  6264. pathStateMachine[
  6265. 0
  6266. /* BEFORE_PATH */
  6267. ] = {
  6268. [
  6269. "w"
  6270. /* WORKSPACE */
  6271. ]: [
  6272. 0
  6273. /* BEFORE_PATH */
  6274. ],
  6275. [
  6276. "i"
  6277. /* IDENT */
  6278. ]: [
  6279. 3,
  6280. 0
  6281. /* APPEND */
  6282. ],
  6283. [
  6284. "["
  6285. /* LEFT_BRACKET */
  6286. ]: [
  6287. 4
  6288. /* IN_SUB_PATH */
  6289. ],
  6290. [
  6291. "o"
  6292. /* END_OF_FAIL */
  6293. ]: [
  6294. 7
  6295. /* AFTER_PATH */
  6296. ]
  6297. };
  6298. pathStateMachine[
  6299. 1
  6300. /* IN_PATH */
  6301. ] = {
  6302. [
  6303. "w"
  6304. /* WORKSPACE */
  6305. ]: [
  6306. 1
  6307. /* IN_PATH */
  6308. ],
  6309. [
  6310. "."
  6311. /* DOT */
  6312. ]: [
  6313. 2
  6314. /* BEFORE_IDENT */
  6315. ],
  6316. [
  6317. "["
  6318. /* LEFT_BRACKET */
  6319. ]: [
  6320. 4
  6321. /* IN_SUB_PATH */
  6322. ],
  6323. [
  6324. "o"
  6325. /* END_OF_FAIL */
  6326. ]: [
  6327. 7
  6328. /* AFTER_PATH */
  6329. ]
  6330. };
  6331. pathStateMachine[
  6332. 2
  6333. /* BEFORE_IDENT */
  6334. ] = {
  6335. [
  6336. "w"
  6337. /* WORKSPACE */
  6338. ]: [
  6339. 2
  6340. /* BEFORE_IDENT */
  6341. ],
  6342. [
  6343. "i"
  6344. /* IDENT */
  6345. ]: [
  6346. 3,
  6347. 0
  6348. /* APPEND */
  6349. ],
  6350. [
  6351. "0"
  6352. /* ZERO */
  6353. ]: [
  6354. 3,
  6355. 0
  6356. /* APPEND */
  6357. ]
  6358. };
  6359. pathStateMachine[
  6360. 3
  6361. /* IN_IDENT */
  6362. ] = {
  6363. [
  6364. "i"
  6365. /* IDENT */
  6366. ]: [
  6367. 3,
  6368. 0
  6369. /* APPEND */
  6370. ],
  6371. [
  6372. "0"
  6373. /* ZERO */
  6374. ]: [
  6375. 3,
  6376. 0
  6377. /* APPEND */
  6378. ],
  6379. [
  6380. "w"
  6381. /* WORKSPACE */
  6382. ]: [
  6383. 1,
  6384. 1
  6385. /* PUSH */
  6386. ],
  6387. [
  6388. "."
  6389. /* DOT */
  6390. ]: [
  6391. 2,
  6392. 1
  6393. /* PUSH */
  6394. ],
  6395. [
  6396. "["
  6397. /* LEFT_BRACKET */
  6398. ]: [
  6399. 4,
  6400. 1
  6401. /* PUSH */
  6402. ],
  6403. [
  6404. "o"
  6405. /* END_OF_FAIL */
  6406. ]: [
  6407. 7,
  6408. 1
  6409. /* PUSH */
  6410. ]
  6411. };
  6412. pathStateMachine[
  6413. 4
  6414. /* IN_SUB_PATH */
  6415. ] = {
  6416. [
  6417. "'"
  6418. /* SINGLE_QUOTE */
  6419. ]: [
  6420. 5,
  6421. 0
  6422. /* APPEND */
  6423. ],
  6424. [
  6425. '"'
  6426. /* DOUBLE_QUOTE */
  6427. ]: [
  6428. 6,
  6429. 0
  6430. /* APPEND */
  6431. ],
  6432. [
  6433. "["
  6434. /* LEFT_BRACKET */
  6435. ]: [
  6436. 4,
  6437. 2
  6438. /* INC_SUB_PATH_DEPTH */
  6439. ],
  6440. [
  6441. "]"
  6442. /* RIGHT_BRACKET */
  6443. ]: [
  6444. 1,
  6445. 3
  6446. /* PUSH_SUB_PATH */
  6447. ],
  6448. [
  6449. "o"
  6450. /* END_OF_FAIL */
  6451. ]: 8,
  6452. [
  6453. "l"
  6454. /* ELSE */
  6455. ]: [
  6456. 4,
  6457. 0
  6458. /* APPEND */
  6459. ]
  6460. };
  6461. pathStateMachine[
  6462. 5
  6463. /* IN_SINGLE_QUOTE */
  6464. ] = {
  6465. [
  6466. "'"
  6467. /* SINGLE_QUOTE */
  6468. ]: [
  6469. 4,
  6470. 0
  6471. /* APPEND */
  6472. ],
  6473. [
  6474. "o"
  6475. /* END_OF_FAIL */
  6476. ]: 8,
  6477. [
  6478. "l"
  6479. /* ELSE */
  6480. ]: [
  6481. 5,
  6482. 0
  6483. /* APPEND */
  6484. ]
  6485. };
  6486. pathStateMachine[
  6487. 6
  6488. /* IN_DOUBLE_QUOTE */
  6489. ] = {
  6490. [
  6491. '"'
  6492. /* DOUBLE_QUOTE */
  6493. ]: [
  6494. 4,
  6495. 0
  6496. /* APPEND */
  6497. ],
  6498. [
  6499. "o"
  6500. /* END_OF_FAIL */
  6501. ]: 8,
  6502. [
  6503. "l"
  6504. /* ELSE */
  6505. ]: [
  6506. 6,
  6507. 0
  6508. /* APPEND */
  6509. ]
  6510. };
  6511. const literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;
  6512. function isLiteral(exp) {
  6513. return literalValueRE.test(exp);
  6514. }
  6515. function stripQuotes(str) {
  6516. const a = str.charCodeAt(0);
  6517. const b = str.charCodeAt(str.length - 1);
  6518. return a === b && (a === 34 || a === 39) ? str.slice(1, -1) : str;
  6519. }
  6520. function getPathCharType(ch) {
  6521. if (ch === void 0 || ch === null) {
  6522. return "o";
  6523. }
  6524. const code2 = ch.charCodeAt(0);
  6525. switch (code2) {
  6526. case 91:
  6527. case 93:
  6528. case 46:
  6529. case 34:
  6530. case 39:
  6531. return ch;
  6532. case 95:
  6533. case 36:
  6534. case 45:
  6535. return "i";
  6536. case 9:
  6537. case 10:
  6538. case 13:
  6539. case 160:
  6540. case 65279:
  6541. case 8232:
  6542. case 8233:
  6543. return "w";
  6544. }
  6545. return "i";
  6546. }
  6547. function formatSubPath(path) {
  6548. const trimmed = path.trim();
  6549. if (path.charAt(0) === "0" && isNaN(parseInt(path))) {
  6550. return false;
  6551. }
  6552. return isLiteral(trimmed) ? stripQuotes(trimmed) : "*" + trimmed;
  6553. }
  6554. function parse$1(path) {
  6555. const keys = [];
  6556. let index = -1;
  6557. let mode = 0;
  6558. let subPathDepth = 0;
  6559. let c2;
  6560. let key;
  6561. let newChar;
  6562. let type2;
  6563. let transition;
  6564. let action;
  6565. let typeMap;
  6566. const actions = [];
  6567. actions[
  6568. 0
  6569. /* APPEND */
  6570. ] = () => {
  6571. if (key === void 0) {
  6572. key = newChar;
  6573. } else {
  6574. key += newChar;
  6575. }
  6576. };
  6577. actions[
  6578. 1
  6579. /* PUSH */
  6580. ] = () => {
  6581. if (key !== void 0) {
  6582. keys.push(key);
  6583. key = void 0;
  6584. }
  6585. };
  6586. actions[
  6587. 2
  6588. /* INC_SUB_PATH_DEPTH */
  6589. ] = () => {
  6590. actions[
  6591. 0
  6592. /* APPEND */
  6593. ]();
  6594. subPathDepth++;
  6595. };
  6596. actions[
  6597. 3
  6598. /* PUSH_SUB_PATH */
  6599. ] = () => {
  6600. if (subPathDepth > 0) {
  6601. subPathDepth--;
  6602. mode = 4;
  6603. actions[
  6604. 0
  6605. /* APPEND */
  6606. ]();
  6607. } else {
  6608. subPathDepth = 0;
  6609. if (key === void 0) {
  6610. return false;
  6611. }
  6612. key = formatSubPath(key);
  6613. if (key === false) {
  6614. return false;
  6615. } else {
  6616. actions[
  6617. 1
  6618. /* PUSH */
  6619. ]();
  6620. }
  6621. }
  6622. };
  6623. function maybeUnescapeQuote() {
  6624. const nextChar = path[index + 1];
  6625. if (mode === 5 && nextChar === "'" || mode === 6 && nextChar === '"') {
  6626. index++;
  6627. newChar = "\\" + nextChar;
  6628. actions[
  6629. 0
  6630. /* APPEND */
  6631. ]();
  6632. return true;
  6633. }
  6634. }
  6635. while (mode !== null) {
  6636. index++;
  6637. c2 = path[index];
  6638. if (c2 === "\\" && maybeUnescapeQuote()) {
  6639. continue;
  6640. }
  6641. type2 = getPathCharType(c2);
  6642. typeMap = pathStateMachine[mode];
  6643. transition = typeMap[type2] || typeMap[
  6644. "l"
  6645. /* ELSE */
  6646. ] || 8;
  6647. if (transition === 8) {
  6648. return;
  6649. }
  6650. mode = transition[0];
  6651. if (transition[1] !== void 0) {
  6652. action = actions[transition[1]];
  6653. if (action) {
  6654. newChar = c2;
  6655. if (action() === false) {
  6656. return;
  6657. }
  6658. }
  6659. }
  6660. if (mode === 7) {
  6661. return keys;
  6662. }
  6663. }
  6664. }
  6665. const cache = /* @__PURE__ */ new Map();
  6666. function resolveValue(obj, path) {
  6667. if (!isObject$4(obj)) {
  6668. return null;
  6669. }
  6670. let hit = cache.get(path);
  6671. if (!hit) {
  6672. hit = parse$1(path);
  6673. if (hit) {
  6674. cache.set(path, hit);
  6675. }
  6676. }
  6677. if (!hit) {
  6678. return null;
  6679. }
  6680. const len = hit.length;
  6681. let last = obj;
  6682. let i = 0;
  6683. while (i < len) {
  6684. const val = last[hit[i]];
  6685. if (val === void 0) {
  6686. return null;
  6687. }
  6688. last = val;
  6689. i++;
  6690. }
  6691. return last;
  6692. }
  6693. function handleFlatJson(obj) {
  6694. if (!isObject$4(obj)) {
  6695. return obj;
  6696. }
  6697. for (const key in obj) {
  6698. if (!hasOwn$1(obj, key)) {
  6699. continue;
  6700. }
  6701. if (!key.includes(
  6702. "."
  6703. /* DOT */
  6704. )) {
  6705. if (isObject$4(obj[key])) {
  6706. handleFlatJson(obj[key]);
  6707. }
  6708. } else {
  6709. const subKeys = key.split(
  6710. "."
  6711. /* DOT */
  6712. );
  6713. const lastIndex = subKeys.length - 1;
  6714. let currentObj = obj;
  6715. for (let i = 0; i < lastIndex; i++) {
  6716. if (!(subKeys[i] in currentObj)) {
  6717. currentObj[subKeys[i]] = {};
  6718. }
  6719. currentObj = currentObj[subKeys[i]];
  6720. }
  6721. currentObj[subKeys[lastIndex]] = obj[key];
  6722. delete obj[key];
  6723. if (isObject$4(currentObj[subKeys[lastIndex]])) {
  6724. handleFlatJson(currentObj[subKeys[lastIndex]]);
  6725. }
  6726. }
  6727. }
  6728. return obj;
  6729. }
  6730. /*!
  6731. * @intlify/shared v9.1.9
  6732. * (c) 2021 kazuya kawaguchi
  6733. * Released under the MIT License.
  6734. */
  6735. const RE_ARGS = /\{([0-9a-zA-Z]+)\}/g;
  6736. function format$1(message, ...args) {
  6737. if (args.length === 1 && isObject$3(args[0])) {
  6738. args = args[0];
  6739. }
  6740. if (!args || !args.hasOwnProperty) {
  6741. args = {};
  6742. }
  6743. return message.replace(RE_ARGS, (match, identifier) => {
  6744. return args.hasOwnProperty(identifier) ? args[identifier] : "";
  6745. });
  6746. }
  6747. const isNumber = (val) => typeof val === "number" && isFinite(val);
  6748. const isArray$1 = Array.isArray;
  6749. const isFunction$1 = (val) => typeof val === "function";
  6750. const isString$1 = (val) => typeof val === "string";
  6751. const isObject$3 = (val) => (
  6752. // eslint-disable-line
  6753. val !== null && typeof val === "object"
  6754. );
  6755. const objectToString = Object.prototype.toString;
  6756. const toTypeString = (value) => objectToString.call(value);
  6757. const isPlainObject$1 = (val) => toTypeString(val) === "[object Object]";
  6758. const toDisplayString = (val) => {
  6759. return val == null ? "" : isArray$1(val) || isPlainObject$1(val) && val.toString === objectToString ? JSON.stringify(val, null, 2) : String(val);
  6760. };
  6761. /*!
  6762. * @intlify/runtime v9.1.10
  6763. * (c) 2022 kazuya kawaguchi
  6764. * Released under the MIT License.
  6765. */
  6766. const DEFAULT_MODIFIER = (str) => str;
  6767. const DEFAULT_MESSAGE = (ctx) => "";
  6768. const DEFAULT_MESSAGE_DATA_TYPE = "text";
  6769. const DEFAULT_NORMALIZE = (values) => values.length === 0 ? "" : values.join("");
  6770. const DEFAULT_INTERPOLATE = toDisplayString;
  6771. function pluralDefault(choice, choicesLength) {
  6772. choice = Math.abs(choice);
  6773. if (choicesLength === 2) {
  6774. return choice ? choice > 1 ? 1 : 0 : 1;
  6775. }
  6776. return choice ? Math.min(choice, 2) : 0;
  6777. }
  6778. function getPluralIndex(options) {
  6779. const index = isNumber(options.pluralIndex) ? options.pluralIndex : -1;
  6780. return options.named && (isNumber(options.named.count) || isNumber(options.named.n)) ? isNumber(options.named.count) ? options.named.count : isNumber(options.named.n) ? options.named.n : index : index;
  6781. }
  6782. function normalizeNamed(pluralIndex, props) {
  6783. if (!props.count) {
  6784. props.count = pluralIndex;
  6785. }
  6786. if (!props.n) {
  6787. props.n = pluralIndex;
  6788. }
  6789. }
  6790. function createMessageContext(options = {}) {
  6791. const locale = options.locale;
  6792. const pluralIndex = getPluralIndex(options);
  6793. const pluralRule = isObject$3(options.pluralRules) && isString$1(locale) && isFunction$1(options.pluralRules[locale]) ? options.pluralRules[locale] : pluralDefault;
  6794. const orgPluralRule = isObject$3(options.pluralRules) && isString$1(locale) && isFunction$1(options.pluralRules[locale]) ? pluralDefault : void 0;
  6795. const plural = (messages2) => messages2[pluralRule(pluralIndex, messages2.length, orgPluralRule)];
  6796. const _list = options.list || [];
  6797. const list2 = (index) => _list[index];
  6798. const _named = options.named || {};
  6799. isNumber(options.pluralIndex) && normalizeNamed(pluralIndex, _named);
  6800. const named = (key) => _named[key];
  6801. function message(key) {
  6802. const msg = isFunction$1(options.messages) ? options.messages(key) : isObject$3(options.messages) ? options.messages[key] : false;
  6803. return !msg ? options.parent ? options.parent.message(key) : DEFAULT_MESSAGE : msg;
  6804. }
  6805. const _modifier = (name) => options.modifiers ? options.modifiers[name] : DEFAULT_MODIFIER;
  6806. const normalize = isPlainObject$1(options.processor) && isFunction$1(options.processor.normalize) ? options.processor.normalize : DEFAULT_NORMALIZE;
  6807. const interpolate = isPlainObject$1(options.processor) && isFunction$1(options.processor.interpolate) ? options.processor.interpolate : DEFAULT_INTERPOLATE;
  6808. const type2 = isPlainObject$1(options.processor) && isString$1(options.processor.type) ? options.processor.type : DEFAULT_MESSAGE_DATA_TYPE;
  6809. const ctx = {
  6810. [
  6811. "list"
  6812. /* LIST */
  6813. ]: list2,
  6814. [
  6815. "named"
  6816. /* NAMED */
  6817. ]: named,
  6818. [
  6819. "plural"
  6820. /* PLURAL */
  6821. ]: plural,
  6822. [
  6823. "linked"
  6824. /* LINKED */
  6825. ]: (key, modifier) => {
  6826. const msg = message(key)(ctx);
  6827. return isString$1(modifier) ? _modifier(modifier)(msg) : msg;
  6828. },
  6829. [
  6830. "message"
  6831. /* MESSAGE */
  6832. ]: message,
  6833. [
  6834. "type"
  6835. /* TYPE */
  6836. ]: type2,
  6837. [
  6838. "interpolate"
  6839. /* INTERPOLATE */
  6840. ]: interpolate,
  6841. [
  6842. "normalize"
  6843. /* NORMALIZE */
  6844. ]: normalize
  6845. };
  6846. return ctx;
  6847. }
  6848. /*!
  6849. * @intlify/message-compiler v9.1.10
  6850. * (c) 2022 kazuya kawaguchi
  6851. * Released under the MIT License.
  6852. */
  6853. const errorMessages$2 = {
  6854. // tokenizer error messages
  6855. [
  6856. 0
  6857. /* EXPECTED_TOKEN */
  6858. ]: `Expected token: '{0}'`,
  6859. [
  6860. 1
  6861. /* INVALID_TOKEN_IN_PLACEHOLDER */
  6862. ]: `Invalid token in placeholder: '{0}'`,
  6863. [
  6864. 2
  6865. /* UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER */
  6866. ]: `Unterminated single quote in placeholder`,
  6867. [
  6868. 3
  6869. /* UNKNOWN_ESCAPE_SEQUENCE */
  6870. ]: `Unknown escape sequence: \\{0}`,
  6871. [
  6872. 4
  6873. /* INVALID_UNICODE_ESCAPE_SEQUENCE */
  6874. ]: `Invalid unicode escape sequence: {0}`,
  6875. [
  6876. 5
  6877. /* UNBALANCED_CLOSING_BRACE */
  6878. ]: `Unbalanced closing brace`,
  6879. [
  6880. 6
  6881. /* UNTERMINATED_CLOSING_BRACE */
  6882. ]: `Unterminated closing brace`,
  6883. [
  6884. 7
  6885. /* EMPTY_PLACEHOLDER */
  6886. ]: `Empty placeholder`,
  6887. [
  6888. 8
  6889. /* NOT_ALLOW_NEST_PLACEHOLDER */
  6890. ]: `Not allowed nest placeholder`,
  6891. [
  6892. 9
  6893. /* INVALID_LINKED_FORMAT */
  6894. ]: `Invalid linked format`,
  6895. // parser error messages
  6896. [
  6897. 10
  6898. /* MUST_HAVE_MESSAGES_IN_PLURAL */
  6899. ]: `Plural must have messages`,
  6900. [
  6901. 11
  6902. /* UNEXPECTED_EMPTY_LINKED_MODIFIER */
  6903. ]: `Unexpected empty linked modifier`,
  6904. [
  6905. 12
  6906. /* UNEXPECTED_EMPTY_LINKED_KEY */
  6907. ]: `Unexpected empty linked key`,
  6908. [
  6909. 13
  6910. /* UNEXPECTED_LEXICAL_ANALYSIS */
  6911. ]: `Unexpected lexical analysis in token: '{0}'`
  6912. };
  6913. function createCompileError(code2, loc, options = {}) {
  6914. const { domain, messages: messages2, args } = options;
  6915. const msg = format$1((messages2 || errorMessages$2)[code2] || "", ...args || []);
  6916. const error = new SyntaxError(String(msg));
  6917. error.code = code2;
  6918. error.domain = domain;
  6919. return error;
  6920. }
  6921. /*!
  6922. * @intlify/devtools-if v9.1.10
  6923. * (c) 2022 kazuya kawaguchi
  6924. * Released under the MIT License.
  6925. */
  6926. const IntlifyDevToolsHooks = {
  6927. I18nInit: "i18n:init",
  6928. FunctionTranslate: "function:translate"
  6929. };
  6930. /*!
  6931. * @intlify/core-base v9.1.9
  6932. * (c) 2021 kazuya kawaguchi
  6933. * Released under the MIT License.
  6934. */
  6935. let devtools = null;
  6936. function setDevToolsHook(hook) {
  6937. devtools = hook;
  6938. }
  6939. function initI18nDevTools(i18n2, version2, meta) {
  6940. devtools && devtools.emit(IntlifyDevToolsHooks.I18nInit, {
  6941. timestamp: Date.now(),
  6942. i18n: i18n2,
  6943. version: version2,
  6944. meta
  6945. });
  6946. }
  6947. const translateDevTools = /* @__PURE__ */ createDevToolsHook(IntlifyDevToolsHooks.FunctionTranslate);
  6948. function createDevToolsHook(hook) {
  6949. return (payloads) => devtools && devtools.emit(hook, payloads);
  6950. }
  6951. const warnMessages$1 = {
  6952. [
  6953. 0
  6954. /* NOT_FOUND_KEY */
  6955. ]: `Not found '{key}' key in '{locale}' locale messages.`,
  6956. [
  6957. 1
  6958. /* FALLBACK_TO_TRANSLATE */
  6959. ]: `Fall back to translate '{key}' key with '{target}' locale.`,
  6960. [
  6961. 2
  6962. /* CANNOT_FORMAT_NUMBER */
  6963. ]: `Cannot format a number value due to not supported Intl.NumberFormat.`,
  6964. [
  6965. 3
  6966. /* FALLBACK_TO_NUMBER_FORMAT */
  6967. ]: `Fall back to number format '{key}' key with '{target}' locale.`,
  6968. [
  6969. 4
  6970. /* CANNOT_FORMAT_DATE */
  6971. ]: `Cannot format a date value due to not supported Intl.DateTimeFormat.`,
  6972. [
  6973. 5
  6974. /* FALLBACK_TO_DATE_FORMAT */
  6975. ]: `Fall back to datetime format '{key}' key with '{target}' locale.`
  6976. };
  6977. function getWarnMessage$1(code2, ...args) {
  6978. return format$2(warnMessages$1[code2], ...args);
  6979. }
  6980. const VERSION$1 = "9.1.9";
  6981. const NOT_REOSLVED = -1;
  6982. const MISSING_RESOLVE_VALUE = "";
  6983. function getDefaultLinkedModifiers() {
  6984. return {
  6985. upper: (val) => isString$2(val) ? val.toUpperCase() : val,
  6986. lower: (val) => isString$2(val) ? val.toLowerCase() : val,
  6987. // prettier-ignore
  6988. capitalize: (val) => isString$2(val) ? `${val.charAt(0).toLocaleUpperCase()}${val.substr(1)}` : val
  6989. };
  6990. }
  6991. let _compiler;
  6992. let _additionalMeta = null;
  6993. const setAdditionalMeta = (meta) => {
  6994. _additionalMeta = meta;
  6995. };
  6996. const getAdditionalMeta = () => _additionalMeta;
  6997. let _cid = 0;
  6998. function createCoreContext(options = {}) {
  6999. const version2 = isString$2(options.version) ? options.version : VERSION$1;
  7000. const locale = isString$2(options.locale) ? options.locale : "en-US";
  7001. const fallbackLocale = isArray$2(options.fallbackLocale) || isPlainObject$2(options.fallbackLocale) || isString$2(options.fallbackLocale) || options.fallbackLocale === false ? options.fallbackLocale : locale;
  7002. const messages2 = isPlainObject$2(options.messages) ? options.messages : { [locale]: {} };
  7003. const datetimeFormats = isPlainObject$2(options.datetimeFormats) ? options.datetimeFormats : { [locale]: {} };
  7004. const numberFormats = isPlainObject$2(options.numberFormats) ? options.numberFormats : { [locale]: {} };
  7005. const modifiers = assign$2({}, options.modifiers || {}, getDefaultLinkedModifiers());
  7006. const pluralRules = options.pluralRules || {};
  7007. const missing = isFunction$2(options.missing) ? options.missing : null;
  7008. const missingWarn = isBoolean(options.missingWarn) || isRegExp(options.missingWarn) ? options.missingWarn : true;
  7009. const fallbackWarn = isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn) ? options.fallbackWarn : true;
  7010. const fallbackFormat = !!options.fallbackFormat;
  7011. const unresolving = !!options.unresolving;
  7012. const postTranslation = isFunction$2(options.postTranslation) ? options.postTranslation : null;
  7013. const processor = isPlainObject$2(options.processor) ? options.processor : null;
  7014. const warnHtmlMessage = isBoolean(options.warnHtmlMessage) ? options.warnHtmlMessage : true;
  7015. const escapeParameter = !!options.escapeParameter;
  7016. const messageCompiler = isFunction$2(options.messageCompiler) ? options.messageCompiler : _compiler;
  7017. const onWarn = isFunction$2(options.onWarn) ? options.onWarn : warn$1;
  7018. const internalOptions = options;
  7019. const __datetimeFormatters = isObject$5(internalOptions.__datetimeFormatters) ? internalOptions.__datetimeFormatters : /* @__PURE__ */ new Map();
  7020. const __numberFormatters = isObject$5(internalOptions.__numberFormatters) ? internalOptions.__numberFormatters : /* @__PURE__ */ new Map();
  7021. const __meta = isObject$5(internalOptions.__meta) ? internalOptions.__meta : {};
  7022. _cid++;
  7023. const context = {
  7024. version: version2,
  7025. cid: _cid,
  7026. locale,
  7027. fallbackLocale,
  7028. messages: messages2,
  7029. datetimeFormats,
  7030. numberFormats,
  7031. modifiers,
  7032. pluralRules,
  7033. missing,
  7034. missingWarn,
  7035. fallbackWarn,
  7036. fallbackFormat,
  7037. unresolving,
  7038. postTranslation,
  7039. processor,
  7040. warnHtmlMessage,
  7041. escapeParameter,
  7042. messageCompiler,
  7043. onWarn,
  7044. __datetimeFormatters,
  7045. __numberFormatters,
  7046. __meta
  7047. };
  7048. {
  7049. context.__v_emitter = internalOptions.__v_emitter != null ? internalOptions.__v_emitter : void 0;
  7050. }
  7051. {
  7052. initI18nDevTools(context, version2, __meta);
  7053. }
  7054. return context;
  7055. }
  7056. function isTranslateFallbackWarn(fallback, key) {
  7057. return fallback instanceof RegExp ? fallback.test(key) : fallback;
  7058. }
  7059. function isTranslateMissingWarn(missing, key) {
  7060. return missing instanceof RegExp ? missing.test(key) : missing;
  7061. }
  7062. function handleMissing(context, key, locale, missingWarn, type2) {
  7063. const { missing, onWarn } = context;
  7064. {
  7065. const emitter = context.__v_emitter;
  7066. if (emitter) {
  7067. emitter.emit("missing", {
  7068. locale,
  7069. key,
  7070. type: type2,
  7071. groupId: `${type2}:${key}`
  7072. });
  7073. }
  7074. }
  7075. if (missing !== null) {
  7076. const ret = missing(context, locale, key, type2);
  7077. return isString$2(ret) ? ret : key;
  7078. } else {
  7079. if (isTranslateMissingWarn(missingWarn, key)) {
  7080. onWarn(getWarnMessage$1(0, { key, locale }));
  7081. }
  7082. return key;
  7083. }
  7084. }
  7085. function getLocaleChain(ctx, fallback, start) {
  7086. const context = ctx;
  7087. if (!context.__localeChainCache) {
  7088. context.__localeChainCache = /* @__PURE__ */ new Map();
  7089. }
  7090. let chain = context.__localeChainCache.get(start);
  7091. if (!chain) {
  7092. chain = [];
  7093. let block = [start];
  7094. while (isArray$2(block)) {
  7095. block = appendBlockToChain(chain, block, fallback);
  7096. }
  7097. const defaults = isArray$2(fallback) ? fallback : isPlainObject$2(fallback) ? fallback["default"] ? fallback["default"] : null : fallback;
  7098. block = isString$2(defaults) ? [defaults] : defaults;
  7099. if (isArray$2(block)) {
  7100. appendBlockToChain(chain, block, false);
  7101. }
  7102. context.__localeChainCache.set(start, chain);
  7103. }
  7104. return chain;
  7105. }
  7106. function appendBlockToChain(chain, block, blocks) {
  7107. let follow = true;
  7108. for (let i = 0; i < block.length && isBoolean(follow); i++) {
  7109. const locale = block[i];
  7110. if (isString$2(locale)) {
  7111. follow = appendLocaleToChain(chain, block[i], blocks);
  7112. }
  7113. }
  7114. return follow;
  7115. }
  7116. function appendLocaleToChain(chain, locale, blocks) {
  7117. let follow;
  7118. const tokens = locale.split("-");
  7119. do {
  7120. const target = tokens.join("-");
  7121. follow = appendItemToChain(chain, target, blocks);
  7122. tokens.splice(-1, 1);
  7123. } while (tokens.length && follow === true);
  7124. return follow;
  7125. }
  7126. function appendItemToChain(chain, target, blocks) {
  7127. let follow = false;
  7128. if (!chain.includes(target)) {
  7129. follow = true;
  7130. if (target) {
  7131. follow = target[target.length - 1] !== "!";
  7132. const locale = target.replace(/!/g, "");
  7133. chain.push(locale);
  7134. if ((isArray$2(blocks) || isPlainObject$2(blocks)) && blocks[locale]) {
  7135. follow = blocks[locale];
  7136. }
  7137. }
  7138. }
  7139. return follow;
  7140. }
  7141. function updateFallbackLocale(ctx, locale, fallback) {
  7142. const context = ctx;
  7143. context.__localeChainCache = /* @__PURE__ */ new Map();
  7144. getLocaleChain(ctx, fallback, locale);
  7145. }
  7146. function createCoreError(code2) {
  7147. return createCompileError(code2, null, { messages: errorMessages$1 });
  7148. }
  7149. const errorMessages$1 = {
  7150. [
  7151. 14
  7152. /* INVALID_ARGUMENT */
  7153. ]: "Invalid arguments",
  7154. [
  7155. 15
  7156. /* INVALID_DATE_ARGUMENT */
  7157. ]: "The date provided is an invalid Date object.Make sure your Date represents a valid date.",
  7158. [
  7159. 16
  7160. /* INVALID_ISO_DATE_ARGUMENT */
  7161. ]: "The argument provided is not a valid ISO date string"
  7162. };
  7163. const NOOP_MESSAGE_FUNCTION = () => "";
  7164. const isMessageFunction = (val) => isFunction$2(val);
  7165. function translate(context, ...args) {
  7166. const { fallbackFormat, postTranslation, unresolving, fallbackLocale, messages: messages2 } = context;
  7167. const [key, options] = parseTranslateArgs(...args);
  7168. const missingWarn = isBoolean(options.missingWarn) ? options.missingWarn : context.missingWarn;
  7169. const fallbackWarn = isBoolean(options.fallbackWarn) ? options.fallbackWarn : context.fallbackWarn;
  7170. const escapeParameter = isBoolean(options.escapeParameter) ? options.escapeParameter : context.escapeParameter;
  7171. const resolvedMessage = !!options.resolvedMessage;
  7172. const defaultMsgOrKey = isString$2(options.default) || isBoolean(options.default) ? !isBoolean(options.default) ? options.default : key : fallbackFormat ? key : "";
  7173. const enableDefaultMsg = fallbackFormat || defaultMsgOrKey !== "";
  7174. const locale = isString$2(options.locale) ? options.locale : context.locale;
  7175. escapeParameter && escapeParams(options);
  7176. let [format2, targetLocale, message] = !resolvedMessage ? resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn) : [
  7177. key,
  7178. locale,
  7179. messages2[locale] || {}
  7180. ];
  7181. let cacheBaseKey = key;
  7182. if (!resolvedMessage && !(isString$2(format2) || isMessageFunction(format2))) {
  7183. if (enableDefaultMsg) {
  7184. format2 = defaultMsgOrKey;
  7185. cacheBaseKey = format2;
  7186. }
  7187. }
  7188. if (!resolvedMessage && (!(isString$2(format2) || isMessageFunction(format2)) || !isString$2(targetLocale))) {
  7189. return unresolving ? NOT_REOSLVED : key;
  7190. }
  7191. if (isString$2(format2) && context.messageCompiler == null) {
  7192. warn$1(`The message format compilation is not supported in this build. Because message compiler isn't included. You need to pre-compilation all message format. So translate function return '${key}'.`);
  7193. return key;
  7194. }
  7195. let occurred = false;
  7196. const errorDetector = () => {
  7197. occurred = true;
  7198. };
  7199. const msg = !isMessageFunction(format2) ? compileMessageFormat(context, key, targetLocale, format2, cacheBaseKey, errorDetector) : format2;
  7200. if (occurred) {
  7201. return format2;
  7202. }
  7203. const ctxOptions = getMessageContextOptions(context, targetLocale, message, options);
  7204. const msgContext = createMessageContext(ctxOptions);
  7205. const messaged = evaluateMessage(context, msg, msgContext);
  7206. const ret = postTranslation ? postTranslation(messaged) : messaged;
  7207. {
  7208. const payloads = {
  7209. timestamp: Date.now(),
  7210. key: isString$2(key) ? key : isMessageFunction(format2) ? format2.key : "",
  7211. locale: targetLocale || (isMessageFunction(format2) ? format2.locale : ""),
  7212. format: isString$2(format2) ? format2 : isMessageFunction(format2) ? format2.source : "",
  7213. message: ret
  7214. };
  7215. payloads.meta = assign$2({}, context.__meta, getAdditionalMeta() || {});
  7216. translateDevTools(payloads);
  7217. }
  7218. return ret;
  7219. }
  7220. function escapeParams(options) {
  7221. if (isArray$2(options.list)) {
  7222. options.list = options.list.map((item) => isString$2(item) ? escapeHtml(item) : item);
  7223. } else if (isObject$5(options.named)) {
  7224. Object.keys(options.named).forEach((key) => {
  7225. if (isString$2(options.named[key])) {
  7226. options.named[key] = escapeHtml(options.named[key]);
  7227. }
  7228. });
  7229. }
  7230. }
  7231. function resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn) {
  7232. const { messages: messages2, onWarn } = context;
  7233. const locales = getLocaleChain(context, fallbackLocale, locale);
  7234. let message = {};
  7235. let targetLocale;
  7236. let format2 = null;
  7237. let from = locale;
  7238. let to = null;
  7239. const type2 = "translate";
  7240. for (let i = 0; i < locales.length; i++) {
  7241. targetLocale = to = locales[i];
  7242. if (locale !== targetLocale && isTranslateFallbackWarn(fallbackWarn, key)) {
  7243. onWarn(getWarnMessage$1(1, {
  7244. key,
  7245. target: targetLocale
  7246. }));
  7247. }
  7248. if (locale !== targetLocale) {
  7249. const emitter = context.__v_emitter;
  7250. if (emitter) {
  7251. emitter.emit("fallback", {
  7252. type: type2,
  7253. key,
  7254. from,
  7255. to,
  7256. groupId: `${type2}:${key}`
  7257. });
  7258. }
  7259. }
  7260. message = messages2[targetLocale] || {};
  7261. let start = null;
  7262. let startTag;
  7263. let endTag;
  7264. if (inBrowser) {
  7265. start = window.performance.now();
  7266. startTag = "intlify-message-resolve-start";
  7267. endTag = "intlify-message-resolve-end";
  7268. mark && mark(startTag);
  7269. }
  7270. if ((format2 = resolveValue(message, key)) === null) {
  7271. format2 = message[key];
  7272. }
  7273. if (inBrowser) {
  7274. const end = window.performance.now();
  7275. const emitter = context.__v_emitter;
  7276. if (emitter && start && format2) {
  7277. emitter.emit("message-resolve", {
  7278. type: "message-resolve",
  7279. key,
  7280. message: format2,
  7281. time: end - start,
  7282. groupId: `${type2}:${key}`
  7283. });
  7284. }
  7285. if (startTag && endTag && mark && measure) {
  7286. mark(endTag);
  7287. measure("intlify message resolve", startTag, endTag);
  7288. }
  7289. }
  7290. if (isString$2(format2) || isFunction$2(format2))
  7291. break;
  7292. const missingRet = handleMissing(context, key, targetLocale, missingWarn, type2);
  7293. if (missingRet !== key) {
  7294. format2 = missingRet;
  7295. }
  7296. from = to;
  7297. }
  7298. return [format2, targetLocale, message];
  7299. }
  7300. function compileMessageFormat(context, key, targetLocale, format2, cacheBaseKey, errorDetector) {
  7301. const { messageCompiler, warnHtmlMessage } = context;
  7302. if (isMessageFunction(format2)) {
  7303. const msg2 = format2;
  7304. msg2.locale = msg2.locale || targetLocale;
  7305. msg2.key = msg2.key || key;
  7306. return msg2;
  7307. }
  7308. let start = null;
  7309. let startTag;
  7310. let endTag;
  7311. if (inBrowser) {
  7312. start = window.performance.now();
  7313. startTag = "intlify-message-compilation-start";
  7314. endTag = "intlify-message-compilation-end";
  7315. mark && mark(startTag);
  7316. }
  7317. const msg = messageCompiler(format2, getCompileOptions(context, targetLocale, cacheBaseKey, format2, warnHtmlMessage, errorDetector));
  7318. if (inBrowser) {
  7319. const end = window.performance.now();
  7320. const emitter = context.__v_emitter;
  7321. if (emitter && start) {
  7322. emitter.emit("message-compilation", {
  7323. type: "message-compilation",
  7324. message: format2,
  7325. time: end - start,
  7326. groupId: `${"translate"}:${key}`
  7327. });
  7328. }
  7329. if (startTag && endTag && mark && measure) {
  7330. mark(endTag);
  7331. measure("intlify message compilation", startTag, endTag);
  7332. }
  7333. }
  7334. msg.locale = targetLocale;
  7335. msg.key = key;
  7336. msg.source = format2;
  7337. return msg;
  7338. }
  7339. function evaluateMessage(context, msg, msgCtx) {
  7340. let start = null;
  7341. let startTag;
  7342. let endTag;
  7343. if (inBrowser) {
  7344. start = window.performance.now();
  7345. startTag = "intlify-message-evaluation-start";
  7346. endTag = "intlify-message-evaluation-end";
  7347. mark && mark(startTag);
  7348. }
  7349. const messaged = msg(msgCtx);
  7350. if (inBrowser) {
  7351. const end = window.performance.now();
  7352. const emitter = context.__v_emitter;
  7353. if (emitter && start) {
  7354. emitter.emit("message-evaluation", {
  7355. type: "message-evaluation",
  7356. value: messaged,
  7357. time: end - start,
  7358. groupId: `${"translate"}:${msg.key}`
  7359. });
  7360. }
  7361. if (startTag && endTag && mark && measure) {
  7362. mark(endTag);
  7363. measure("intlify message evaluation", startTag, endTag);
  7364. }
  7365. }
  7366. return messaged;
  7367. }
  7368. function parseTranslateArgs(...args) {
  7369. const [arg1, arg2, arg3] = args;
  7370. const options = {};
  7371. if (!isString$2(arg1) && !isNumber$1(arg1) && !isMessageFunction(arg1)) {
  7372. throw createCoreError(
  7373. 14
  7374. /* INVALID_ARGUMENT */
  7375. );
  7376. }
  7377. const key = isNumber$1(arg1) ? String(arg1) : isMessageFunction(arg1) ? arg1 : arg1;
  7378. if (isNumber$1(arg2)) {
  7379. options.plural = arg2;
  7380. } else if (isString$2(arg2)) {
  7381. options.default = arg2;
  7382. } else if (isPlainObject$2(arg2) && !isEmptyObject(arg2)) {
  7383. options.named = arg2;
  7384. } else if (isArray$2(arg2)) {
  7385. options.list = arg2;
  7386. }
  7387. if (isNumber$1(arg3)) {
  7388. options.plural = arg3;
  7389. } else if (isString$2(arg3)) {
  7390. options.default = arg3;
  7391. } else if (isPlainObject$2(arg3)) {
  7392. assign$2(options, arg3);
  7393. }
  7394. return [key, options];
  7395. }
  7396. function getCompileOptions(context, locale, key, source, warnHtmlMessage, errorDetector) {
  7397. return {
  7398. warnHtmlMessage,
  7399. onError: (err) => {
  7400. errorDetector && errorDetector(err);
  7401. {
  7402. const message = `Message compilation error: ${err.message}`;
  7403. const codeFrame = err.location && generateCodeFrame(source, err.location.start.offset, err.location.end.offset);
  7404. const emitter = context.__v_emitter;
  7405. if (emitter) {
  7406. emitter.emit("compile-error", {
  7407. message: source,
  7408. error: err.message,
  7409. start: err.location && err.location.start.offset,
  7410. end: err.location && err.location.end.offset,
  7411. groupId: `${"translate"}:${key}`
  7412. });
  7413. }
  7414. console.error(codeFrame ? `${message}
  7415. ${codeFrame}` : message);
  7416. }
  7417. },
  7418. onCacheKey: (source2) => generateFormatCacheKey(locale, key, source2)
  7419. };
  7420. }
  7421. function getMessageContextOptions(context, locale, message, options) {
  7422. const { modifiers, pluralRules } = context;
  7423. const resolveMessage = (key) => {
  7424. const val = resolveValue(message, key);
  7425. if (isString$2(val)) {
  7426. let occurred = false;
  7427. const errorDetector = () => {
  7428. occurred = true;
  7429. };
  7430. const msg = compileMessageFormat(context, key, locale, val, key, errorDetector);
  7431. return !occurred ? msg : NOOP_MESSAGE_FUNCTION;
  7432. } else if (isMessageFunction(val)) {
  7433. return val;
  7434. } else {
  7435. return NOOP_MESSAGE_FUNCTION;
  7436. }
  7437. };
  7438. const ctxOptions = {
  7439. locale,
  7440. modifiers,
  7441. pluralRules,
  7442. messages: resolveMessage
  7443. };
  7444. if (context.processor) {
  7445. ctxOptions.processor = context.processor;
  7446. }
  7447. if (options.list) {
  7448. ctxOptions.list = options.list;
  7449. }
  7450. if (options.named) {
  7451. ctxOptions.named = options.named;
  7452. }
  7453. if (isNumber$1(options.plural)) {
  7454. ctxOptions.pluralIndex = options.plural;
  7455. }
  7456. return ctxOptions;
  7457. }
  7458. const intlDefined = typeof Intl !== "undefined";
  7459. const Availabilities = {
  7460. dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== "undefined",
  7461. numberFormat: intlDefined && typeof Intl.NumberFormat !== "undefined"
  7462. };
  7463. function datetime(context, ...args) {
  7464. const { datetimeFormats, unresolving, fallbackLocale, onWarn } = context;
  7465. const { __datetimeFormatters } = context;
  7466. if (!Availabilities.dateTimeFormat) {
  7467. onWarn(getWarnMessage$1(
  7468. 4
  7469. /* CANNOT_FORMAT_DATE */
  7470. ));
  7471. return MISSING_RESOLVE_VALUE;
  7472. }
  7473. const [key, value, options, overrides] = parseDateTimeArgs(...args);
  7474. const missingWarn = isBoolean(options.missingWarn) ? options.missingWarn : context.missingWarn;
  7475. const fallbackWarn = isBoolean(options.fallbackWarn) ? options.fallbackWarn : context.fallbackWarn;
  7476. const part = !!options.part;
  7477. const locale = isString$2(options.locale) ? options.locale : context.locale;
  7478. const locales = getLocaleChain(context, fallbackLocale, locale);
  7479. if (!isString$2(key) || key === "") {
  7480. return new Intl.DateTimeFormat(locale).format(value);
  7481. }
  7482. let datetimeFormat = {};
  7483. let targetLocale;
  7484. let format2 = null;
  7485. let from = locale;
  7486. let to = null;
  7487. const type2 = "datetime format";
  7488. for (let i = 0; i < locales.length; i++) {
  7489. targetLocale = to = locales[i];
  7490. if (locale !== targetLocale && isTranslateFallbackWarn(fallbackWarn, key)) {
  7491. onWarn(getWarnMessage$1(5, {
  7492. key,
  7493. target: targetLocale
  7494. }));
  7495. }
  7496. if (locale !== targetLocale) {
  7497. const emitter = context.__v_emitter;
  7498. if (emitter) {
  7499. emitter.emit("fallback", {
  7500. type: type2,
  7501. key,
  7502. from,
  7503. to,
  7504. groupId: `${type2}:${key}`
  7505. });
  7506. }
  7507. }
  7508. datetimeFormat = datetimeFormats[targetLocale] || {};
  7509. format2 = datetimeFormat[key];
  7510. if (isPlainObject$2(format2))
  7511. break;
  7512. handleMissing(context, key, targetLocale, missingWarn, type2);
  7513. from = to;
  7514. }
  7515. if (!isPlainObject$2(format2) || !isString$2(targetLocale)) {
  7516. return unresolving ? NOT_REOSLVED : key;
  7517. }
  7518. let id = `${targetLocale}__${key}`;
  7519. if (!isEmptyObject(overrides)) {
  7520. id = `${id}__${JSON.stringify(overrides)}`;
  7521. }
  7522. let formatter = __datetimeFormatters.get(id);
  7523. if (!formatter) {
  7524. formatter = new Intl.DateTimeFormat(targetLocale, assign$2({}, format2, overrides));
  7525. __datetimeFormatters.set(id, formatter);
  7526. }
  7527. return !part ? formatter.format(value) : formatter.formatToParts(value);
  7528. }
  7529. function parseDateTimeArgs(...args) {
  7530. const [arg1, arg2, arg3, arg4] = args;
  7531. let options = {};
  7532. let overrides = {};
  7533. let value;
  7534. if (isString$2(arg1)) {
  7535. if (!/\d{4}-\d{2}-\d{2}(T.*)?/.test(arg1)) {
  7536. throw createCoreError(
  7537. 16
  7538. /* INVALID_ISO_DATE_ARGUMENT */
  7539. );
  7540. }
  7541. value = new Date(arg1);
  7542. try {
  7543. value.toISOString();
  7544. } catch (e) {
  7545. throw createCoreError(
  7546. 16
  7547. /* INVALID_ISO_DATE_ARGUMENT */
  7548. );
  7549. }
  7550. } else if (isDate(arg1)) {
  7551. if (isNaN(arg1.getTime())) {
  7552. throw createCoreError(
  7553. 15
  7554. /* INVALID_DATE_ARGUMENT */
  7555. );
  7556. }
  7557. value = arg1;
  7558. } else if (isNumber$1(arg1)) {
  7559. value = arg1;
  7560. } else {
  7561. throw createCoreError(
  7562. 14
  7563. /* INVALID_ARGUMENT */
  7564. );
  7565. }
  7566. if (isString$2(arg2)) {
  7567. options.key = arg2;
  7568. } else if (isPlainObject$2(arg2)) {
  7569. options = arg2;
  7570. }
  7571. if (isString$2(arg3)) {
  7572. options.locale = arg3;
  7573. } else if (isPlainObject$2(arg3)) {
  7574. overrides = arg3;
  7575. }
  7576. if (isPlainObject$2(arg4)) {
  7577. overrides = arg4;
  7578. }
  7579. return [options.key || "", value, options, overrides];
  7580. }
  7581. function clearDateTimeFormat(ctx, locale, format2) {
  7582. const context = ctx;
  7583. for (const key in format2) {
  7584. const id = `${locale}__${key}`;
  7585. if (!context.__datetimeFormatters.has(id)) {
  7586. continue;
  7587. }
  7588. context.__datetimeFormatters.delete(id);
  7589. }
  7590. }
  7591. function number$1(context, ...args) {
  7592. const { numberFormats, unresolving, fallbackLocale, onWarn } = context;
  7593. const { __numberFormatters } = context;
  7594. if (!Availabilities.numberFormat) {
  7595. onWarn(getWarnMessage$1(
  7596. 2
  7597. /* CANNOT_FORMAT_NUMBER */
  7598. ));
  7599. return MISSING_RESOLVE_VALUE;
  7600. }
  7601. const [key, value, options, overrides] = parseNumberArgs(...args);
  7602. const missingWarn = isBoolean(options.missingWarn) ? options.missingWarn : context.missingWarn;
  7603. const fallbackWarn = isBoolean(options.fallbackWarn) ? options.fallbackWarn : context.fallbackWarn;
  7604. const part = !!options.part;
  7605. const locale = isString$2(options.locale) ? options.locale : context.locale;
  7606. const locales = getLocaleChain(context, fallbackLocale, locale);
  7607. if (!isString$2(key) || key === "") {
  7608. return new Intl.NumberFormat(locale).format(value);
  7609. }
  7610. let numberFormat = {};
  7611. let targetLocale;
  7612. let format2 = null;
  7613. let from = locale;
  7614. let to = null;
  7615. const type2 = "number format";
  7616. for (let i = 0; i < locales.length; i++) {
  7617. targetLocale = to = locales[i];
  7618. if (locale !== targetLocale && isTranslateFallbackWarn(fallbackWarn, key)) {
  7619. onWarn(getWarnMessage$1(3, {
  7620. key,
  7621. target: targetLocale
  7622. }));
  7623. }
  7624. if (locale !== targetLocale) {
  7625. const emitter = context.__v_emitter;
  7626. if (emitter) {
  7627. emitter.emit("fallback", {
  7628. type: type2,
  7629. key,
  7630. from,
  7631. to,
  7632. groupId: `${type2}:${key}`
  7633. });
  7634. }
  7635. }
  7636. numberFormat = numberFormats[targetLocale] || {};
  7637. format2 = numberFormat[key];
  7638. if (isPlainObject$2(format2))
  7639. break;
  7640. handleMissing(context, key, targetLocale, missingWarn, type2);
  7641. from = to;
  7642. }
  7643. if (!isPlainObject$2(format2) || !isString$2(targetLocale)) {
  7644. return unresolving ? NOT_REOSLVED : key;
  7645. }
  7646. let id = `${targetLocale}__${key}`;
  7647. if (!isEmptyObject(overrides)) {
  7648. id = `${id}__${JSON.stringify(overrides)}`;
  7649. }
  7650. let formatter = __numberFormatters.get(id);
  7651. if (!formatter) {
  7652. formatter = new Intl.NumberFormat(targetLocale, assign$2({}, format2, overrides));
  7653. __numberFormatters.set(id, formatter);
  7654. }
  7655. return !part ? formatter.format(value) : formatter.formatToParts(value);
  7656. }
  7657. function parseNumberArgs(...args) {
  7658. const [arg1, arg2, arg3, arg4] = args;
  7659. let options = {};
  7660. let overrides = {};
  7661. if (!isNumber$1(arg1)) {
  7662. throw createCoreError(
  7663. 14
  7664. /* INVALID_ARGUMENT */
  7665. );
  7666. }
  7667. const value = arg1;
  7668. if (isString$2(arg2)) {
  7669. options.key = arg2;
  7670. } else if (isPlainObject$2(arg2)) {
  7671. options = arg2;
  7672. }
  7673. if (isString$2(arg3)) {
  7674. options.locale = arg3;
  7675. } else if (isPlainObject$2(arg3)) {
  7676. overrides = arg3;
  7677. }
  7678. if (isPlainObject$2(arg4)) {
  7679. overrides = arg4;
  7680. }
  7681. return [options.key || "", value, options, overrides];
  7682. }
  7683. function clearNumberFormat(ctx, locale, format2) {
  7684. const context = ctx;
  7685. for (const key in format2) {
  7686. const id = `${locale}__${key}`;
  7687. if (!context.__numberFormatters.has(id)) {
  7688. continue;
  7689. }
  7690. context.__numberFormatters.delete(id);
  7691. }
  7692. }
  7693. function getDevtoolsGlobalHook$1() {
  7694. return getTarget$1().__VUE_DEVTOOLS_GLOBAL_HOOK__;
  7695. }
  7696. function getTarget$1() {
  7697. return typeof navigator !== "undefined" && typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : {};
  7698. }
  7699. const isProxyAvailable$1 = typeof Proxy === "function";
  7700. const HOOK_SETUP$1 = "devtools-plugin:setup";
  7701. const HOOK_PLUGIN_SETTINGS_SET$1 = "plugin:settings:set";
  7702. let supported$1;
  7703. let perf$1;
  7704. function isPerformanceSupported$1() {
  7705. var _a2;
  7706. if (supported$1 !== void 0) {
  7707. return supported$1;
  7708. }
  7709. if (typeof window !== "undefined" && window.performance) {
  7710. supported$1 = true;
  7711. perf$1 = window.performance;
  7712. } else if (typeof globalThis !== "undefined" && ((_a2 = globalThis.perf_hooks) === null || _a2 === void 0 ? void 0 : _a2.performance)) {
  7713. supported$1 = true;
  7714. perf$1 = globalThis.perf_hooks.performance;
  7715. } else {
  7716. supported$1 = false;
  7717. }
  7718. return supported$1;
  7719. }
  7720. function now$1() {
  7721. return isPerformanceSupported$1() ? perf$1.now() : Date.now();
  7722. }
  7723. let ApiProxy$1 = class ApiProxy {
  7724. constructor(plugin, hook) {
  7725. this.target = null;
  7726. this.targetQueue = [];
  7727. this.onQueue = [];
  7728. this.plugin = plugin;
  7729. this.hook = hook;
  7730. const defaultSettings = {};
  7731. if (plugin.settings) {
  7732. for (const id in plugin.settings) {
  7733. const item = plugin.settings[id];
  7734. defaultSettings[id] = item.defaultValue;
  7735. }
  7736. }
  7737. const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
  7738. let currentSettings = Object.assign({}, defaultSettings);
  7739. try {
  7740. const raw = localStorage.getItem(localSettingsSaveId);
  7741. const data = JSON.parse(raw);
  7742. Object.assign(currentSettings, data);
  7743. } catch (e) {
  7744. }
  7745. this.fallbacks = {
  7746. getSettings() {
  7747. return currentSettings;
  7748. },
  7749. setSettings(value) {
  7750. try {
  7751. localStorage.setItem(localSettingsSaveId, JSON.stringify(value));
  7752. } catch (e) {
  7753. }
  7754. currentSettings = value;
  7755. },
  7756. now() {
  7757. return now$1();
  7758. }
  7759. };
  7760. if (hook) {
  7761. hook.on(HOOK_PLUGIN_SETTINGS_SET$1, (pluginId, value) => {
  7762. if (pluginId === this.plugin.id) {
  7763. this.fallbacks.setSettings(value);
  7764. }
  7765. });
  7766. }
  7767. this.proxiedOn = new Proxy({}, {
  7768. get: (_target, prop) => {
  7769. if (this.target) {
  7770. return this.target.on[prop];
  7771. } else {
  7772. return (...args) => {
  7773. this.onQueue.push({
  7774. method: prop,
  7775. args
  7776. });
  7777. };
  7778. }
  7779. }
  7780. });
  7781. this.proxiedTarget = new Proxy({}, {
  7782. get: (_target, prop) => {
  7783. if (this.target) {
  7784. return this.target[prop];
  7785. } else if (prop === "on") {
  7786. return this.proxiedOn;
  7787. } else if (Object.keys(this.fallbacks).includes(prop)) {
  7788. return (...args) => {
  7789. this.targetQueue.push({
  7790. method: prop,
  7791. args,
  7792. resolve: () => {
  7793. }
  7794. });
  7795. return this.fallbacks[prop](...args);
  7796. };
  7797. } else {
  7798. return (...args) => {
  7799. return new Promise((resolve2) => {
  7800. this.targetQueue.push({
  7801. method: prop,
  7802. args,
  7803. resolve: resolve2
  7804. });
  7805. });
  7806. };
  7807. }
  7808. }
  7809. });
  7810. }
  7811. async setRealTarget(target) {
  7812. this.target = target;
  7813. for (const item of this.onQueue) {
  7814. this.target.on[item.method](...item.args);
  7815. }
  7816. for (const item of this.targetQueue) {
  7817. item.resolve(await this.target[item.method](...item.args));
  7818. }
  7819. }
  7820. };
  7821. function setupDevtoolsPlugin$1(pluginDescriptor, setupFn) {
  7822. const descriptor = pluginDescriptor;
  7823. const target = getTarget$1();
  7824. const hook = getDevtoolsGlobalHook$1();
  7825. const enableProxy = isProxyAvailable$1 && descriptor.enableEarlyProxy;
  7826. if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {
  7827. hook.emit(HOOK_SETUP$1, pluginDescriptor, setupFn);
  7828. } else {
  7829. const proxy = enableProxy ? new ApiProxy$1(descriptor, hook) : null;
  7830. const list2 = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];
  7831. list2.push({
  7832. pluginDescriptor: descriptor,
  7833. setupFn,
  7834. proxy
  7835. });
  7836. if (proxy) {
  7837. setupFn(proxy.proxiedTarget);
  7838. }
  7839. }
  7840. }
  7841. /*!
  7842. * @intlify/vue-devtools v9.1.9
  7843. * (c) 2021 kazuya kawaguchi
  7844. * Released under the MIT License.
  7845. */
  7846. const VueDevToolsLabels = {
  7847. [
  7848. "vue-devtools-plugin-vue-i18n"
  7849. /* PLUGIN */
  7850. ]: "Vue I18n devtools",
  7851. [
  7852. "vue-i18n-resource-inspector"
  7853. /* CUSTOM_INSPECTOR */
  7854. ]: "I18n Resources",
  7855. [
  7856. "vue-i18n-timeline"
  7857. /* TIMELINE */
  7858. ]: "Vue I18n"
  7859. };
  7860. const VueDevToolsPlaceholders = {
  7861. [
  7862. "vue-i18n-resource-inspector"
  7863. /* CUSTOM_INSPECTOR */
  7864. ]: "Search for scopes ..."
  7865. };
  7866. const VueDevToolsTimelineColors = {
  7867. [
  7868. "vue-i18n-timeline"
  7869. /* TIMELINE */
  7870. ]: 16764185
  7871. };
  7872. /*!
  7873. * vue-i18n v9.1.9
  7874. * (c) 2022 kazuya kawaguchi
  7875. * Released under the MIT License.
  7876. */
  7877. const VERSION = "9.1.9";
  7878. function initFeatureFlags() {
  7879. let needWarn = false;
  7880. {
  7881. needWarn = true;
  7882. }
  7883. if (needWarn) {
  7884. console.warn(`You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.`);
  7885. }
  7886. }
  7887. const warnMessages = {
  7888. [
  7889. 6
  7890. /* FALLBACK_TO_ROOT */
  7891. ]: `Fall back to {type} '{key}' with root locale.`,
  7892. [
  7893. 7
  7894. /* NOT_SUPPORTED_PRESERVE */
  7895. ]: `Not supported 'preserve'.`,
  7896. [
  7897. 8
  7898. /* NOT_SUPPORTED_FORMATTER */
  7899. ]: `Not supported 'formatter'.`,
  7900. [
  7901. 9
  7902. /* NOT_SUPPORTED_PRESERVE_DIRECTIVE */
  7903. ]: `Not supported 'preserveDirectiveContent'.`,
  7904. [
  7905. 10
  7906. /* NOT_SUPPORTED_GET_CHOICE_INDEX */
  7907. ]: `Not supported 'getChoiceIndex'.`,
  7908. [
  7909. 11
  7910. /* COMPONENT_NAME_LEGACY_COMPATIBLE */
  7911. ]: `Component name legacy compatible: '{name}' -> 'i18n'`,
  7912. [
  7913. 12
  7914. /* NOT_FOUND_PARENT_SCOPE */
  7915. ]: `Not found parent scope. use the global scope.`
  7916. };
  7917. function getWarnMessage(code2, ...args) {
  7918. return format$2(warnMessages[code2], ...args);
  7919. }
  7920. function createI18nError(code2, ...args) {
  7921. return createCompileError(code2, null, { messages: errorMessages, args });
  7922. }
  7923. const errorMessages = {
  7924. [
  7925. 14
  7926. /* UNEXPECTED_RETURN_TYPE */
  7927. ]: "Unexpected return type in composer",
  7928. [
  7929. 15
  7930. /* INVALID_ARGUMENT */
  7931. ]: "Invalid argument",
  7932. [
  7933. 16
  7934. /* MUST_BE_CALL_SETUP_TOP */
  7935. ]: "Must be called at the top of a `setup` function",
  7936. [
  7937. 17
  7938. /* NOT_INSLALLED */
  7939. ]: "Need to install with `app.use` function",
  7940. [
  7941. 22
  7942. /* UNEXPECTED_ERROR */
  7943. ]: "Unexpected error",
  7944. [
  7945. 18
  7946. /* NOT_AVAILABLE_IN_LEGACY_MODE */
  7947. ]: "Not available in legacy mode",
  7948. [
  7949. 19
  7950. /* REQUIRED_VALUE */
  7951. ]: `Required in value: {0}`,
  7952. [
  7953. 20
  7954. /* INVALID_VALUE */
  7955. ]: `Invalid value`,
  7956. [
  7957. 21
  7958. /* CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN */
  7959. ]: `Cannot setup vue-devtools plugin`
  7960. };
  7961. const DEVTOOLS_META = "__INTLIFY_META__";
  7962. const TransrateVNodeSymbol = makeSymbol("__transrateVNode");
  7963. const DatetimePartsSymbol = makeSymbol("__datetimeParts");
  7964. const NumberPartsSymbol = makeSymbol("__numberParts");
  7965. const EnableEmitter = makeSymbol("__enableEmitter");
  7966. const DisableEmitter = makeSymbol("__disableEmitter");
  7967. const SetPluralRulesSymbol = makeSymbol("__setPluralRules");
  7968. const InejctWithOption = makeSymbol("__injectWithOption");
  7969. let composerID = 0;
  7970. function defineCoreMissingHandler(missing) {
  7971. return (ctx, locale, key, type2) => {
  7972. return missing(locale, key, vue.getCurrentInstance() || void 0, type2);
  7973. };
  7974. }
  7975. function getLocaleMessages(locale, options) {
  7976. const { messages: messages2, __i18n } = options;
  7977. const ret = isPlainObject$2(messages2) ? messages2 : isArray$2(__i18n) ? {} : { [locale]: {} };
  7978. if (isArray$2(__i18n)) {
  7979. __i18n.forEach(({ locale: locale2, resource }) => {
  7980. if (locale2) {
  7981. ret[locale2] = ret[locale2] || {};
  7982. deepCopy$1(resource, ret[locale2]);
  7983. } else {
  7984. deepCopy$1(resource, ret);
  7985. }
  7986. });
  7987. }
  7988. if (options.flatJson) {
  7989. for (const key in ret) {
  7990. if (hasOwn$2(ret, key)) {
  7991. handleFlatJson(ret[key]);
  7992. }
  7993. }
  7994. }
  7995. return ret;
  7996. }
  7997. const isNotObjectOrIsArray = (val) => !isObject$5(val) || isArray$2(val);
  7998. function deepCopy$1(src, des) {
  7999. if (isNotObjectOrIsArray(src) || isNotObjectOrIsArray(des)) {
  8000. throw createI18nError(
  8001. 20
  8002. /* INVALID_VALUE */
  8003. );
  8004. }
  8005. for (const key in src) {
  8006. if (hasOwn$2(src, key)) {
  8007. if (isNotObjectOrIsArray(src[key]) || isNotObjectOrIsArray(des[key])) {
  8008. des[key] = src[key];
  8009. } else {
  8010. deepCopy$1(src[key], des[key]);
  8011. }
  8012. }
  8013. }
  8014. }
  8015. const getMetaInfo = () => {
  8016. const instance = vue.getCurrentInstance();
  8017. return instance && instance.type[DEVTOOLS_META] ? { [DEVTOOLS_META]: instance.type[DEVTOOLS_META] } : null;
  8018. };
  8019. function createComposer(options = {}) {
  8020. const { __root } = options;
  8021. const _isGlobal = __root === void 0;
  8022. let _inheritLocale = isBoolean(options.inheritLocale) ? options.inheritLocale : true;
  8023. const _locale = vue.ref(
  8024. // prettier-ignore
  8025. __root && _inheritLocale ? __root.locale.value : isString$2(options.locale) ? options.locale : "en-US"
  8026. );
  8027. const _fallbackLocale = vue.ref(
  8028. // prettier-ignore
  8029. __root && _inheritLocale ? __root.fallbackLocale.value : isString$2(options.fallbackLocale) || isArray$2(options.fallbackLocale) || isPlainObject$2(options.fallbackLocale) || options.fallbackLocale === false ? options.fallbackLocale : _locale.value
  8030. );
  8031. const _messages = vue.ref(getLocaleMessages(_locale.value, options));
  8032. const _datetimeFormats = vue.ref(isPlainObject$2(options.datetimeFormats) ? options.datetimeFormats : { [_locale.value]: {} });
  8033. const _numberFormats = vue.ref(isPlainObject$2(options.numberFormats) ? options.numberFormats : { [_locale.value]: {} });
  8034. let _missingWarn = __root ? __root.missingWarn : isBoolean(options.missingWarn) || isRegExp(options.missingWarn) ? options.missingWarn : true;
  8035. let _fallbackWarn = __root ? __root.fallbackWarn : isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn) ? options.fallbackWarn : true;
  8036. let _fallbackRoot = __root ? __root.fallbackRoot : isBoolean(options.fallbackRoot) ? options.fallbackRoot : true;
  8037. let _fallbackFormat = !!options.fallbackFormat;
  8038. let _missing = isFunction$2(options.missing) ? options.missing : null;
  8039. let _runtimeMissing = isFunction$2(options.missing) ? defineCoreMissingHandler(options.missing) : null;
  8040. let _postTranslation = isFunction$2(options.postTranslation) ? options.postTranslation : null;
  8041. let _warnHtmlMessage = isBoolean(options.warnHtmlMessage) ? options.warnHtmlMessage : true;
  8042. let _escapeParameter = !!options.escapeParameter;
  8043. const _modifiers = __root ? __root.modifiers : isPlainObject$2(options.modifiers) ? options.modifiers : {};
  8044. let _pluralRules = options.pluralRules || __root && __root.pluralRules;
  8045. let _context;
  8046. function getCoreContext() {
  8047. return createCoreContext({
  8048. version: VERSION,
  8049. locale: _locale.value,
  8050. fallbackLocale: _fallbackLocale.value,
  8051. messages: _messages.value,
  8052. messageCompiler: function compileToFunction(source) {
  8053. return (ctx) => {
  8054. return ctx.normalize([source]);
  8055. };
  8056. },
  8057. datetimeFormats: _datetimeFormats.value,
  8058. numberFormats: _numberFormats.value,
  8059. modifiers: _modifiers,
  8060. pluralRules: _pluralRules,
  8061. missing: _runtimeMissing === null ? void 0 : _runtimeMissing,
  8062. missingWarn: _missingWarn,
  8063. fallbackWarn: _fallbackWarn,
  8064. fallbackFormat: _fallbackFormat,
  8065. unresolving: true,
  8066. postTranslation: _postTranslation === null ? void 0 : _postTranslation,
  8067. warnHtmlMessage: _warnHtmlMessage,
  8068. escapeParameter: _escapeParameter,
  8069. __datetimeFormatters: isPlainObject$2(_context) ? _context.__datetimeFormatters : void 0,
  8070. __numberFormatters: isPlainObject$2(_context) ? _context.__numberFormatters : void 0,
  8071. __v_emitter: isPlainObject$2(_context) ? _context.__v_emitter : void 0,
  8072. __meta: { framework: "vue" }
  8073. });
  8074. }
  8075. _context = getCoreContext();
  8076. updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
  8077. function trackReactivityValues() {
  8078. return [
  8079. _locale.value,
  8080. _fallbackLocale.value,
  8081. _messages.value,
  8082. _datetimeFormats.value,
  8083. _numberFormats.value
  8084. ];
  8085. }
  8086. const locale = vue.computed({
  8087. get: () => _locale.value,
  8088. set: (val) => {
  8089. _locale.value = val;
  8090. _context.locale = _locale.value;
  8091. }
  8092. });
  8093. const fallbackLocale = vue.computed({
  8094. get: () => _fallbackLocale.value,
  8095. set: (val) => {
  8096. _fallbackLocale.value = val;
  8097. _context.fallbackLocale = _fallbackLocale.value;
  8098. updateFallbackLocale(_context, _locale.value, val);
  8099. }
  8100. });
  8101. const messages2 = vue.computed(() => _messages.value);
  8102. const datetimeFormats = vue.computed(() => _datetimeFormats.value);
  8103. const numberFormats = vue.computed(() => _numberFormats.value);
  8104. function getPostTranslationHandler() {
  8105. return isFunction$2(_postTranslation) ? _postTranslation : null;
  8106. }
  8107. function setPostTranslationHandler(handler) {
  8108. _postTranslation = handler;
  8109. _context.postTranslation = handler;
  8110. }
  8111. function getMissingHandler() {
  8112. return _missing;
  8113. }
  8114. function setMissingHandler(handler) {
  8115. if (handler !== null) {
  8116. _runtimeMissing = defineCoreMissingHandler(handler);
  8117. }
  8118. _missing = handler;
  8119. _context.missing = _runtimeMissing;
  8120. }
  8121. function isResolvedTranslateMessage(type2, arg) {
  8122. return type2 !== "translate" || !!arg.resolvedMessage === false;
  8123. }
  8124. function wrapWithDeps(fn, argumentParser, warnType, fallbackSuccess, fallbackFail, successCondition) {
  8125. trackReactivityValues();
  8126. let ret;
  8127. {
  8128. try {
  8129. setAdditionalMeta(getMetaInfo());
  8130. ret = fn(_context);
  8131. } finally {
  8132. setAdditionalMeta(null);
  8133. }
  8134. }
  8135. if (isNumber$1(ret) && ret === NOT_REOSLVED) {
  8136. const [key, arg2] = argumentParser();
  8137. if (__root && isString$2(key) && isResolvedTranslateMessage(warnType, arg2)) {
  8138. if (_fallbackRoot && (isTranslateFallbackWarn(_fallbackWarn, key) || isTranslateMissingWarn(_missingWarn, key))) {
  8139. warn$1(getWarnMessage(6, {
  8140. key,
  8141. type: warnType
  8142. }));
  8143. }
  8144. {
  8145. const { __v_emitter: emitter } = _context;
  8146. if (emitter && _fallbackRoot) {
  8147. emitter.emit("fallback", {
  8148. type: warnType,
  8149. key,
  8150. to: "global",
  8151. groupId: `${warnType}:${key}`
  8152. });
  8153. }
  8154. }
  8155. }
  8156. return __root && _fallbackRoot ? fallbackSuccess(__root) : fallbackFail(key);
  8157. } else if (successCondition(ret)) {
  8158. return ret;
  8159. } else {
  8160. throw createI18nError(
  8161. 14
  8162. /* UNEXPECTED_RETURN_TYPE */
  8163. );
  8164. }
  8165. }
  8166. function t2(...args) {
  8167. return wrapWithDeps((context) => translate(context, ...args), () => parseTranslateArgs(...args), "translate", (root) => root.t(...args), (key) => key, (val) => isString$2(val));
  8168. }
  8169. function rt(...args) {
  8170. const [arg1, arg2, arg3] = args;
  8171. if (arg3 && !isObject$5(arg3)) {
  8172. throw createI18nError(
  8173. 15
  8174. /* INVALID_ARGUMENT */
  8175. );
  8176. }
  8177. return t2(...[arg1, arg2, assign$2({ resolvedMessage: true }, arg3 || {})]);
  8178. }
  8179. function d(...args) {
  8180. return wrapWithDeps((context) => datetime(context, ...args), () => parseDateTimeArgs(...args), "datetime format", (root) => root.d(...args), () => MISSING_RESOLVE_VALUE, (val) => isString$2(val));
  8181. }
  8182. function n(...args) {
  8183. return wrapWithDeps((context) => number$1(context, ...args), () => parseNumberArgs(...args), "number format", (root) => root.n(...args), () => MISSING_RESOLVE_VALUE, (val) => isString$2(val));
  8184. }
  8185. function normalize(values) {
  8186. return values.map((val) => isString$2(val) ? vue.createVNode(vue.Text, null, val, 0) : val);
  8187. }
  8188. const interpolate = (val) => val;
  8189. const processor = {
  8190. normalize,
  8191. interpolate,
  8192. type: "vnode"
  8193. };
  8194. function transrateVNode(...args) {
  8195. return wrapWithDeps(
  8196. (context) => {
  8197. let ret;
  8198. const _context2 = context;
  8199. try {
  8200. _context2.processor = processor;
  8201. ret = translate(_context2, ...args);
  8202. } finally {
  8203. _context2.processor = null;
  8204. }
  8205. return ret;
  8206. },
  8207. () => parseTranslateArgs(...args),
  8208. "translate",
  8209. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  8210. (root) => root[TransrateVNodeSymbol](...args),
  8211. (key) => [vue.createVNode(vue.Text, null, key, 0)],
  8212. (val) => isArray$2(val)
  8213. );
  8214. }
  8215. function numberParts(...args) {
  8216. return wrapWithDeps(
  8217. (context) => number$1(context, ...args),
  8218. () => parseNumberArgs(...args),
  8219. "number format",
  8220. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  8221. (root) => root[NumberPartsSymbol](...args),
  8222. () => [],
  8223. (val) => isString$2(val) || isArray$2(val)
  8224. );
  8225. }
  8226. function datetimeParts(...args) {
  8227. return wrapWithDeps(
  8228. (context) => datetime(context, ...args),
  8229. () => parseDateTimeArgs(...args),
  8230. "datetime format",
  8231. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  8232. (root) => root[DatetimePartsSymbol](...args),
  8233. () => [],
  8234. (val) => isString$2(val) || isArray$2(val)
  8235. );
  8236. }
  8237. function setPluralRules(rules2) {
  8238. _pluralRules = rules2;
  8239. _context.pluralRules = _pluralRules;
  8240. }
  8241. function te(key, locale2) {
  8242. const targetLocale = isString$2(locale2) ? locale2 : _locale.value;
  8243. const message = getLocaleMessage(targetLocale);
  8244. return resolveValue(message, key) !== null;
  8245. }
  8246. function resolveMessages(key) {
  8247. let messages22 = null;
  8248. const locales = getLocaleChain(_context, _fallbackLocale.value, _locale.value);
  8249. for (let i = 0; i < locales.length; i++) {
  8250. const targetLocaleMessages = _messages.value[locales[i]] || {};
  8251. const messageValue = resolveValue(targetLocaleMessages, key);
  8252. if (messageValue != null) {
  8253. messages22 = messageValue;
  8254. break;
  8255. }
  8256. }
  8257. return messages22;
  8258. }
  8259. function tm(key) {
  8260. const messages22 = resolveMessages(key);
  8261. return messages22 != null ? messages22 : __root ? __root.tm(key) || {} : {};
  8262. }
  8263. function getLocaleMessage(locale2) {
  8264. return _messages.value[locale2] || {};
  8265. }
  8266. function setLocaleMessage(locale2, message) {
  8267. _messages.value[locale2] = message;
  8268. _context.messages = _messages.value;
  8269. }
  8270. function mergeLocaleMessage(locale2, message) {
  8271. _messages.value[locale2] = _messages.value[locale2] || {};
  8272. deepCopy$1(message, _messages.value[locale2]);
  8273. _context.messages = _messages.value;
  8274. }
  8275. function getDateTimeFormat(locale2) {
  8276. return _datetimeFormats.value[locale2] || {};
  8277. }
  8278. function setDateTimeFormat(locale2, format2) {
  8279. _datetimeFormats.value[locale2] = format2;
  8280. _context.datetimeFormats = _datetimeFormats.value;
  8281. clearDateTimeFormat(_context, locale2, format2);
  8282. }
  8283. function mergeDateTimeFormat(locale2, format2) {
  8284. _datetimeFormats.value[locale2] = assign$2(_datetimeFormats.value[locale2] || {}, format2);
  8285. _context.datetimeFormats = _datetimeFormats.value;
  8286. clearDateTimeFormat(_context, locale2, format2);
  8287. }
  8288. function getNumberFormat(locale2) {
  8289. return _numberFormats.value[locale2] || {};
  8290. }
  8291. function setNumberFormat(locale2, format2) {
  8292. _numberFormats.value[locale2] = format2;
  8293. _context.numberFormats = _numberFormats.value;
  8294. clearNumberFormat(_context, locale2, format2);
  8295. }
  8296. function mergeNumberFormat(locale2, format2) {
  8297. _numberFormats.value[locale2] = assign$2(_numberFormats.value[locale2] || {}, format2);
  8298. _context.numberFormats = _numberFormats.value;
  8299. clearNumberFormat(_context, locale2, format2);
  8300. }
  8301. composerID++;
  8302. if (__root) {
  8303. vue.watch(__root.locale, (val) => {
  8304. if (_inheritLocale) {
  8305. _locale.value = val;
  8306. _context.locale = val;
  8307. updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
  8308. }
  8309. });
  8310. vue.watch(__root.fallbackLocale, (val) => {
  8311. if (_inheritLocale) {
  8312. _fallbackLocale.value = val;
  8313. _context.fallbackLocale = val;
  8314. updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
  8315. }
  8316. });
  8317. }
  8318. const composer = {
  8319. id: composerID,
  8320. locale,
  8321. fallbackLocale,
  8322. get inheritLocale() {
  8323. return _inheritLocale;
  8324. },
  8325. set inheritLocale(val) {
  8326. _inheritLocale = val;
  8327. if (val && __root) {
  8328. _locale.value = __root.locale.value;
  8329. _fallbackLocale.value = __root.fallbackLocale.value;
  8330. updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
  8331. }
  8332. },
  8333. get availableLocales() {
  8334. return Object.keys(_messages.value).sort();
  8335. },
  8336. messages: messages2,
  8337. datetimeFormats,
  8338. numberFormats,
  8339. get modifiers() {
  8340. return _modifiers;
  8341. },
  8342. get pluralRules() {
  8343. return _pluralRules || {};
  8344. },
  8345. get isGlobal() {
  8346. return _isGlobal;
  8347. },
  8348. get missingWarn() {
  8349. return _missingWarn;
  8350. },
  8351. set missingWarn(val) {
  8352. _missingWarn = val;
  8353. _context.missingWarn = _missingWarn;
  8354. },
  8355. get fallbackWarn() {
  8356. return _fallbackWarn;
  8357. },
  8358. set fallbackWarn(val) {
  8359. _fallbackWarn = val;
  8360. _context.fallbackWarn = _fallbackWarn;
  8361. },
  8362. get fallbackRoot() {
  8363. return _fallbackRoot;
  8364. },
  8365. set fallbackRoot(val) {
  8366. _fallbackRoot = val;
  8367. },
  8368. get fallbackFormat() {
  8369. return _fallbackFormat;
  8370. },
  8371. set fallbackFormat(val) {
  8372. _fallbackFormat = val;
  8373. _context.fallbackFormat = _fallbackFormat;
  8374. },
  8375. get warnHtmlMessage() {
  8376. return _warnHtmlMessage;
  8377. },
  8378. set warnHtmlMessage(val) {
  8379. _warnHtmlMessage = val;
  8380. _context.warnHtmlMessage = val;
  8381. },
  8382. get escapeParameter() {
  8383. return _escapeParameter;
  8384. },
  8385. set escapeParameter(val) {
  8386. _escapeParameter = val;
  8387. _context.escapeParameter = val;
  8388. },
  8389. t: t2,
  8390. rt,
  8391. d,
  8392. n,
  8393. te,
  8394. tm,
  8395. getLocaleMessage,
  8396. setLocaleMessage,
  8397. mergeLocaleMessage,
  8398. getDateTimeFormat,
  8399. setDateTimeFormat,
  8400. mergeDateTimeFormat,
  8401. getNumberFormat,
  8402. setNumberFormat,
  8403. mergeNumberFormat,
  8404. getPostTranslationHandler,
  8405. setPostTranslationHandler,
  8406. getMissingHandler,
  8407. setMissingHandler,
  8408. [TransrateVNodeSymbol]: transrateVNode,
  8409. [NumberPartsSymbol]: numberParts,
  8410. [DatetimePartsSymbol]: datetimeParts,
  8411. [SetPluralRulesSymbol]: setPluralRules,
  8412. [InejctWithOption]: options.__injectWithOption
  8413. // eslint-disable-line @typescript-eslint/no-explicit-any
  8414. };
  8415. {
  8416. composer[EnableEmitter] = (emitter) => {
  8417. _context.__v_emitter = emitter;
  8418. };
  8419. composer[DisableEmitter] = () => {
  8420. _context.__v_emitter = void 0;
  8421. };
  8422. }
  8423. return composer;
  8424. }
  8425. function convertComposerOptions(options) {
  8426. const locale = isString$2(options.locale) ? options.locale : "en-US";
  8427. const fallbackLocale = isString$2(options.fallbackLocale) || isArray$2(options.fallbackLocale) || isPlainObject$2(options.fallbackLocale) || options.fallbackLocale === false ? options.fallbackLocale : locale;
  8428. const missing = isFunction$2(options.missing) ? options.missing : void 0;
  8429. const missingWarn = isBoolean(options.silentTranslationWarn) || isRegExp(options.silentTranslationWarn) ? !options.silentTranslationWarn : true;
  8430. const fallbackWarn = isBoolean(options.silentFallbackWarn) || isRegExp(options.silentFallbackWarn) ? !options.silentFallbackWarn : true;
  8431. const fallbackRoot = isBoolean(options.fallbackRoot) ? options.fallbackRoot : true;
  8432. const fallbackFormat = !!options.formatFallbackMessages;
  8433. const modifiers = isPlainObject$2(options.modifiers) ? options.modifiers : {};
  8434. const pluralizationRules = options.pluralizationRules;
  8435. const postTranslation = isFunction$2(options.postTranslation) ? options.postTranslation : void 0;
  8436. const warnHtmlMessage = isString$2(options.warnHtmlInMessage) ? options.warnHtmlInMessage !== "off" : true;
  8437. const escapeParameter = !!options.escapeParameterHtml;
  8438. const inheritLocale = isBoolean(options.sync) ? options.sync : true;
  8439. if (options.formatter) {
  8440. warn$1(getWarnMessage(
  8441. 8
  8442. /* NOT_SUPPORTED_FORMATTER */
  8443. ));
  8444. }
  8445. if (options.preserveDirectiveContent) {
  8446. warn$1(getWarnMessage(
  8447. 9
  8448. /* NOT_SUPPORTED_PRESERVE_DIRECTIVE */
  8449. ));
  8450. }
  8451. let messages2 = options.messages;
  8452. if (isPlainObject$2(options.sharedMessages)) {
  8453. const sharedMessages = options.sharedMessages;
  8454. const locales = Object.keys(sharedMessages);
  8455. messages2 = locales.reduce((messages22, locale2) => {
  8456. const message = messages22[locale2] || (messages22[locale2] = {});
  8457. assign$2(message, sharedMessages[locale2]);
  8458. return messages22;
  8459. }, messages2 || {});
  8460. }
  8461. const { __i18n, __root, __injectWithOption } = options;
  8462. const datetimeFormats = options.datetimeFormats;
  8463. const numberFormats = options.numberFormats;
  8464. const flatJson = options.flatJson;
  8465. return {
  8466. locale,
  8467. fallbackLocale,
  8468. messages: messages2,
  8469. flatJson,
  8470. datetimeFormats,
  8471. numberFormats,
  8472. missing,
  8473. missingWarn,
  8474. fallbackWarn,
  8475. fallbackRoot,
  8476. fallbackFormat,
  8477. modifiers,
  8478. pluralRules: pluralizationRules,
  8479. postTranslation,
  8480. warnHtmlMessage,
  8481. escapeParameter,
  8482. inheritLocale,
  8483. __i18n,
  8484. __root,
  8485. __injectWithOption
  8486. };
  8487. }
  8488. function createVueI18n(options = {}) {
  8489. const composer = createComposer(convertComposerOptions(options));
  8490. const vueI18n = {
  8491. // id
  8492. id: composer.id,
  8493. // locale
  8494. get locale() {
  8495. return composer.locale.value;
  8496. },
  8497. set locale(val) {
  8498. composer.locale.value = val;
  8499. },
  8500. // fallbackLocale
  8501. get fallbackLocale() {
  8502. return composer.fallbackLocale.value;
  8503. },
  8504. set fallbackLocale(val) {
  8505. composer.fallbackLocale.value = val;
  8506. },
  8507. // messages
  8508. get messages() {
  8509. return composer.messages.value;
  8510. },
  8511. // datetimeFormats
  8512. get datetimeFormats() {
  8513. return composer.datetimeFormats.value;
  8514. },
  8515. // numberFormats
  8516. get numberFormats() {
  8517. return composer.numberFormats.value;
  8518. },
  8519. // availableLocales
  8520. get availableLocales() {
  8521. return composer.availableLocales;
  8522. },
  8523. // formatter
  8524. get formatter() {
  8525. warn$1(getWarnMessage(
  8526. 8
  8527. /* NOT_SUPPORTED_FORMATTER */
  8528. ));
  8529. return {
  8530. interpolate() {
  8531. return [];
  8532. }
  8533. };
  8534. },
  8535. set formatter(val) {
  8536. warn$1(getWarnMessage(
  8537. 8
  8538. /* NOT_SUPPORTED_FORMATTER */
  8539. ));
  8540. },
  8541. // missing
  8542. get missing() {
  8543. return composer.getMissingHandler();
  8544. },
  8545. set missing(handler) {
  8546. composer.setMissingHandler(handler);
  8547. },
  8548. // silentTranslationWarn
  8549. get silentTranslationWarn() {
  8550. return isBoolean(composer.missingWarn) ? !composer.missingWarn : composer.missingWarn;
  8551. },
  8552. set silentTranslationWarn(val) {
  8553. composer.missingWarn = isBoolean(val) ? !val : val;
  8554. },
  8555. // silentFallbackWarn
  8556. get silentFallbackWarn() {
  8557. return isBoolean(composer.fallbackWarn) ? !composer.fallbackWarn : composer.fallbackWarn;
  8558. },
  8559. set silentFallbackWarn(val) {
  8560. composer.fallbackWarn = isBoolean(val) ? !val : val;
  8561. },
  8562. // modifiers
  8563. get modifiers() {
  8564. return composer.modifiers;
  8565. },
  8566. // formatFallbackMessages
  8567. get formatFallbackMessages() {
  8568. return composer.fallbackFormat;
  8569. },
  8570. set formatFallbackMessages(val) {
  8571. composer.fallbackFormat = val;
  8572. },
  8573. // postTranslation
  8574. get postTranslation() {
  8575. return composer.getPostTranslationHandler();
  8576. },
  8577. set postTranslation(handler) {
  8578. composer.setPostTranslationHandler(handler);
  8579. },
  8580. // sync
  8581. get sync() {
  8582. return composer.inheritLocale;
  8583. },
  8584. set sync(val) {
  8585. composer.inheritLocale = val;
  8586. },
  8587. // warnInHtmlMessage
  8588. get warnHtmlInMessage() {
  8589. return composer.warnHtmlMessage ? "warn" : "off";
  8590. },
  8591. set warnHtmlInMessage(val) {
  8592. composer.warnHtmlMessage = val !== "off";
  8593. },
  8594. // escapeParameterHtml
  8595. get escapeParameterHtml() {
  8596. return composer.escapeParameter;
  8597. },
  8598. set escapeParameterHtml(val) {
  8599. composer.escapeParameter = val;
  8600. },
  8601. // preserveDirectiveContent
  8602. get preserveDirectiveContent() {
  8603. warn$1(getWarnMessage(
  8604. 9
  8605. /* NOT_SUPPORTED_PRESERVE_DIRECTIVE */
  8606. ));
  8607. return true;
  8608. },
  8609. set preserveDirectiveContent(val) {
  8610. warn$1(getWarnMessage(
  8611. 9
  8612. /* NOT_SUPPORTED_PRESERVE_DIRECTIVE */
  8613. ));
  8614. },
  8615. // pluralizationRules
  8616. get pluralizationRules() {
  8617. return composer.pluralRules || {};
  8618. },
  8619. // for internal
  8620. __composer: composer,
  8621. // t
  8622. t(...args) {
  8623. const [arg1, arg2, arg3] = args;
  8624. const options2 = {};
  8625. let list2 = null;
  8626. let named = null;
  8627. if (!isString$2(arg1)) {
  8628. throw createI18nError(
  8629. 15
  8630. /* INVALID_ARGUMENT */
  8631. );
  8632. }
  8633. const key = arg1;
  8634. if (isString$2(arg2)) {
  8635. options2.locale = arg2;
  8636. } else if (isArray$2(arg2)) {
  8637. list2 = arg2;
  8638. } else if (isPlainObject$2(arg2)) {
  8639. named = arg2;
  8640. }
  8641. if (isArray$2(arg3)) {
  8642. list2 = arg3;
  8643. } else if (isPlainObject$2(arg3)) {
  8644. named = arg3;
  8645. }
  8646. return composer.t(key, list2 || named || {}, options2);
  8647. },
  8648. rt(...args) {
  8649. return composer.rt(...args);
  8650. },
  8651. // tc
  8652. tc(...args) {
  8653. const [arg1, arg2, arg3] = args;
  8654. const options2 = { plural: 1 };
  8655. let list2 = null;
  8656. let named = null;
  8657. if (!isString$2(arg1)) {
  8658. throw createI18nError(
  8659. 15
  8660. /* INVALID_ARGUMENT */
  8661. );
  8662. }
  8663. const key = arg1;
  8664. if (isString$2(arg2)) {
  8665. options2.locale = arg2;
  8666. } else if (isNumber$1(arg2)) {
  8667. options2.plural = arg2;
  8668. } else if (isArray$2(arg2)) {
  8669. list2 = arg2;
  8670. } else if (isPlainObject$2(arg2)) {
  8671. named = arg2;
  8672. }
  8673. if (isString$2(arg3)) {
  8674. options2.locale = arg3;
  8675. } else if (isArray$2(arg3)) {
  8676. list2 = arg3;
  8677. } else if (isPlainObject$2(arg3)) {
  8678. named = arg3;
  8679. }
  8680. return composer.t(key, list2 || named || {}, options2);
  8681. },
  8682. // te
  8683. te(key, locale) {
  8684. return composer.te(key, locale);
  8685. },
  8686. // tm
  8687. tm(key) {
  8688. return composer.tm(key);
  8689. },
  8690. // getLocaleMessage
  8691. getLocaleMessage(locale) {
  8692. return composer.getLocaleMessage(locale);
  8693. },
  8694. // setLocaleMessage
  8695. setLocaleMessage(locale, message) {
  8696. composer.setLocaleMessage(locale, message);
  8697. },
  8698. // mergeLocaleMessage
  8699. mergeLocaleMessage(locale, message) {
  8700. composer.mergeLocaleMessage(locale, message);
  8701. },
  8702. // d
  8703. d(...args) {
  8704. return composer.d(...args);
  8705. },
  8706. // getDateTimeFormat
  8707. getDateTimeFormat(locale) {
  8708. return composer.getDateTimeFormat(locale);
  8709. },
  8710. // setDateTimeFormat
  8711. setDateTimeFormat(locale, format2) {
  8712. composer.setDateTimeFormat(locale, format2);
  8713. },
  8714. // mergeDateTimeFormat
  8715. mergeDateTimeFormat(locale, format2) {
  8716. composer.mergeDateTimeFormat(locale, format2);
  8717. },
  8718. // n
  8719. n(...args) {
  8720. return composer.n(...args);
  8721. },
  8722. // getNumberFormat
  8723. getNumberFormat(locale) {
  8724. return composer.getNumberFormat(locale);
  8725. },
  8726. // setNumberFormat
  8727. setNumberFormat(locale, format2) {
  8728. composer.setNumberFormat(locale, format2);
  8729. },
  8730. // mergeNumberFormat
  8731. mergeNumberFormat(locale, format2) {
  8732. composer.mergeNumberFormat(locale, format2);
  8733. },
  8734. // getChoiceIndex
  8735. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  8736. getChoiceIndex(choice, choicesLength) {
  8737. warn$1(getWarnMessage(
  8738. 10
  8739. /* NOT_SUPPORTED_GET_CHOICE_INDEX */
  8740. ));
  8741. return -1;
  8742. },
  8743. // for internal
  8744. __onComponentInstanceCreated(target) {
  8745. const { componentInstanceCreatedListener } = options;
  8746. if (componentInstanceCreatedListener) {
  8747. componentInstanceCreatedListener(target, vueI18n);
  8748. }
  8749. }
  8750. };
  8751. {
  8752. vueI18n.__enableEmitter = (emitter) => {
  8753. const __composer = composer;
  8754. __composer[EnableEmitter] && __composer[EnableEmitter](emitter);
  8755. };
  8756. vueI18n.__disableEmitter = () => {
  8757. const __composer = composer;
  8758. __composer[DisableEmitter] && __composer[DisableEmitter]();
  8759. };
  8760. }
  8761. return vueI18n;
  8762. }
  8763. const baseFormatProps = {
  8764. tag: {
  8765. type: [String, Object]
  8766. },
  8767. locale: {
  8768. type: String
  8769. },
  8770. scope: {
  8771. type: String,
  8772. validator: (val) => val === "parent" || val === "global",
  8773. default: "parent"
  8774. },
  8775. i18n: {
  8776. type: Object
  8777. }
  8778. };
  8779. const Translation = {
  8780. /* eslint-disable */
  8781. name: "i18n-t",
  8782. props: assign$2({
  8783. keypath: {
  8784. type: String,
  8785. required: true
  8786. },
  8787. plural: {
  8788. type: [Number, String],
  8789. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  8790. validator: (val) => isNumber$1(val) || !isNaN(val)
  8791. }
  8792. }, baseFormatProps),
  8793. /* eslint-enable */
  8794. setup(props, context) {
  8795. const { slots, attrs } = context;
  8796. const i18n2 = props.i18n || useI18n({
  8797. useScope: props.scope,
  8798. __useComponent: true
  8799. });
  8800. const keys = Object.keys(slots).filter((key) => key !== "_");
  8801. return () => {
  8802. const options = {};
  8803. if (props.locale) {
  8804. options.locale = props.locale;
  8805. }
  8806. if (props.plural !== void 0) {
  8807. options.plural = isString$2(props.plural) ? +props.plural : props.plural;
  8808. }
  8809. const arg = getInterpolateArg(context, keys);
  8810. const children = i18n2[TransrateVNodeSymbol](props.keypath, arg, options);
  8811. const assignedAttrs = assign$2({}, attrs);
  8812. return isString$2(props.tag) ? vue.h(props.tag, assignedAttrs, children) : isObject$5(props.tag) ? vue.h(props.tag, assignedAttrs, children) : vue.h(vue.Fragment, assignedAttrs, children);
  8813. };
  8814. }
  8815. };
  8816. function getInterpolateArg({ slots }, keys) {
  8817. if (keys.length === 1 && keys[0] === "default") {
  8818. return slots.default ? slots.default() : [];
  8819. } else {
  8820. return keys.reduce((arg, key) => {
  8821. const slot = slots[key];
  8822. if (slot) {
  8823. arg[key] = slot();
  8824. }
  8825. return arg;
  8826. }, {});
  8827. }
  8828. }
  8829. function renderFormatter(props, context, slotKeys, partFormatter) {
  8830. const { slots, attrs } = context;
  8831. return () => {
  8832. const options = { part: true };
  8833. let overrides = {};
  8834. if (props.locale) {
  8835. options.locale = props.locale;
  8836. }
  8837. if (isString$2(props.format)) {
  8838. options.key = props.format;
  8839. } else if (isObject$5(props.format)) {
  8840. if (isString$2(props.format.key)) {
  8841. options.key = props.format.key;
  8842. }
  8843. overrides = Object.keys(props.format).reduce((options2, prop) => {
  8844. return slotKeys.includes(prop) ? assign$2({}, options2, { [prop]: props.format[prop] }) : options2;
  8845. }, {});
  8846. }
  8847. const parts = partFormatter(...[props.value, options, overrides]);
  8848. let children = [options.key];
  8849. if (isArray$2(parts)) {
  8850. children = parts.map((part, index) => {
  8851. const slot = slots[part.type];
  8852. return slot ? slot({ [part.type]: part.value, index, parts }) : [part.value];
  8853. });
  8854. } else if (isString$2(parts)) {
  8855. children = [parts];
  8856. }
  8857. const assignedAttrs = assign$2({}, attrs);
  8858. return isString$2(props.tag) ? vue.h(props.tag, assignedAttrs, children) : isObject$5(props.tag) ? vue.h(props.tag, assignedAttrs, children) : vue.h(vue.Fragment, assignedAttrs, children);
  8859. };
  8860. }
  8861. const NUMBER_FORMAT_KEYS = [
  8862. "localeMatcher",
  8863. "style",
  8864. "unit",
  8865. "unitDisplay",
  8866. "currency",
  8867. "currencyDisplay",
  8868. "useGrouping",
  8869. "numberingSystem",
  8870. "minimumIntegerDigits",
  8871. "minimumFractionDigits",
  8872. "maximumFractionDigits",
  8873. "minimumSignificantDigits",
  8874. "maximumSignificantDigits",
  8875. "notation",
  8876. "formatMatcher"
  8877. ];
  8878. const NumberFormat = {
  8879. /* eslint-disable */
  8880. name: "i18n-n",
  8881. props: assign$2({
  8882. value: {
  8883. type: Number,
  8884. required: true
  8885. },
  8886. format: {
  8887. type: [String, Object]
  8888. }
  8889. }, baseFormatProps),
  8890. /* eslint-enable */
  8891. setup(props, context) {
  8892. const i18n2 = props.i18n || useI18n({ useScope: "parent", __useComponent: true });
  8893. return renderFormatter(props, context, NUMBER_FORMAT_KEYS, (...args) => (
  8894. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  8895. i18n2[NumberPartsSymbol](...args)
  8896. ));
  8897. }
  8898. };
  8899. const DATETIME_FORMAT_KEYS = [
  8900. "dateStyle",
  8901. "timeStyle",
  8902. "fractionalSecondDigits",
  8903. "calendar",
  8904. "dayPeriod",
  8905. "numberingSystem",
  8906. "localeMatcher",
  8907. "timeZone",
  8908. "hour12",
  8909. "hourCycle",
  8910. "formatMatcher",
  8911. "weekday",
  8912. "era",
  8913. "year",
  8914. "month",
  8915. "day",
  8916. "hour",
  8917. "minute",
  8918. "second",
  8919. "timeZoneName"
  8920. ];
  8921. const DatetimeFormat = {
  8922. /* eslint-disable */
  8923. name: "i18n-d",
  8924. props: assign$2({
  8925. value: {
  8926. type: [Number, Date],
  8927. required: true
  8928. },
  8929. format: {
  8930. type: [String, Object]
  8931. }
  8932. }, baseFormatProps),
  8933. /* eslint-enable */
  8934. setup(props, context) {
  8935. const i18n2 = props.i18n || useI18n({ useScope: "parent", __useComponent: true });
  8936. return renderFormatter(props, context, DATETIME_FORMAT_KEYS, (...args) => (
  8937. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  8938. i18n2[DatetimePartsSymbol](...args)
  8939. ));
  8940. }
  8941. };
  8942. function getComposer$2(i18n2, instance) {
  8943. const i18nInternal = i18n2;
  8944. if (i18n2.mode === "composition") {
  8945. return i18nInternal.__getInstance(instance) || i18n2.global;
  8946. } else {
  8947. const vueI18n = i18nInternal.__getInstance(instance);
  8948. return vueI18n != null ? vueI18n.__composer : i18n2.global.__composer;
  8949. }
  8950. }
  8951. function vTDirective(i18n2) {
  8952. const bind = (el, { instance, value, modifiers }) => {
  8953. if (!instance || !instance.$) {
  8954. throw createI18nError(
  8955. 22
  8956. /* UNEXPECTED_ERROR */
  8957. );
  8958. }
  8959. const composer = getComposer$2(i18n2, instance.$);
  8960. if (modifiers.preserve) {
  8961. warn$1(getWarnMessage(
  8962. 7
  8963. /* NOT_SUPPORTED_PRESERVE */
  8964. ));
  8965. }
  8966. const parsedValue = parseValue(value);
  8967. el.textContent = composer.t(...makeParams(parsedValue));
  8968. };
  8969. return {
  8970. beforeMount: bind,
  8971. beforeUpdate: bind
  8972. };
  8973. }
  8974. function parseValue(value) {
  8975. if (isString$2(value)) {
  8976. return { path: value };
  8977. } else if (isPlainObject$2(value)) {
  8978. if (!("path" in value)) {
  8979. throw createI18nError(19, "path");
  8980. }
  8981. return value;
  8982. } else {
  8983. throw createI18nError(
  8984. 20
  8985. /* INVALID_VALUE */
  8986. );
  8987. }
  8988. }
  8989. function makeParams(value) {
  8990. const { path, locale, args, choice, plural } = value;
  8991. const options = {};
  8992. const named = args || {};
  8993. if (isString$2(locale)) {
  8994. options.locale = locale;
  8995. }
  8996. if (isNumber$1(choice)) {
  8997. options.plural = choice;
  8998. }
  8999. if (isNumber$1(plural)) {
  9000. options.plural = plural;
  9001. }
  9002. return [path, named, options];
  9003. }
  9004. function apply(app, i18n2, ...options) {
  9005. const pluginOptions = isPlainObject$2(options[0]) ? options[0] : {};
  9006. const useI18nComponentName = !!pluginOptions.useI18nComponentName;
  9007. const globalInstall = isBoolean(pluginOptions.globalInstall) ? pluginOptions.globalInstall : true;
  9008. if (globalInstall && useI18nComponentName) {
  9009. warn$1(getWarnMessage(11, {
  9010. name: Translation.name
  9011. }));
  9012. }
  9013. if (globalInstall) {
  9014. app.component(!useI18nComponentName ? Translation.name : "i18n", Translation);
  9015. app.component(NumberFormat.name, NumberFormat);
  9016. app.component(DatetimeFormat.name, DatetimeFormat);
  9017. }
  9018. app.directive("t", vTDirective(i18n2));
  9019. }
  9020. const VUE_I18N_COMPONENT_TYPES = "vue-i18n: composer properties";
  9021. let devtoolsApi;
  9022. async function enableDevTools(app, i18n2) {
  9023. return new Promise((resolve2, reject) => {
  9024. try {
  9025. setupDevtoolsPlugin$1({
  9026. id: "vue-devtools-plugin-vue-i18n",
  9027. label: VueDevToolsLabels[
  9028. "vue-devtools-plugin-vue-i18n"
  9029. /* PLUGIN */
  9030. ],
  9031. packageName: "vue-i18n",
  9032. homepage: "https://vue-i18n.intlify.dev",
  9033. logo: "https://vue-i18n.intlify.dev/vue-i18n-devtools-logo.png",
  9034. componentStateTypes: [VUE_I18N_COMPONENT_TYPES],
  9035. app
  9036. }, (api) => {
  9037. devtoolsApi = api;
  9038. api.on.visitComponentTree(({ componentInstance, treeNode }) => {
  9039. updateComponentTreeTags(componentInstance, treeNode, i18n2);
  9040. });
  9041. api.on.inspectComponent(({ componentInstance, instanceData }) => {
  9042. if (componentInstance.vnode.el.__VUE_I18N__ && instanceData) {
  9043. if (i18n2.mode === "legacy") {
  9044. if (componentInstance.vnode.el.__VUE_I18N__ !== i18n2.global.__composer) {
  9045. inspectComposer(instanceData, componentInstance.vnode.el.__VUE_I18N__);
  9046. }
  9047. } else {
  9048. inspectComposer(instanceData, componentInstance.vnode.el.__VUE_I18N__);
  9049. }
  9050. }
  9051. });
  9052. api.addInspector({
  9053. id: "vue-i18n-resource-inspector",
  9054. label: VueDevToolsLabels[
  9055. "vue-i18n-resource-inspector"
  9056. /* CUSTOM_INSPECTOR */
  9057. ],
  9058. icon: "language",
  9059. treeFilterPlaceholder: VueDevToolsPlaceholders[
  9060. "vue-i18n-resource-inspector"
  9061. /* CUSTOM_INSPECTOR */
  9062. ]
  9063. });
  9064. api.on.getInspectorTree((payload) => {
  9065. if (payload.app === app && payload.inspectorId === "vue-i18n-resource-inspector") {
  9066. registerScope(payload, i18n2);
  9067. }
  9068. });
  9069. api.on.getInspectorState((payload) => {
  9070. if (payload.app === app && payload.inspectorId === "vue-i18n-resource-inspector") {
  9071. inspectScope(payload, i18n2);
  9072. }
  9073. });
  9074. api.on.editInspectorState((payload) => {
  9075. if (payload.app === app && payload.inspectorId === "vue-i18n-resource-inspector") {
  9076. editScope(payload, i18n2);
  9077. }
  9078. });
  9079. api.addTimelineLayer({
  9080. id: "vue-i18n-timeline",
  9081. label: VueDevToolsLabels[
  9082. "vue-i18n-timeline"
  9083. /* TIMELINE */
  9084. ],
  9085. color: VueDevToolsTimelineColors[
  9086. "vue-i18n-timeline"
  9087. /* TIMELINE */
  9088. ]
  9089. });
  9090. resolve2(true);
  9091. });
  9092. } catch (e) {
  9093. console.error(e);
  9094. reject(false);
  9095. }
  9096. });
  9097. }
  9098. function updateComponentTreeTags(instance, treeNode, i18n2) {
  9099. const global2 = i18n2.mode === "composition" ? i18n2.global : i18n2.global.__composer;
  9100. if (instance && instance.vnode.el.__VUE_I18N__) {
  9101. if (instance.vnode.el.__VUE_I18N__ !== global2) {
  9102. const label = instance.type.name || instance.type.displayName || instance.type.__file;
  9103. const tag = {
  9104. label: `i18n (${label} Scope)`,
  9105. textColor: 0,
  9106. backgroundColor: 16764185
  9107. };
  9108. treeNode.tags.push(tag);
  9109. }
  9110. }
  9111. }
  9112. function inspectComposer(instanceData, composer) {
  9113. const type2 = VUE_I18N_COMPONENT_TYPES;
  9114. instanceData.state.push({
  9115. type: type2,
  9116. key: "locale",
  9117. editable: true,
  9118. value: composer.locale.value
  9119. });
  9120. instanceData.state.push({
  9121. type: type2,
  9122. key: "availableLocales",
  9123. editable: false,
  9124. value: composer.availableLocales
  9125. });
  9126. instanceData.state.push({
  9127. type: type2,
  9128. key: "fallbackLocale",
  9129. editable: true,
  9130. value: composer.fallbackLocale.value
  9131. });
  9132. instanceData.state.push({
  9133. type: type2,
  9134. key: "inheritLocale",
  9135. editable: true,
  9136. value: composer.inheritLocale
  9137. });
  9138. instanceData.state.push({
  9139. type: type2,
  9140. key: "messages",
  9141. editable: false,
  9142. value: getLocaleMessageValue(composer.messages.value)
  9143. });
  9144. instanceData.state.push({
  9145. type: type2,
  9146. key: "datetimeFormats",
  9147. editable: false,
  9148. value: composer.datetimeFormats.value
  9149. });
  9150. instanceData.state.push({
  9151. type: type2,
  9152. key: "numberFormats",
  9153. editable: false,
  9154. value: composer.numberFormats.value
  9155. });
  9156. }
  9157. function getLocaleMessageValue(messages2) {
  9158. const value = {};
  9159. Object.keys(messages2).forEach((key) => {
  9160. const v = messages2[key];
  9161. if (isFunction$2(v) && "source" in v) {
  9162. value[key] = getMessageFunctionDetails(v);
  9163. } else if (isObject$5(v)) {
  9164. value[key] = getLocaleMessageValue(v);
  9165. } else {
  9166. value[key] = v;
  9167. }
  9168. });
  9169. return value;
  9170. }
  9171. const ESC = {
  9172. "<": "&lt;",
  9173. ">": "&gt;",
  9174. '"': "&quot;",
  9175. "&": "&amp;"
  9176. };
  9177. function escape(s) {
  9178. return s.replace(/[<>"&]/g, escapeChar);
  9179. }
  9180. function escapeChar(a) {
  9181. return ESC[a] || a;
  9182. }
  9183. function getMessageFunctionDetails(func2) {
  9184. const argString = func2.source ? `("${escape(func2.source)}")` : `(?)`;
  9185. return {
  9186. _custom: {
  9187. type: "function",
  9188. display: `<span>ƒ</span> ${argString}`
  9189. }
  9190. };
  9191. }
  9192. function registerScope(payload, i18n2) {
  9193. payload.rootNodes.push({
  9194. id: "global",
  9195. label: "Global Scope"
  9196. });
  9197. const global2 = i18n2.mode === "composition" ? i18n2.global : i18n2.global.__composer;
  9198. for (const [keyInstance, instance] of i18n2.__instances) {
  9199. const composer = i18n2.mode === "composition" ? instance : instance.__composer;
  9200. if (global2 === composer) {
  9201. continue;
  9202. }
  9203. const label = keyInstance.type.name || keyInstance.type.displayName || keyInstance.type.__file;
  9204. payload.rootNodes.push({
  9205. id: composer.id.toString(),
  9206. label: `${label} Scope`
  9207. });
  9208. }
  9209. }
  9210. function getComposer$1(nodeId, i18n2) {
  9211. if (nodeId === "global") {
  9212. return i18n2.mode === "composition" ? i18n2.global : i18n2.global.__composer;
  9213. } else {
  9214. const instance = Array.from(i18n2.__instances.values()).find((item) => item.id.toString() === nodeId);
  9215. if (instance) {
  9216. return i18n2.mode === "composition" ? instance : instance.__composer;
  9217. } else {
  9218. return null;
  9219. }
  9220. }
  9221. }
  9222. function inspectScope(payload, i18n2) {
  9223. const composer = getComposer$1(payload.nodeId, i18n2);
  9224. if (composer) {
  9225. payload.state = makeScopeInspectState(composer);
  9226. }
  9227. }
  9228. function makeScopeInspectState(composer) {
  9229. const state = {};
  9230. const localeType = "Locale related info";
  9231. const localeStates = [
  9232. {
  9233. type: localeType,
  9234. key: "locale",
  9235. editable: true,
  9236. value: composer.locale.value
  9237. },
  9238. {
  9239. type: localeType,
  9240. key: "fallbackLocale",
  9241. editable: true,
  9242. value: composer.fallbackLocale.value
  9243. },
  9244. {
  9245. type: localeType,
  9246. key: "availableLocales",
  9247. editable: false,
  9248. value: composer.availableLocales
  9249. },
  9250. {
  9251. type: localeType,
  9252. key: "inheritLocale",
  9253. editable: true,
  9254. value: composer.inheritLocale
  9255. }
  9256. ];
  9257. state[localeType] = localeStates;
  9258. const localeMessagesType = "Locale messages info";
  9259. const localeMessagesStates = [
  9260. {
  9261. type: localeMessagesType,
  9262. key: "messages",
  9263. editable: false,
  9264. value: getLocaleMessageValue(composer.messages.value)
  9265. }
  9266. ];
  9267. state[localeMessagesType] = localeMessagesStates;
  9268. const datetimeFormatsType = "Datetime formats info";
  9269. const datetimeFormatsStates = [
  9270. {
  9271. type: datetimeFormatsType,
  9272. key: "datetimeFormats",
  9273. editable: false,
  9274. value: composer.datetimeFormats.value
  9275. }
  9276. ];
  9277. state[datetimeFormatsType] = datetimeFormatsStates;
  9278. const numberFormatsType = "Datetime formats info";
  9279. const numberFormatsStates = [
  9280. {
  9281. type: numberFormatsType,
  9282. key: "numberFormats",
  9283. editable: false,
  9284. value: composer.numberFormats.value
  9285. }
  9286. ];
  9287. state[numberFormatsType] = numberFormatsStates;
  9288. return state;
  9289. }
  9290. function addTimelineEvent(event, payload) {
  9291. if (devtoolsApi) {
  9292. let groupId;
  9293. if (payload && "groupId" in payload) {
  9294. groupId = payload.groupId;
  9295. delete payload.groupId;
  9296. }
  9297. devtoolsApi.addTimelineEvent({
  9298. layerId: "vue-i18n-timeline",
  9299. event: {
  9300. title: event,
  9301. groupId,
  9302. time: Date.now(),
  9303. meta: {},
  9304. data: payload || {},
  9305. logType: event === "compile-error" ? "error" : event === "fallback" || event === "missing" ? "warning" : "default"
  9306. }
  9307. });
  9308. }
  9309. }
  9310. function editScope(payload, i18n2) {
  9311. const composer = getComposer$1(payload.nodeId, i18n2);
  9312. if (composer) {
  9313. const [field] = payload.path;
  9314. if (field === "locale" && isString$2(payload.state.value)) {
  9315. composer.locale.value = payload.state.value;
  9316. } else if (field === "fallbackLocale" && (isString$2(payload.state.value) || isArray$2(payload.state.value) || isObject$5(payload.state.value))) {
  9317. composer.fallbackLocale.value = payload.state.value;
  9318. } else if (field === "inheritLocale" && isBoolean(payload.state.value)) {
  9319. composer.inheritLocale = payload.state.value;
  9320. }
  9321. }
  9322. }
  9323. function defineMixin(vuei18n, composer, i18n2) {
  9324. return {
  9325. beforeCreate() {
  9326. const instance = vue.getCurrentInstance();
  9327. if (!instance) {
  9328. throw createI18nError(
  9329. 22
  9330. /* UNEXPECTED_ERROR */
  9331. );
  9332. }
  9333. const options = this.$options;
  9334. if (options.i18n) {
  9335. const optionsI18n = options.i18n;
  9336. if (options.__i18n) {
  9337. optionsI18n.__i18n = options.__i18n;
  9338. }
  9339. optionsI18n.__root = composer;
  9340. if (this === this.$root) {
  9341. this.$i18n = mergeToRoot(vuei18n, optionsI18n);
  9342. } else {
  9343. optionsI18n.__injectWithOption = true;
  9344. this.$i18n = createVueI18n(optionsI18n);
  9345. }
  9346. } else if (options.__i18n) {
  9347. if (this === this.$root) {
  9348. this.$i18n = mergeToRoot(vuei18n, options);
  9349. } else {
  9350. this.$i18n = createVueI18n({
  9351. __i18n: options.__i18n,
  9352. __injectWithOption: true,
  9353. __root: composer
  9354. });
  9355. }
  9356. } else {
  9357. this.$i18n = vuei18n;
  9358. }
  9359. vuei18n.__onComponentInstanceCreated(this.$i18n);
  9360. i18n2.__setInstance(instance, this.$i18n);
  9361. this.$t = (...args) => this.$i18n.t(...args);
  9362. this.$rt = (...args) => this.$i18n.rt(...args);
  9363. this.$tc = (...args) => this.$i18n.tc(...args);
  9364. this.$te = (key, locale) => this.$i18n.te(key, locale);
  9365. this.$d = (...args) => this.$i18n.d(...args);
  9366. this.$n = (...args) => this.$i18n.n(...args);
  9367. this.$tm = (key) => this.$i18n.tm(key);
  9368. },
  9369. mounted() {
  9370. {
  9371. this.$el.__VUE_I18N__ = this.$i18n.__composer;
  9372. const emitter = this.__v_emitter = createEmitter();
  9373. const _vueI18n = this.$i18n;
  9374. _vueI18n.__enableEmitter && _vueI18n.__enableEmitter(emitter);
  9375. emitter.on("*", addTimelineEvent);
  9376. }
  9377. },
  9378. beforeUnmount() {
  9379. const instance = vue.getCurrentInstance();
  9380. if (!instance) {
  9381. throw createI18nError(
  9382. 22
  9383. /* UNEXPECTED_ERROR */
  9384. );
  9385. }
  9386. {
  9387. if (this.__v_emitter) {
  9388. this.__v_emitter.off("*", addTimelineEvent);
  9389. delete this.__v_emitter;
  9390. }
  9391. const _vueI18n = this.$i18n;
  9392. _vueI18n.__disableEmitter && _vueI18n.__disableEmitter();
  9393. delete this.$el.__VUE_I18N__;
  9394. }
  9395. delete this.$t;
  9396. delete this.$rt;
  9397. delete this.$tc;
  9398. delete this.$te;
  9399. delete this.$d;
  9400. delete this.$n;
  9401. delete this.$tm;
  9402. i18n2.__deleteInstance(instance);
  9403. delete this.$i18n;
  9404. }
  9405. };
  9406. }
  9407. function mergeToRoot(root, options) {
  9408. root.locale = options.locale || root.locale;
  9409. root.fallbackLocale = options.fallbackLocale || root.fallbackLocale;
  9410. root.missing = options.missing || root.missing;
  9411. root.silentTranslationWarn = options.silentTranslationWarn || root.silentFallbackWarn;
  9412. root.silentFallbackWarn = options.silentFallbackWarn || root.silentFallbackWarn;
  9413. root.formatFallbackMessages = options.formatFallbackMessages || root.formatFallbackMessages;
  9414. root.postTranslation = options.postTranslation || root.postTranslation;
  9415. root.warnHtmlInMessage = options.warnHtmlInMessage || root.warnHtmlInMessage;
  9416. root.escapeParameterHtml = options.escapeParameterHtml || root.escapeParameterHtml;
  9417. root.sync = options.sync || root.sync;
  9418. root.__composer[SetPluralRulesSymbol](options.pluralizationRules || root.pluralizationRules);
  9419. const messages2 = getLocaleMessages(root.locale, {
  9420. messages: options.messages,
  9421. __i18n: options.__i18n
  9422. });
  9423. Object.keys(messages2).forEach((locale) => root.mergeLocaleMessage(locale, messages2[locale]));
  9424. if (options.datetimeFormats) {
  9425. Object.keys(options.datetimeFormats).forEach((locale) => root.mergeDateTimeFormat(locale, options.datetimeFormats[locale]));
  9426. }
  9427. if (options.numberFormats) {
  9428. Object.keys(options.numberFormats).forEach((locale) => root.mergeNumberFormat(locale, options.numberFormats[locale]));
  9429. }
  9430. return root;
  9431. }
  9432. function createI18n(options = {}) {
  9433. const __legacyMode = isBoolean(options.legacy) ? options.legacy : true;
  9434. const __globalInjection = !!options.globalInjection;
  9435. const __instances = /* @__PURE__ */ new Map();
  9436. const __global = __legacyMode ? createVueI18n(options) : createComposer(options);
  9437. const symbol = makeSymbol("vue-i18n");
  9438. const i18n2 = {
  9439. // mode
  9440. get mode() {
  9441. return __legacyMode ? "legacy" : "composition";
  9442. },
  9443. // install plugin
  9444. async install(app, ...options2) {
  9445. {
  9446. app.__VUE_I18N__ = i18n2;
  9447. }
  9448. app.__VUE_I18N_SYMBOL__ = symbol;
  9449. app.provide(app.__VUE_I18N_SYMBOL__, i18n2);
  9450. if (!__legacyMode && __globalInjection) {
  9451. injectGlobalFields(app, i18n2.global);
  9452. }
  9453. {
  9454. apply(app, i18n2, ...options2);
  9455. }
  9456. if (__legacyMode) {
  9457. app.mixin(defineMixin(__global, __global.__composer, i18n2));
  9458. }
  9459. {
  9460. const ret = await enableDevTools(app, i18n2);
  9461. if (!ret) {
  9462. throw createI18nError(
  9463. 21
  9464. /* CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN */
  9465. );
  9466. }
  9467. const emitter = createEmitter();
  9468. if (__legacyMode) {
  9469. const _vueI18n = __global;
  9470. _vueI18n.__enableEmitter && _vueI18n.__enableEmitter(emitter);
  9471. } else {
  9472. const _composer = __global;
  9473. _composer[EnableEmitter] && _composer[EnableEmitter](emitter);
  9474. }
  9475. emitter.on("*", addTimelineEvent);
  9476. }
  9477. },
  9478. // global accessor
  9479. get global() {
  9480. return __global;
  9481. },
  9482. // @internal
  9483. __instances,
  9484. // @internal
  9485. __getInstance(component) {
  9486. return __instances.get(component) || null;
  9487. },
  9488. // @internal
  9489. __setInstance(component, instance) {
  9490. __instances.set(component, instance);
  9491. },
  9492. // @internal
  9493. __deleteInstance(component) {
  9494. __instances.delete(component);
  9495. }
  9496. };
  9497. return i18n2;
  9498. }
  9499. function useI18n(options = {}) {
  9500. const instance = vue.getCurrentInstance();
  9501. if (instance == null) {
  9502. throw createI18nError(
  9503. 16
  9504. /* MUST_BE_CALL_SETUP_TOP */
  9505. );
  9506. }
  9507. if (!instance.appContext.app.__VUE_I18N_SYMBOL__) {
  9508. throw createI18nError(
  9509. 17
  9510. /* NOT_INSLALLED */
  9511. );
  9512. }
  9513. const i18n2 = vue.inject(instance.appContext.app.__VUE_I18N_SYMBOL__);
  9514. if (!i18n2) {
  9515. throw createI18nError(
  9516. 22
  9517. /* UNEXPECTED_ERROR */
  9518. );
  9519. }
  9520. const global2 = i18n2.mode === "composition" ? i18n2.global : i18n2.global.__composer;
  9521. const scope = isEmptyObject(options) ? "__i18n" in instance.type ? "local" : "global" : !options.useScope ? "local" : options.useScope;
  9522. if (scope === "global") {
  9523. let messages2 = isObject$5(options.messages) ? options.messages : {};
  9524. if ("__i18nGlobal" in instance.type) {
  9525. messages2 = getLocaleMessages(global2.locale.value, {
  9526. messages: messages2,
  9527. __i18n: instance.type.__i18nGlobal
  9528. });
  9529. }
  9530. const locales = Object.keys(messages2);
  9531. if (locales.length) {
  9532. locales.forEach((locale) => {
  9533. global2.mergeLocaleMessage(locale, messages2[locale]);
  9534. });
  9535. }
  9536. if (isObject$5(options.datetimeFormats)) {
  9537. const locales2 = Object.keys(options.datetimeFormats);
  9538. if (locales2.length) {
  9539. locales2.forEach((locale) => {
  9540. global2.mergeDateTimeFormat(locale, options.datetimeFormats[locale]);
  9541. });
  9542. }
  9543. }
  9544. if (isObject$5(options.numberFormats)) {
  9545. const locales2 = Object.keys(options.numberFormats);
  9546. if (locales2.length) {
  9547. locales2.forEach((locale) => {
  9548. global2.mergeNumberFormat(locale, options.numberFormats[locale]);
  9549. });
  9550. }
  9551. }
  9552. return global2;
  9553. }
  9554. if (scope === "parent") {
  9555. let composer2 = getComposer(i18n2, instance, options.__useComponent);
  9556. if (composer2 == null) {
  9557. {
  9558. warn$1(getWarnMessage(
  9559. 12
  9560. /* NOT_FOUND_PARENT_SCOPE */
  9561. ));
  9562. }
  9563. composer2 = global2;
  9564. }
  9565. return composer2;
  9566. }
  9567. if (i18n2.mode === "legacy") {
  9568. throw createI18nError(
  9569. 18
  9570. /* NOT_AVAILABLE_IN_LEGACY_MODE */
  9571. );
  9572. }
  9573. const i18nInternal = i18n2;
  9574. let composer = i18nInternal.__getInstance(instance);
  9575. if (composer == null) {
  9576. const type2 = instance.type;
  9577. const composerOptions = assign$2({}, options);
  9578. if (type2.__i18n) {
  9579. composerOptions.__i18n = type2.__i18n;
  9580. }
  9581. if (global2) {
  9582. composerOptions.__root = global2;
  9583. }
  9584. composer = createComposer(composerOptions);
  9585. setupLifeCycle(i18nInternal, instance, composer);
  9586. i18nInternal.__setInstance(instance, composer);
  9587. }
  9588. return composer;
  9589. }
  9590. function getComposer(i18n2, target, useComponent = false) {
  9591. let composer = null;
  9592. const root = target.root;
  9593. let current = target.parent;
  9594. while (current != null) {
  9595. const i18nInternal = i18n2;
  9596. if (i18n2.mode === "composition") {
  9597. composer = i18nInternal.__getInstance(current);
  9598. } else {
  9599. const vueI18n = i18nInternal.__getInstance(current);
  9600. if (vueI18n != null) {
  9601. composer = vueI18n.__composer;
  9602. }
  9603. if (useComponent && composer && !composer[InejctWithOption]) {
  9604. composer = null;
  9605. }
  9606. }
  9607. if (composer != null) {
  9608. break;
  9609. }
  9610. if (root === current) {
  9611. break;
  9612. }
  9613. current = current.parent;
  9614. }
  9615. return composer;
  9616. }
  9617. function setupLifeCycle(i18n2, target, composer) {
  9618. let emitter = null;
  9619. vue.onMounted(() => {
  9620. if (target.vnode.el) {
  9621. target.vnode.el.__VUE_I18N__ = composer;
  9622. emitter = createEmitter();
  9623. const _composer = composer;
  9624. _composer[EnableEmitter] && _composer[EnableEmitter](emitter);
  9625. emitter.on("*", addTimelineEvent);
  9626. }
  9627. }, target);
  9628. vue.onUnmounted(() => {
  9629. if (target.vnode.el && target.vnode.el.__VUE_I18N__) {
  9630. emitter && emitter.off("*", addTimelineEvent);
  9631. const _composer = composer;
  9632. _composer[DisableEmitter] && _composer[DisableEmitter]();
  9633. delete target.vnode.el.__VUE_I18N__;
  9634. }
  9635. i18n2.__deleteInstance(target);
  9636. }, target);
  9637. }
  9638. const globalExportProps = [
  9639. "locale",
  9640. "fallbackLocale",
  9641. "availableLocales"
  9642. ];
  9643. const globalExportMethods = ["t", "rt", "d", "n", "tm"];
  9644. function injectGlobalFields(app, composer) {
  9645. const i18n2 = /* @__PURE__ */ Object.create(null);
  9646. globalExportProps.forEach((prop) => {
  9647. const desc = Object.getOwnPropertyDescriptor(composer, prop);
  9648. if (!desc) {
  9649. throw createI18nError(
  9650. 22
  9651. /* UNEXPECTED_ERROR */
  9652. );
  9653. }
  9654. const wrap = vue.isRef(desc.value) ? {
  9655. get() {
  9656. return desc.value.value;
  9657. },
  9658. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  9659. set(val) {
  9660. desc.value.value = val;
  9661. }
  9662. } : {
  9663. get() {
  9664. return desc.get && desc.get();
  9665. }
  9666. };
  9667. Object.defineProperty(i18n2, prop, wrap);
  9668. });
  9669. app.config.globalProperties.$i18n = i18n2;
  9670. globalExportMethods.forEach((method2) => {
  9671. const desc = Object.getOwnPropertyDescriptor(composer, method2);
  9672. if (!desc || !desc.value) {
  9673. throw createI18nError(
  9674. 22
  9675. /* UNEXPECTED_ERROR */
  9676. );
  9677. }
  9678. Object.defineProperty(app.config.globalProperties, `$${method2}`, desc);
  9679. });
  9680. }
  9681. {
  9682. initFeatureFlags();
  9683. }
  9684. {
  9685. const target = getGlobalThis();
  9686. target.__INTLIFY__ = true;
  9687. setDevToolsHook(target.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__);
  9688. }
  9689. const zh = {
  9690. "加载中": "加载中",
  9691. "操作失败": "操作失败",
  9692. "请求失败,请稍后重试": "请求失败,请稍后重试",
  9693. "登录已过期,请重新登录": "登录已过期,请重新登录",
  9694. "手机号": "手机号",
  9695. "邮箱": "邮箱",
  9696. "密码": "密码",
  9697. "忘记密码": "忘记密码",
  9698. "注册账号": "注册账号",
  9699. "请输入": "请输入",
  9700. "记住密码": "记住密码",
  9701. "登录": "登录",
  9702. "验证码": "验证码",
  9703. "请输入6位验证码": "请输入6位验证码",
  9704. "请输入密码": "请输入密码",
  9705. "确认密码": "确认密码",
  9706. "请再次输入密码": "请再次输入密码",
  9707. "已有账号": "已有账号",
  9708. "前往登录": "前往登录",
  9709. "获取验证码": "获取验证码",
  9710. "注册": "注册",
  9711. "过滤": "过滤",
  9712. "滚球": "滚球",
  9713. "体育博彩": "体育博彩",
  9714. "投注历史": "投注历史",
  9715. "我的": "我的",
  9716. "首页": "首页",
  9717. "安全": "安全",
  9718. "注册并登录": "注册并登录",
  9719. "请输入有效的充值数量": "请输入有效的充值数量",
  9720. "请上传支付凭证截图": "请上传支付凭证截图",
  9721. "充值": "充值",
  9722. "暂无二维码": "暂无二维码",
  9723. "选择币种": "选择币种",
  9724. "选择区块链网络": "选择区块链网络",
  9725. "充值地址": "充值地址",
  9726. "请确认充值地址正确无误,错误地址将导致资产丢失且无法找回": "请确认充值地址正确无误,错误地址将导致资产丢失且无法找回",
  9727. "充值数量": "充值数量",
  9728. "请输入充值数量": "请输入充值数量",
  9729. "预计到账": "预计到账",
  9730. "当前汇率": "当前汇率",
  9731. "上传支付凭证": "上传支付凭证",
  9732. "点击上传": "点击上传",
  9733. "确认充值": "确认充值",
  9734. "保存头像": "保存头像",
  9735. "退出登录": "退出登录",
  9736. "提现方式": "提现方式",
  9737. "提现币种": "提现币种",
  9738. "提现网络": "提现网络",
  9739. "提现地址": "提现地址",
  9740. "提现金额": "提现金额",
  9741. "手续费": "手续费",
  9742. "请选择提现方式": "请选择提现方式",
  9743. "银行卡": "银行卡",
  9744. "加密货币": "加密货币",
  9745. "请选择提现币种": "请选择提现币种",
  9746. "请选择提现网络": "请选择提现网络",
  9747. "请输入提现地址": "请输入提现地址",
  9748. "提款范围": "提款范围",
  9749. "钱包余额": "钱包余额",
  9750. "手续费比例": "手续费比例",
  9751. "预计到账金额": "预计到账金额",
  9752. "提交": "提交",
  9753. "提现": "提现",
  9754. "收款名字": "收款名字",
  9755. "银行名称": "银行名称",
  9756. "银行账号": "银行账号",
  9757. "银行地址": "银行地址",
  9758. "国际代码": "国际代码",
  9759. "其他": "其他",
  9760. "请输入收款名字": "请输入收款名字",
  9761. "请输入银行名称": "请输入银行名称",
  9762. "请输入银行账号": "请输入银行账号",
  9763. "请输入银行地址": "请输入银行地址",
  9764. "请输入国际代码": "请输入国际代码",
  9765. "其他信息": "其他信息",
  9766. "请先选择币种": "请先选择币种",
  9767. "提现金额不能小于": "提现金额不能小于",
  9768. "查询": "查询",
  9769. "重置": "重置",
  9770. "暂无资金记录": "暂无资金记录",
  9771. "流水号": "流水号",
  9772. "交易金额": "交易金额",
  9773. "变更后余额": "变更后余额",
  9774. "资金记录": "资金记录",
  9775. "交易类型": "交易类型",
  9776. "日期区间": "日期区间",
  9777. "请选择日期区间": "请选择日期区间",
  9778. "记录": "记录",
  9779. "充值记录": "充值记录",
  9780. "提现记录": "提现记录",
  9781. "更多滚球": "更多滚球",
  9782. "主队赢": "主队赢",
  9783. "平局": "平局",
  9784. "客队赢": "客队赢",
  9785. "进行中": "进行中",
  9786. "已完场": "已完场",
  9787. "投注单": "投注单",
  9788. "还没有账号": "还没有账号",
  9789. "邮箱登录": "邮箱登录",
  9790. "手机号登录": "手机号登录",
  9791. "请输入登录邮箱": "请输入登录邮箱",
  9792. "请输入登录密码": "请输入登录密码",
  9793. "我已阅读并同意": "我已阅读并同意",
  9794. "去注册": "去注册",
  9795. "版本": "版本",
  9796. "产品服务协议": "产品服务协议",
  9797. "请输入手机号": "请输入手机号",
  9798. "取消": "取消",
  9799. "确认": "确认",
  9800. "选择区号": "选择区号",
  9801. "请输入验证码": "请输入验证码",
  9802. "请先同意服务协议!": "请先同意服务协议!",
  9803. "请先同意服务协议": "请先同意服务协议",
  9804. "邮箱注册": "邮箱注册",
  9805. "手机注册": "手机注册",
  9806. "请输入注册邮箱": "请输入注册邮箱",
  9807. "请设置登录密码": "请设置登录密码",
  9808. "请确认登录密码": "请确认登录密码",
  9809. "立即注册": "立即注册",
  9810. "去登录": "去登录",
  9811. "上传图片": "上传图片",
  9812. "未设置用户名": "未设置用户名",
  9813. "暂无": "暂无",
  9814. "账户余额": "账户余额",
  9815. "冻结金额": "冻结金额",
  9816. "账户安全": "账户安全",
  9817. "更换头像": "更换头像",
  9818. "保存": "保存",
  9819. "请先选择头像": "请先选择头像",
  9820. "提示": "提示",
  9821. "确定要退出登录吗?": "确定要退出登录吗?",
  9822. "个人资料": "个人资料",
  9823. "账户": "账户",
  9824. "账户号码": "账户号码",
  9825. "您的密码": "您的密码",
  9826. "注册日期": "注册日期",
  9827. "联系方式": "联系方式",
  9828. "电话": "电话",
  9829. "未提供": "未提供",
  9830. "电子邮箱": "电子邮箱",
  9831. "个人信息": "个人信息",
  9832. "姓氏": "姓氏",
  9833. "名字": "名字",
  9834. "出生日期": "出生日期",
  9835. "出生地": "出生地",
  9836. "文件类型": "文件类型",
  9837. "身份证": "身份证",
  9838. "文件号码": "文件号码",
  9839. "证件签发日期": "证件签发日期",
  9840. "国家": "国家",
  9841. "新加坡": "新加坡",
  9842. "地区": "地区",
  9843. "城市": "城市",
  9844. "常住地址": "常住地址",
  9845. "编辑": "编辑",
  9846. "未设置": "未设置",
  9847. "修改联系方式": "修改联系方式",
  9848. "请输入电话号码": "请输入电话号码",
  9849. "请输入电子邮箱": "请输入电子邮箱",
  9850. "未开始": "未开始",
  9851. "延期": "延期",
  9852. "网络类型": "网络类型",
  9853. "订单状态": "订单状态",
  9854. "处理中": "处理中",
  9855. "成功": "成功",
  9856. "失败": "失败",
  9857. "首次充值": "首次充值",
  9858. "是": "是",
  9859. "创建时间": "创建时间",
  9860. "订单号": "订单号",
  9861. "充值金额": "充值金额",
  9862. "实际到账": "实际到账",
  9863. "请选择记录查询区间": "请选择记录查询区间",
  9864. "开始": "开始",
  9865. "结束": "结束",
  9866. "条件筛选": "条件筛选",
  9867. "重置全部": "重置全部",
  9868. "立即查询": "立即查询",
  9869. "更新数据中...": "更新数据中...",
  9870. "银行信息": "银行信息",
  9871. "申请时间": "申请时间",
  9872. "提现成功": "提现成功",
  9873. "已驳回": "已驳回",
  9874. "网络/地址": "网络/地址",
  9875. "投注额超过您的余额": "投注额超过您的余额",
  9876. "潜在赢利": "潜在赢利",
  9877. "存款": "存款",
  9878. "前往投注单": "前往投注单",
  9879. "总赔率": "总赔率",
  9880. "投注": "投注",
  9881. "注单号": "注单号",
  9882. "赔率": "赔率",
  9883. "待结算": "待结算",
  9884. "投注金额": "投注金额",
  9885. "盈亏/派彩": "盈亏/派彩",
  9886. "请选择查询区间": "请选择查询区间",
  9887. "日期筛选": "日期筛选",
  9888. "加载最新记录...": "加载最新记录...",
  9889. "请选择查询日期": "请选择查询日期",
  9890. "全场": "全场",
  9891. "独赢": "独赢",
  9892. "半场独赢": "半场独赢",
  9893. "让球": "让球",
  9894. "半场让球": "半场让球",
  9895. "大小球": "大小球",
  9896. "半场大小球": "半场大小球",
  9897. "半场": "半场",
  9898. "大": "大",
  9899. "小": "小",
  9900. "赛事详情": "赛事详情",
  9901. "主胜": "主胜",
  9902. "客胜": "客胜",
  9903. "正在更新赛事...": "正在更新赛事...",
  9904. "确认提现": "确认提现",
  9905. "安全验证": "安全验证",
  9906. "请输入资金密码": "请输入资金密码",
  9907. "为保障您的资金安全,请输入资金密码": "为保障您的资金安全,请输入资金密码",
  9908. "pc28": "pc28",
  9909. "pc28分分彩": "pc28分分彩",
  9910. "获取最新数据...": "获取最新数据...",
  9911. "最新": "最新",
  9912. "咪牌": "咪牌",
  9913. "下一期": "下一期",
  9914. "pc28开奖详情": "pc28开奖详情",
  9915. "pc28开奖规则": "pc28开奖规则",
  9916. "确定投注": "确定投注",
  9917. "正在更新内容...": "正在更新内容...",
  9918. "有效": "有效",
  9919. "盘口已失效或关闭": "盘口已失效或关闭",
  9920. "全部类型": "全部类型",
  9921. "下注": "下注",
  9922. "资金冻结": "资金冻结",
  9923. "退款": "退款",
  9924. "未知类型": "未知类型",
  9925. "投注内容": "投注内容",
  9926. "投注本金": "投注本金",
  9927. "期号": "期号",
  9928. "待开奖": "待开奖",
  9929. "已中奖": "已中奖",
  9930. "未中奖": "未中奖",
  9931. "已撤单": "已撤单",
  9932. "投注记录": "投注记录",
  9933. "中奖": "中奖",
  9934. "已结算": "已结算",
  9935. "和局": "和局",
  9936. "平手半": "平手半",
  9937. "未结算": "未结算",
  9938. "已取消": "已取消",
  9939. "彩票": "彩票",
  9940. "体育": "体育",
  9941. "是否中奖": "是否中奖",
  9942. "结算状态": "结算状态",
  9943. "主客队赢": "主客队赢",
  9944. "进球大小": "进球大小",
  9945. "半场大小": "半场大小",
  9946. "半全场": "半全场",
  9947. "两队都进球": "两队都进球",
  9948. "让球结果": "让球结果",
  9949. "准确比分": "准确比分",
  9950. "客队": "客队",
  9951. "否": "否",
  9952. "单": "单",
  9953. "双": "双",
  9954. "上半场": "上半场",
  9955. "下半场": "下半场",
  9956. "主队": "主队",
  9957. "PC28分分彩": "PC28分分彩",
  9958. "彩票玩法": "彩票玩法",
  9959. "盈亏": "盈亏",
  9960. "PC28": "PC28",
  9961. "未开奖": "未开奖",
  9962. "六合彩": "六合彩",
  9963. "合局": "合局",
  9964. "澳门六合彩": "澳门六合彩",
  9965. "状态": "状态",
  9966. "赛事列表": "赛事列表",
  9967. "暂无投注项": "暂无投注项",
  9968. "玩法": "玩法",
  9969. "更多体育博彩": "更多体育博彩",
  9970. "去投注": "去投注",
  9971. "总赔率 (有效)": "总赔率 (有效)",
  9972. "开奖详情": "开奖详情",
  9973. "往期历史": "往期历史",
  9974. "开奖规则": "开奖规则",
  9975. "暂无玩法数据": "暂无玩法数据",
  9976. "点击展开": "点击展开",
  9977. "暂无赛事数据": "暂无赛事数据",
  9978. "注单详情": "注单详情",
  9979. "加载中...": "加载中...",
  9980. "盈亏金额": "盈亏金额",
  9981. "开奖信息": "开奖信息",
  9982. "期": "期",
  9983. "投注项": "投注项",
  9984. "下注金额": "下注金额",
  9985. "下注时间": "下注时间",
  9986. "收起详情": "收起详情",
  9987. "限额": "限额",
  9988. "总投注金额": "总投注金额",
  9989. "立即投注": "立即投注",
  9990. "开奖截图": "开奖截图",
  9991. "请选择币种": "请选择币种",
  9992. "请选择网络": "请选择网络",
  9993. "最大": "最大",
  9994. "汇率": "汇率",
  9995. "待处理": "待处理",
  9996. "加密货币提现": "加密货币提现",
  9997. "失败原因": "失败原因",
  9998. "来源地址": "来源地址",
  9999. "支付凭证": "支付凭证",
  10000. "变动后余额": "变动后余额",
  10001. "变动前余额": "变动前余额",
  10002. "查看凭证": "查看凭证",
  10003. "是否注销账户,注销账户后,系统将删除清空账户": "是否注销账户,注销账户后,系统将删除清空账户",
  10004. "修改密码": "修改密码",
  10005. "修改资金密码": "修改资金密码",
  10006. "注销账号": "注销账号",
  10007. "旧密码": "旧密码",
  10008. "新密码": "新密码",
  10009. "确认新密码": "确认新密码",
  10010. "请输入旧密码": "请输入旧密码",
  10011. "请输入新密码(至少6位)": "请输入新密码(至少6位)",
  10012. "请再次输入新密码": "请再次输入新密码",
  10013. "确认修改": "确认修改",
  10014. "旧资金密码": "旧资金密码",
  10015. "新资金密码": "新资金密码",
  10016. "确认新资金密码": "确认新资金密码",
  10017. "请输入旧密码(第一次设置资金密码可以为空)": "请输入旧密码(第一次设置资金密码可以为空)",
  10018. "请输入新资金密码(至少6位)": "请输入新资金密码(至少6位)",
  10019. "请输入新资金密码": "请输入新资金密码",
  10020. "请再次输入新资金密码": "请再次输入新资金密码",
  10021. "名称": "名称",
  10022. "性别": "性别",
  10023. "女": "女",
  10024. "未知": "未知",
  10025. "游客模式": "游客模式",
  10026. "正在加载": "正在加载",
  10027. "没有更多了": "没有更多了",
  10028. "点击加载更多": "点击加载更多",
  10029. "第": "第",
  10030. "期开奖": "期开奖",
  10031. "近期开奖": "近期开奖",
  10032. "购彩记录": "购彩记录",
  10033. "清空": "清空",
  10034. "距": "距",
  10035. "期截止": "期截止",
  10036. "已选注单": "已选注单",
  10037. "机选": "机选",
  10038. "取消原因": "取消原因",
  10039. "订单已取消": "订单已取消",
  10040. "红": "红",
  10041. "红波": "红波",
  10042. "蓝波": "蓝波",
  10043. "绿波": "绿波",
  10044. "蓝": "蓝",
  10045. "绿": "绿",
  10046. "特码": "特码",
  10047. "正码": "正码",
  10048. "正码特": "正码特",
  10049. "确定": "确定",
  10050. "当前比分": "当前比分",
  10051. "秒": "秒",
  10052. "分": "分",
  10053. "前": "前",
  10054. "中": "中",
  10055. "尾": "尾",
  10056. "已上传支付凭证": "已上传支付凭证",
  10057. "下注成功": "下注成功",
  10058. "下注中": "下注中",
  10059. "关闭": "关闭",
  10060. "购物车": "购物车",
  10061. "今天": "今天",
  10062. "周一": "周一",
  10063. "周二": "周二",
  10064. "周三": "周三",
  10065. "周四": "周四",
  10066. "周五": "周五",
  10067. "周六": "周六",
  10068. "周日": "周日",
  10069. "请选择投注单": "请选择投注单",
  10070. "暂无投注记录": "暂无投注记录",
  10071. "近期开奖记录": "近期开奖记录",
  10072. "本金": "本金",
  10073. "总金额": "总金额",
  10074. "温馨提示": "温馨提示",
  10075. "同意": "同意",
  10076. "单号": "单号",
  10077. "取": "取",
  10078. "投注成功": "投注成功",
  10079. "不可重新提交": "不可重新提交",
  10080. "投注时间": "投注时间",
  10081. "等待开奖中": "等待开奖中",
  10082. "注单单号": "注单单号",
  10083. "赛事信息": "赛事信息",
  10084. "选项": "选项",
  10085. "赔率玩法": "赔率玩法",
  10086. "盘口": "盘口",
  10087. "订单编号": "订单编号",
  10088. "复制成功": "复制成功",
  10089. "输入本金": "输入本金",
  10090. "请输入新密码": "请输入新密码",
  10091. "请再次输入确认密码": "请再次输入确认密码",
  10092. "两次输入的新密码不一致": "两次输入的新密码不一致",
  10093. "新密码不能与旧密码相同": "新密码不能与旧密码相同",
  10094. "新密码长度不能少于": "新密码长度不能少于",
  10095. "暂无相关资金记录": "暂无相关资金记录",
  10096. "余额不足": "余额不足",
  10097. "余额不足,去存款": "余额不足,去存款",
  10098. "验证码长度为": "验证码长度为",
  10099. "验证码已发送": "验证码已发送",
  10100. "两次输入的密码不一致": "两次输入的密码不一致",
  10101. "提现金额不能大于余额": "提现金额不能大于余额",
  10102. "个字符之间": "个字符之间",
  10103. "密码长度需在": "密码长度需在",
  10104. "位": "位",
  10105. "已选注单明细": "已选注单明细",
  10106. "已达最低投注": "已达最低投注",
  10107. "已达最高投注": "已达最高投注",
  10108. "暂无有效投注项,请移除锁定盘口或重新选择": "暂无有效投注项,请移除锁定盘口或重新选择",
  10109. "请补全下注金额": "请补全下注金额",
  10110. "期号 / 玩法": "期号 / 玩法",
  10111. "正在加载注单详情...": "正在加载注单详情...",
  10112. "为了保障您的权益,请先阅读并同意": "为了保障您的权益,请先阅读并同意",
  10113. "以下注单提交失败,是否重新提交?": "以下注单提交失败,是否重新提交?",
  10114. "正码1-6": "正码1-6",
  10115. "未知的赔率": "未知的赔率",
  10116. "盘口已更新": "盘口已更新",
  10117. "赔率已更新": "赔率已更新",
  10118. "赛事已结束": "赛事已结束",
  10119. "赛事已下架": "赛事已下架",
  10120. "赛事不存在": "赛事不存在",
  10121. "已锁盘": "已锁盘",
  10122. "下注失败原因": "下注失败原因",
  10123. "此注已停售": "此注已停售",
  10124. "缺少盘口数据": "缺少盘口数据",
  10125. "香港六合彩": "香港六合彩",
  10126. "主": "主",
  10127. "客": "客",
  10128. "派彩金额": "派彩金额",
  10129. "Time To Be Defined": "时间待定",
  10130. "Not Started": "未开赛",
  10131. "First Half": "上半场",
  10132. "First Half, Kick Off": "上半场,开球",
  10133. "Halftime": "中场休息",
  10134. "Second Half": "下半场",
  10135. "Second Half, 2nd Half Started": "下半场,已开球",
  10136. "Extra Time": "加时赛",
  10137. "Break Time": "休息时间",
  10138. "Penalty In Progress": "点球大战进行中",
  10139. "Match Suspended": "比赛暂停",
  10140. "Match Interrupted": "比赛中断",
  10141. "Match Finished": "比赛结束",
  10142. "Match Postponed": "比赛延期",
  10143. "Match Cancelled": "比赛取消",
  10144. "Match Abandoned": "比赛腰斩(废弃)",
  10145. "Technical Loss": "技术性判负",
  10146. "WalkOver": "弃权/退赛(对手直接晋级)",
  10147. "In Progress": "进行中",
  10148. "请先选择投注项": "请先选择投注项",
  10149. "结算时间": "结算时间",
  10150. "邀请码": "邀请码",
  10151. "请输入邀请码": "请输入邀请码",
  10152. "结算待发放": "结算待发放",
  10153. "优惠活动": "优惠活动",
  10154. "搜索赛事关键字": "搜索赛事关键字",
  10155. "选择支付方式": "选择支付方式",
  10156. "USDT充值": "USDT充值",
  10157. "当前汇率 (USDT/RMB)": "当前汇率 (USDT/RMB)",
  10158. "Withdraw": "Withdraw",
  10159. "选择提现方式": "选择提现方式",
  10160. "加载提现渠道中...": "加载提现渠道中...",
  10161. "请输入提现金额": "请输入提现金额",
  10162. "请输入 USDT 提现地址": "请输入 USDT 提现地址",
  10163. "资金密码": "资金密码",
  10164. "全部玩法": "全部玩法",
  10165. "展开": "展开",
  10166. "迈凯伦": "迈凯伦",
  10167. "帮助中心": "帮助中心",
  10168. "博彩责任": "博彩责任",
  10169. "隐私政策": "隐私政策",
  10170. "条款与协议": "条款与协议",
  10171. "快速链接": "快速链接",
  10172. "体育赛事": "体育赛事",
  10173. "滚球投注": "滚球投注",
  10174. "彩票娱乐": "彩票娱乐",
  10175. "社交平台": "社交平台",
  10176. "关于我们": "关于我们",
  10177. "官方合作伙伴": "官方合作伙伴",
  10178. "账号注册": "账号注册",
  10179. "请输入账号": "请输入账号",
  10180. "游客登陆": "游客登陆",
  10181. "在线客服": "在线客服",
  10182. "F1bet 是亚洲值得信赖的在线赌博网站,自从正式投入服务至今最完整和最新的在线赌博游戏。 F1bet有一个简单的使命和愿景是提供诚实和信任的服务。在近期与Mclaren、Teddy Sheringham达成赞助伙伴协议,进一步加深了“F1bet”的国际知名度,让平台的名声遍布全球。": "F1bet 是亚洲值得信赖的在线赌博网站,自从正式投入服务至今最完整和最新的在线赌博游戏。 F1bet有一个简单的使命和愿景是提供诚实和信任的服务。在近期与Mclaren、Teddy Sheringham达成赞助伙伴协议,进一步加深了“F1bet”的国际知名度,让平台的名声遍布全球。",
  10183. "为了提升用户体验,使用本网站后,我们可能使用Cookies技术从服务器中收集客户信息。如果您在F1bet注册或者继续使用网站,则您将被视为同意我们使用Cookies。": "为了提升用户体验,使用本网站后,我们可能使用Cookies技术从服务器中收集客户信息。如果您在F1bet注册或者继续使用网站,则您将被视为同意我们使用Cookies。",
  10184. "如果删除我们的Cookies或禁用我们之后的Cookies,将导致您无法使用平台的某些区域或特色功能。": "如果删除我们的Cookies或禁用我们之后的Cookies,将导致您无法使用平台的某些区域或特色功能。",
  10185. "© 2015 - 2026 版权所有并受法律保护。": "© 2015 - 2026 版权所有并受法律保护。",
  10186. "热门": "热门",
  10187. "立即进入": "立即进入",
  10188. "品牌大使": "品牌大使",
  10189. "塞巴斯蒂安·维特尔": "塞巴斯蒂安·维特尔",
  10190. "本平台仅向18岁以上成人提供娱乐服务,请理性投注,谨防沉迷。": "本平台仅向18岁以上成人提供娱乐服务,请理性投注,谨防沉迷。",
  10191. "体验更流畅,娱乐更安全。": "体验更流畅,娱乐更安全。",
  10192. "立即下载": "立即下载",
  10193. "联赛": "联赛",
  10194. "搜索": "搜索",
  10195. "余额宝": "余额宝",
  10196. "钱包管理": "钱包管理",
  10197. "优惠活动详情": "优惠活动详情",
  10198. "账号登录": "账号登录",
  10199. "已阅读并同意": "已阅读并同意",
  10200. "返回": "返回",
  10201. "下注金额不在范围内": "下注金额不在范围内",
  10202. "下注金额超过最高限额": "下注金额超过最高限额",
  10203. "为了保障您的权益,请先阅读并同意相关条款": "为了保障您的权益,请先阅读并同意相关条款",
  10204. "帮助": "帮助",
  10205. "客服": "客服",
  10206. "玩法规则": "玩法规则",
  10207. "规则条款": "规则条款",
  10208. "责任与权誉": "责任与权誉",
  10209. "收款账户": "收款账户",
  10210. "请选择收款账户": "请选择收款账户",
  10211. "距升级": "距升级",
  10212. "还需": "还需",
  10213. "成长值": "成长值",
  10214. "加拿大": "加拿大",
  10215. "极速": "极速",
  10216. "请输入金额": "请输入金额",
  10217. "单注限额": "单注限额",
  10218. "自动接受更好的赔率": "自动接受更好的赔率",
  10219. "批量设置金额": "批量设置金额",
  10220. "选择收款账户": "选择收款账户",
  10221. "暂无可用账户": "暂无可用账户",
  10222. "去添加账户": "去添加账户",
  10223. "添加账户": "添加账户",
  10224. "暂无账户记录": "暂无账户记录",
  10225. "添加账户": "添加账户",
  10226. "请输入银行名称或平台名": "请输入银行名称或平台名",
  10227. "银行名称/平台": "银行名称/平台",
  10228. "请输入收款账号或银行卡号": "请输入收款账号或银行卡号",
  10229. "收款账号(卡号)": "收款账号(卡号)",
  10230. "请输入收款人真实姓名": "请输入收款人真实姓名",
  10231. "真实姓名": "真实姓名",
  10232. "如:我的建行卡": "如:我的建行卡",
  10233. "别名(可选)": "别名(可选)",
  10234. "请填写所有带 * 的必填项": "请填写所有带 * 的必填项",
  10235. "添加账户": "添加账户",
  10236. "请输入银行名称或平台名": "请输入银行名称或平台名",
  10237. "银行名称/平台": "银行名称/平台",
  10238. "请输入收款账号或银行卡号": "请输入收款账号或银行卡号",
  10239. "收款账号(卡号)": "收款账号(卡号)",
  10240. "请输入收款人真实姓名": "请输入收款人真实姓名",
  10241. "真实姓名": "真实姓名",
  10242. "如:我的建行卡": "如:我的建行卡",
  10243. "别名(可选)": "别名(可选)",
  10244. "例如:支付宝": "例如:支付宝",
  10245. "请输入准确的 USDT 地址": "请输入准确的 USDT 地址",
  10246. "USDT 提现地址": "USDT 提现地址",
  10247. "如:波场TRC20钱包": "如:波场TRC20钱包",
  10248. "地址别名 (可选)": "地址别名 (可选)",
  10249. "明细": "明细",
  10250. "灵活存取,稳健收益": "灵活存取,稳健收益",
  10251. "余额宝总额(元)": "余额宝总额(元)",
  10252. "累计收益(元)": "累计收益(元)",
  10253. "转入": "转入",
  10254. "转出": "转出",
  10255. "全部": "全部",
  10256. "持仓中": "持仓中",
  10257. "已取出": "已取出",
  10258. "开始日期": "开始日期",
  10259. "结束日期": "结束日期",
  10260. "暂无持仓记录": "暂无持仓记录",
  10261. "转出余额宝": "转出余额宝",
  10262. "转出金额": "转出金额",
  10263. "请输入转出金额": "请输入转出金额",
  10264. "确认转出": "确认转出",
  10265. "转入余额宝": "转入余额宝",
  10266. "转入金额": "转入金额",
  10267. "请输入转入金额,最小为 1": "请输入转入金额,最小为 1",
  10268. "确认转入": "确认转入",
  10269. "请输入有效金额": "请输入有效金额",
  10270. "暂无持仓记录": "暂无持仓记录",
  10271. "暂无明细记录": "暂无明细记录",
  10272. "别名 (可选)": "别名 (可选)",
  10273. "全部资金": "全部资金",
  10274. "可用余额": "可用余额",
  10275. "没有发现相关记录": "没有发现相关记录",
  10276. "RMB提现": "RMB提现",
  10277. "天": "天",
  10278. "所有选项已全选": "所有选项已全选",
  10279. "确认提交吗?": "确认提交吗?",
  10280. "单注最高限制为": "单注最高限制为",
  10281. "总投注金额超过可用余额": "总投注金额超过可用余额",
  10282. "单注最高": "单注最高",
  10283. "单注最低限制为": "单注最低限制为",
  10284. "开奖结果": "开奖结果",
  10285. "开奖时间": "开奖时间",
  10286. "可赢金额": "可赢金额",
  10287. "查看订单详情": "查看订单详情",
  10288. "查看赛事详情": "查看赛事详情",
  10289. "即时比分": "即时比分",
  10290. "足球": "足球",
  10291. "类型": "类型",
  10292. "已退款": "已退款",
  10293. "世界杯": "世界杯",
  10294. "暂无盘口数据": "暂无盘口数据",
  10295. "收起": "收起",
  10296. "确认提交吗?": "确认提交吗?",
  10297. "可赢金额": "可赢金额",
  10298. "查看订单详情": "查看订单详情",
  10299. "查看赛事详情": "查看赛事详情",
  10300. "即时比分": "即时比分",
  10301. "足球": "足球",
  10302. "类型": "类型",
  10303. "已退款": "已退款",
  10304. "世界杯": "世界杯",
  10305. "暂无盘口数据": "暂无盘口数据",
  10306. "封盘中": "封盘中",
  10307. "加拿大28": "加拿大28",
  10308. "剩余本金": "剩余本金",
  10309. "日利率": "日利率",
  10310. "没有更多记录了": "没有更多记录了",
  10311. "正在加载...": "正在加载...",
  10312. "持仓时间": "持仓时间",
  10313. "小时": "小时",
  10314. "获取中...": "获取中...",
  10315. "复制": "复制",
  10316. "提交中...": "提交中...",
  10317. "刷新中...": "刷新中...",
  10318. "确认要删除这条账户记录吗?": "确认要删除这条账户记录吗?",
  10319. "删除中...": "删除中...",
  10320. "新资金密码长度不能少于6位": "新资金密码长度不能少于6位",
  10321. "两次输入的新资金密码不一致": "两次输入的新资金密码不一致",
  10322. "永久网址": "永久网址",
  10323. "请输入或选择充值金额": "请输入或选择充值金额",
  10324. "资金类型": "资金类型",
  10325. "删除成功": "删除成功",
  10326. "账户余额不足": "账户余额不足",
  10327. "请输入有效的提现金额": "请输入有效的提现金额",
  10328. "退款审核中": "退款审核中",
  10329. "退款被驳回": "退款被驳回",
  10330. "金额不能小于等于0": "金额不能小于等于0",
  10331. "退款时间": "退款时间",
  10332. "请输入大于0的有效金额": "请输入大于0的有效金额",
  10333. "请检查下注金额、限额及余额": "请检查下注金额、限额及余额",
  10334. "编辑账户": "编辑账户",
  10335. "极速28": "极速28",
  10336. "余额宝明细": "余额宝明细",
  10337. "资金类型": "资金类型",
  10338. "Match List": "Match List",
  10339. "赛事详情": "赛事详情"
  10340. };
  10341. const en$1 = {
  10342. "加载中": "Loading",
  10343. "操作失败": "Operation failed",
  10344. "请求失败,请稍后重试": "Request failed, please try again later",
  10345. "登录已过期,请重新登录": "Login expired, please login again",
  10346. "手机号": "Phone Number",
  10347. "邮箱": "Email",
  10348. "密码": "Password",
  10349. "忘记密码": "Forgot Password",
  10350. "注册账号": "Register Account",
  10351. "请输入": "Please enter",
  10352. "记住密码": "Remember Password",
  10353. "登录": "Login",
  10354. "验证码": "Verification Code",
  10355. "请输入6位验证码": "Please enter 6-digit verification code",
  10356. "请输入密码": "Please enter password",
  10357. "确认密码": "Confirm Password",
  10358. "请再次输入密码": "Please enter password again",
  10359. "已有账号": "Already have an account",
  10360. "前往登录": "Go to login",
  10361. "获取验证码": "Get Code",
  10362. "注册": "Register",
  10363. "过滤": "Filter",
  10364. "滚球": "In-Play",
  10365. "体育博彩": "Sports Betting",
  10366. "投注历史": "Betting History",
  10367. "我的": "Mine",
  10368. "首页": "Home",
  10369. "安全": "Security",
  10370. "注册并登录": "Register and Login",
  10371. "请输入有效的充值数量": "Please enter a valid deposit amount",
  10372. "请上传支付凭证截图": "Please upload a screenshot of the payment voucher",
  10373. "充值": "Deposit",
  10374. "暂无二维码": "No QR code available",
  10375. "选择币种": "Select Currency",
  10376. "选择区块链网络": "Select Blockchain Network",
  10377. "充值地址": "Deposit Address",
  10378. "请确认充值地址正确无误,错误地址将导致资产丢失且无法找回": "Please ensure the deposit address is correct; an incorrect address will result in irreversible loss of assets",
  10379. "充值数量": "Deposit Amount",
  10380. "请输入充值数量": "Please enter deposit amount",
  10381. "预计到账": "Expected Arrival",
  10382. "当前汇率": "Current Exchange Rate",
  10383. "上传支付凭证": "Upload Payment Voucher",
  10384. "点击上传": "Click to Upload",
  10385. "确认充值": "Confirm Deposit",
  10386. "保存头像": "Save Avatar",
  10387. "退出登录": "Logout",
  10388. "提现方式": "Withdrawal Method",
  10389. "提现币种": "Withdrawal Currency",
  10390. "提现网络": "Withdrawal Network",
  10391. "提现地址": "Withdrawal Address",
  10392. "提现金额": "Withdrawal Amount",
  10393. "手续费": "Handling Fee",
  10394. "请选择提现方式": "Please select withdrawal method",
  10395. "银行卡": "Bank Card",
  10396. "加密货币": "Cryptocurrency",
  10397. "请选择提现币种": "Please select withdrawal currency",
  10398. "请选择提现网络": "Please select withdrawal network",
  10399. "请输入提现地址": "Please enter withdrawal address",
  10400. "提款范围": "Withdrawal Range",
  10401. "钱包余额": "Wallet Balance",
  10402. "手续费比例": "Fee Rate",
  10403. "预计到账金额": "Expected Arrival Amount",
  10404. "提交": "Submit",
  10405. "提现": "Withdraw",
  10406. "收款名字": "Payee Name",
  10407. "银行名称": "Bank Name",
  10408. "银行账号": "Bank Account",
  10409. "银行地址": "Bank Address",
  10410. "国际代码": "Swift Code",
  10411. "其他": "Other",
  10412. "请输入收款名字": "Please enter payee name",
  10413. "请输入银行名称": "Please enter bank name",
  10414. "请输入银行账号": "Please enter bank account",
  10415. "请输入银行地址": "Please enter bank address",
  10416. "请输入国际代码": "Please enter Swift Code",
  10417. "其他信息": "Other Information",
  10418. "请先选择币种": "Please select currency first",
  10419. "提现金额不能小于": "Withdrawal amount cannot be less than",
  10420. "查询": "Query",
  10421. "重置": "Reset",
  10422. "暂无资金记录": "No fund records",
  10423. "流水号": "Serial Number",
  10424. "交易金额": "Transaction Amount",
  10425. "变更后余额": "Balance After Change",
  10426. "资金记录": "Fund Records",
  10427. "交易类型": "Transaction Type",
  10428. "日期区间": "Date Range",
  10429. "请选择日期区间": "Please select date range",
  10430. "记录": "Records",
  10431. "充值记录": "Deposit Records",
  10432. "提现记录": "Withdrawal Records",
  10433. "更多滚球": "More In-Play",
  10434. "主队赢": "Home Win",
  10435. "平局": "Draw",
  10436. "客队赢": "Away Win",
  10437. "进行中": "In Progress",
  10438. "已完场": "Finished",
  10439. "投注单": "Bet Slip",
  10440. "还没有账号": "Don't have an account",
  10441. "邮箱登录": "Email Login",
  10442. "手机号登录": "Phone Login",
  10443. "请输入登录邮箱": "Please enter login email",
  10444. "请输入登录密码": "Please enter login password",
  10445. "我已阅读并同意": "I have read and agree to",
  10446. "去注册": "Go to Register",
  10447. "版本": "Version",
  10448. "产品服务协议": "Product Terms of Service",
  10449. "请输入手机号": "Please enter phone number",
  10450. "取消": "Cancel",
  10451. "确认": "Confirm",
  10452. "选择区号": "Select Area Code",
  10453. "请输入验证码": "Please enter verification code",
  10454. "请先同意服务协议!": "Please agree to the Terms of Service first!",
  10455. "请先同意服务协议": "Please agree to the Terms of Service first",
  10456. "邮箱注册": "Email Registration",
  10457. "手机注册": "Phone Registration",
  10458. "请输入注册邮箱": "Please enter registration email",
  10459. "请设置登录密码": "Please set login password",
  10460. "请确认登录密码": "Please confirm login password",
  10461. "立即注册": "Register Now",
  10462. "去登录": "Go to Login",
  10463. "上传图片": "Upload Image",
  10464. "未设置用户名": "Username not set",
  10465. "暂无": "None",
  10466. "账户余额": "Account Balance",
  10467. "冻结金额": "Frozen Amount",
  10468. "账户安全": "Account Security",
  10469. "更换头像": "Change Avatar",
  10470. "保存": "Save",
  10471. "请先选择头像": "Please select an avatar first",
  10472. "提示": "Tip",
  10473. "确定要退出登录吗?": "Are you sure you want to log out?",
  10474. "个人资料": "Personal Profile",
  10475. "账户": "Account",
  10476. "账户号码": "Account Number",
  10477. "您的密码": "Your Password",
  10478. "注册日期": "Registration Date",
  10479. "联系方式": "Contact Info",
  10480. "电话": "Phone",
  10481. "未提供": "Not Provided",
  10482. "电子邮箱": "Email",
  10483. "个人信息": "Personal Info",
  10484. "姓氏": "Last Name",
  10485. "名字": "First Name",
  10486. "出生日期": "Date of Birth",
  10487. "出生地": "Place of Birth",
  10488. "文件类型": "Document Type",
  10489. "身份证": "ID Card",
  10490. "文件号码": "Document Number",
  10491. "证件签发日期": "Date of Issue",
  10492. "国家": "Country",
  10493. "新加坡": "Singapore",
  10494. "地区": "Region",
  10495. "城市": "City",
  10496. "常住地址": "Permanent Address",
  10497. "编辑": "Edit",
  10498. "未设置": "Not Set",
  10499. "修改联系方式": "Modify Contact Info",
  10500. "请输入电话号码": "Please enter phone number",
  10501. "请输入电子邮箱": "Please enter email address",
  10502. "未开始": "Not Started",
  10503. "延期": "Postponed",
  10504. "网络类型": "Network Type",
  10505. "订单状态": "Order Status",
  10506. "处理中": "Processing",
  10507. "成功": "Success",
  10508. "失败": "Failed",
  10509. "首次充值": "First Deposit",
  10510. "是": "Yes",
  10511. "创建时间": "Creation Time",
  10512. "订单号": "Order Number",
  10513. "充值金额": "Deposit Amount",
  10514. "实际到账": "Actual Arrival",
  10515. "请选择记录查询区间": "Please select record query range",
  10516. "开始": "Start",
  10517. "结束": "End",
  10518. "条件筛选": "Condition Filter",
  10519. "重置全部": "Reset All",
  10520. "立即查询": "Query Now",
  10521. "更新数据中...": "Updating Data...",
  10522. "银行信息": "Bank Info",
  10523. "申请时间": "Application Time",
  10524. "提现成功": "Withdrawal Successful",
  10525. "已驳回": "Rejected",
  10526. "网络/地址": "Network/Address",
  10527. "投注额超过您的余额": "Bet amount exceeds your balance",
  10528. "潜在赢利": "Potential Winnings",
  10529. "存款": "Deposit",
  10530. "前往投注单": "Go to Bet Slip",
  10531. "总赔率": "Total Odds",
  10532. "投注": "Bet",
  10533. "注单号": "Bet Slip Number",
  10534. "赔率": "Odds",
  10535. "待结算": "Pending Settlement",
  10536. "投注金额": "Bet Amount",
  10537. "盈亏/派彩": "P&L/Payout",
  10538. "请选择查询区间": "Please select query range",
  10539. "日期筛选": "Date Filter",
  10540. "加载最新记录...": "Loading latest records...",
  10541. "请选择查询日期": "Please select query date",
  10542. "全场": "Full Time",
  10543. "独赢": "1X2",
  10544. "半场独赢": "Half Time 1X2",
  10545. "让球": "Handicap",
  10546. "半场让球": "Half Time Handicap",
  10547. "大小球": "Over/Under",
  10548. "半场大小球": "Half Time Over/Under",
  10549. "半场": "Half Time",
  10550. "大": "Over",
  10551. "小": "Under",
  10552. "赛事详情": "Match Details",
  10553. "主胜": "Home Win",
  10554. "客胜": "Away Win",
  10555. "正在更新赛事...": "Updating Match...",
  10556. "确认提现": "Confirm Withdrawal",
  10557. "安全验证": "Security Verification",
  10558. "请输入资金密码": "Please enter fund password",
  10559. "为保障您的资金安全,请输入资金密码": "To protect your funds, please enter fund password",
  10560. "pc28": "PC28",
  10561. "pc28分分彩": "PC28 FF",
  10562. "获取最新数据...": "Getting latest data...",
  10563. "最新": "Latest",
  10564. "咪牌": "Squeeze",
  10565. "下一期": "Next Draw",
  10566. "pc28开奖详情": "PC28 Draw Details",
  10567. "pc28开奖规则": "PC28 Draw Rules",
  10568. "确定投注": "Confirm Bet",
  10569. "正在更新内容...": "Updating content...",
  10570. "有效": "Valid",
  10571. "盘口已失效或关闭": "Market is invalid or closed",
  10572. "全部类型": "All Types",
  10573. "下注": "Place Bet",
  10574. "资金冻结": "Funds Frozen",
  10575. "退款": "Refund",
  10576. "未知类型": "Unknown Type",
  10577. "投注内容": "Bet Details",
  10578. "投注本金": "Bet Principal",
  10579. "期号": "Draw Number",
  10580. "待开奖": "Waiting for Draw",
  10581. "已中奖": "Won",
  10582. "未中奖": "Not Won",
  10583. "已撤单": "Cancelled",
  10584. "投注记录": "Bet Records",
  10585. "中奖": "Won",
  10586. "已结算": "Settled",
  10587. "和局": "Tie",
  10588. "平手半": "Level Half",
  10589. "未结算": "Unsettled",
  10590. "已取消": "Cancelled",
  10591. "彩票": "Lottery",
  10592. "体育": "Sports",
  10593. "是否中奖": "Is Winning",
  10594. "结算状态": "Settlement Status",
  10595. "主客队赢": "Home/Away Win",
  10596. "进球大小": "Goals Over/Under",
  10597. "半场大小": "Half Time Over/Under",
  10598. "半全场": "Half Time/Full Time",
  10599. "两队都进球": "Both Teams to Score",
  10600. "让球结果": "Handicap Result",
  10601. "准确比分": "Correct Score",
  10602. "客队": "Away Team",
  10603. "否": "No",
  10604. "单": "Odd",
  10605. "双": "Even",
  10606. "上半场": "First Half",
  10607. "下半场": "Second Half",
  10608. "主队": "Home Team",
  10609. "PC28分分彩": "PC28 FF",
  10610. "彩票玩法": "Lottery Rules",
  10611. "盈亏": "P&L",
  10612. "PC28": "PC28",
  10613. "未开奖": "Not Drawn",
  10614. "六合彩": "Mark Six",
  10615. "合局": "Tie",
  10616. "澳门六合彩": "Macau Mark Six",
  10617. "状态": "Status",
  10618. "赛事列表": "Match List",
  10619. "暂无投注项": "No betting options",
  10620. "玩法": "Rules",
  10621. "更多体育博彩": "More Sports Betting",
  10622. "去投注": "Go to Bet",
  10623. "总赔率 (有效)": "Total Odds (Valid)",
  10624. "开奖详情": "Draw Details",
  10625. "往期历史": "Past History",
  10626. "开奖规则": "Draw Rules",
  10627. "暂无玩法数据": "No rule data",
  10628. "点击展开": "Click to expand",
  10629. "暂无赛事数据": "No match data",
  10630. "注单详情": "Bet Slip Details",
  10631. "加载中...": "Loading...",
  10632. "盈亏金额": "P&L Amount",
  10633. "开奖信息": "Draw Info",
  10634. "期": "Draw",
  10635. "投注项": "Bet Option",
  10636. "下注金额": "Bet Amount",
  10637. "下注时间": "Bet Time",
  10638. "收起详情": "Collapse Details",
  10639. "限额": "Limit",
  10640. "总投注金额": "Total Bet Amount",
  10641. "立即投注": "Bet Now",
  10642. "开奖截图": "Draw Screenshot",
  10643. "请选择币种": "Please select currency",
  10644. "请选择网络": "Please select network",
  10645. "最大": "Max",
  10646. "汇率": "Exchange Rate",
  10647. "待处理": "Pending",
  10648. "加密货币提现": "Crypto Withdrawal",
  10649. "失败原因": "Failure Reason",
  10650. "来源地址": "Source Address",
  10651. "支付凭证": "Payment Voucher",
  10652. "变动后余额": "Balance After Change",
  10653. "变动前余额": "Balance Before Change",
  10654. "查看凭证": "View Voucher",
  10655. "是否注销账户,注销账户后,系统将删除清空账户": "Do you want to delete the account? After deletion, the system will clear the account.",
  10656. "修改密码": "Change Password",
  10657. "修改资金密码": "Change Fund Password",
  10658. "注销账号": "Delete Account",
  10659. "旧密码": "Old Password",
  10660. "新密码": "New Password",
  10661. "确认新密码": "Confirm New Password",
  10662. "请输入旧密码": "Please enter old password",
  10663. "请输入新密码(至少6位)": "Please enter new password (at least 6 characters)",
  10664. "请再次输入新密码": "Please enter new password again",
  10665. "确认修改": "Confirm Modification",
  10666. "旧资金密码": "Old Fund Password",
  10667. "新资金密码": "New Fund Password",
  10668. "确认新资金密码": "Confirm New Fund Password",
  10669. "请输入旧密码(第一次设置资金密码可以为空)": "Please enter old password (can be empty for first time setting)",
  10670. "请输入新资金密码(至少6位)": "Please enter new fund password (at least 6 characters)",
  10671. "请输入新资金密码": "Please enter new fund password",
  10672. "请再次输入新资金密码": "Please enter new fund password again",
  10673. "名称": "Name",
  10674. "性别": "Gender",
  10675. "女": "Female",
  10676. "未知": "Unknown",
  10677. "游客模式": "Guest Mode",
  10678. "正在加载": "Loading",
  10679. "没有更多了": "No more",
  10680. "点击加载更多": "Click to load more",
  10681. "第": "No.",
  10682. "期开奖": "Draw",
  10683. "近期开奖": "Recent Draws",
  10684. "购彩记录": "Lottery Records",
  10685. "清空": "Clear",
  10686. "距": "Until",
  10687. "期截止": "Draw Closes",
  10688. "已选注单": "Selected Bet Slips",
  10689. "机选": "Quick Pick",
  10690. "取消原因": "Cancel Reason",
  10691. "订单已取消": "Order Cancelled",
  10692. "红": "Red",
  10693. "红波": "Red Wave",
  10694. "蓝波": "Blue Wave",
  10695. "绿波": "Green Wave",
  10696. "蓝": "Blue",
  10697. "绿": "Green",
  10698. "特码": "Special Number",
  10699. "正码": "Normal Number",
  10700. "正码特": "Normal Special",
  10701. "确定": "Confirm",
  10702. "当前比分": "Current Score",
  10703. "秒": "Sec",
  10704. "分": "Min",
  10705. "前": "Front",
  10706. "中": "Middle",
  10707. "尾": "Tail",
  10708. "已上传支付凭证": "Payment voucher uploaded",
  10709. "下注成功": "Bet Successful",
  10710. "下注中": "Betting in progress",
  10711. "关闭": "Close",
  10712. "购物车": "Cart",
  10713. "今天": "Today",
  10714. "周一": "Monday",
  10715. "周二": "Tuesday",
  10716. "周三": "Wednesday",
  10717. "周四": "Thursday",
  10718. "周五": "Friday",
  10719. "周六": "Saturday",
  10720. "周日": "Sunday",
  10721. "请选择投注单": "Please select bet slip",
  10722. "暂无投注记录": "No bet records",
  10723. "近期开奖记录": "Recent Draw Records",
  10724. "本金": "Principal",
  10725. "总金额": "Total Amount",
  10726. "温馨提示": "Warm Reminder",
  10727. "同意": "Agree",
  10728. "单号": "Order Number",
  10729. "取": "Cancel",
  10730. "投注成功": "Bet Successful",
  10731. "不可重新提交": "Cannot resubmit",
  10732. "投注时间": "Bet Time",
  10733. "等待开奖中": "Waiting for draw",
  10734. "注单单号": "Bet Slip Number",
  10735. "赛事信息": "Match Info",
  10736. "选项": "Options",
  10737. "赔率玩法": "Odds Rules",
  10738. "盘口": "Market",
  10739. "订单编号": "Order Number",
  10740. "复制成功": "Copied Successfully",
  10741. "输入本金": "Enter Principal",
  10742. "请输入新密码": "Please enter new password",
  10743. "请再次输入确认密码": "Please enter confirm password again",
  10744. "两次输入的新密码不一致": "The two new passwords entered do not match",
  10745. "新密码不能与旧密码相同": "New password cannot be the same as old password",
  10746. "新密码长度不能少于": "New password length cannot be less than",
  10747. "暂无相关资金记录": "No relevant fund records",
  10748. "余额不足": "Insufficient Balance",
  10749. "余额不足,去存款": "Insufficient balance, go to deposit",
  10750. "验证码长度为": "Verification code length is",
  10751. "验证码已发送": "Verification code sent",
  10752. "两次输入的密码不一致": "The two passwords entered do not match",
  10753. "提现金额不能大于余额": "Withdrawal amount cannot be greater than balance",
  10754. "个字符之间": "characters",
  10755. "密码长度需在": "Password length must be between",
  10756. "位": "digits",
  10757. "已选注单明细": "Selected Bet Slip Details",
  10758. "已达最低投注": "Minimum bet reached",
  10759. "已达最高投注": "Maximum bet reached",
  10760. "暂无有效投注项,请移除锁定盘口或重新选择": "No valid bet options, please remove locked markets or reselect",
  10761. "请补全下注金额": "Please complete bet amount",
  10762. "期号 / 玩法": "Draw Number / Rules",
  10763. "正在加载注单详情...": "Loading bet slip details...",
  10764. "为了保障您的权益,请先阅读并同意": "To protect your rights, please read and agree to",
  10765. "以下注单提交失败,是否重新提交?": "The following bet slips failed to submit, resubmit?",
  10766. "正码1-6": "Normal Number 1-6",
  10767. "未知的赔率": "Unknown Odds",
  10768. "盘口已更新": "Market Updated",
  10769. "赔率已更新": "Odds Updated",
  10770. "赛事已结束": "Match Ended",
  10771. "赛事已下架": "Match Removed",
  10772. "赛事不存在": "Match Does Not Exist",
  10773. "已锁盘": "Market Locked",
  10774. "下注失败原因": "Reason for bet failure",
  10775. "此注已停售": "This bet is suspended",
  10776. "缺少盘口数据": "Missing market data",
  10777. "香港六合彩": "Hong Kong Mark Six",
  10778. "主": "Home",
  10779. "客": "Away",
  10780. "派彩金额": "Payout Amount",
  10781. "Time To Be Defined": "Time To Be Defined",
  10782. "Not Started": "Not Started",
  10783. "First Half": "First Half",
  10784. "First Half, Kick Off": "First Half, Kick Off",
  10785. "Halftime": "Halftime",
  10786. "Second Half": "Second Half",
  10787. "Second Half, 2nd Half Started": "Second Half, 2nd Half Started",
  10788. "Extra Time": "Extra Time",
  10789. "Break Time": "Break Time",
  10790. "Penalty In Progress": "Penalty In Progress",
  10791. "Match Suspended": "Match Suspended",
  10792. "Match Interrupted": "Match Interrupted",
  10793. "Match Finished": "Match Finished",
  10794. "Match Postponed": "Match Postponed",
  10795. "Match Cancelled": "Match Cancelled",
  10796. "Match Abandoned": "Match Abandoned",
  10797. "Technical Loss": "Technical Loss",
  10798. "WalkOver": "WalkOver",
  10799. "In Progress": "In Progress",
  10800. "请先选择投注项": "Please select a bet option first",
  10801. "结算时间": "Settlement Time",
  10802. "邀请码": "Invitation Code",
  10803. "请输入邀请码": "Please enter invitation code",
  10804. "结算待发放": "Settlement Pending",
  10805. "优惠活动": "Promotions",
  10806. "搜索赛事关键字": "Search match keywords",
  10807. "选择支付方式": "Select Payment Method",
  10808. "USDT充值": "USDT Deposit",
  10809. "当前汇率 (USDT/RMB)": "Current Exchange Rate (USDT/RMB)",
  10810. "Withdraw": "Withdraw",
  10811. "选择提现方式": "Select Withdrawal Method",
  10812. "加载提现渠道中...": "Loading withdrawal channels...",
  10813. "请输入提现金额": "Please enter withdrawal amount",
  10814. "请输入 USDT 提现地址": "Please enter USDT withdrawal address",
  10815. "资金密码": "Fund Password",
  10816. "全部玩法": "All Rules",
  10817. "展开": "Expand",
  10818. "迈凯伦": "McLaren",
  10819. "帮助中心": "Help Center",
  10820. "博彩责任": "Responsible Gaming",
  10821. "隐私政策": "Privacy Policy",
  10822. "条款与协议": "Terms and Conditions",
  10823. "快速链接": "Quick Links",
  10824. "体育赛事": "Sports Events",
  10825. "滚球投注": "In-Play Betting",
  10826. "彩票娱乐": "Lottery Entertainment",
  10827. "社交平台": "Social Platforms",
  10828. "关于我们": "About Us",
  10829. "官方合作伙伴": "Official Partners",
  10830. "账号注册": "Account Registration",
  10831. "请输入账号": "Please enter account",
  10832. "游客登陆": "Guest Login",
  10833. "在线客服": "Online Customer Service",
  10834. "F1bet 是亚洲值得信赖的在线赌博网站,自从正式投入服务至今最完整和最新的在线赌博游戏。 F1bet有一个简单的使命和愿景是提供诚实和信任的服务。在近期与Mclaren、Teddy Sheringham达成赞助伙伴协议,进一步加深了“F1bet”的国际知名度,让平台的名声遍布全球。": "F1bet is Asia's trusted online gambling website. Since its official launch, it has offered the most complete and latest online gambling games. F1bet has a simple mission and vision: to provide honest and trustworthy services. The recent sponsorship agreements with McLaren and Teddy Sheringham have further deepened the international popularity of 'F1bet', making the platform's reputation spread worldwide.",
  10835. "为了提升用户体验,使用本网站后,我们可能使用Cookies技术从服务器中收集客户信息。如果您在F1bet注册或者继续使用网站,则您将被视为同意我们使用Cookies。": "To improve user experience, we may use Cookies technology to collect customer information from the server after you use this website. If you register or continue to use the website at F1bet, you will be deemed to have consented to our use of Cookies.",
  10836. "如果删除我们的Cookies或禁用我们之后的Cookies,将导致您无法使用平台的某些区域或特色功能。": "If you delete our Cookies or disable our future Cookies, you will not be able to use certain areas or special features of the platform.",
  10837. "© 2015 - 2026 版权所有并受法律保护。": "© 2015 - 2026 All rights reserved and protected by law.",
  10838. "热门": "Hot",
  10839. "立即进入": "Enter Now",
  10840. "品牌大使": "Brand Ambassador",
  10841. "塞巴斯蒂安·维特尔": "Sebastian Vettel",
  10842. "本平台仅向18岁以上成人提供娱乐服务,请理性投注,谨防沉迷。": "This platform only provides entertainment services to adults over 18 years old. Please bet rationally and avoid addiction.",
  10843. "体验更流畅,娱乐更安全。": "Smoother experience, safer entertainment.",
  10844. "立即下载": "Download Now",
  10845. "联赛": "League",
  10846. "搜索": "Search",
  10847. "余额宝": "Yu'e Bao",
  10848. "钱包管理": "Wallet Management",
  10849. "优惠活动详情": "Promotion Details",
  10850. "账号登录": "Account Login",
  10851. "已阅读并同意": "Have read and agreed",
  10852. "返回": "Return",
  10853. "下注金额不在范围内": "Bet amount is out of range",
  10854. "下注金额超过最高限额": "Bet amount exceeds maximum limit",
  10855. "为了保障您的权益,请先阅读并同意相关条款": "To protect your rights, please read and agree to the relevant terms first",
  10856. "帮助": "Help",
  10857. "客服": "Customer Service",
  10858. "玩法规则": "Rules",
  10859. "规则条款": "Terms and Conditions",
  10860. "责任与权誉": "Responsibility and Reputation",
  10861. "收款账户": "Receiving Account",
  10862. "请选择收款账户": "Please select receiving account",
  10863. "距升级": "To upgrade",
  10864. "还需": "still need",
  10865. "成长值": "Growth Value",
  10866. "加拿大": "Canada",
  10867. "极速": "Speed",
  10868. "请输入金额": "Please enter amount",
  10869. "单注限额": "Single Bet Limit",
  10870. "自动接受更好的赔率": "Auto accept better odds",
  10871. "批量设置金额": "Batch set amount",
  10872. "选择收款账户": "Select receiving account",
  10873. "暂无可用账户": "No available account",
  10874. "去添加账户": "Go to add account",
  10875. "添加账户": "Add Account",
  10876. "暂无账户记录": "No account records",
  10877. "添加账户": "Add Account",
  10878. "请输入银行名称或平台名": "Please enter bank or platform name",
  10879. "银行名称/平台": "Bank Name/Platform",
  10880. "请输入收款账号或银行卡号": "Please enter receiving account or bank card number",
  10881. "收款账号(卡号)": "Receiving Account (Card No.)",
  10882. "请输入收款人真实姓名": "Please enter payee's real name",
  10883. "真实姓名": "Real Name",
  10884. "如:我的建行卡": "e.g., My CCB Card",
  10885. "别名(可选)": "Alias (Optional)",
  10886. "请填写所有带 * 的必填项": "Please fill in all mandatory fields marked with *",
  10887. "添加账户": "Add Account",
  10888. "请输入银行名称或平台名": "Please enter bank or platform name",
  10889. "银行名称/平台": "Bank Name/Platform",
  10890. "请输入收款账号或银行卡号": "Please enter receiving account or bank card number",
  10891. "收款账号(卡号)": "Receiving Account (Card No.)",
  10892. "请输入收款人真实姓名": "Please enter payee's real name",
  10893. "真实姓名": "Real Name",
  10894. "如:我的建行卡": "e.g., My CCB Card",
  10895. "别名(可选)": "Alias (Optional)",
  10896. "例如:支付宝": "e.g., Alipay",
  10897. "请输入准确的 USDT 地址": "Please enter accurate USDT address",
  10898. "USDT 提现地址": "USDT Withdrawal Address",
  10899. "如:波场TRC20钱包": "e.g., Tron TRC20 Wallet",
  10900. "地址别名 (可选)": "Address Alias (Optional)",
  10901. "明细": "Details",
  10902. "灵活存取,稳健收益": "Flexible deposit and withdrawal, steady returns",
  10903. "余额宝总额(元)": "Total Savings Amount (Yuan)",
  10904. "累计收益(元)": "Cumulative Yield (Yuan)",
  10905. "转入": "Transfer In",
  10906. "转出": "Transfer Out",
  10907. "全部": "All",
  10908. "持仓中": "Holding",
  10909. "已取出": "Withdrawn",
  10910. "开始日期": "Start Date",
  10911. "结束日期": "End Date",
  10912. "暂无持仓记录": "No holding records",
  10913. "转出余额宝": "Transfer out of Savings",
  10914. "转出金额": "Transfer Out Amount",
  10915. "请输入转出金额": "Please enter transfer out amount",
  10916. "确认转出": "Confirm Transfer Out",
  10917. "转入余额宝": "Transfer into Savings",
  10918. "转入金额": "Transfer In Amount",
  10919. "请输入转入金额,最小为 1": "Please enter transfer in amount, minimum is 1",
  10920. "确认转入": "Confirm Transfer In",
  10921. "请输入有效金额": "Please enter valid amount",
  10922. "暂无持仓记录": "No holding records",
  10923. "暂无明细记录": "No detail records",
  10924. "别名 (可选)": "Alias (Optional)",
  10925. "全部资金": "Total Funds",
  10926. "可用余额": "Available Balance",
  10927. "没有发现相关记录": "No relevant records found",
  10928. "RMB提现": "RMB Withdrawal",
  10929. "天": "Day",
  10930. "所有选项已全选": "All options selected",
  10931. "确认提交吗?": "Confirm submission?",
  10932. "单注最高限制为": "Max single bet limit is",
  10933. "总投注金额超过可用余额": "Total bet amount exceeds available balance",
  10934. "单注最高": "Single Bet Max",
  10935. "单注最低限制为": "Min single bet limit is",
  10936. "开奖结果": "Draw Result",
  10937. "开奖时间": "Draw Time",
  10938. "可赢金额": "Win Amount",
  10939. "查看订单详情": "View Order Details",
  10940. "查看赛事详情": "View Match Details",
  10941. "即时比分": "Live Score",
  10942. "足球": "Football",
  10943. "类型": "Type",
  10944. "已退款": "Refunded",
  10945. "世界杯": "World Cup",
  10946. "暂无盘口数据": "No market data",
  10947. "收起": "Collapse",
  10948. "确认提交吗?": "Confirm submission?",
  10949. "可赢金额": "Win Amount",
  10950. "查看订单详情": "View Order Details",
  10951. "查看赛事详情": "View Match Details",
  10952. "即时比分": "Live Score",
  10953. "足球": "Football",
  10954. "类型": "Type",
  10955. "已退款": "Refunded",
  10956. "世界杯": "World Cup",
  10957. "暂无盘口数据": "No market data",
  10958. "封盘中": "Market Closed",
  10959. "加拿大28": "Canada 28",
  10960. "剩余本金": "Remaining Principal",
  10961. "日利率": "Daily Interest Rate",
  10962. "没有更多记录了": "No more records",
  10963. "正在加载...": "Loading...",
  10964. "持仓时间": "Holding Time",
  10965. "小时": "Hour(s)",
  10966. "获取中...": "Fetching...",
  10967. "复制": "Copy",
  10968. "提交中...": "Submitting...",
  10969. "刷新中...": "Refreshing...",
  10970. "确认要删除这条账户记录吗?": "Are you sure you want to delete this account record?",
  10971. "删除中...": "Deleting...",
  10972. "新资金密码长度不能少于6位": "New fund password cannot be less than 6 characters",
  10973. "两次输入的新资金密码不一致": "The two new fund passwords entered do not match",
  10974. "请输入或选择充值金额": "Please enter or select a deposit amount",
  10975. "永久网址": "Permanent URL",
  10976. "请输入或选择充值金额": "Please enter or select a deposit amount",
  10977. "资金类型": "Fund Type",
  10978. "删除成功": "Deleted successfully",
  10979. "账户余额不足": "Insufficient account balance",
  10980. "请输入有效的提现金额": "Please enter a valid withdrawal amount",
  10981. "退款审核中": "Refund under review",
  10982. "退款被驳回": "Refund rejected",
  10983. "金额不能小于等于0": "Amount must be greater than 0",
  10984. "退款时间": "Refund Time",
  10985. "请输入大于0的有效金额": "Please enter a valid amount greater than 0",
  10986. "请检查下注金额、限额及余额": "Please check your bet amount, limit, and balance",
  10987. "编辑账户": "Edit Account",
  10988. "极速28": "Turbo 28",
  10989. "余额宝明细": "Savings Vault Details",
  10990. "资金类型": "Fund Type",
  10991. "Match Details": "Match Details",
  10992. "Match List": "Match List"
  10993. };
  10994. const vi = {
  10995. "加载中": "Đang tải",
  10996. "操作失败": "Thao tác thất bại",
  10997. "请求失败,请稍后重试": "Yêu cầu thất bại, vui lòng thử lại sau",
  10998. "登录已过期,请重新登录": "Phiên đăng nhập đã hết hạn, vui lòng đăng nhập lại",
  10999. "手机号": "Số điện thoại",
  11000. "邮箱": "Email",
  11001. "密码": "Mật khẩu",
  11002. "忘记密码": "Quên mật khẩu",
  11003. "注册账号": "Đăng ký tài khoản",
  11004. "请输入": "Vui lòng nhập",
  11005. "记住密码": "Nhớ mật khẩu",
  11006. "登录": "Đăng nhập",
  11007. "验证码": "Mã xác minh",
  11008. "请输入6位验证码": "Vui lòng nhập mã xác minh 6 chữ số",
  11009. "请输入密码": "Vui lòng nhập mật khẩu",
  11010. "确认密码": "Xác nhận mật khẩu",
  11011. "请再次输入密码": "Vui lòng nhập lại mật khẩu",
  11012. "已有账号": "Đã có tài khoản",
  11013. "前往登录": "Đi đến đăng nhập",
  11014. "获取验证码": "Lấy mã xác minh",
  11015. "注册": "Đăng ký",
  11016. "过滤": "Lọc",
  11017. "滚球": "Cược rung",
  11018. "体育博彩": "Cá cược thể thao",
  11019. "投注历史": "Lịch sử cược",
  11020. "我的": "Của tôi",
  11021. "首页": "Trang chủ",
  11022. "安全": "Bảo mật",
  11023. "注册并登录": "Đăng ký và đăng nhập",
  11024. "请输入有效的充值数量": "Vui lòng nhập số tiền nạp hợp lệ",
  11025. "请上传支付凭证截图": "Vui lòng tải lên ảnh chụp biên lai thanh toán",
  11026. "充值": "Nạp tiền",
  11027. "暂无二维码": "Chưa có mã QR",
  11028. "选择币种": "Chọn loại tiền",
  11029. "选择区块链网络": "Chọn mạng blockchain",
  11030. "充值地址": "Địa chỉ nạp tiền",
  11031. "请确认充值地址正确无误,错误地址将导致资产丢失且无法找回": "Vui lòng xác nhận địa chỉ nạp tiền chính xác, địa chỉ sai sẽ dẫn đến mất tài sản và không thể khôi phục",
  11032. "充值数量": "Số tiền nạp",
  11033. "请输入充值数量": "Vui lòng nhập số tiền nạp",
  11034. "预计到账": "Dự kiến nhận được",
  11035. "当前汇率": "Tỷ giá hiện tại",
  11036. "上传支付凭证": "Tải lên biên lai thanh toán",
  11037. "点击上传": "Nhấp để tải lên",
  11038. "确认充值": "Xác nhận nạp tiền",
  11039. "保存头像": "Lưu ảnh đại diện",
  11040. "退出登录": "Đăng xuất",
  11041. "提现方式": "Phương thức rút tiền",
  11042. "提现币种": "Loại tiền rút",
  11043. "提现网络": "Mạng rút tiền",
  11044. "提现地址": "Địa chỉ rút tiền",
  11045. "提现金额": "Số tiền rút",
  11046. "手续费": "Phí giao dịch",
  11047. "请选择提现方式": "Vui lòng chọn phương thức rút tiền",
  11048. "银行卡": "Thẻ ngân hàng",
  11049. "加密货币": "Tiền điện tử",
  11050. "请选择提现币种": "Vui lòng chọn loại tiền rút",
  11051. "请选择提现网络": "Vui lòng chọn mạng rút tiền",
  11052. "请输入提现地址": "Vui lòng nhập địa chỉ rút tiền",
  11053. "提款范围": "Phạm vi rút tiền",
  11054. "钱包余额": "Số dư ví",
  11055. "手续费比例": "Tỷ lệ phí",
  11056. "预计到账金额": "Số tiền dự kiến nhận",
  11057. "提交": "Gửi đi",
  11058. "提现": "Rút tiền",
  11059. "收款名字": "Tên người nhận",
  11060. "银行名称": "Tên ngân hàng",
  11061. "银行账号": "Số tài khoản ngân hàng",
  11062. "银行地址": "Địa chỉ ngân hàng",
  11063. "国际代码": "Mã quốc tế (Swift)",
  11064. "其他": "Khác",
  11065. "请输入收款名字": "Vui lòng nhập tên người nhận",
  11066. "请输入银行名称": "Vui lòng nhập tên ngân hàng",
  11067. "请输入银行账号": "Vui lòng nhập số tài khoản ngân hàng",
  11068. "请输入银行地址": "Vui lòng nhập địa chỉ ngân hàng",
  11069. "请输入国际代码": "Vui lòng nhập mã quốc tế",
  11070. "其他信息": "Thông tin khác",
  11071. "请先选择币种": "Vui lòng chọn loại tiền trước",
  11072. "提现金额不能小于": "Số tiền rút không được nhỏ hơn",
  11073. "查询": "Tra cứu",
  11074. "重置": "Đặt lại",
  11075. "暂无资金记录": "Chưa có lịch sử giao dịch",
  11076. "流水号": "Mã giao dịch",
  11077. "交易金额": "Số tiền giao dịch",
  11078. "变更后余额": "Số dư sau thay đổi",
  11079. "资金记录": "Lịch sử quỹ",
  11080. "交易类型": "Loại giao dịch",
  11081. "日期区间": "Khoảng thời gian",
  11082. "请选择日期区间": "Vui lòng chọn khoảng thời gian",
  11083. "记录": "Lịch sử",
  11084. "充值记录": "Lịch sử nạp tiền",
  11085. "提现记录": "Lịch sử rút tiền",
  11086. "更多滚球": "Thêm cược rung",
  11087. "主队赢": "Đội nhà thắng",
  11088. "平局": "Hòa",
  11089. "客队赢": "Đội khách thắng",
  11090. "进行中": "Đang diễn ra",
  11091. "已完场": "Đã kết thúc",
  11092. "投注单": "Phiếu cược",
  11093. "还没有账号": "Chưa có tài khoản",
  11094. "邮箱登录": "Đăng nhập bằng Email",
  11095. "手机号登录": "Đăng nhập bằng số điện thoại",
  11096. "请输入登录邮箱": "Vui lòng nhập email đăng nhập",
  11097. "请输入登录密码": "Vui lòng nhập mật khẩu đăng nhập",
  11098. "我已阅读并同意": "Tôi đã đọc và đồng ý",
  11099. "去注册": "Đi đăng ký",
  11100. "版本": "Phiên bản",
  11101. "产品服务协议": "Thỏa thuận dịch vụ",
  11102. "请输入手机号": "Vui lòng nhập số điện thoại",
  11103. "取消": "Hủy bỏ",
  11104. "确认": "Xác nhận",
  11105. "选择区号": "Chọn mã vùng",
  11106. "请输入验证码": "Vui lòng nhập mã xác minh",
  11107. "请先同意服务协议!": "Vui lòng đồng ý với thỏa thuận dịch vụ trước!",
  11108. "请先同意服务协议": "Vui lòng đồng ý với thỏa thuận dịch vụ trước",
  11109. "邮箱注册": "Đăng ký bằng email",
  11110. "手机注册": "Đăng ký bằng số điện thoại",
  11111. "请输入注册邮箱": "Vui lòng nhập email đăng ký",
  11112. "请设置登录密码": "Vui lòng thiết lập mật khẩu đăng nhập",
  11113. "请确认登录密码": "Vui lòng xác nhận mật khẩu đăng nhập",
  11114. "立即注册": "Đăng ký ngay",
  11115. "去登录": "Đi đăng nhập",
  11116. "上传图片": "Tải ảnh lên",
  11117. "未设置用户名": "Chưa thiết lập tên người dùng",
  11118. "暂无": "Không có",
  11119. "账户余额": "Số dư tài khoản",
  11120. "冻结金额": "Số tiền đóng băng",
  11121. "账户安全": "Bảo mật tài khoản",
  11122. "更换头像": "Đổi ảnh đại diện",
  11123. "保存": "Lưu",
  11124. "请先选择头像": "Vui lòng chọn ảnh đại diện trước",
  11125. "提示": "Nhắc nhở",
  11126. "确定要退出登录吗?": "Bạn có chắc chắn muốn đăng xuất không?",
  11127. "个人资料": "Hồ sơ cá nhân",
  11128. "账户": "Tài khoản",
  11129. "账户号码": "Số tài khoản",
  11130. "您的密码": "Mật khẩu của bạn",
  11131. "注册日期": "Ngày đăng ký",
  11132. "联系方式": "Thông tin liên hệ",
  11133. "电话": "Điện thoại",
  11134. "未提供": "Chưa cung cấp",
  11135. "电子邮箱": "Địa chỉ Email",
  11136. "个人信息": "Thông tin cá nhân",
  11137. "姓氏": "Họ",
  11138. "名字": "Tên",
  11139. "出生日期": "Ngày sinh",
  11140. "出生地": "Nơi sinh",
  11141. "文件类型": "Loại giấy tờ",
  11142. "身份证": "CMND/CCCD",
  11143. "文件号码": "Số giấy tờ",
  11144. "证件签发日期": "Ngày cấp giấy tờ",
  11145. "国家": "Quốc gia",
  11146. "新加坡": "Singapore",
  11147. "地区": "Khu vực",
  11148. "城市": "Thành phố",
  11149. "常住地址": "Địa chỉ thường trú",
  11150. "编辑": "Chỉnh sửa",
  11151. "未设置": "Chưa thiết lập",
  11152. "修改联系方式": "Sửa thông tin liên hệ",
  11153. "请输入电话号码": "Vui lòng nhập số điện thoại",
  11154. "请输入电子邮箱": "Vui lòng nhập email",
  11155. "未开始": "Chưa bắt đầu",
  11156. "延期": "Hoãn lại",
  11157. "网络类型": "Loại mạng",
  11158. "订单状态": "Trạng thái đơn hàng",
  11159. "处理中": "Đang xử lý",
  11160. "成功": "Thành công",
  11161. "失败": "Thất bại",
  11162. "首次充值": "Nạp lần đầu",
  11163. "是": "Có",
  11164. "创建时间": "Thời gian tạo",
  11165. "订单号": "Mã đơn hàng",
  11166. "充值金额": "Số tiền nạp",
  11167. "实际到账": "Thực nhận",
  11168. "请选择记录查询区间": "Vui lòng chọn khoảng thời gian tra cứu",
  11169. "开始": "Bắt đầu",
  11170. "结束": "Kết thúc",
  11171. "条件筛选": "Lọc điều kiện",
  11172. "重置全部": "Đặt lại tất cả",
  11173. "立即查询": "Tra cứu ngay",
  11174. "更新数据中...": "Đang cập nhật dữ liệu...",
  11175. "银行信息": "Thông tin ngân hàng",
  11176. "申请时间": "Thời gian đăng ký",
  11177. "提现成功": "Rút tiền thành công",
  11178. "已驳回": "Đã từ chối",
  11179. "网络/地址": "Mạng/Địa chỉ",
  11180. "投注额超过您的余额": "Tiền cược vượt quá số dư của bạn",
  11181. "潜在赢利": "Tiền thắng tiềm năng",
  11182. "存款": "Gửi tiền",
  11183. "前往投注单": "Đến phiếu cược",
  11184. "总赔率": "Tổng tỷ lệ cược",
  11185. "投注": "Đặt cược",
  11186. "注单号": "Mã phiếu cược",
  11187. "赔率": "Tỷ lệ cược",
  11188. "待结算": "Chờ kết toán",
  11189. "投注金额": "Tiền cược",
  11190. "盈亏/派彩": "Thắng thua / Trả thưởng",
  11191. "请选择查询区间": "Vui lòng chọn khoảng thời gian",
  11192. "日期筛选": "Lọc ngày",
  11193. "加载最新记录...": "Đang tải bản ghi mới nhất...",
  11194. "请选择查询日期": "Vui lòng chọn ngày tra cứu",
  11195. "全场": "Toàn trận",
  11196. "独赢": "1X2",
  11197. "半场独赢": "1X2 Hiệp 1",
  11198. "让球": "Cược chấp",
  11199. "半场让球": "Cược chấp Hiệp 1",
  11200. "大小球": "Tài/Xỉu",
  11201. "半场大小球": "Tài/Xỉu Hiệp 1",
  11202. "半场": "Hiệp 1",
  11203. "大": "Tài",
  11204. "小": "Xỉu",
  11205. "赛事详情": "Chi tiết trận đấu",
  11206. "主胜": "Đội nhà thắng",
  11207. "客胜": "Đội khách thắng",
  11208. "正在更新赛事...": "Đang cập nhật trận đấu...",
  11209. "确认提现": "Xác nhận rút tiền",
  11210. "安全验证": "Xác minh bảo mật",
  11211. "请输入资金密码": "Vui lòng nhập mật khẩu giao dịch",
  11212. "为保障您的资金安全,请输入资金密码": "Để đảm bảo an toàn, vui lòng nhập mật khẩu giao dịch",
  11213. "pc28": "PC28",
  11214. "pc28分分彩": "Xổ số PC28",
  11215. "获取最新数据...": "Đang lấy dữ liệu mới nhất...",
  11216. "最新": "Mới nhất",
  11217. "咪牌": "Nặn bài",
  11218. "下一期": "Kỳ tiếp theo",
  11219. "pc28开奖详情": "Chi tiết mở thưởng PC28",
  11220. "pc28开奖规则": "Quy tắc mở thưởng PC28",
  11221. "确定投注": "Xác nhận cược",
  11222. "正在更新内容...": "Đang cập nhật nội dung...",
  11223. "有效": "Hợp lệ",
  11224. "盘口已失效或关闭": "Kèo đã vô hiệu hoặc đóng",
  11225. "全部类型": "Tất cả loại",
  11226. "下注": "Đặt cược",
  11227. "资金冻结": "Đóng băng tiền",
  11228. "退款": "Hoàn tiền",
  11229. "未知类型": "Loại không xác định",
  11230. "投注内容": "Nội dung cược",
  11231. "投注本金": "Tiền gốc cược",
  11232. "期号": "Kỳ số",
  11233. "待开奖": "Chờ mở thưởng",
  11234. "已中奖": "Đã trúng thưởng",
  11235. "未中奖": "Không trúng thưởng",
  11236. "已撤单": "Đã hủy đơn",
  11237. "投注记录": "Lịch sử cược",
  11238. "中奖": "Trúng thưởng",
  11239. "已结算": "Đã kết toán",
  11240. "和局": "Hòa",
  11241. "平手半": "Đồng banh nửa trái",
  11242. "未结算": "Chưa kết toán",
  11243. "已取消": "Đã hủy",
  11244. "彩票": "Giải trí",
  11245. "体育": "Thể thao",
  11246. "是否中奖": "Có trúng thưởng không",
  11247. "结算状态": "Trạng thái kết toán",
  11248. "主客队赢": "Đội nhà/khách thắng",
  11249. "进球大小": "Tổng số bàn thắng Tài/Xỉu",
  11250. "半场大小": "Tài/Xỉu Hiệp 1",
  11251. "半全场": "Hiệp 1/Toàn trận",
  11252. "两队都进球": "Hai đội đều ghi bàn",
  11253. "让球结果": "Kết quả cược chấp",
  11254. "准确比分": "Tỷ số chính xác",
  11255. "客队": "Đội khách",
  11256. "否": "Không",
  11257. "单": "Lẻ",
  11258. "双": "Chẵn",
  11259. "上半场": "Hiệp 1",
  11260. "下半场": "Hiệp 2",
  11261. "主队": "Đội nhà",
  11262. "PC28分分彩": "Xổ số PC28",
  11263. "彩票玩法": "Cách chơi giải trí",
  11264. "盈亏": "Thắng thua",
  11265. "PC28": "PC28",
  11266. "未开奖": "Chưa mở thưởng",
  11267. "六合彩": "Mark Six",
  11268. "合局": "Hòa",
  11269. "澳门六合彩": "Macau Mark Six",
  11270. "状态": "Trạng thái",
  11271. "赛事列表": "Danh sách trận đấu",
  11272. "暂无投注项": "Chưa có mục cược",
  11273. "玩法": "Cách chơi",
  11274. "更多体育博彩": "Thêm cá cược thể thao",
  11275. "去投注": "Đi cược",
  11276. "总赔率 (有效)": "Tổng tỷ lệ (Hợp lệ)",
  11277. "开奖详情": "Chi tiết mở thưởng",
  11278. "往期历史": "Lịch sử kỳ trước",
  11279. "开奖规则": "Quy tắc mở thưởng",
  11280. "暂无玩法数据": "Chưa có dữ liệu cách chơi",
  11281. "点击展开": "Nhấp để mở rộng",
  11282. "暂无赛事数据": "Chưa có dữ liệu trận đấu",
  11283. "注单详情": "Chi tiết phiếu cược",
  11284. "加载中...": "Đang tải...",
  11285. "盈亏金额": "Số tiền thắng thua",
  11286. "开奖信息": "Thông tin mở thưởng",
  11287. "期": "Kỳ",
  11288. "投注项": "Mục cược",
  11289. "下注金额": "Tiền đặt cược",
  11290. "下注时间": "Thời gian cược",
  11291. "收起详情": "Thu gọn chi tiết",
  11292. "限额": "Hạn mức",
  11293. "总投注金额": "Tổng tiền cược",
  11294. "立即投注": "Cược ngay",
  11295. "开奖截图": "Ảnh chụp mở thưởng",
  11296. "请选择币种": "Vui lòng chọn loại tiền",
  11297. "请选择网络": "Vui lòng chọn mạng",
  11298. "最大": "Tối đa",
  11299. "汇率": "Tỷ giá",
  11300. "待处理": "Đang chờ xử lý",
  11301. "加密货币提现": "Rút tiền điện tử",
  11302. "失败原因": "Lý do thất bại",
  11303. "来源地址": "Địa chỉ nguồn",
  11304. "支付凭证": "Biên lai thanh toán",
  11305. "变动后余额": "Số dư sau biến động",
  11306. "变动前余额": "Số dư trước biến động",
  11307. "查看凭证": "Xem biên lai",
  11308. "是否注销账户,注销账户后,系统将删除清空账户": "Xác nhận xóa tài khoản? Sau khi xóa, hệ thống sẽ xóa sạch dữ liệu tài khoản",
  11309. "修改密码": "Đổi mật khẩu",
  11310. "修改资金密码": "Đổi mật khẩu giao dịch",
  11311. "注销账号": "Xóa tài khoản",
  11312. "旧密码": "Mật khẩu cũ",
  11313. "新密码": "Mật khẩu mới",
  11314. "确认新密码": "Xác nhận mật khẩu mới",
  11315. "请输入旧密码": "Vui lòng nhập mật khẩu cũ",
  11316. "请输入新密码(至少6位)": "Vui lòng nhập mật khẩu mới (ít nhất 6 ký tự)",
  11317. "请再次输入新密码": "Vui lòng nhập lại mật khẩu mới",
  11318. "确认修改": "Xác nhận thay đổi",
  11319. "旧资金密码": "Mật khẩu giao dịch cũ",
  11320. "新资金密码": "Mật khẩu giao dịch mới",
  11321. "确认新资金密码": "Xác nhận mật khẩu GD mới",
  11322. "请输入旧密码(第一次设置资金密码可以为空)": "Nhập mật khẩu cũ (có thể để trống cho lần đầu)",
  11323. "请输入新资金密码(至少6位)": "Vui lòng nhập mật khẩu GD mới (ít nhất 6 ký tự)",
  11324. "请输入新资金密码": "Vui lòng nhập mật khẩu GD mới",
  11325. "请再次输入新资金密码": "Vui lòng nhập lại mật khẩu GD mới",
  11326. "名称": "Tên",
  11327. "性别": "Giới tính",
  11328. "女": "Nữ",
  11329. "未知": "Không xác định",
  11330. "游客模式": "Chế độ khách",
  11331. "正在加载": "Đang tải",
  11332. "没有更多了": "Không còn nữa",
  11333. "点击加载更多": "Nhấp để tải thêm",
  11334. "第": "Thứ",
  11335. "期开奖": "Mở thưởng kỳ",
  11336. "近期开奖": "Mở thưởng gần đây",
  11337. "购彩记录": "Lịch sử mua xổ số",
  11338. "清空": "Làm trống",
  11339. "距": "Cách",
  11340. "期截止": "đóng kỳ",
  11341. "已选注单": "Phiếu cược đã chọn",
  11342. "机选": "Chọn ngẫu nhiên",
  11343. "取消原因": "Lý do hủy",
  11344. "订单已取消": "Đơn hàng đã bị hủy",
  11345. "红": "Đỏ",
  11346. "红波": "Sóng đỏ",
  11347. "蓝波": "Sóng xanh dương",
  11348. "绿波": "Sóng xanh lá",
  11349. "蓝": "Xanh dương",
  11350. "绿": "Xanh lá",
  11351. "特码": "Số đặc biệt",
  11352. "正码": "Số thường",
  11353. "正码特": "Số thường đặc biệt",
  11354. "确定": "Xác nhận",
  11355. "当前比分": "Tỷ số hiện tại",
  11356. "秒": "Giây",
  11357. "分": "Phút",
  11358. "前": "Trước",
  11359. "中": "Giữa",
  11360. "尾": "Cuối",
  11361. "已上传支付凭证": "Đã tải lên biên lai thanh toán",
  11362. "下注成功": "Đặt cược thành công",
  11363. "下注中": "Đang đặt cược",
  11364. "关闭": "Đóng",
  11365. "购物车": "Giỏ hàng",
  11366. "今天": "Hôm nay",
  11367. "周一": "Thứ Hai",
  11368. "周二": "Thứ Ba",
  11369. "周三": "Thứ Tư",
  11370. "周四": "Thứ Năm",
  11371. "周五": "Thứ Sáu",
  11372. "周六": "Thứ Bảy",
  11373. "周日": "Chủ Nhật",
  11374. "请选择投注单": "Vui lòng chọn phiếu cược",
  11375. "暂无投注记录": "Chưa có lịch sử cược",
  11376. "近期开奖记录": "Lịch sử mở thưởng gần đây",
  11377. "本金": "Tiền gốc",
  11378. "总金额": "Tổng số tiền",
  11379. "温馨提示": "Nhắc nhở nhẹ",
  11380. "同意": "Đồng ý",
  11381. "单号": "Mã số",
  11382. "取": "Lấy",
  11383. "投注成功": "Cược thành công",
  11384. "不可重新提交": "Không thể gửi lại",
  11385. "投注时间": "Thời gian cược",
  11386. "等待开奖中": "Đang chờ mở thưởng",
  11387. "注单单号": "Mã phiếu cược",
  11388. "赛事信息": "Thông tin trận đấu",
  11389. "选项": "Tùy chọn",
  11390. "赔率玩法": "Cách chơi tỷ lệ",
  11391. "盘口": "Kèo",
  11392. "订单编号": "Mã đơn hàng",
  11393. "复制成功": "Sao chép thành công",
  11394. "输入本金": "Nhập tiền gốc",
  11395. "请输入新密码": "Vui lòng nhập mật khẩu mới",
  11396. "请再次输入确认密码": "Vui lòng nhập lại mật khẩu xác nhận",
  11397. "两次输入的新密码不一致": "Mật khẩu mới nhập hai lần không khớp",
  11398. "新密码不能与旧密码相同": "Mật khẩu mới không được trùng với mật khẩu cũ",
  11399. "新密码长度不能少于": "Độ dài mật khẩu mới không được ít hơn",
  11400. "暂无相关资金记录": "Chưa có lịch sử giao dịch liên quan",
  11401. "余额不足": "Số dư không đủ",
  11402. "余额不足,去存款": "Số dư không đủ, đi gửi tiền.",
  11403. "验证码长度为": "Độ dài mã xác minh là",
  11404. "验证码已发送": "Đã gửi mã xác minh",
  11405. "两次输入的密码不一致": "Mật khẩu nhập hai lần không khớp",
  11406. "提现金额不能大于余额": "Số tiền rút không được lớn hơn số dư",
  11407. "个字符之间": "ký tự",
  11408. "密码长度需在": "Độ dài mật khẩu phải từ",
  11409. "位": "ký tự",
  11410. "已选注单明细": "Chi tiết phiếu cược đã chọn",
  11411. "已达最低投注": "Đã đạt mức cược tối thiểu",
  11412. "已达最高投注": "Đã đạt mức cược tối đa",
  11413. "暂无有效投注项,请移除锁定盘口或重新选择": "Chưa có mục cược hợp lệ, vui lòng xóa kèo bị khóa hoặc chọn lại",
  11414. "请补全下注金额": "Vui lòng điền đủ số tiền cược",
  11415. "期号 / 玩法": "Kỳ số / Cách chơi",
  11416. "正在加载注单详情...": "Đang tải chi tiết phiếu cược...",
  11417. "为了保障您的权益,请先阅读并同意": "Để bảo vệ quyền lợi của bạn, vui lòng đọc và đồng ý trước",
  11418. "以下注单提交失败,是否重新提交?": "Các phiếu cược sau gửi thất bại, có muốn gửi lại không?",
  11419. "正码1-6": "Số thường 1-6",
  11420. "未知的赔率": "Tỷ lệ cược không xác định",
  11421. "盘口已更新": "Kèo đã được cập nhật",
  11422. "赔率已更新": "Tỷ lệ cược đã được cập nhật",
  11423. "赛事已结束": "Trận đấu đã kết thúc",
  11424. "赛事已下架": "Trận đấu đã bị gỡ xuống",
  11425. "赛事不存在": "Trận đấu không tồn tại",
  11426. "已锁盘": "Đã khóa kèo",
  11427. "下注失败原因": "Lý do cược thất bại",
  11428. "此注已停售": "Mã cược này đã ngừng bán",
  11429. "缺少盘口数据": "Thiếu dữ liệu kèo",
  11430. "主": "Nhà",
  11431. "客": "Khách",
  11432. "Time To Be Defined": "Thời gian chưa xác định",
  11433. "Not Started": "Chưa bắt đầu",
  11434. "First Half": "Hiệp 1",
  11435. "First Half, Kick Off": "Hiệp 1, Bắt đầu",
  11436. "Halftime": "Nghỉ giải lao",
  11437. "Second Half": "Hiệp 2",
  11438. "Second Half, 2nd Half Started": "Hiệp 2, Đã bắt đầu",
  11439. "Extra Time": "Hiệp phụ",
  11440. "Break Time": "Thời gian nghỉ",
  11441. "Penalty In Progress": "Đang đá luân lưu",
  11442. "Match Suspended": "Trận đấu bị đình chỉ",
  11443. "Match Interrupted": "Trận đấu bị gián đoạn",
  11444. "Match Finished": "Trận đấu kết thúc",
  11445. "Match Postponed": "Trận đấu bị hoãn",
  11446. "Match Cancelled": "Trận đấu bị hủy",
  11447. "Match Abandoned": "Trận đấu bị bỏ dở",
  11448. "Technical Loss": "Thua kỹ thuật",
  11449. "WalkOver": "Bỏ cuộc",
  11450. "In Progress": "Đang diễn ra",
  11451. "派彩金额": "Số lượng Paid",
  11452. "香港六合彩": "Xổ số Hồng Kông",
  11453. "请先选择投注项": "Vui lòng chọn mục đặt cược trước",
  11454. "结算时间": "Thời gian thanh toán"
  11455. };
  11456. const { setLocale } = useLocale();
  11457. const defaultLang = "zh";
  11458. uni.getStorageSync("locale") || defaultLang;
  11459. const messages$2 = {
  11460. zh,
  11461. en: en$1,
  11462. vi
  11463. };
  11464. const getLocale = () => {
  11465. const localLang = uni.getStorageSync("locale") || defaultLang;
  11466. if (Object.keys(messages$2).includes(localLang)) {
  11467. return localLang;
  11468. }
  11469. };
  11470. const i18n = createI18n({
  11471. legacy: false,
  11472. // 必须设置为 false,适配 Vue3 的组合式 API
  11473. locale: getLocale(),
  11474. // 当前语言
  11475. fallbackLocale: defaultLang,
  11476. // 回退语言(当当前语言无对应翻译时)
  11477. messages: messages$2
  11478. // 多语言数据
  11479. });
  11480. const changeLanguage = (lang) => {
  11481. const uViewLangs = {
  11482. en: "en-US",
  11483. zh: "zh-CN",
  11484. vi: "vi"
  11485. };
  11486. if (!Object.keys(messages$2).includes(lang)) {
  11487. formatAppLog("warn", "at lang/index.js:54", `语言标识 ${lang} 不存在,默认使用中文 ${defaultLang}`);
  11488. lang = defaultLang;
  11489. }
  11490. i18n.global.locale.value = lang;
  11491. setLocale(uViewLangs[lang]);
  11492. uni.setStorageSync("locale", lang);
  11493. uni.setTabBarItem({
  11494. index: 0,
  11495. // tab 的索引,从 0 开始
  11496. text: uni.$t("首页"),
  11497. success: function() {
  11498. }
  11499. });
  11500. uni.setTabBarItem({
  11501. index: 1,
  11502. // tab 的索引,从 0 开始
  11503. text: uni.$t("体育博彩"),
  11504. success: function() {
  11505. }
  11506. });
  11507. uni.setTabBarItem({
  11508. index: 2,
  11509. // tab 的索引,从 0 开始
  11510. text: uni.$t("彩票"),
  11511. success: function() {
  11512. }
  11513. });
  11514. uni.setTabBarItem({
  11515. index: 3,
  11516. // tab 的索引,从 0 开始
  11517. text: uni.$t("我的"),
  11518. success: function() {
  11519. }
  11520. });
  11521. plus.runtime.restart();
  11522. };
  11523. const _imports_0$7 = "/static/icon/lang1.png";
  11524. const _imports_1$3 = "/static/icon/lang.png";
  11525. const _sfc_main$1j = {
  11526. __name: "index",
  11527. props: ["isBall"],
  11528. setup(__props, { expose: __expose }) {
  11529. __expose();
  11530. const props = __props;
  11531. const currentIndex = vue.ref(0);
  11532. const langMapping = vue.ref({
  11533. zh: "中文简体",
  11534. vi: "Vietnamese",
  11535. en: "English"
  11536. });
  11537. const list2 = vue.ref(Object.keys(messages$2).map((item, index) => {
  11538. if (item === getLocale()) {
  11539. currentIndex.value = index;
  11540. }
  11541. return {
  11542. label: langMapping.value[item],
  11543. // value: messages[item],
  11544. value: item
  11545. };
  11546. }));
  11547. const show = vue.ref(false);
  11548. function confirm(e) {
  11549. changeLanguage(e[0].value);
  11550. }
  11551. const __returned__ = { props, currentIndex, langMapping, list: list2, show, confirm, get changeLanguage() {
  11552. return changeLanguage;
  11553. }, get messages() {
  11554. return messages$2;
  11555. }, get getLocale() {
  11556. return getLocale;
  11557. } };
  11558. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  11559. return __returned__;
  11560. }
  11561. };
  11562. function _sfc_render$1i(_ctx, _cache, $props, $setup, $data, $options) {
  11563. const _component_u_select = __unplugin_components_5$1;
  11564. return vue.openBlock(), vue.createElementBlock(
  11565. vue.Fragment,
  11566. null,
  11567. [
  11568. vue.createElementVNode("view", {
  11569. onClick: _cache[0] || (_cache[0] = ($event) => $setup.show = true)
  11570. }, [
  11571. $props.isBall ? (vue.openBlock(), vue.createElementBlock("image", {
  11572. key: 0,
  11573. src: _imports_0$7,
  11574. class: "h-7 w-7",
  11575. style: { "width": "22px", "height": "22px", "display": "flex", "align-items": "center" }
  11576. })) : (vue.openBlock(), vue.createElementBlock("image", {
  11577. key: 1,
  11578. src: _imports_1$3,
  11579. class: "h-7 w-7"
  11580. }))
  11581. ]),
  11582. vue.createVNode(_component_u_select, {
  11583. modelValue: $setup.show,
  11584. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.show = $event),
  11585. list: $setup.list,
  11586. "default-value": [$setup.currentIndex],
  11587. onConfirm: $setup.confirm,
  11588. "confirm-text": _ctx.$t("确认"),
  11589. "cancel-text": _ctx.$t("取消")
  11590. }, null, 8, ["modelValue", "list", "default-value", "confirm-text", "cancel-text"])
  11591. ],
  11592. 64
  11593. /* STABLE_FRAGMENT */
  11594. );
  11595. }
  11596. const selectLang = /* @__PURE__ */ _export_sfc(_sfc_main$1j, [["render", _sfc_render$1i], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/components/selectLang/index.vue"]]);
  11597. const ButtonProps = {
  11598. ...baseProps,
  11599. /** 是否细边框 */
  11600. hairLine: { type: Boolean, default: true },
  11601. /** 按钮的预置样式,default,primary,error,warning,success */
  11602. type: { type: String, default: "default" },
  11603. /** 按钮尺寸,default,medium,mini */
  11604. size: { type: String, default: "default" },
  11605. /** 按钮形状,circle(两边为半圆),square(带圆角) */
  11606. shape: { type: String, default: "square" },
  11607. /** 按钮是否镂空 */
  11608. plain: { type: Boolean, default: false },
  11609. /** 是否禁止状态 */
  11610. disabled: { type: Boolean, default: false },
  11611. /** 是否加载中 */
  11612. loading: { type: Boolean, default: false },
  11613. /** 支付宝小程序,当 open-type 为 getAuthorize 时有效 */
  11614. scope: { type: String, default: "" },
  11615. /** 开放能力,具体请看uniapp稳定关于button组件部分说明 */
  11616. openType: { type: String, default: "" },
  11617. /** 用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件 */
  11618. formType: { type: String, default: "" },
  11619. /** 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 */
  11620. appParameter: { type: String, default: "" },
  11621. /** 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 */
  11622. hoverStopPropagation: { type: Boolean, default: false },
  11623. /** 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 */
  11624. lang: { type: String, default: "en" },
  11625. /** 会话来源,open-type="contact"时有效。只微信小程序有效 */
  11626. sessionFrom: { type: String, default: "" },
  11627. /** 会话内消息卡片标题,open-type="contact"时有效 */
  11628. sendMessageTitle: { type: String, default: "" },
  11629. /** 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 */
  11630. sendMessagePath: { type: String, default: "" },
  11631. /** 会话内消息卡片图片,open-type="contact"时有效 */
  11632. sendMessageImg: { type: String, default: "" },
  11633. /** 是否显示会话内消息卡片,open-type="contact"时有效 */
  11634. showMessageCard: { type: Boolean, default: false },
  11635. /** 手指按(触摸)按钮时按钮时的背景颜色 */
  11636. hoverBgColor: { type: String, default: "" },
  11637. /** 水波纹的背景颜色 */
  11638. rippleBgColor: { type: String, default: "" },
  11639. /** 是否开启水波纹效果 */
  11640. ripple: { type: Boolean, default: false },
  11641. /** 按下的类名 */
  11642. hoverClass: { type: String, default: "" },
  11643. /** 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 */
  11644. dataName: { type: String, default: "" },
  11645. /** 节流,一定时间内只能触发一次 */
  11646. throttleTime: { type: [String, Number], default: 0 },
  11647. /** 按住后多久出现点击态,单位毫秒 */
  11648. hoverStartTime: { type: [String, Number], default: 20 },
  11649. /** 手指松开后点击态保留时间,单位毫秒 */
  11650. hoverStayTime: { type: [String, Number], default: 150 }
  11651. };
  11652. const __default__$c = {
  11653. name: "u-button",
  11654. options: {
  11655. addGlobalClass: true,
  11656. virtualHost: true,
  11657. styleIsolation: "shared"
  11658. }
  11659. };
  11660. const _sfc_main$1i = /* @__PURE__ */ vue.defineComponent({
  11661. ...__default__$c,
  11662. props: ButtonProps,
  11663. emits: [
  11664. "click",
  11665. "getuserinfo",
  11666. "contact",
  11667. "getphonenumber",
  11668. "error",
  11669. "launchapp",
  11670. "opensetting",
  11671. "chooseavatar",
  11672. "agreeprivacyauthorization"
  11673. ],
  11674. setup(__props, { expose: __expose, emit: __emit }) {
  11675. __expose();
  11676. const emit = __emit;
  11677. const props = __props;
  11678. const rippleTop = vue.ref(0);
  11679. const rippleLeft = vue.ref(0);
  11680. const fields = vue.ref({});
  11681. const waveActive = vue.ref(false);
  11682. const getHoverClass = vue.computed(() => {
  11683. if (props.loading || props.disabled || props.ripple)
  11684. return "";
  11685. if (props.hoverClass)
  11686. return props.hoverClass;
  11687. let hoverClass = "";
  11688. hoverClass = props.plain ? "u-" + props.type + "-plain-hover" : "u-" + props.type + "-hover";
  11689. return hoverClass;
  11690. });
  11691. const showHairLineBorder = vue.computed(() => {
  11692. if (["primary", "success", "error", "warning"].indexOf(props.type) >= 0 && !props.plain) {
  11693. return "";
  11694. } else {
  11695. return "u-hairline-border";
  11696. }
  11697. });
  11698. function click2(e) {
  11699. if (Number(props.throttleTime)) {
  11700. $u.throttle(() => {
  11701. clickAction(e);
  11702. }, Number(props.throttleTime));
  11703. } else {
  11704. clickAction(e);
  11705. }
  11706. }
  11707. function clickAction(e) {
  11708. if (props.loading === true || props.disabled === true)
  11709. return;
  11710. if (props.ripple) {
  11711. waveActive.value = false;
  11712. vue.nextTick(() => {
  11713. getWaveQuery(e);
  11714. });
  11715. }
  11716. emit("click", e);
  11717. }
  11718. function getWaveQuery(e) {
  11719. getElQuery().then((res) => {
  11720. let data = res[0];
  11721. if (!data.width || !data.width)
  11722. return;
  11723. data.targetWidth = data.height > data.width ? data.height : data.width;
  11724. if (!data.targetWidth)
  11725. return;
  11726. fields.value = data;
  11727. let touchesX = "", touchesY = "";
  11728. touchesX = e.touches[0].clientX;
  11729. touchesY = e.touches[0].clientY;
  11730. rippleTop.value = Number(touchesY) - data.top - data.targetWidth / 2;
  11731. rippleLeft.value = Number(touchesX) - data.left - data.targetWidth / 2;
  11732. vue.nextTick(() => {
  11733. waveActive.value = true;
  11734. });
  11735. });
  11736. }
  11737. function getElQuery() {
  11738. return new Promise((resolve2) => {
  11739. let queryInfo = "";
  11740. queryInfo = uni.createSelectorQuery().in(null);
  11741. queryInfo.select(".u-btn").boundingClientRect();
  11742. queryInfo.exec((data) => {
  11743. resolve2(data);
  11744. });
  11745. });
  11746. }
  11747. function getphonenumber(event) {
  11748. emit("getphonenumber", event);
  11749. }
  11750. function getuserinfo(event) {
  11751. emit("getuserinfo", event);
  11752. }
  11753. function error(event) {
  11754. emit("error", event);
  11755. }
  11756. function opensetting(event) {
  11757. emit("opensetting", event);
  11758. }
  11759. function launchapp(event) {
  11760. emit("launchapp", event);
  11761. }
  11762. function getAuthorize(event) {
  11763. if (props.scope === "phoneNumber") {
  11764. getphonenumber(event);
  11765. } else if (props.scope === "userInfo") {
  11766. getuserinfo(event);
  11767. }
  11768. }
  11769. function contact(event) {
  11770. emit("contact", event);
  11771. }
  11772. function chooseavatar(event) {
  11773. emit("chooseavatar", event);
  11774. }
  11775. function agreeprivacyauthorization(event) {
  11776. emit("agreeprivacyauthorization", event);
  11777. }
  11778. const __returned__ = { emit, props, rippleTop, rippleLeft, fields, waveActive, getHoverClass, showHairLineBorder, click: click2, clickAction, getWaveQuery, getElQuery, getphonenumber, getuserinfo, error, opensetting, launchapp, getAuthorize, contact, chooseavatar, agreeprivacyauthorization, get $u() {
  11779. return $u;
  11780. } };
  11781. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  11782. return __returned__;
  11783. }
  11784. });
  11785. function _sfc_render$1h(_ctx, _cache, $props, $setup, $data, $options) {
  11786. return vue.openBlock(), vue.createElementBlock(
  11787. vue.Fragment,
  11788. null,
  11789. [
  11790. vue.createCommentVNode(" prettier-ignore "),
  11791. vue.createElementVNode("button", {
  11792. id: "u-wave-btn",
  11793. class: vue.normalizeClass(["u-btn u-line-1 u-fix-ios-appearance", [
  11794. "u-size-" + _ctx.size,
  11795. _ctx.plain ? "u-btn--" + _ctx.type + "--plain" : "",
  11796. _ctx.loading ? "u-loading" : "",
  11797. _ctx.shape === "circle" ? "u-round-circle" : "",
  11798. _ctx.hairLine ? $setup.showHairLineBorder : "u-btn--bold-border",
  11799. "u-btn--" + _ctx.type,
  11800. _ctx.disabled ? `u-btn--${_ctx.type}--disabled` : "",
  11801. _ctx.customClass
  11802. ]]),
  11803. "hover-start-time": Number(_ctx.hoverStartTime),
  11804. "hover-stay-time": Number(_ctx.hoverStayTime),
  11805. disabled: _ctx.disabled,
  11806. "form-type": _ctx.formType,
  11807. "open-type": _ctx.disabled || _ctx.loading ? void 0 : _ctx.openType,
  11808. "app-parameter": _ctx.appParameter,
  11809. "hover-stop-propagation": _ctx.hoverStopPropagation,
  11810. "send-message-title": _ctx.sendMessageTitle,
  11811. "send-message-path": _ctx.sendMessagePath,
  11812. lang: _ctx.lang,
  11813. "data-name": _ctx.dataName,
  11814. "session-from": _ctx.sessionFrom,
  11815. "send-message-img": _ctx.sendMessageImg,
  11816. "show-message-card": _ctx.showMessageCard,
  11817. "on:getAuthorize": $setup.getAuthorize,
  11818. onGetuserinfo: $setup.getuserinfo,
  11819. onContact: $setup.contact,
  11820. onGetphonenumber: $setup.getphonenumber,
  11821. onError: $setup.error,
  11822. onLaunchapp: $setup.launchapp,
  11823. onOpensetting: $setup.opensetting,
  11824. onChooseavatar: $setup.chooseavatar,
  11825. onAgreeprivacyauthorization: $setup.agreeprivacyauthorization,
  11826. style: vue.normalizeStyle(
  11827. $setup.$u.toStyle(
  11828. {
  11829. overflow: _ctx.ripple ? "hidden" : "visible"
  11830. },
  11831. _ctx.customStyle
  11832. )
  11833. ),
  11834. onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => $setup.click($event), ["stop"])),
  11835. "hover-class": $setup.getHoverClass,
  11836. loading: _ctx.loading
  11837. }, [
  11838. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
  11839. _ctx.ripple ? (vue.openBlock(), vue.createElementBlock(
  11840. "view",
  11841. {
  11842. key: 0,
  11843. class: vue.normalizeClass(["u-wave-ripple", [$setup.waveActive ? "u-wave-active" : ""]]),
  11844. style: vue.normalizeStyle({
  11845. top: $setup.rippleTop + "px",
  11846. left: $setup.rippleLeft + "px",
  11847. width: $setup.fields.targetWidth + "px",
  11848. height: $setup.fields.targetWidth + "px",
  11849. "background-color": _ctx.rippleBgColor || "rgba(0, 0, 0, 0.15)"
  11850. })
  11851. },
  11852. null,
  11853. 6
  11854. /* CLASS, STYLE */
  11855. )) : vue.createCommentVNode("v-if", true)
  11856. ], 46, ["hover-start-time", "hover-stay-time", "disabled", "form-type", "open-type", "app-parameter", "hover-stop-propagation", "send-message-title", "send-message-path", "lang", "data-name", "session-from", "send-message-img", "show-message-card", "hover-class", "loading"])
  11857. ],
  11858. 2112
  11859. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  11860. );
  11861. }
  11862. const __unplugin_components_2$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1i, [["render", _sfc_render$1h], ["__scopeId", "data-v-6df07486"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-button/u-button.vue"]]);
  11863. function set$1(target, key, val) {
  11864. if (Array.isArray(target)) {
  11865. target.length = Math.max(target.length, key);
  11866. target.splice(key, 1, val);
  11867. return val;
  11868. }
  11869. target[key] = val;
  11870. return val;
  11871. }
  11872. function del(target, key) {
  11873. if (Array.isArray(target)) {
  11874. target.splice(key, 1);
  11875. return;
  11876. }
  11877. delete target[key];
  11878. }
  11879. function getDevtoolsGlobalHook() {
  11880. return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;
  11881. }
  11882. function getTarget() {
  11883. return typeof navigator !== "undefined" && typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : {};
  11884. }
  11885. const isProxyAvailable = typeof Proxy === "function";
  11886. const HOOK_SETUP = "devtools-plugin:setup";
  11887. const HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set";
  11888. let supported;
  11889. let perf;
  11890. function isPerformanceSupported() {
  11891. var _a2;
  11892. if (supported !== void 0) {
  11893. return supported;
  11894. }
  11895. if (typeof window !== "undefined" && window.performance) {
  11896. supported = true;
  11897. perf = window.performance;
  11898. } else if (typeof globalThis !== "undefined" && ((_a2 = globalThis.perf_hooks) === null || _a2 === void 0 ? void 0 : _a2.performance)) {
  11899. supported = true;
  11900. perf = globalThis.perf_hooks.performance;
  11901. } else {
  11902. supported = false;
  11903. }
  11904. return supported;
  11905. }
  11906. function now() {
  11907. return isPerformanceSupported() ? perf.now() : Date.now();
  11908. }
  11909. class ApiProxy {
  11910. constructor(plugin, hook) {
  11911. this.target = null;
  11912. this.targetQueue = [];
  11913. this.onQueue = [];
  11914. this.plugin = plugin;
  11915. this.hook = hook;
  11916. const defaultSettings = {};
  11917. if (plugin.settings) {
  11918. for (const id in plugin.settings) {
  11919. const item = plugin.settings[id];
  11920. defaultSettings[id] = item.defaultValue;
  11921. }
  11922. }
  11923. const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
  11924. let currentSettings = Object.assign({}, defaultSettings);
  11925. try {
  11926. const raw = localStorage.getItem(localSettingsSaveId);
  11927. const data = JSON.parse(raw);
  11928. Object.assign(currentSettings, data);
  11929. } catch (e) {
  11930. }
  11931. this.fallbacks = {
  11932. getSettings() {
  11933. return currentSettings;
  11934. },
  11935. setSettings(value) {
  11936. try {
  11937. localStorage.setItem(localSettingsSaveId, JSON.stringify(value));
  11938. } catch (e) {
  11939. }
  11940. currentSettings = value;
  11941. },
  11942. now() {
  11943. return now();
  11944. }
  11945. };
  11946. if (hook) {
  11947. hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {
  11948. if (pluginId === this.plugin.id) {
  11949. this.fallbacks.setSettings(value);
  11950. }
  11951. });
  11952. }
  11953. this.proxiedOn = new Proxy({}, {
  11954. get: (_target, prop) => {
  11955. if (this.target) {
  11956. return this.target.on[prop];
  11957. } else {
  11958. return (...args) => {
  11959. this.onQueue.push({
  11960. method: prop,
  11961. args
  11962. });
  11963. };
  11964. }
  11965. }
  11966. });
  11967. this.proxiedTarget = new Proxy({}, {
  11968. get: (_target, prop) => {
  11969. if (this.target) {
  11970. return this.target[prop];
  11971. } else if (prop === "on") {
  11972. return this.proxiedOn;
  11973. } else if (Object.keys(this.fallbacks).includes(prop)) {
  11974. return (...args) => {
  11975. this.targetQueue.push({
  11976. method: prop,
  11977. args,
  11978. resolve: () => {
  11979. }
  11980. });
  11981. return this.fallbacks[prop](...args);
  11982. };
  11983. } else {
  11984. return (...args) => {
  11985. return new Promise((resolve2) => {
  11986. this.targetQueue.push({
  11987. method: prop,
  11988. args,
  11989. resolve: resolve2
  11990. });
  11991. });
  11992. };
  11993. }
  11994. }
  11995. });
  11996. }
  11997. async setRealTarget(target) {
  11998. this.target = target;
  11999. for (const item of this.onQueue) {
  12000. this.target.on[item.method](...item.args);
  12001. }
  12002. for (const item of this.targetQueue) {
  12003. item.resolve(await this.target[item.method](...item.args));
  12004. }
  12005. }
  12006. }
  12007. function setupDevtoolsPlugin(pluginDescriptor, setupFn) {
  12008. const descriptor = pluginDescriptor;
  12009. const target = getTarget();
  12010. const hook = getDevtoolsGlobalHook();
  12011. const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;
  12012. if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {
  12013. hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);
  12014. } else {
  12015. const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;
  12016. const list2 = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];
  12017. list2.push({
  12018. pluginDescriptor: descriptor,
  12019. setupFn,
  12020. proxy
  12021. });
  12022. if (proxy) {
  12023. setupFn(proxy.proxiedTarget);
  12024. }
  12025. }
  12026. }
  12027. /*!
  12028. * pinia v2.0.36
  12029. * (c) 2023 Eduardo San Martin Morote
  12030. * @license MIT
  12031. */
  12032. let activePinia;
  12033. const setActivePinia = (pinia) => activePinia = pinia;
  12034. const piniaSymbol = Symbol("pinia");
  12035. function isPlainObject(o) {
  12036. return o && typeof o === "object" && Object.prototype.toString.call(o) === "[object Object]" && typeof o.toJSON !== "function";
  12037. }
  12038. var MutationType;
  12039. (function(MutationType2) {
  12040. MutationType2["direct"] = "direct";
  12041. MutationType2["patchObject"] = "patch object";
  12042. MutationType2["patchFunction"] = "patch function";
  12043. })(MutationType || (MutationType = {}));
  12044. const IS_CLIENT = typeof window !== "undefined";
  12045. const USE_DEVTOOLS = IS_CLIENT;
  12046. const _global = /* @__PURE__ */ (() => typeof window === "object" && window.window === window ? window : typeof self === "object" && self.self === self ? self : typeof global === "object" && global.global === global ? global : typeof globalThis === "object" ? globalThis : { HTMLElement: null })();
  12047. function bom(blob, { autoBom = false } = {}) {
  12048. if (autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
  12049. return new Blob([String.fromCharCode(65279), blob], { type: blob.type });
  12050. }
  12051. return blob;
  12052. }
  12053. function download(url2, name, opts) {
  12054. const xhr = new XMLHttpRequest();
  12055. xhr.open("GET", url2);
  12056. xhr.responseType = "blob";
  12057. xhr.onload = function() {
  12058. saveAs(xhr.response, name, opts);
  12059. };
  12060. xhr.onerror = function() {
  12061. console.error("could not download file");
  12062. };
  12063. xhr.send();
  12064. }
  12065. function corsEnabled(url2) {
  12066. const xhr = new XMLHttpRequest();
  12067. xhr.open("HEAD", url2, false);
  12068. try {
  12069. xhr.send();
  12070. } catch (e) {
  12071. }
  12072. return xhr.status >= 200 && xhr.status <= 299;
  12073. }
  12074. function click(node2) {
  12075. try {
  12076. node2.dispatchEvent(new MouseEvent("click"));
  12077. } catch (e) {
  12078. const evt = document.createEvent("MouseEvents");
  12079. evt.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
  12080. node2.dispatchEvent(evt);
  12081. }
  12082. }
  12083. const _navigator = typeof navigator === "object" ? navigator : { userAgent: "" };
  12084. const isMacOSWebView = /* @__PURE__ */ (() => /Macintosh/.test(_navigator.userAgent) && /AppleWebKit/.test(_navigator.userAgent) && !/Safari/.test(_navigator.userAgent))();
  12085. const saveAs = !IS_CLIENT ? () => {
  12086. } : (
  12087. // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program
  12088. typeof HTMLAnchorElement !== "undefined" && "download" in HTMLAnchorElement.prototype && !isMacOSWebView ? downloadSaveAs : (
  12089. // Use msSaveOrOpenBlob as a second approach
  12090. "msSaveOrOpenBlob" in _navigator ? msSaveAs : (
  12091. // Fallback to using FileReader and a popup
  12092. fileSaverSaveAs
  12093. )
  12094. )
  12095. );
  12096. function downloadSaveAs(blob, name = "download", opts) {
  12097. const a = document.createElement("a");
  12098. a.download = name;
  12099. a.rel = "noopener";
  12100. if (typeof blob === "string") {
  12101. a.href = blob;
  12102. if (a.origin !== location.origin) {
  12103. if (corsEnabled(a.href)) {
  12104. download(blob, name, opts);
  12105. } else {
  12106. a.target = "_blank";
  12107. click(a);
  12108. }
  12109. } else {
  12110. click(a);
  12111. }
  12112. } else {
  12113. a.href = URL.createObjectURL(blob);
  12114. setTimeout(function() {
  12115. URL.revokeObjectURL(a.href);
  12116. }, 4e4);
  12117. setTimeout(function() {
  12118. click(a);
  12119. }, 0);
  12120. }
  12121. }
  12122. function msSaveAs(blob, name = "download", opts) {
  12123. if (typeof blob === "string") {
  12124. if (corsEnabled(blob)) {
  12125. download(blob, name, opts);
  12126. } else {
  12127. const a = document.createElement("a");
  12128. a.href = blob;
  12129. a.target = "_blank";
  12130. setTimeout(function() {
  12131. click(a);
  12132. });
  12133. }
  12134. } else {
  12135. navigator.msSaveOrOpenBlob(bom(blob, opts), name);
  12136. }
  12137. }
  12138. function fileSaverSaveAs(blob, name, opts, popup) {
  12139. popup = popup || open("", "_blank");
  12140. if (popup) {
  12141. popup.document.title = popup.document.body.innerText = "downloading...";
  12142. }
  12143. if (typeof blob === "string")
  12144. return download(blob, name, opts);
  12145. const force = blob.type === "application/octet-stream";
  12146. const isSafari = /constructor/i.test(String(_global.HTMLElement)) || "safari" in _global;
  12147. const isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent);
  12148. if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== "undefined") {
  12149. const reader = new FileReader();
  12150. reader.onloadend = function() {
  12151. let url2 = reader.result;
  12152. if (typeof url2 !== "string") {
  12153. popup = null;
  12154. throw new Error("Wrong reader.result type");
  12155. }
  12156. url2 = isChromeIOS ? url2 : url2.replace(/^data:[^;]*;/, "data:attachment/file;");
  12157. if (popup) {
  12158. popup.location.href = url2;
  12159. } else {
  12160. location.assign(url2);
  12161. }
  12162. popup = null;
  12163. };
  12164. reader.readAsDataURL(blob);
  12165. } else {
  12166. const url2 = URL.createObjectURL(blob);
  12167. if (popup)
  12168. popup.location.assign(url2);
  12169. else
  12170. location.href = url2;
  12171. popup = null;
  12172. setTimeout(function() {
  12173. URL.revokeObjectURL(url2);
  12174. }, 4e4);
  12175. }
  12176. }
  12177. function toastMessage(message, type2) {
  12178. const piniaMessage = "🍍 " + message;
  12179. if (typeof __VUE_DEVTOOLS_TOAST__ === "function") {
  12180. __VUE_DEVTOOLS_TOAST__(piniaMessage, type2);
  12181. } else if (type2 === "error") {
  12182. console.error(piniaMessage);
  12183. } else if (type2 === "warn") {
  12184. console.warn(piniaMessage);
  12185. } else {
  12186. console.log(piniaMessage);
  12187. }
  12188. }
  12189. function isPinia(o) {
  12190. return "_a" in o && "install" in o;
  12191. }
  12192. function checkClipboardAccess() {
  12193. if (!("clipboard" in navigator)) {
  12194. toastMessage(`Your browser doesn't support the Clipboard API`, "error");
  12195. return true;
  12196. }
  12197. }
  12198. function checkNotFocusedError(error) {
  12199. if (error instanceof Error && error.message.toLowerCase().includes("document is not focused")) {
  12200. toastMessage('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.', "warn");
  12201. return true;
  12202. }
  12203. return false;
  12204. }
  12205. async function actionGlobalCopyState(pinia) {
  12206. if (checkClipboardAccess())
  12207. return;
  12208. try {
  12209. await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));
  12210. toastMessage("Global state copied to clipboard.");
  12211. } catch (error) {
  12212. if (checkNotFocusedError(error))
  12213. return;
  12214. toastMessage(`Failed to serialize the state. Check the console for more details.`, "error");
  12215. console.error(error);
  12216. }
  12217. }
  12218. async function actionGlobalPasteState(pinia) {
  12219. if (checkClipboardAccess())
  12220. return;
  12221. try {
  12222. pinia.state.value = JSON.parse(await navigator.clipboard.readText());
  12223. toastMessage("Global state pasted from clipboard.");
  12224. } catch (error) {
  12225. if (checkNotFocusedError(error))
  12226. return;
  12227. toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, "error");
  12228. console.error(error);
  12229. }
  12230. }
  12231. async function actionGlobalSaveState(pinia) {
  12232. try {
  12233. saveAs(new Blob([JSON.stringify(pinia.state.value)], {
  12234. type: "text/plain;charset=utf-8"
  12235. }), "pinia-state.json");
  12236. } catch (error) {
  12237. toastMessage(`Failed to export the state as JSON. Check the console for more details.`, "error");
  12238. console.error(error);
  12239. }
  12240. }
  12241. let fileInput;
  12242. function getFileOpener() {
  12243. if (!fileInput) {
  12244. fileInput = document.createElement("input");
  12245. fileInput.type = "file";
  12246. fileInput.accept = ".json";
  12247. }
  12248. function openFile() {
  12249. return new Promise((resolve2, reject) => {
  12250. fileInput.onchange = async () => {
  12251. const files = fileInput.files;
  12252. if (!files)
  12253. return resolve2(null);
  12254. const file = files.item(0);
  12255. if (!file)
  12256. return resolve2(null);
  12257. return resolve2({ text: await file.text(), file });
  12258. };
  12259. fileInput.oncancel = () => resolve2(null);
  12260. fileInput.onerror = reject;
  12261. fileInput.click();
  12262. });
  12263. }
  12264. return openFile;
  12265. }
  12266. async function actionGlobalOpenStateFile(pinia) {
  12267. try {
  12268. const open2 = await getFileOpener();
  12269. const result = await open2();
  12270. if (!result)
  12271. return;
  12272. const { text, file } = result;
  12273. pinia.state.value = JSON.parse(text);
  12274. toastMessage(`Global state imported from "${file.name}".`);
  12275. } catch (error) {
  12276. toastMessage(`Failed to export the state as JSON. Check the console for more details.`, "error");
  12277. console.error(error);
  12278. }
  12279. }
  12280. function formatDisplay(display) {
  12281. return {
  12282. _custom: {
  12283. display
  12284. }
  12285. };
  12286. }
  12287. const PINIA_ROOT_LABEL = "🍍 Pinia (root)";
  12288. const PINIA_ROOT_ID = "_root";
  12289. function formatStoreForInspectorTree(store2) {
  12290. return isPinia(store2) ? {
  12291. id: PINIA_ROOT_ID,
  12292. label: PINIA_ROOT_LABEL
  12293. } : {
  12294. id: store2.$id,
  12295. label: store2.$id
  12296. };
  12297. }
  12298. function formatStoreForInspectorState(store2) {
  12299. if (isPinia(store2)) {
  12300. const storeNames = Array.from(store2._s.keys());
  12301. const storeMap = store2._s;
  12302. const state2 = {
  12303. state: storeNames.map((storeId) => ({
  12304. editable: true,
  12305. key: storeId,
  12306. value: store2.state.value[storeId]
  12307. })),
  12308. getters: storeNames.filter((id) => storeMap.get(id)._getters).map((id) => {
  12309. const store22 = storeMap.get(id);
  12310. return {
  12311. editable: false,
  12312. key: id,
  12313. value: store22._getters.reduce((getters, key) => {
  12314. getters[key] = store22[key];
  12315. return getters;
  12316. }, {})
  12317. };
  12318. })
  12319. };
  12320. return state2;
  12321. }
  12322. const state = {
  12323. state: Object.keys(store2.$state).map((key) => ({
  12324. editable: true,
  12325. key,
  12326. value: store2.$state[key]
  12327. }))
  12328. };
  12329. if (store2._getters && store2._getters.length) {
  12330. state.getters = store2._getters.map((getterName) => ({
  12331. editable: false,
  12332. key: getterName,
  12333. value: store2[getterName]
  12334. }));
  12335. }
  12336. if (store2._customProperties.size) {
  12337. state.customProperties = Array.from(store2._customProperties).map((key) => ({
  12338. editable: true,
  12339. key,
  12340. value: store2[key]
  12341. }));
  12342. }
  12343. return state;
  12344. }
  12345. function formatEventData(events) {
  12346. if (!events)
  12347. return {};
  12348. if (Array.isArray(events)) {
  12349. return events.reduce((data, event) => {
  12350. data.keys.push(event.key);
  12351. data.operations.push(event.type);
  12352. data.oldValue[event.key] = event.oldValue;
  12353. data.newValue[event.key] = event.newValue;
  12354. return data;
  12355. }, {
  12356. oldValue: {},
  12357. keys: [],
  12358. operations: [],
  12359. newValue: {}
  12360. });
  12361. } else {
  12362. return {
  12363. operation: formatDisplay(events.type),
  12364. key: formatDisplay(events.key),
  12365. oldValue: events.oldValue,
  12366. newValue: events.newValue
  12367. };
  12368. }
  12369. }
  12370. function formatMutationType(type2) {
  12371. switch (type2) {
  12372. case MutationType.direct:
  12373. return "mutation";
  12374. case MutationType.patchFunction:
  12375. return "$patch";
  12376. case MutationType.patchObject:
  12377. return "$patch";
  12378. default:
  12379. return "unknown";
  12380. }
  12381. }
  12382. let isTimelineActive = true;
  12383. const componentStateTypes = [];
  12384. const MUTATIONS_LAYER_ID = "pinia:mutations";
  12385. const INSPECTOR_ID = "pinia";
  12386. const { assign: assign$1 } = Object;
  12387. const getStoreType = (id) => "🍍 " + id;
  12388. function registerPiniaDevtools(app, pinia) {
  12389. setupDevtoolsPlugin({
  12390. id: "dev.esm.pinia",
  12391. label: "Pinia 🍍",
  12392. logo: "https://pinia.vuejs.org/logo.svg",
  12393. packageName: "pinia",
  12394. homepage: "https://pinia.vuejs.org",
  12395. componentStateTypes,
  12396. app
  12397. }, (api) => {
  12398. if (typeof api.now !== "function") {
  12399. toastMessage("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.");
  12400. }
  12401. api.addTimelineLayer({
  12402. id: MUTATIONS_LAYER_ID,
  12403. label: `Pinia 🍍`,
  12404. color: 15064968
  12405. });
  12406. api.addInspector({
  12407. id: INSPECTOR_ID,
  12408. label: "Pinia 🍍",
  12409. icon: "storage",
  12410. treeFilterPlaceholder: "Search stores",
  12411. actions: [
  12412. {
  12413. icon: "content_copy",
  12414. action: () => {
  12415. actionGlobalCopyState(pinia);
  12416. },
  12417. tooltip: "Serialize and copy the state"
  12418. },
  12419. {
  12420. icon: "content_paste",
  12421. action: async () => {
  12422. await actionGlobalPasteState(pinia);
  12423. api.sendInspectorTree(INSPECTOR_ID);
  12424. api.sendInspectorState(INSPECTOR_ID);
  12425. },
  12426. tooltip: "Replace the state with the content of your clipboard"
  12427. },
  12428. {
  12429. icon: "save",
  12430. action: () => {
  12431. actionGlobalSaveState(pinia);
  12432. },
  12433. tooltip: "Save the state as a JSON file"
  12434. },
  12435. {
  12436. icon: "folder_open",
  12437. action: async () => {
  12438. await actionGlobalOpenStateFile(pinia);
  12439. api.sendInspectorTree(INSPECTOR_ID);
  12440. api.sendInspectorState(INSPECTOR_ID);
  12441. },
  12442. tooltip: "Import the state from a JSON file"
  12443. }
  12444. ],
  12445. nodeActions: [
  12446. {
  12447. icon: "restore",
  12448. tooltip: "Reset the state (option store only)",
  12449. action: (nodeId) => {
  12450. const store2 = pinia._s.get(nodeId);
  12451. if (!store2) {
  12452. toastMessage(`Cannot reset "${nodeId}" store because it wasn't found.`, "warn");
  12453. } else if (!store2._isOptionsAPI) {
  12454. toastMessage(`Cannot reset "${nodeId}" store because it's a setup store.`, "warn");
  12455. } else {
  12456. store2.$reset();
  12457. toastMessage(`Store "${nodeId}" reset.`);
  12458. }
  12459. }
  12460. }
  12461. ]
  12462. });
  12463. api.on.inspectComponent((payload, ctx) => {
  12464. const proxy = payload.componentInstance && payload.componentInstance.proxy;
  12465. if (proxy && proxy._pStores) {
  12466. const piniaStores = payload.componentInstance.proxy._pStores;
  12467. Object.values(piniaStores).forEach((store2) => {
  12468. payload.instanceData.state.push({
  12469. type: getStoreType(store2.$id),
  12470. key: "state",
  12471. editable: true,
  12472. value: store2._isOptionsAPI ? {
  12473. _custom: {
  12474. value: vue.toRaw(store2.$state),
  12475. actions: [
  12476. {
  12477. icon: "restore",
  12478. tooltip: "Reset the state of this store",
  12479. action: () => store2.$reset()
  12480. }
  12481. ]
  12482. }
  12483. } : (
  12484. // NOTE: workaround to unwrap transferred refs
  12485. Object.keys(store2.$state).reduce((state, key) => {
  12486. state[key] = store2.$state[key];
  12487. return state;
  12488. }, {})
  12489. )
  12490. });
  12491. if (store2._getters && store2._getters.length) {
  12492. payload.instanceData.state.push({
  12493. type: getStoreType(store2.$id),
  12494. key: "getters",
  12495. editable: false,
  12496. value: store2._getters.reduce((getters, key) => {
  12497. try {
  12498. getters[key] = store2[key];
  12499. } catch (error) {
  12500. getters[key] = error;
  12501. }
  12502. return getters;
  12503. }, {})
  12504. });
  12505. }
  12506. });
  12507. }
  12508. });
  12509. api.on.getInspectorTree((payload) => {
  12510. if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
  12511. let stores = [pinia];
  12512. stores = stores.concat(Array.from(pinia._s.values()));
  12513. payload.rootNodes = (payload.filter ? stores.filter((store2) => "$id" in store2 ? store2.$id.toLowerCase().includes(payload.filter.toLowerCase()) : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase())) : stores).map(formatStoreForInspectorTree);
  12514. }
  12515. });
  12516. api.on.getInspectorState((payload) => {
  12517. if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
  12518. const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia : pinia._s.get(payload.nodeId);
  12519. if (!inspectedStore) {
  12520. return;
  12521. }
  12522. if (inspectedStore) {
  12523. payload.state = formatStoreForInspectorState(inspectedStore);
  12524. }
  12525. }
  12526. });
  12527. api.on.editInspectorState((payload, ctx) => {
  12528. if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
  12529. const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia : pinia._s.get(payload.nodeId);
  12530. if (!inspectedStore) {
  12531. return toastMessage(`store "${payload.nodeId}" not found`, "error");
  12532. }
  12533. const { path } = payload;
  12534. if (!isPinia(inspectedStore)) {
  12535. if (path.length !== 1 || !inspectedStore._customProperties.has(path[0]) || path[0] in inspectedStore.$state) {
  12536. path.unshift("$state");
  12537. }
  12538. } else {
  12539. path.unshift("state");
  12540. }
  12541. isTimelineActive = false;
  12542. payload.set(inspectedStore, path, payload.state.value);
  12543. isTimelineActive = true;
  12544. }
  12545. });
  12546. api.on.editComponentState((payload) => {
  12547. if (payload.type.startsWith("🍍")) {
  12548. const storeId = payload.type.replace(/^🍍\s*/, "");
  12549. const store2 = pinia._s.get(storeId);
  12550. if (!store2) {
  12551. return toastMessage(`store "${storeId}" not found`, "error");
  12552. }
  12553. const { path } = payload;
  12554. if (path[0] !== "state") {
  12555. return toastMessage(`Invalid path for store "${storeId}":
  12556. ${path}
  12557. Only state can be modified.`);
  12558. }
  12559. path[0] = "$state";
  12560. isTimelineActive = false;
  12561. payload.set(store2, path, payload.state.value);
  12562. isTimelineActive = true;
  12563. }
  12564. });
  12565. });
  12566. }
  12567. function addStoreToDevtools(app, store2) {
  12568. if (!componentStateTypes.includes(getStoreType(store2.$id))) {
  12569. componentStateTypes.push(getStoreType(store2.$id));
  12570. }
  12571. setupDevtoolsPlugin({
  12572. id: "dev.esm.pinia",
  12573. label: "Pinia 🍍",
  12574. logo: "https://pinia.vuejs.org/logo.svg",
  12575. packageName: "pinia",
  12576. homepage: "https://pinia.vuejs.org",
  12577. componentStateTypes,
  12578. app,
  12579. settings: {
  12580. logStoreChanges: {
  12581. label: "Notify about new/deleted stores",
  12582. type: "boolean",
  12583. defaultValue: true
  12584. }
  12585. // useEmojis: {
  12586. // label: 'Use emojis in messages ⚡️',
  12587. // type: 'boolean',
  12588. // defaultValue: true,
  12589. // },
  12590. }
  12591. }, (api) => {
  12592. const now2 = typeof api.now === "function" ? api.now.bind(api) : Date.now;
  12593. store2.$onAction(({ after, onError, name, args }) => {
  12594. const groupId = runningActionId++;
  12595. api.addTimelineEvent({
  12596. layerId: MUTATIONS_LAYER_ID,
  12597. event: {
  12598. time: now2(),
  12599. title: "🛫 " + name,
  12600. subtitle: "start",
  12601. data: {
  12602. store: formatDisplay(store2.$id),
  12603. action: formatDisplay(name),
  12604. args
  12605. },
  12606. groupId
  12607. }
  12608. });
  12609. after((result) => {
  12610. activeAction = void 0;
  12611. api.addTimelineEvent({
  12612. layerId: MUTATIONS_LAYER_ID,
  12613. event: {
  12614. time: now2(),
  12615. title: "🛬 " + name,
  12616. subtitle: "end",
  12617. data: {
  12618. store: formatDisplay(store2.$id),
  12619. action: formatDisplay(name),
  12620. args,
  12621. result
  12622. },
  12623. groupId
  12624. }
  12625. });
  12626. });
  12627. onError((error) => {
  12628. activeAction = void 0;
  12629. api.addTimelineEvent({
  12630. layerId: MUTATIONS_LAYER_ID,
  12631. event: {
  12632. time: now2(),
  12633. logType: "error",
  12634. title: "💥 " + name,
  12635. subtitle: "end",
  12636. data: {
  12637. store: formatDisplay(store2.$id),
  12638. action: formatDisplay(name),
  12639. args,
  12640. error
  12641. },
  12642. groupId
  12643. }
  12644. });
  12645. });
  12646. }, true);
  12647. store2._customProperties.forEach((name) => {
  12648. vue.watch(() => vue.unref(store2[name]), (newValue, oldValue) => {
  12649. api.notifyComponentUpdate();
  12650. api.sendInspectorState(INSPECTOR_ID);
  12651. if (isTimelineActive) {
  12652. api.addTimelineEvent({
  12653. layerId: MUTATIONS_LAYER_ID,
  12654. event: {
  12655. time: now2(),
  12656. title: "Change",
  12657. subtitle: name,
  12658. data: {
  12659. newValue,
  12660. oldValue
  12661. },
  12662. groupId: activeAction
  12663. }
  12664. });
  12665. }
  12666. }, { deep: true });
  12667. });
  12668. store2.$subscribe(({ events, type: type2 }, state) => {
  12669. api.notifyComponentUpdate();
  12670. api.sendInspectorState(INSPECTOR_ID);
  12671. if (!isTimelineActive)
  12672. return;
  12673. const eventData = {
  12674. time: now2(),
  12675. title: formatMutationType(type2),
  12676. data: assign$1({ store: formatDisplay(store2.$id) }, formatEventData(events)),
  12677. groupId: activeAction
  12678. };
  12679. activeAction = void 0;
  12680. if (type2 === MutationType.patchFunction) {
  12681. eventData.subtitle = "⤵️";
  12682. } else if (type2 === MutationType.patchObject) {
  12683. eventData.subtitle = "🧩";
  12684. } else if (events && !Array.isArray(events)) {
  12685. eventData.subtitle = events.type;
  12686. }
  12687. if (events) {
  12688. eventData.data["rawEvent(s)"] = {
  12689. _custom: {
  12690. display: "DebuggerEvent",
  12691. type: "object",
  12692. tooltip: "raw DebuggerEvent[]",
  12693. value: events
  12694. }
  12695. };
  12696. }
  12697. api.addTimelineEvent({
  12698. layerId: MUTATIONS_LAYER_ID,
  12699. event: eventData
  12700. });
  12701. }, { detached: true, flush: "sync" });
  12702. const hotUpdate = store2._hotUpdate;
  12703. store2._hotUpdate = vue.markRaw((newStore) => {
  12704. hotUpdate(newStore);
  12705. api.addTimelineEvent({
  12706. layerId: MUTATIONS_LAYER_ID,
  12707. event: {
  12708. time: now2(),
  12709. title: "🔥 " + store2.$id,
  12710. subtitle: "HMR update",
  12711. data: {
  12712. store: formatDisplay(store2.$id),
  12713. info: formatDisplay(`HMR update`)
  12714. }
  12715. }
  12716. });
  12717. api.notifyComponentUpdate();
  12718. api.sendInspectorTree(INSPECTOR_ID);
  12719. api.sendInspectorState(INSPECTOR_ID);
  12720. });
  12721. const { $dispose } = store2;
  12722. store2.$dispose = () => {
  12723. $dispose();
  12724. api.notifyComponentUpdate();
  12725. api.sendInspectorTree(INSPECTOR_ID);
  12726. api.sendInspectorState(INSPECTOR_ID);
  12727. api.getSettings().logStoreChanges && toastMessage(`Disposed "${store2.$id}" store 🗑`);
  12728. };
  12729. api.notifyComponentUpdate();
  12730. api.sendInspectorTree(INSPECTOR_ID);
  12731. api.sendInspectorState(INSPECTOR_ID);
  12732. api.getSettings().logStoreChanges && toastMessage(`"${store2.$id}" store installed 🆕`);
  12733. });
  12734. }
  12735. let runningActionId = 0;
  12736. let activeAction;
  12737. function patchActionForGrouping(store2, actionNames) {
  12738. const actions = actionNames.reduce((storeActions, actionName) => {
  12739. storeActions[actionName] = vue.toRaw(store2)[actionName];
  12740. return storeActions;
  12741. }, {});
  12742. for (const actionName in actions) {
  12743. store2[actionName] = function() {
  12744. const _actionId = runningActionId;
  12745. const trackedStore = new Proxy(store2, {
  12746. get(...args) {
  12747. activeAction = _actionId;
  12748. return Reflect.get(...args);
  12749. },
  12750. set(...args) {
  12751. activeAction = _actionId;
  12752. return Reflect.set(...args);
  12753. }
  12754. });
  12755. return actions[actionName].apply(trackedStore, arguments);
  12756. };
  12757. }
  12758. }
  12759. function devtoolsPlugin({ app, store: store2, options }) {
  12760. if (store2.$id.startsWith("__hot:")) {
  12761. return;
  12762. }
  12763. if (options.state) {
  12764. store2._isOptionsAPI = true;
  12765. }
  12766. if (typeof options.state === "function") {
  12767. patchActionForGrouping(
  12768. // @ts-expect-error: can cast the store...
  12769. store2,
  12770. Object.keys(options.actions)
  12771. );
  12772. const originalHotUpdate = store2._hotUpdate;
  12773. vue.toRaw(store2)._hotUpdate = function(newStore) {
  12774. originalHotUpdate.apply(this, arguments);
  12775. patchActionForGrouping(store2, Object.keys(newStore._hmrPayload.actions));
  12776. };
  12777. }
  12778. addStoreToDevtools(
  12779. app,
  12780. // FIXME: is there a way to allow the assignment from Store<Id, S, G, A> to StoreGeneric?
  12781. store2
  12782. );
  12783. }
  12784. function createPinia() {
  12785. const scope = vue.effectScope(true);
  12786. const state = scope.run(() => vue.ref({}));
  12787. let _p = [];
  12788. let toBeInstalled = [];
  12789. const pinia = vue.markRaw({
  12790. install(app) {
  12791. setActivePinia(pinia);
  12792. {
  12793. pinia._a = app;
  12794. app.provide(piniaSymbol, pinia);
  12795. app.config.globalProperties.$pinia = pinia;
  12796. if (USE_DEVTOOLS) {
  12797. registerPiniaDevtools(app, pinia);
  12798. }
  12799. toBeInstalled.forEach((plugin) => _p.push(plugin));
  12800. toBeInstalled = [];
  12801. }
  12802. },
  12803. use(plugin) {
  12804. if (!this._a && true) {
  12805. toBeInstalled.push(plugin);
  12806. } else {
  12807. _p.push(plugin);
  12808. }
  12809. return this;
  12810. },
  12811. _p,
  12812. // it's actually undefined here
  12813. // @ts-expect-error
  12814. _a: null,
  12815. _e: scope,
  12816. _s: /* @__PURE__ */ new Map(),
  12817. state
  12818. });
  12819. if (USE_DEVTOOLS && typeof Proxy !== "undefined") {
  12820. pinia.use(devtoolsPlugin);
  12821. }
  12822. return pinia;
  12823. }
  12824. function patchObject(newState, oldState) {
  12825. for (const key in oldState) {
  12826. const subPatch = oldState[key];
  12827. if (!(key in newState)) {
  12828. continue;
  12829. }
  12830. const targetValue = newState[key];
  12831. if (isPlainObject(targetValue) && isPlainObject(subPatch) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
  12832. newState[key] = patchObject(targetValue, subPatch);
  12833. } else {
  12834. {
  12835. newState[key] = subPatch;
  12836. }
  12837. }
  12838. }
  12839. return newState;
  12840. }
  12841. const noop = () => {
  12842. };
  12843. function addSubscription(subscriptions, callback, detached, onCleanup = noop) {
  12844. subscriptions.push(callback);
  12845. const removeSubscription = () => {
  12846. const idx = subscriptions.indexOf(callback);
  12847. if (idx > -1) {
  12848. subscriptions.splice(idx, 1);
  12849. onCleanup();
  12850. }
  12851. };
  12852. if (!detached && vue.getCurrentScope()) {
  12853. vue.onScopeDispose(removeSubscription);
  12854. }
  12855. return removeSubscription;
  12856. }
  12857. function triggerSubscriptions(subscriptions, ...args) {
  12858. subscriptions.slice().forEach((callback) => {
  12859. callback(...args);
  12860. });
  12861. }
  12862. function mergeReactiveObjects(target, patchToApply) {
  12863. if (target instanceof Map && patchToApply instanceof Map) {
  12864. patchToApply.forEach((value, key) => target.set(key, value));
  12865. }
  12866. if (target instanceof Set && patchToApply instanceof Set) {
  12867. patchToApply.forEach(target.add, target);
  12868. }
  12869. for (const key in patchToApply) {
  12870. if (!patchToApply.hasOwnProperty(key))
  12871. continue;
  12872. const subPatch = patchToApply[key];
  12873. const targetValue = target[key];
  12874. if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
  12875. target[key] = mergeReactiveObjects(targetValue, subPatch);
  12876. } else {
  12877. target[key] = subPatch;
  12878. }
  12879. }
  12880. return target;
  12881. }
  12882. const skipHydrateSymbol = Symbol("pinia:skipHydration");
  12883. function shouldHydrate(obj) {
  12884. return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
  12885. }
  12886. const { assign } = Object;
  12887. function isComputed(o) {
  12888. return !!(vue.isRef(o) && o.effect);
  12889. }
  12890. function createOptionsStore(id, options, pinia, hot) {
  12891. const { state, actions, getters } = options;
  12892. const initialState = pinia.state.value[id];
  12893. let store2;
  12894. function setup() {
  12895. if (!initialState && !hot) {
  12896. {
  12897. pinia.state.value[id] = state ? state() : {};
  12898. }
  12899. }
  12900. const localState = hot ? (
  12901. // use ref() to unwrap refs inside state TODO: check if this is still necessary
  12902. vue.toRefs(vue.ref(state ? state() : {}).value)
  12903. ) : vue.toRefs(pinia.state.value[id]);
  12904. return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
  12905. if (name in localState) {
  12906. console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with "${name}" in store "${id}".`);
  12907. }
  12908. computedGetters[name] = vue.markRaw(vue.computed(() => {
  12909. setActivePinia(pinia);
  12910. const store22 = pinia._s.get(id);
  12911. return getters[name].call(store22, store22);
  12912. }));
  12913. return computedGetters;
  12914. }, {}));
  12915. }
  12916. store2 = createSetupStore(id, setup, options, pinia, hot, true);
  12917. return store2;
  12918. }
  12919. function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {
  12920. let scope;
  12921. const optionsForPlugin = assign({ actions: {} }, options);
  12922. if (!pinia._e.active) {
  12923. throw new Error("Pinia destroyed");
  12924. }
  12925. const $subscribeOptions = {
  12926. deep: true
  12927. // flush: 'post',
  12928. };
  12929. {
  12930. $subscribeOptions.onTrigger = (event) => {
  12931. if (isListening) {
  12932. debuggerEvents = event;
  12933. } else if (isListening == false && !store2._hotUpdating) {
  12934. if (Array.isArray(debuggerEvents)) {
  12935. debuggerEvents.push(event);
  12936. } else {
  12937. console.error("🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.");
  12938. }
  12939. }
  12940. };
  12941. }
  12942. let isListening;
  12943. let isSyncListening;
  12944. let subscriptions = vue.markRaw([]);
  12945. let actionSubscriptions = vue.markRaw([]);
  12946. let debuggerEvents;
  12947. const initialState = pinia.state.value[$id];
  12948. if (!isOptionsStore && !initialState && !hot) {
  12949. {
  12950. pinia.state.value[$id] = {};
  12951. }
  12952. }
  12953. const hotState = vue.ref({});
  12954. let activeListener;
  12955. function $patch(partialStateOrMutator) {
  12956. let subscriptionMutation;
  12957. isListening = isSyncListening = false;
  12958. {
  12959. debuggerEvents = [];
  12960. }
  12961. if (typeof partialStateOrMutator === "function") {
  12962. partialStateOrMutator(pinia.state.value[$id]);
  12963. subscriptionMutation = {
  12964. type: MutationType.patchFunction,
  12965. storeId: $id,
  12966. events: debuggerEvents
  12967. };
  12968. } else {
  12969. mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);
  12970. subscriptionMutation = {
  12971. type: MutationType.patchObject,
  12972. payload: partialStateOrMutator,
  12973. storeId: $id,
  12974. events: debuggerEvents
  12975. };
  12976. }
  12977. const myListenerId = activeListener = Symbol();
  12978. vue.nextTick().then(() => {
  12979. if (activeListener === myListenerId) {
  12980. isListening = true;
  12981. }
  12982. });
  12983. isSyncListening = true;
  12984. triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);
  12985. }
  12986. const $reset = isOptionsStore ? function $reset2() {
  12987. const { state } = options;
  12988. const newState = state ? state() : {};
  12989. this.$patch(($state) => {
  12990. assign($state, newState);
  12991. });
  12992. } : (
  12993. /* istanbul ignore next */
  12994. () => {
  12995. throw new Error(`🍍: Store "${$id}" is built using the setup syntax and does not implement $reset().`);
  12996. }
  12997. );
  12998. function $dispose() {
  12999. scope.stop();
  13000. subscriptions = [];
  13001. actionSubscriptions = [];
  13002. pinia._s.delete($id);
  13003. }
  13004. function wrapAction(name, action) {
  13005. return function() {
  13006. setActivePinia(pinia);
  13007. const args = Array.from(arguments);
  13008. const afterCallbackList = [];
  13009. const onErrorCallbackList = [];
  13010. function after(callback) {
  13011. afterCallbackList.push(callback);
  13012. }
  13013. function onError(callback) {
  13014. onErrorCallbackList.push(callback);
  13015. }
  13016. triggerSubscriptions(actionSubscriptions, {
  13017. args,
  13018. name,
  13019. store: store2,
  13020. after,
  13021. onError
  13022. });
  13023. let ret;
  13024. try {
  13025. ret = action.apply(this && this.$id === $id ? this : store2, args);
  13026. } catch (error) {
  13027. triggerSubscriptions(onErrorCallbackList, error);
  13028. throw error;
  13029. }
  13030. if (ret instanceof Promise) {
  13031. return ret.then((value) => {
  13032. triggerSubscriptions(afterCallbackList, value);
  13033. return value;
  13034. }).catch((error) => {
  13035. triggerSubscriptions(onErrorCallbackList, error);
  13036. return Promise.reject(error);
  13037. });
  13038. }
  13039. triggerSubscriptions(afterCallbackList, ret);
  13040. return ret;
  13041. };
  13042. }
  13043. const _hmrPayload = /* @__PURE__ */ vue.markRaw({
  13044. actions: {},
  13045. getters: {},
  13046. state: [],
  13047. hotState
  13048. });
  13049. const partialStore = {
  13050. _p: pinia,
  13051. // _s: scope,
  13052. $id,
  13053. $onAction: addSubscription.bind(null, actionSubscriptions),
  13054. $patch,
  13055. $reset,
  13056. $subscribe(callback, options2 = {}) {
  13057. const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
  13058. const stopWatcher = scope.run(() => vue.watch(() => pinia.state.value[$id], (state) => {
  13059. if (options2.flush === "sync" ? isSyncListening : isListening) {
  13060. callback({
  13061. storeId: $id,
  13062. type: MutationType.direct,
  13063. events: debuggerEvents
  13064. }, state);
  13065. }
  13066. }, assign({}, $subscribeOptions, options2)));
  13067. return removeSubscription;
  13068. },
  13069. $dispose
  13070. };
  13071. const store2 = vue.reactive(assign(
  13072. {
  13073. _hmrPayload,
  13074. _customProperties: vue.markRaw(/* @__PURE__ */ new Set())
  13075. // devtools custom properties
  13076. },
  13077. partialStore
  13078. // must be added later
  13079. // setupStore
  13080. ));
  13081. pinia._s.set($id, store2);
  13082. const setupStore = pinia._e.run(() => {
  13083. scope = vue.effectScope();
  13084. return scope.run(() => setup());
  13085. });
  13086. for (const key in setupStore) {
  13087. const prop = setupStore[key];
  13088. if (vue.isRef(prop) && !isComputed(prop) || vue.isReactive(prop)) {
  13089. if (hot) {
  13090. set$1(hotState.value, key, vue.toRef(setupStore, key));
  13091. } else if (!isOptionsStore) {
  13092. if (initialState && shouldHydrate(prop)) {
  13093. if (vue.isRef(prop)) {
  13094. prop.value = initialState[key];
  13095. } else {
  13096. mergeReactiveObjects(prop, initialState[key]);
  13097. }
  13098. }
  13099. {
  13100. pinia.state.value[$id][key] = prop;
  13101. }
  13102. }
  13103. {
  13104. _hmrPayload.state.push(key);
  13105. }
  13106. } else if (typeof prop === "function") {
  13107. const actionValue = hot ? prop : wrapAction(key, prop);
  13108. {
  13109. setupStore[key] = actionValue;
  13110. }
  13111. {
  13112. _hmrPayload.actions[key] = prop;
  13113. }
  13114. optionsForPlugin.actions[key] = prop;
  13115. } else {
  13116. if (isComputed(prop)) {
  13117. _hmrPayload.getters[key] = isOptionsStore ? (
  13118. // @ts-expect-error
  13119. options.getters[key]
  13120. ) : prop;
  13121. if (IS_CLIENT) {
  13122. const getters = setupStore._getters || // @ts-expect-error: same
  13123. (setupStore._getters = vue.markRaw([]));
  13124. getters.push(key);
  13125. }
  13126. }
  13127. }
  13128. }
  13129. {
  13130. assign(store2, setupStore);
  13131. assign(vue.toRaw(store2), setupStore);
  13132. }
  13133. Object.defineProperty(store2, "$state", {
  13134. get: () => hot ? hotState.value : pinia.state.value[$id],
  13135. set: (state) => {
  13136. if (hot) {
  13137. throw new Error("cannot set hotState");
  13138. }
  13139. $patch(($state) => {
  13140. assign($state, state);
  13141. });
  13142. }
  13143. });
  13144. {
  13145. store2._hotUpdate = vue.markRaw((newStore) => {
  13146. store2._hotUpdating = true;
  13147. newStore._hmrPayload.state.forEach((stateKey) => {
  13148. if (stateKey in store2.$state) {
  13149. const newStateTarget = newStore.$state[stateKey];
  13150. const oldStateSource = store2.$state[stateKey];
  13151. if (typeof newStateTarget === "object" && isPlainObject(newStateTarget) && isPlainObject(oldStateSource)) {
  13152. patchObject(newStateTarget, oldStateSource);
  13153. } else {
  13154. newStore.$state[stateKey] = oldStateSource;
  13155. }
  13156. }
  13157. set$1(store2, stateKey, vue.toRef(newStore.$state, stateKey));
  13158. });
  13159. Object.keys(store2.$state).forEach((stateKey) => {
  13160. if (!(stateKey in newStore.$state)) {
  13161. del(store2, stateKey);
  13162. }
  13163. });
  13164. isListening = false;
  13165. isSyncListening = false;
  13166. pinia.state.value[$id] = vue.toRef(newStore._hmrPayload, "hotState");
  13167. isSyncListening = true;
  13168. vue.nextTick().then(() => {
  13169. isListening = true;
  13170. });
  13171. for (const actionName in newStore._hmrPayload.actions) {
  13172. const action = newStore[actionName];
  13173. set$1(store2, actionName, wrapAction(actionName, action));
  13174. }
  13175. for (const getterName in newStore._hmrPayload.getters) {
  13176. const getter = newStore._hmrPayload.getters[getterName];
  13177. const getterValue = isOptionsStore ? (
  13178. // special handling of options api
  13179. vue.computed(() => {
  13180. setActivePinia(pinia);
  13181. return getter.call(store2, store2);
  13182. })
  13183. ) : getter;
  13184. set$1(store2, getterName, getterValue);
  13185. }
  13186. Object.keys(store2._hmrPayload.getters).forEach((key) => {
  13187. if (!(key in newStore._hmrPayload.getters)) {
  13188. del(store2, key);
  13189. }
  13190. });
  13191. Object.keys(store2._hmrPayload.actions).forEach((key) => {
  13192. if (!(key in newStore._hmrPayload.actions)) {
  13193. del(store2, key);
  13194. }
  13195. });
  13196. store2._hmrPayload = newStore._hmrPayload;
  13197. store2._getters = newStore._getters;
  13198. store2._hotUpdating = false;
  13199. });
  13200. }
  13201. if (USE_DEVTOOLS) {
  13202. const nonEnumerable = {
  13203. writable: true,
  13204. configurable: true,
  13205. // avoid warning on devtools trying to display this property
  13206. enumerable: false
  13207. };
  13208. ["_p", "_hmrPayload", "_getters", "_customProperties"].forEach((p) => {
  13209. Object.defineProperty(store2, p, assign({ value: store2[p] }, nonEnumerable));
  13210. });
  13211. }
  13212. pinia._p.forEach((extender) => {
  13213. if (USE_DEVTOOLS) {
  13214. const extensions = scope.run(() => extender({
  13215. store: store2,
  13216. app: pinia._a,
  13217. pinia,
  13218. options: optionsForPlugin
  13219. }));
  13220. Object.keys(extensions || {}).forEach((key) => store2._customProperties.add(key));
  13221. assign(store2, extensions);
  13222. } else {
  13223. assign(store2, scope.run(() => extender({
  13224. store: store2,
  13225. app: pinia._a,
  13226. pinia,
  13227. options: optionsForPlugin
  13228. })));
  13229. }
  13230. });
  13231. if (store2.$state && typeof store2.$state === "object" && typeof store2.$state.constructor === "function" && !store2.$state.constructor.toString().includes("[native code]")) {
  13232. console.warn(`[🍍]: The "state" must be a plain object. It cannot be
  13233. state: () => new MyClass()
  13234. Found in store "${store2.$id}".`);
  13235. }
  13236. if (initialState && isOptionsStore && options.hydrate) {
  13237. options.hydrate(store2.$state, initialState);
  13238. }
  13239. isListening = true;
  13240. isSyncListening = true;
  13241. return store2;
  13242. }
  13243. function defineStore(idOrOptions, setup, setupOptions) {
  13244. let id;
  13245. let options;
  13246. const isSetupStore = typeof setup === "function";
  13247. if (typeof idOrOptions === "string") {
  13248. id = idOrOptions;
  13249. options = isSetupStore ? setupOptions : setup;
  13250. } else {
  13251. options = idOrOptions;
  13252. id = idOrOptions.id;
  13253. if (typeof id !== "string") {
  13254. throw new Error(`[🍍]: "defineStore()" must be passed a store id as its first argument.`);
  13255. }
  13256. }
  13257. function useStore(pinia, hot) {
  13258. const currentInstance = vue.getCurrentInstance();
  13259. pinia = // in test mode, ignore the argument provided as we can always retrieve a
  13260. // pinia instance with getActivePinia()
  13261. pinia || currentInstance && vue.inject(piniaSymbol, null);
  13262. if (pinia)
  13263. setActivePinia(pinia);
  13264. if (!activePinia) {
  13265. throw new Error(`[🍍]: "getActivePinia()" was called but there was no active Pinia. Did you forget to install pinia?
  13266. const pinia = createPinia()
  13267. app.use(pinia)
  13268. This will fail in production.`);
  13269. }
  13270. pinia = activePinia;
  13271. if (!pinia._s.has(id)) {
  13272. if (isSetupStore) {
  13273. createSetupStore(id, setup, options, pinia);
  13274. } else {
  13275. createOptionsStore(id, options, pinia);
  13276. }
  13277. {
  13278. useStore._pinia = pinia;
  13279. }
  13280. }
  13281. const store2 = pinia._s.get(id);
  13282. if (hot) {
  13283. const hotId = "__hot:" + id;
  13284. const newStore = isSetupStore ? createSetupStore(hotId, setup, options, pinia, true) : createOptionsStore(hotId, assign({}, options), pinia, true);
  13285. hot._hotUpdate(newStore);
  13286. delete pinia.state.value[hotId];
  13287. pinia._s.delete(hotId);
  13288. }
  13289. if (IS_CLIENT && currentInstance && currentInstance.proxy && // avoid adding stores that are just built for hot module replacement
  13290. !hot) {
  13291. const vm = currentInstance.proxy;
  13292. const cache2 = "_pStores" in vm ? vm._pStores : vm._pStores = {};
  13293. cache2[id] = store2;
  13294. }
  13295. return store2;
  13296. }
  13297. useStore.$id = id;
  13298. return useStore;
  13299. }
  13300. const STORAGE_KEY = "BETTING_CART_LIST";
  13301. const useOrderStore = defineStore("order", {
  13302. state: () => ({
  13303. selectOrders: uni.getStorageSync(STORAGE_KEY) || [],
  13304. isOpen: false
  13305. }),
  13306. getters: {
  13307. selectedCount: (state) => state.selectOrders.length,
  13308. totalStake: (state) => {
  13309. return state.selectOrders.reduce((sum, item) => sum + (Number(item.stake) || 0), 0);
  13310. },
  13311. totalPotentialWin: (state) => {
  13312. return state.selectOrders.reduce((sum, item) => {
  13313. const stake = Number(item.stake) || 0;
  13314. return sum + stake * Number(item.odds || 0);
  13315. }, 0);
  13316. }
  13317. },
  13318. actions: {
  13319. toggleSheet() {
  13320. this.isOpen = !this.isOpen;
  13321. },
  13322. setSheetOpen(status) {
  13323. this.isOpen = status;
  13324. },
  13325. addOrderItem(item) {
  13326. const index = this.selectOrders.findIndex((o) => o.uniqueKey === item.uniqueKey);
  13327. if (index === -1) {
  13328. const newItem = { ...item, stake: item.mininum || 20 };
  13329. this.selectOrders.push(newItem);
  13330. } else {
  13331. this.selectOrders[index].odds = item.odds;
  13332. if (this.selectOrders[index].errorMsg) {
  13333. this.selectOrders[index].errorMsg = "";
  13334. }
  13335. }
  13336. this.saveToStorage();
  13337. },
  13338. removeOrderItem(itemOrKey) {
  13339. const targetKey = typeof itemOrKey === "object" ? itemOrKey.uniqueKey : itemOrKey;
  13340. this.selectOrders = this.selectOrders.filter((o) => o.uniqueKey !== targetKey);
  13341. if (this.selectOrders.length === 0) {
  13342. this.isOpen = false;
  13343. }
  13344. this.saveToStorage();
  13345. },
  13346. // 兼容页面中调用的 removeOrderItemByKey
  13347. removeOrderItemByKey(key) {
  13348. this.removeOrderItem(key);
  13349. },
  13350. updateStake(uniqueKey, amount2) {
  13351. const item = this.selectOrders.find((o) => o.uniqueKey === uniqueKey);
  13352. if (item) {
  13353. item.stake = amount2;
  13354. this.saveToStorage();
  13355. }
  13356. },
  13357. updateMatchStatus(data_id, newMatchData) {
  13358. let changed = false;
  13359. this.selectOrders.forEach((order) => {
  13360. if (order.data_id === data_id) {
  13361. if (newMatchData.state !== void 0)
  13362. order.state = newMatchData.state;
  13363. if (newMatchData.status !== void 0)
  13364. order.status = newMatchData.status;
  13365. if (newMatchData.is_locked !== void 0)
  13366. order.is_locked = newMatchData.is_locked;
  13367. if (newMatchData.score !== void 0)
  13368. order.score = newMatchData.score;
  13369. changed = true;
  13370. }
  13371. });
  13372. if (changed)
  13373. this.saveToStorage();
  13374. },
  13375. // ==========================================
  13376. // 1. 处理 HTTP 接口的同步部分失败
  13377. // ==========================================
  13378. handleSubmitResult(submittedKeys, failures) {
  13379. const failedKeys = failures.map((f) => {
  13380. const hdp = f.handicap !== null && f.handicap !== void 0 && f.handicap !== "" ? `_${f.handicap}` : "";
  13381. return `${f.data_id}_${f.id}_${f.value}${hdp}`;
  13382. });
  13383. this.selectOrders = this.selectOrders.filter((order) => {
  13384. const isSubmitted = submittedKeys.includes(order.uniqueKey);
  13385. const isFailed = failedKeys.includes(order.uniqueKey);
  13386. if (isSubmitted && !isFailed) {
  13387. return false;
  13388. }
  13389. if (isFailed) {
  13390. const failData = failures.find((f) => {
  13391. const hdp = f.handicap !== null && f.handicap !== void 0 && f.handicap !== "" ? `_${f.handicap}` : "";
  13392. return `${f.data_id}_${f.id}_${f.value}${hdp}` === order.uniqueKey;
  13393. });
  13394. if (failData)
  13395. order.errorMsg = failData.msg;
  13396. }
  13397. return true;
  13398. });
  13399. this.saveToStorage();
  13400. },
  13401. // ==========================================
  13402. // 2. 处理 WebSocket 推送的异步退单
  13403. // ==========================================
  13404. handleAsyncFailure(failData) {
  13405. const hdp = failData.handicap !== null && failData.handicap !== void 0 && failData.handicap !== "" ? `_${failData.handicap}` : "";
  13406. const uniqueKey = `${failData.data_id}_${failData.id}_${failData.value}${hdp}`;
  13407. const existIndex = this.selectOrders.findIndex((item) => item.uniqueKey === uniqueKey);
  13408. const sportInfo = failData.sport_info || {};
  13409. const fallbackOrder = {
  13410. matchId: sportInfo.id || "",
  13411. data_id: sportInfo.data_id || failData.data_id,
  13412. league: sportInfo.league || "已被退回的赛事",
  13413. homeTeam: sportInfo.home_team || "-",
  13414. guestTeam: sportInfo.guest_team || "-",
  13415. betType: "已退单选项",
  13416. // 为了醒目提示,可直接显示为退单选项
  13417. betTypeName: failData.value,
  13418. handicap: failData.handicap,
  13419. odds: failData.odd,
  13420. score: sportInfo.score || "-",
  13421. state: sportInfo.state || 1,
  13422. status: sportInfo.status || 1,
  13423. is_roll: sportInfo.is_roll || 0,
  13424. is_locked: sportInfo.is_locked || 0,
  13425. uniqueKey,
  13426. optionValue: failData.value,
  13427. marketId: failData.id,
  13428. stake: failData.amount,
  13429. // 保留用户之前的下注金额
  13430. errorMsg: failData.msg
  13431. // 挂载退单原因
  13432. };
  13433. if (existIndex > -1) {
  13434. this.selectOrders[existIndex] = fallbackOrder;
  13435. } else {
  13436. this.selectOrders.unshift(fallbackOrder);
  13437. }
  13438. this.saveToStorage();
  13439. },
  13440. clearAllOrders() {
  13441. this.selectOrders = [];
  13442. this.isOpen = false;
  13443. this.saveToStorage();
  13444. },
  13445. saveToStorage() {
  13446. uni.setStorageSync(STORAGE_KEY, this.selectOrders);
  13447. }
  13448. }
  13449. });
  13450. var globalBaseURL = "https://sportapi.sp2509.cc/api";
  13451. var apiUrl = "https://bot28api.sp2509.cc/api/";
  13452. const service = (config2) => {
  13453. const {
  13454. url: url2,
  13455. method: method2 = "GET",
  13456. data = {},
  13457. params = {},
  13458. hideLoading = false,
  13459. // 是否隐藏loading
  13460. showSuccessTip = true,
  13461. // 是否显示成功提示
  13462. showFailTip = true,
  13463. // 是否显示失败提示
  13464. timeout: timeout2 = 1e4
  13465. // 请求超时时间
  13466. } = config2;
  13467. formatAppLog("log", "at request/index.js:33", config2, 31);
  13468. return new Promise((resolve2, reject) => {
  13469. let loadingShowed = false;
  13470. if (!hideLoading) {
  13471. uni.showLoading({
  13472. title: i18n.global.t("加载中") + "...",
  13473. mask: true,
  13474. // 禁止点击背景(对应原 forbidClick)
  13475. success: () => {
  13476. loadingShowed = true;
  13477. }
  13478. });
  13479. }
  13480. const token = uni.getStorageSync("token");
  13481. const localLang = uni.getStorageSync("locale");
  13482. const header = {
  13483. "Content-Type": "application/json;charset=utf-8",
  13484. "Lang": localLang ? localLang : defaultLang,
  13485. "Authorization": token
  13486. };
  13487. if (token) {
  13488. header.Authorization = token;
  13489. }
  13490. uni.request({
  13491. url: globalBaseURL + url2,
  13492. // 拼接基础地址和接口路径
  13493. // url: 'https://sportapi.sp2509.cc/api' + url, // 拼接基础地址和接口路径
  13494. // url: 'https://sportapi.sp2509.cc/api' + url, // 拼接基础地址和接口路径
  13495. // url: 'http://192.168.110.106:8084/api' + url, // 拼接基础地址和接口路径
  13496. method: method2.toUpperCase(),
  13497. // 确保请求方法为大写
  13498. data,
  13499. // POST/PUT 等请求的参数
  13500. header,
  13501. timeout: timeout2,
  13502. // 5. 请求成功回调
  13503. success: (response) => {
  13504. const res = response.data;
  13505. if (loadingShowed) {
  13506. uni.hideLoading();
  13507. }
  13508. if (res.code === 1) {
  13509. if (showSuccessTip && res.msg) {
  13510. uni.showToast({
  13511. title: res.msg,
  13512. icon: "success",
  13513. duration: 2e3,
  13514. position: "middle"
  13515. });
  13516. }
  13517. resolve2(res);
  13518. } else if (res.code === 0) {
  13519. if (showFailTip && res.msg) {
  13520. uni.showToast({
  13521. title: res.msg,
  13522. icon: "none",
  13523. duration: 2e3,
  13524. position: "middle"
  13525. });
  13526. }
  13527. reject(new Error(res.msg || i18n.global.t("操作失败")));
  13528. } else if (res.code === 401) {
  13529. uni.showToast({
  13530. title: res.msg || i18n.global.t("登录已过期,请重新登录"),
  13531. icon: "none",
  13532. duration: 2e3,
  13533. mask: true
  13534. });
  13535. uni.removeStorageSync("token");
  13536. let timer = setTimeout(() => {
  13537. clearTimeout(timer);
  13538. uni.navigateTo({
  13539. url: "/pages/login/index"
  13540. // 注意路径要符合uni-app规范
  13541. });
  13542. }, 1500);
  13543. reject(new Error("登录已过期"));
  13544. } else if (res.code === 10011) {
  13545. let modalTimer = setTimeout(() => {
  13546. clearTimeout(modalTimer);
  13547. uni.showModal({
  13548. title: i18n.global.t("提示"),
  13549. content: i18n.global.t("您还未设置资金密码,是否前往设置?"),
  13550. success: (modalRes) => {
  13551. if (modalRes.confirm) {
  13552. uni.navigateTo({
  13553. url: "/pages/WorkModule/my/changeFundPassword/index"
  13554. });
  13555. }
  13556. }
  13557. });
  13558. }, 300);
  13559. reject(new Error(res.msg || "未设置资金密码"));
  13560. } else if (res.code === 10012) {
  13561. uni.$emit("show-system-notice-modal", res.data || res.msg);
  13562. reject(new Error(res.msg || "系统重要通知"));
  13563. } else {
  13564. if (showFailTip) {
  13565. uni.showToast({
  13566. title: res.msg || i18n.global.t("请求失败,请稍后重试"),
  13567. icon: "none",
  13568. duration: 2e3
  13569. });
  13570. }
  13571. reject(new Error(res.msg || "请求失败"));
  13572. }
  13573. },
  13574. // 6. 请求失败回调(网络错误、超时等)
  13575. fail: (error) => {
  13576. formatAppLog("log", "at request/index.js:163", error, 119);
  13577. if (loadingShowed) {
  13578. uni.hideLoading();
  13579. }
  13580. uni.showToast({
  13581. // title: error.errMsg || i18n.global.t('网络异常,请检查网络后重试'),
  13582. title: i18n.global.t("网络异常,请检查网络后重试"),
  13583. icon: "none",
  13584. duration: 2e3
  13585. });
  13586. reject(error);
  13587. },
  13588. // 7. 请求完成(无论成功失败)
  13589. complete: () => {
  13590. if (loadingShowed) {
  13591. uni.hideLoading();
  13592. }
  13593. }
  13594. });
  13595. });
  13596. };
  13597. service.get = (url2, config2 = {}) => {
  13598. return service({
  13599. url: url2,
  13600. method: "GET",
  13601. data: config2.params,
  13602. hideLoading: config2.hideLoading,
  13603. showSuccessTip: config2.showSuccessTip,
  13604. showFailTip: config2.showFailTip
  13605. });
  13606. };
  13607. service.post = (url2, data = {}, config2 = {}) => {
  13608. return service({
  13609. url: url2,
  13610. method: "POST",
  13611. data,
  13612. hideLoading: config2.hideLoading,
  13613. showSuccessTip: config2.showSuccessTip,
  13614. showFailTip: config2.showFailTip
  13615. });
  13616. };
  13617. const postUserRegister = (data) => {
  13618. return service.post("/user/register", data, { showSuccessTip: false });
  13619. };
  13620. const setAccount = (data) => {
  13621. return service.post("/user/setAccount", data, { showSuccessTip: false });
  13622. };
  13623. const getCaptcha = (data) => {
  13624. return service.post("/user/captcha", data);
  13625. };
  13626. const postUserLogin = (data) => {
  13627. return service.post("/user/login", data);
  13628. };
  13629. const logout = () => {
  13630. return service.get("/user/logout");
  13631. };
  13632. const getUserInfo = () => {
  13633. return service.get("/user/info");
  13634. };
  13635. const updateUserInfo = (data) => {
  13636. return service.post("/user/update", data);
  13637. };
  13638. const deleteAccount = () => {
  13639. return service.get("/user/delete");
  13640. };
  13641. const resetPassword = (data) => {
  13642. return service.post("/user/resetPassword", data);
  13643. };
  13644. const getBanner = (params) => {
  13645. return service.get("/index/banner", { params });
  13646. };
  13647. const getActivity = (params) => {
  13648. return service.get("/index/activity", { params });
  13649. };
  13650. const getActivityDetail = (params) => {
  13651. return service.get("/index/activityInfo", { params });
  13652. };
  13653. const getSportSchedule = (params) => {
  13654. return service.get("/index/sport", { params, hideLoading: true });
  13655. };
  13656. const getWorldCupSport = (params) => {
  13657. return service.get("/index/worldCupSport", { params, hideLoading: true });
  13658. };
  13659. const getSportInfo = (params) => {
  13660. return service.get("/index/sportInfo", { params });
  13661. };
  13662. const recharge = (data) => {
  13663. return service.post("/wallet/recharge", data);
  13664. };
  13665. const getRecharge = (params) => {
  13666. return service.get("/wallet/rechargeHistory", { params });
  13667. };
  13668. const getWithdrawHistory = (params) => {
  13669. return service.get("/wallet/withdrawHistory", { params });
  13670. };
  13671. const getBalance = () => {
  13672. return service.get("/wallet/getUsdt", {
  13673. hideLoading: true,
  13674. showSuccessTip: false
  13675. });
  13676. };
  13677. const getMoneyLog = (params) => {
  13678. return service.get("/wallet/moneyLog", { params });
  13679. };
  13680. const getOrderList = (params) => {
  13681. return service.get("/order/list", { params });
  13682. };
  13683. const getOrderInfo = (params) => {
  13684. return service.get("/order/info", { params });
  13685. };
  13686. const betInfo = (params) => {
  13687. return service.get("/game/betInfo", { params });
  13688. };
  13689. const submitOrder = (data) => {
  13690. return service.post("/order/submit", data);
  13691. };
  13692. const applyRefund = (data) => service.post("/order/refund", data);
  13693. const modifySafeWord = (data) => service.post("/user/safeWord", data);
  13694. const getGameRuleList = (params) => service.get("/game/rule", { params });
  13695. const submitGameBet = (data) => service.post("/game/bet", data);
  13696. const getGameBetList = (params) => service.get("/game/betList", { params });
  13697. const getHowPlay = (params) => service.get("/lhcGame/index", { params, hideLoading: true });
  13698. const getLHCInfo = (params) => service.get("/lhc/info", { params, hideLoading: true });
  13699. const getPlayInfo = (params) => service.get("/lhcNumber/index", { params, hideLoading: true });
  13700. const submitBetCart = (data) => service.post("/lhcOrder/submit", data);
  13701. const getDigitalOrderList = (params) => service.get("/lhcOrder/list", { params });
  13702. const getDigitalOrderInfo = (params) => service.get("/lhcOrder/info", { params });
  13703. const getConfigIndex = () => {
  13704. return service.get("/index/config");
  13705. };
  13706. const addYuebao = (data) => {
  13707. return service.post("/yuebao/add", data);
  13708. };
  13709. const withdrawYuebao = (data) => {
  13710. return service.post("/yuebao/out", data);
  13711. };
  13712. const getYuebaoItemList = (params) => {
  13713. return service.get("/yuebao/itemList", { params });
  13714. };
  13715. const getYuebaoLogList = (params) => {
  13716. return service.get("/yuebao/logList", { params });
  13717. };
  13718. const getLeagueList = (params) => {
  13719. return service.get("/index/leagueList", { params });
  13720. };
  13721. const gameLotteryStatus = (params) => {
  13722. return service.get("/game/lotteryStatus", { params });
  13723. };
  13724. const userGuestRegister = (params) => {
  13725. return service.get("/user/guestRegister", { params });
  13726. };
  13727. const useWebsocketDataStore = defineStore("WebsocketData", {
  13728. state: () => ({
  13729. data: {},
  13730. globalData: {}
  13731. }),
  13732. getters: {
  13733. // getWebsocketData: (state) => state.data,
  13734. },
  13735. actions: {
  13736. setWebsocketData(data) {
  13737. this.data = data;
  13738. },
  13739. setWebsocketGlobalData(data) {
  13740. this.globalData = data;
  13741. }
  13742. }
  13743. });
  13744. const _sfc_main$1h = /* @__PURE__ */ vue.defineComponent({
  13745. __name: "index",
  13746. setup(__props, { expose: __expose }) {
  13747. __expose();
  13748. const visible = vue.ref(false);
  13749. const msgData = vue.ref();
  13750. vue.onMounted(() => {
  13751. uni.$on("show-system-notice-modal", (data) => {
  13752. visible.value = true;
  13753. msgData.value = data;
  13754. });
  13755. });
  13756. vue.onUnmounted(() => {
  13757. uni.$off("show-system-notice-modal");
  13758. });
  13759. const handleConfirm = () => {
  13760. visible.value = false;
  13761. };
  13762. const __returned__ = { visible, msgData, handleConfirm };
  13763. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  13764. return __returned__;
  13765. }
  13766. });
  13767. function _sfc_render$1g(_ctx, _cache, $props, $setup, $data, $options) {
  13768. return $setup.visible ? (vue.openBlock(), vue.createElementBlock(
  13769. "view",
  13770. {
  13771. key: 0,
  13772. class: "notice-mask",
  13773. onTouchmove: vue.withModifiers(() => {
  13774. }, ["stop", "prevent"])
  13775. },
  13776. [
  13777. vue.createElementVNode("view", { class: "notice-box" }, [
  13778. vue.createCommentVNode(" 头部警告文字 "),
  13779. vue.createElementVNode(
  13780. "view",
  13781. { class: "notice-header" },
  13782. vue.toDisplayString(_ctx.$t("温馨提示:平台不会主动加好友上分,请谨防被骗,已咨询客服人员为准")),
  13783. 1
  13784. /* TEXT */
  13785. ),
  13786. vue.createElementVNode("view", { class: "notice-body" }, [
  13787. vue.createCommentVNode(' <view class="arrow left-arrow">‹</view>\r\n <view class="arrow right-arrow">›</view> '),
  13788. vue.createElementVNode("view", { class: "content-wrapper" }, [
  13789. vue.createElementVNode(
  13790. "view",
  13791. { class: "paragraph center" },
  13792. vue.toDisplayString(_ctx.$t("尊敬的用户")) + ":",
  13793. 1
  13794. /* TEXT */
  13795. ),
  13796. vue.createElementVNode("view", { class: "paragraph center mb-10" }, [
  13797. vue.createTextVNode(
  13798. vue.toDisplayString(_ctx.$t("每日")) + "(",
  13799. 1
  13800. /* TEXT */
  13801. ),
  13802. vue.createElementVNode(
  13803. "span",
  13804. { style: { "color": "red" } },
  13805. vue.toDisplayString($setup.msgData.time),
  13806. 1
  13807. /* TEXT */
  13808. ),
  13809. vue.createTextVNode(
  13810. ")" + vue.toDisplayString(_ctx.$t("为系统维护时间段")) + "。",
  13811. 1
  13812. /* TEXT */
  13813. )
  13814. ]),
  13815. vue.createElementVNode(
  13816. "view",
  13817. { class: "paragraph center" },
  13818. vue.toDisplayString(_ctx.$t("维护期间将暂停此交易服务,请您合理安排操作时间,敬请谅解!")),
  13819. 1
  13820. /* TEXT */
  13821. )
  13822. ])
  13823. ]),
  13824. vue.createCommentVNode(" 底部按钮 "),
  13825. vue.createElementVNode("view", { class: "notice-footer" }, [
  13826. vue.createElementVNode(
  13827. "button",
  13828. {
  13829. class: "confirm-btn",
  13830. onClick: $setup.handleConfirm
  13831. },
  13832. vue.toDisplayString(_ctx.$t("确认")),
  13833. 1
  13834. /* TEXT */
  13835. )
  13836. ])
  13837. ])
  13838. ],
  13839. 32
  13840. /* NEED_HYDRATION */
  13841. )) : vue.createCommentVNode("v-if", true);
  13842. }
  13843. const SystemNoticeModal = /* @__PURE__ */ _export_sfc(_sfc_main$1h, [["render", _sfc_render$1g], ["__scopeId", "data-v-b5e4ee78"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/SystemNoticeModal/index.vue"]]);
  13844. var UPLOAD_API = `${globalBaseURL}/upload/image`;
  13845. const _sfc_main$1g = {
  13846. name: "ImageUploader",
  13847. props: {
  13848. maxCount: {
  13849. type: Number,
  13850. default: 6
  13851. },
  13852. defaultList: {
  13853. type: Array,
  13854. default: () => []
  13855. },
  13856. width: {
  13857. type: [String, Number],
  13858. default: ""
  13859. },
  13860. height: {
  13861. type: [String, Number],
  13862. default: ""
  13863. },
  13864. gap: {
  13865. type: [String, Number],
  13866. default: "20rpx"
  13867. },
  13868. containerPadding: {
  13869. type: [String, Number],
  13870. default: "20rpx"
  13871. },
  13872. isPreview: {
  13873. type: Boolean,
  13874. default: false
  13875. },
  13876. imgCenter: {
  13877. // 只有一张图片的时候是否在中间显示
  13878. type: Boolean,
  13879. default: true
  13880. }
  13881. },
  13882. data() {
  13883. return {
  13884. imageList: [...this.defaultList],
  13885. uploading: false,
  13886. systemInfo: {}
  13887. };
  13888. },
  13889. created() {
  13890. this.systemInfo = uni.getSystemInfoSync();
  13891. },
  13892. computed: {
  13893. itemWidth() {
  13894. if (this.width) {
  13895. return typeof this.width === "number" ? `${this.width}px` : this.width;
  13896. }
  13897. const screenWidth = this.systemInfo.screenWidth || this.systemInfo.windowWidth;
  13898. const gapValue = this.getPixelValue(this.gap);
  13899. const containerPaddingValue = this.getPixelValue(this.containerPadding);
  13900. const availableWidth = screenWidth - containerPaddingValue * 2;
  13901. const width = (availableWidth - gapValue * 2) / 3;
  13902. return `${width}px`;
  13903. },
  13904. itemHeight() {
  13905. if (this.height) {
  13906. return typeof this.height === "number" ? `${this.height}px` : this.height;
  13907. }
  13908. return this.itemWidth;
  13909. },
  13910. showUploadBtn() {
  13911. return this.imageList.length < this.maxCount && !this.uploading;
  13912. }
  13913. },
  13914. watch: {
  13915. defaultList(newVal) {
  13916. this.imageList = [...newVal];
  13917. },
  13918. imageList(newVal) {
  13919. this.$emit("change", [...newVal]);
  13920. }
  13921. },
  13922. methods: {
  13923. getPixelValue(value) {
  13924. if (typeof value === "number")
  13925. return value;
  13926. if (value.includes("rpx")) {
  13927. const num = parseFloat(value);
  13928. return num / (750 / this.systemInfo.windowWidth);
  13929. }
  13930. return parseFloat(value);
  13931. },
  13932. lastInRow(index) {
  13933. return (index + 1) % 3 === 0;
  13934. },
  13935. chooseImage() {
  13936. if (this.uploading)
  13937. return;
  13938. if (this.imageList.length >= this.maxCount) {
  13939. uni.showToast({
  13940. title: `最多只能上传${this.maxCount}张图片`,
  13941. icon: "none"
  13942. });
  13943. return;
  13944. }
  13945. const count = this.maxCount - this.imageList.length;
  13946. uni.chooseImage({
  13947. count,
  13948. sizeType: ["compressed"],
  13949. sourceType: ["album", "camera"],
  13950. success: async (res) => {
  13951. uni.showLoading();
  13952. this.uploading = true;
  13953. formatAppLog("log", "at components/CUploadImage/index.vue:163", res, "选择图片成功");
  13954. if (res.tempFiles && res.tempFiles.length > 0) {
  13955. try {
  13956. const uploadTasks = res.tempFilePaths.map((filePath) => this.uploadFile(filePath));
  13957. const results = await Promise.all(uploadTasks);
  13958. formatAppLog("log", "at components/CUploadImage/index.vue:170", results, "上传结果");
  13959. const successResults = results.filter((item) => item && item.success);
  13960. this.imageList = [...this.imageList, ...successResults.map((item) => item.data)];
  13961. } catch (error) {
  13962. formatAppLog("log", "at components/CUploadImage/index.vue:175", "图片上传失败:", error);
  13963. uni.showToast({
  13964. title: "图片上传失败",
  13965. icon: "none"
  13966. });
  13967. } finally {
  13968. uni.hideLoading();
  13969. this.uploading = false;
  13970. }
  13971. } else {
  13972. this.uploading = false;
  13973. }
  13974. },
  13975. fail: (error) => {
  13976. formatAppLog("log", "at components/CUploadImage/index.vue:189", "选择图片失败:", error);
  13977. this.uploading = false;
  13978. },
  13979. complete: () => {
  13980. this.uploading = false;
  13981. }
  13982. });
  13983. },
  13984. uploadFile(filePath) {
  13985. return new Promise((resolve2) => {
  13986. uni.uploadFile({
  13987. url: UPLOAD_API,
  13988. filePath,
  13989. name: "file",
  13990. header: {
  13991. Authorization: uni.getStorageSync("token")
  13992. },
  13993. success: (res) => {
  13994. formatAppLog("log", "at components/CUploadImage/index.vue:211", "uploadFile上传成功", res);
  13995. try {
  13996. const data = JSON.parse(res.data);
  13997. if (data.code === 1) {
  13998. resolve2({
  13999. success: true,
  14000. data: data.data.url
  14001. });
  14002. } else {
  14003. resolve2({
  14004. success: false,
  14005. error: data.msg || "上传失败"
  14006. });
  14007. }
  14008. } catch (e) {
  14009. resolve2({
  14010. success: false,
  14011. error: "解析响应失败"
  14012. });
  14013. }
  14014. },
  14015. fail: (error) => {
  14016. formatAppLog("log", "at components/CUploadImage/index.vue:233", "uploadFile上传失败", error);
  14017. resolve2({
  14018. success: false,
  14019. error
  14020. });
  14021. }
  14022. });
  14023. });
  14024. },
  14025. handleDelete(index) {
  14026. this.imageList.splice(index, 1);
  14027. },
  14028. previewImage(index) {
  14029. if (!this.isPreview)
  14030. return;
  14031. const urls = this.imageList.map((item) => item.url || item);
  14032. uni.previewImage({
  14033. current: urls[index],
  14034. urls
  14035. });
  14036. },
  14037. getImages() {
  14038. return [...this.imageList];
  14039. },
  14040. clear() {
  14041. this.imageList = [];
  14042. },
  14043. setImages(list2) {
  14044. this.imageList = [...list2];
  14045. }
  14046. }
  14047. };
  14048. function _sfc_render$1f(_ctx, _cache, $props, $setup, $data, $options) {
  14049. const _component_u_icon = __unplugin_components_0$5;
  14050. return vue.openBlock(), vue.createElementBlock("view", { class: "image-uploader-container" }, [
  14051. vue.createElementVNode(
  14052. "view",
  14053. {
  14054. class: "image-uploader",
  14055. style: vue.normalizeStyle({
  14056. display: $props.maxCount === 1 && $props.imgCenter ? "flex" : ""
  14057. })
  14058. },
  14059. [
  14060. vue.createCommentVNode(" 图片列表 "),
  14061. vue.createElementVNode("view", { class: "image-list" }, [
  14062. (vue.openBlock(true), vue.createElementBlock(
  14063. vue.Fragment,
  14064. null,
  14065. vue.renderList($data.imageList, (item, index) => {
  14066. return vue.openBlock(), vue.createElementBlock(
  14067. "view",
  14068. {
  14069. key: index,
  14070. class: "image-item",
  14071. style: vue.normalizeStyle({ width: $options.itemWidth, height: $options.itemHeight, marginRight: $options.lastInRow(index) ? 0 : $props.gap })
  14072. },
  14073. [
  14074. vue.createElementVNode("image", {
  14075. src: item.url || item,
  14076. mode: "aspectFill",
  14077. class: "image-content",
  14078. onClick: ($event) => $options.previewImage(index)
  14079. }, null, 8, ["src", "onClick"]),
  14080. vue.createElementVNode("view", {
  14081. class: "delete-btn",
  14082. onClick: vue.withModifiers(($event) => $options.handleDelete(index), ["stop"])
  14083. }, [
  14084. vue.createVNode(_component_u_icon, {
  14085. name: "trash-fill",
  14086. size: "26",
  14087. color: "#fff"
  14088. })
  14089. ], 8, ["onClick"])
  14090. ],
  14091. 4
  14092. /* STYLE */
  14093. );
  14094. }),
  14095. 128
  14096. /* KEYED_FRAGMENT */
  14097. )),
  14098. vue.createCommentVNode(" 上传按钮 "),
  14099. $options.showUploadBtn ? (vue.openBlock(), vue.createElementBlock(
  14100. "view",
  14101. {
  14102. key: 0,
  14103. class: "upload-btn",
  14104. style: vue.normalizeStyle({ width: $options.itemWidth, height: $options.itemHeight }),
  14105. onClick: _cache[0] || (_cache[0] = (...args) => $options.chooseImage && $options.chooseImage(...args))
  14106. },
  14107. [
  14108. vue.createVNode(_component_u_icon, {
  14109. name: "plus",
  14110. size: "50",
  14111. color: "#999"
  14112. }),
  14113. vue.createElementVNode(
  14114. "text",
  14115. { class: "upload-text" },
  14116. vue.toDisplayString(_ctx.$t("上传图片")),
  14117. 1
  14118. /* TEXT */
  14119. )
  14120. ],
  14121. 4
  14122. /* STYLE */
  14123. )) : vue.createCommentVNode("v-if", true)
  14124. ])
  14125. ],
  14126. 4
  14127. /* STYLE */
  14128. )
  14129. ]);
  14130. }
  14131. const CUploadImage = /* @__PURE__ */ _export_sfc(_sfc_main$1g, [["render", _sfc_render$1f], ["__scopeId", "data-v-785d6534"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/components/CUploadImage/index.vue"]]);
  14132. const useRechargeStore = defineStore("recharge", {
  14133. state: () => ({
  14134. visible: false,
  14135. item: {}
  14136. }),
  14137. getters: {},
  14138. actions: {
  14139. showModal(itemData) {
  14140. this.item = itemData || {};
  14141. this.visible = true;
  14142. },
  14143. hideModal() {
  14144. this.visible = false;
  14145. this.item = {};
  14146. }
  14147. }
  14148. });
  14149. const _sfc_main$1f = {
  14150. __name: "index",
  14151. emits: ["recharge-confirm"],
  14152. setup(__props, { expose: __expose, emit: __emit }) {
  14153. __expose();
  14154. const { t: t2, locale } = useI18n();
  14155. const rechargeStore = useRechargeStore();
  14156. const emit = __emit;
  14157. const CUploadImageRef = vue.ref();
  14158. const dataRef = vue.ref({});
  14159. const dataParams = vue.reactive({
  14160. id: "",
  14161. image: ""
  14162. });
  14163. const payment_type_text = vue.ref(["微信", "支付宝", "银行卡"]);
  14164. vue.watch(() => rechargeStore.visible, (newVal) => {
  14165. if (newVal && rechargeStore.item && rechargeStore.item.pay_data) {
  14166. dataParams.id = rechargeStore.item.id;
  14167. dataRef.value = JSON.parse(rechargeStore.item.pay_data);
  14168. }
  14169. });
  14170. const handleConfirm = () => {
  14171. uni.request({
  14172. url: apiUrl + "wallet/submitImage",
  14173. method: "POST",
  14174. data: dataParams,
  14175. header: {
  14176. Authorization: uni.getStorageSync("token"),
  14177. lang: locale.value
  14178. },
  14179. success: (res) => {
  14180. uni.hideLoading();
  14181. if (res.data.code === 0) {
  14182. uni.showToast({ title: res.data.msg || t2("提交成功"), icon: "success" });
  14183. dataParams.id = "";
  14184. dataParams.image = "";
  14185. CUploadImageRef.value.clear();
  14186. emit("recharge-confirm");
  14187. } else {
  14188. uni.showToast({ title: res.data.msg || t2("提交失败"), icon: "none" });
  14189. }
  14190. },
  14191. fail: (err) => {
  14192. uni.hideLoading();
  14193. uni.showToast({ title: t2("网络错误"), icon: "none" });
  14194. }
  14195. });
  14196. rechargeStore.hideModal();
  14197. };
  14198. const handleCancel = () => {
  14199. rechargeStore.hideModal();
  14200. };
  14201. const changeImg = (e) => {
  14202. dataParams.image = Array.isArray(e) ? e[0] : e;
  14203. };
  14204. const __returned__ = { t: t2, locale, rechargeStore, emit, CUploadImageRef, dataRef, dataParams, payment_type_text, handleConfirm, handleCancel, changeImg, ref: vue.ref, reactive: vue.reactive, watch: vue.watch, get apiUrl() {
  14205. return apiUrl;
  14206. }, get useI18n() {
  14207. return useI18n;
  14208. }, CUploadImage, get useRechargeStore() {
  14209. return useRechargeStore;
  14210. } };
  14211. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  14212. return __returned__;
  14213. }
  14214. };
  14215. function _sfc_render$1e(_ctx, _cache, $props, $setup, $data, $options) {
  14216. const _component_u_button = __unplugin_components_2$1;
  14217. return $setup.rechargeStore.visible ? (vue.openBlock(), vue.createElementBlock(
  14218. "view",
  14219. {
  14220. key: 0,
  14221. class: "recharge-modal",
  14222. onTouchmove: vue.withModifiers(() => {
  14223. }, ["stop", "prevent"])
  14224. },
  14225. [
  14226. vue.createElementVNode("view", { class: "recharge-box" }, [
  14227. vue.createElementVNode(
  14228. "view",
  14229. { class: "modal-header" },
  14230. vue.toDisplayString(_ctx.$t("充值确认")),
  14231. 1
  14232. /* TEXT */
  14233. ),
  14234. $setup.dataRef ? (vue.openBlock(), vue.createElementBlock("view", {
  14235. key: 0,
  14236. class: "info-container"
  14237. }, [
  14238. vue.createElementVNode("view", { class: "info-item" }, [
  14239. vue.createElementVNode(
  14240. "text",
  14241. { class: "label" },
  14242. vue.toDisplayString(_ctx.$t("充值类型")),
  14243. 1
  14244. /* TEXT */
  14245. ),
  14246. $setup.rechargeStore.item && $setup.rechargeStore.item.payment_type ? (vue.openBlock(), vue.createElementBlock(
  14247. "text",
  14248. {
  14249. key: 0,
  14250. class: "value"
  14251. },
  14252. vue.toDisplayString($setup.payment_type_text[Number($setup.rechargeStore.item.payment_type) - 1]),
  14253. 1
  14254. /* TEXT */
  14255. )) : vue.createCommentVNode("v-if", true)
  14256. ]),
  14257. vue.createElementVNode("view", { class: "info-item" }, [
  14258. vue.createElementVNode(
  14259. "text",
  14260. { class: "label" },
  14261. vue.toDisplayString(_ctx.$t("收款人姓名")),
  14262. 1
  14263. /* TEXT */
  14264. ),
  14265. vue.createElementVNode(
  14266. "text",
  14267. { class: "value" },
  14268. vue.toDisplayString($setup.dataRef.payName),
  14269. 1
  14270. /* TEXT */
  14271. )
  14272. ]),
  14273. vue.createElementVNode("view", { class: "info-item" }, [
  14274. vue.createElementVNode(
  14275. "text",
  14276. { class: "label" },
  14277. vue.toDisplayString(_ctx.$t("收款账号")),
  14278. 1
  14279. /* TEXT */
  14280. ),
  14281. vue.createElementVNode(
  14282. "text",
  14283. { class: "value" },
  14284. vue.toDisplayString($setup.dataRef.payAccount),
  14285. 1
  14286. /* TEXT */
  14287. )
  14288. ]),
  14289. $setup.rechargeStore.item.payment_type == "3" && $setup.dataRef.bankName ? (vue.openBlock(), vue.createElementBlock("view", {
  14290. key: 0,
  14291. class: "info-item"
  14292. }, [
  14293. vue.createElementVNode(
  14294. "text",
  14295. { class: "label" },
  14296. vue.toDisplayString(_ctx.$t("开户行")),
  14297. 1
  14298. /* TEXT */
  14299. ),
  14300. vue.createElementVNode(
  14301. "text",
  14302. { class: "value" },
  14303. vue.toDisplayString($setup.dataRef.bankName),
  14304. 1
  14305. /* TEXT */
  14306. )
  14307. ])) : vue.createCommentVNode("v-if", true),
  14308. $setup.rechargeStore.item.payment_type != "3" && $setup.dataRef.payQrCode ? (vue.openBlock(), vue.createElementBlock("view", {
  14309. key: 1,
  14310. class: "qr-wrapper"
  14311. }, [
  14312. vue.createElementVNode("image", {
  14313. class: "qr-code",
  14314. src: $setup.dataRef.payQrCode,
  14315. mode: "aspectFit"
  14316. }, null, 8, ["src"]),
  14317. vue.createElementVNode(
  14318. "text",
  14319. { class: "qr-tip" },
  14320. vue.toDisplayString(_ctx.$t("收款码")),
  14321. 1
  14322. /* TEXT */
  14323. )
  14324. ])) : vue.createCommentVNode("v-if", true),
  14325. vue.createElementVNode("view", { class: "qr-wrapper" }, [
  14326. vue.createVNode(
  14327. $setup["CUploadImage"],
  14328. {
  14329. onChange: $setup.changeImg,
  14330. maxCount: 1,
  14331. ref: "CUploadImageRef"
  14332. },
  14333. null,
  14334. 512
  14335. /* NEED_PATCH */
  14336. ),
  14337. vue.createElementVNode(
  14338. "text",
  14339. { class: "qr-tip" },
  14340. vue.toDisplayString(_ctx.$t("上传支付凭证")),
  14341. 1
  14342. /* TEXT */
  14343. )
  14344. ])
  14345. ])) : vue.createCommentVNode("v-if", true),
  14346. vue.createElementVNode("view", { class: "action-btns" }, [
  14347. vue.createVNode(_component_u_button, {
  14348. type: "error",
  14349. onClick: $setup.handleCancel,
  14350. class: "btn"
  14351. }, {
  14352. default: vue.withCtx(() => [
  14353. vue.createTextVNode(
  14354. vue.toDisplayString(_ctx.$t("取消")),
  14355. 1
  14356. /* TEXT */
  14357. )
  14358. ]),
  14359. _: 1
  14360. /* STABLE */
  14361. }),
  14362. vue.createVNode(_component_u_button, {
  14363. type: "primary",
  14364. onClick: $setup.handleConfirm,
  14365. class: "btn"
  14366. }, {
  14367. default: vue.withCtx(() => [
  14368. vue.createTextVNode(
  14369. vue.toDisplayString(_ctx.$t("提交")),
  14370. 1
  14371. /* TEXT */
  14372. )
  14373. ]),
  14374. _: 1
  14375. /* STABLE */
  14376. })
  14377. ])
  14378. ])
  14379. ],
  14380. 32
  14381. /* NEED_HYDRATION */
  14382. )) : vue.createCommentVNode("v-if", true);
  14383. }
  14384. const RechargeModal$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1f, [["render", _sfc_render$1e], ["__scopeId", "data-v-6f4bef05"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/rechargeModal/index.vue"]]);
  14385. const _sfc_main$1e = /* @__PURE__ */ vue.defineComponent({
  14386. __name: "index",
  14387. setup(__props, { expose: __expose }) {
  14388. const show = vue.ref(false);
  14389. const checkIsIosSafari = () => {
  14390. return false;
  14391. };
  14392. vue.onMounted(() => {
  14393. });
  14394. const openPop = () => {
  14395. };
  14396. const handleClose = () => {
  14397. show.value = false;
  14398. };
  14399. __expose({
  14400. show,
  14401. openPop
  14402. });
  14403. const __returned__ = { show, checkIsIosSafari, openPop, handleClose };
  14404. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  14405. return __returned__;
  14406. }
  14407. });
  14408. function _sfc_render$1d(_ctx, _cache, $props, $setup, $data, $options) {
  14409. const _component_u_popup = __unplugin_components_2$3;
  14410. return vue.openBlock(), vue.createElementBlock("view", { class: "guide-container" }, [
  14411. vue.createVNode(_component_u_popup, {
  14412. modelValue: $setup.show,
  14413. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.show = $event),
  14414. mode: "bottom",
  14415. "mask-close-able": true,
  14416. "safe-area-inset-bottom": true,
  14417. onClose: $setup.handleClose
  14418. }, {
  14419. default: vue.withCtx(() => [
  14420. vue.createElementVNode("view", { class: "guide-content" }, [
  14421. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  14422. ])
  14423. ]),
  14424. _: 3
  14425. /* FORWARDED */
  14426. }, 8, ["modelValue"])
  14427. ]);
  14428. }
  14429. const AddDesktopGuide = /* @__PURE__ */ _export_sfc(_sfc_main$1e, [["render", _sfc_render$1d], ["__scopeId", "data-v-58ed82b7"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/components/AddDesktopGuide/index.vue"]]);
  14430. const _imports_0$6 = "/static/images/layout/applogo.png";
  14431. const _imports_1$2 = "/static/images/yindao.png";
  14432. const _sfc_main$1d = {
  14433. __name: "index",
  14434. setup(__props, { expose: __expose }) {
  14435. __expose();
  14436. const { t: t2 } = useI18n();
  14437. const showAppBanner = vue.ref(uni.getStorageSync("hide_global_app_banner") !== true);
  14438. const AddDesktopGuideRef = vue.ref();
  14439. const handleCloseBanner = () => {
  14440. showAppBanner.value = false;
  14441. uni.setStorageSync("hide_global_app_banner", true);
  14442. if (typeof window !== "undefined") {
  14443. window.isAppBannerClosed = true;
  14444. }
  14445. };
  14446. const handleDownload = () => {
  14447. formatAppLog("log", "at components/AppDownloadBanner/index.vue:46", "执行下载逻辑");
  14448. AddDesktopGuideRef.value.openPop();
  14449. };
  14450. function isAddedToHomeScreen2() {
  14451. return true;
  14452. }
  14453. vue.onMounted(() => {
  14454. if (typeof window !== "undefined" && window.isAppBannerClosed) {
  14455. showAppBanner.value = false;
  14456. }
  14457. });
  14458. const __returned__ = { t: t2, showAppBanner, AddDesktopGuideRef, handleCloseBanner, handleDownload, isAddedToHomeScreen: isAddedToHomeScreen2, ref: vue.ref, onMounted: vue.onMounted, get useI18n() {
  14459. return useI18n;
  14460. }, AddDesktopGuide };
  14461. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  14462. return __returned__;
  14463. }
  14464. };
  14465. function _sfc_render$1c(_ctx, _cache, $props, $setup, $data, $options) {
  14466. const _component_u_icon = __unplugin_components_0$5;
  14467. return $setup.showAppBanner ? vue.withDirectives((vue.openBlock(), vue.createElementBlock(
  14468. "view",
  14469. {
  14470. key: 0,
  14471. class: "global-app-banner"
  14472. },
  14473. [
  14474. vue.createElementVNode("view", { class: "banner-content" }, [
  14475. vue.createElementVNode("view", { class: "left-section" }, [
  14476. vue.createVNode(_component_u_icon, {
  14477. name: "close",
  14478. color: "#666",
  14479. size: "28",
  14480. class: "close-btn",
  14481. onClick: vue.withModifiers($setup.handleCloseBanner, ["stop"])
  14482. }),
  14483. vue.createElementVNode("image", {
  14484. src: _imports_0$6,
  14485. class: "app-icon",
  14486. mode: "aspectFill"
  14487. }),
  14488. vue.createElementVNode("view", { class: "app-info" }, [
  14489. vue.createElementVNode("text", { class: "app-name" }, "F1BET  APP"),
  14490. vue.createElementVNode(
  14491. "text",
  14492. { class: "app-tips" },
  14493. vue.toDisplayString($setup.t("体验更流畅,娱乐更安全。")),
  14494. 1
  14495. /* TEXT */
  14496. )
  14497. ])
  14498. ]),
  14499. vue.createElementVNode(
  14500. "view",
  14501. {
  14502. class: "download-btn",
  14503. onClick: $setup.handleDownload
  14504. },
  14505. vue.toDisplayString($setup.t("立即下载")),
  14506. 1
  14507. /* TEXT */
  14508. )
  14509. ]),
  14510. vue.createVNode(
  14511. $setup["AddDesktopGuide"],
  14512. { ref: "AddDesktopGuideRef" },
  14513. {
  14514. default: vue.withCtx(() => [
  14515. vue.createElementVNode("image", {
  14516. src: _imports_1$2,
  14517. mode: "widthFix"
  14518. })
  14519. ]),
  14520. _: 1
  14521. /* STABLE */
  14522. },
  14523. 512
  14524. /* NEED_PATCH */
  14525. )
  14526. ],
  14527. 512
  14528. /* NEED_PATCH */
  14529. )), [
  14530. [vue.vShow, !$setup.isAddedToHomeScreen()]
  14531. ]) : vue.createCommentVNode("v-if", true);
  14532. }
  14533. const AppDownloadBanner = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$1c], ["__scopeId", "data-v-2d50370a"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/components/AppDownloadBanner/index.vue"]]);
  14534. function useCallbacks() {
  14535. let handlers = [];
  14536. function add(handler) {
  14537. handlers.push(handler);
  14538. return () => {
  14539. const i = handlers.indexOf(handler);
  14540. if (i > -1)
  14541. handlers.splice(i, 1);
  14542. };
  14543. }
  14544. function reset() {
  14545. handlers = [];
  14546. }
  14547. return {
  14548. add,
  14549. list: () => handlers,
  14550. reset
  14551. };
  14552. }
  14553. const HASH_RE = /#/g;
  14554. const AMPERSAND_RE = /&/g;
  14555. const PLUS_RE = /\+/g;
  14556. const ENC_BRACKET_OPEN_RE = /%5B/g;
  14557. const ENC_BRACKET_CLOSE_RE = /%5D/g;
  14558. const ENC_CARET_RE = /%5E/g;
  14559. const ENC_BACKTICK_RE = /%60/g;
  14560. const ENC_CURLY_OPEN_RE = /%7B/g;
  14561. const ENC_PIPE_RE = /%7C/g;
  14562. const ENC_CURLY_CLOSE_RE = /%7D/g;
  14563. const ENC_SPACE_RE = /%20/g;
  14564. function commonEncode(text) {
  14565. return encodeURI(`${text}`).replace(ENC_PIPE_RE, "|").replace(ENC_BRACKET_OPEN_RE, "[").replace(ENC_BRACKET_CLOSE_RE, "]");
  14566. }
  14567. function encodeQueryValue(text) {
  14568. return commonEncode(text).replace(PLUS_RE, "%2B").replace(ENC_SPACE_RE, "+").replace(HASH_RE, "%23").replace(AMPERSAND_RE, "%26").replace(ENC_BACKTICK_RE, "`").replace(ENC_CURLY_OPEN_RE, "{").replace(ENC_CURLY_CLOSE_RE, "}").replace(ENC_CARET_RE, "^");
  14569. }
  14570. function decode(text) {
  14571. try {
  14572. return decodeURIComponent(`${text}`);
  14573. } catch (err) {
  14574. warn(`Error decoding "${text}". Using original value`);
  14575. }
  14576. return `${text}`;
  14577. }
  14578. function warn(msg, debug = false, ...args) {
  14579. debug && console.warn(`[uni-router warn]: ${msg}`, ...args);
  14580. }
  14581. const NavigationFailureSymbol = Symbol("navigation failure");
  14582. const ErrorTypeMessages = {
  14583. [
  14584. 1
  14585. /* NavigationErrorTypes.MATCHER_NOT_FOUND */
  14586. ]({ location: location2 }) {
  14587. return `Navigation ${typeof location2 === "string" ? location2 : JSON.stringify(location2)} is not found`;
  14588. },
  14589. [
  14590. 2
  14591. /* NavigationErrorTypes.NAVIGATION_GUARD_REDIRECT */
  14592. ]({ from, to }) {
  14593. return `Redirected from "${JSON.stringify(from)}" to "${JSON.stringify(to)}" via a navigation guard.`;
  14594. },
  14595. [
  14596. 4
  14597. /* NavigationErrorTypes.NAVIGATION_ABORTED */
  14598. ]({ from, to }) {
  14599. return `Navigation aborted from "${JSON.stringify(from)}" to "${JSON.stringify(to)}" via a navigation guard.`;
  14600. },
  14601. [
  14602. 8
  14603. /* NavigationErrorTypes.NAVIGATION_CANCELLED */
  14604. ]({ from, to }) {
  14605. return `Navigation cancelled from "${JSON.stringify(from)}" to "${JSON.stringify(to)}" with a new navigation.`;
  14606. },
  14607. [
  14608. 16
  14609. /* NavigationErrorTypes.NAVIGATION_DUPLICATED */
  14610. ]({ from, to }) {
  14611. return `Avoided redundant navigation to current location: "${JSON.stringify(from)}".`;
  14612. }
  14613. };
  14614. function isNavigationFailure(error, type2) {
  14615. return error instanceof Error && NavigationFailureSymbol in error && (type2 == null || !!(error.type & type2));
  14616. }
  14617. function createRouterError(type2, params) {
  14618. return Object.assign(new Error(ErrorTypeMessages[type2](params)), {
  14619. type: type2,
  14620. [NavigationFailureSymbol]: true
  14621. }, params);
  14622. }
  14623. const isArray = Array.isArray;
  14624. const isFunction = (val) => typeof val === "function";
  14625. const isString = (val) => typeof val === "string";
  14626. const isObject$2 = (val) => val != null && typeof val === "object";
  14627. const mpPlatformReg = /(^mp-weixin$)|(^mp-baidu$)|(^mp-alipay$)|(^mp-toutiao$)|(^mp-qq$)|(^mp-360$)/g;
  14628. const uniRouterApiName = [
  14629. "navigateTo",
  14630. "redirectTo",
  14631. "reLaunch",
  14632. "switchTab",
  14633. "navigateBack"
  14634. ];
  14635. var NavigationTypesEnums;
  14636. (function(NavigationTypesEnums2) {
  14637. NavigationTypesEnums2["navigate"] = "navigateTo";
  14638. NavigationTypesEnums2["redirect"] = "redirectTo";
  14639. NavigationTypesEnums2["reLaunch"] = "reLaunch";
  14640. NavigationTypesEnums2["switchTab"] = "switchTab";
  14641. NavigationTypesEnums2["navigateBack"] = "navigateBack";
  14642. })(NavigationTypesEnums || (NavigationTypesEnums = {}));
  14643. const START_LOCATION_NORMALIZED = {
  14644. path: "/",
  14645. name: "",
  14646. query: {},
  14647. fullPath: "/",
  14648. meta: {}
  14649. };
  14650. const WILDCARD = "*";
  14651. const routerKey = Symbol();
  14652. const routeLocationKey = Symbol();
  14653. function useRouter$1() {
  14654. return vue.inject(routerKey);
  14655. }
  14656. function useRoute() {
  14657. return vue.inject(routeLocationKey);
  14658. }
  14659. const uniRouterApi = {
  14660. navigateTo: uni.navigateTo,
  14661. redirectTo: uni.redirectTo,
  14662. reLaunch: uni.reLaunch,
  14663. switchTab: uni.switchTab,
  14664. navigateBack: uni.navigateBack
  14665. };
  14666. function rewriteUniRouterApi(router2) {
  14667. uniRouterApiName.forEach((apiName) => {
  14668. uni[apiName] = function(options) {
  14669. return router2[apiName](options);
  14670. };
  14671. });
  14672. }
  14673. function parseQuery(search) {
  14674. const query = {};
  14675. if (search === "" || search === "?")
  14676. return query;
  14677. const hasLeadingIM = search[0] === "?";
  14678. const searchParams = (hasLeadingIM ? search.slice(1) : search).split("&");
  14679. for (let i = 0; i < searchParams.length; ++i) {
  14680. const searchParam = searchParams[i].replace("+", " ");
  14681. const eqPos = searchParam.indexOf("=");
  14682. const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));
  14683. const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));
  14684. query[key] = value;
  14685. }
  14686. return query;
  14687. }
  14688. function decodeQuery(query) {
  14689. for (const key in query) {
  14690. const value = query[key];
  14691. if (value != null) {
  14692. query[key] = decode(value);
  14693. }
  14694. }
  14695. return query;
  14696. }
  14697. function stringifyQuery(query) {
  14698. let search = "";
  14699. for (let key in query) {
  14700. const value = query[key];
  14701. key = encodeQueryValue(key);
  14702. if (value == null) {
  14703. if (value !== void 0) {
  14704. search += (search.length ? "&" : "") + key;
  14705. }
  14706. continue;
  14707. }
  14708. if (value !== void 0) {
  14709. search += (search.length ? "&" : "") + key;
  14710. if (value != null)
  14711. search += `=${encodeQueryValue(value)}`;
  14712. }
  14713. }
  14714. return search;
  14715. }
  14716. function parseURL(parseQuery2, location2, currentLocation = "/") {
  14717. if (location2 === WILDCARD) {
  14718. return {
  14719. path: location2,
  14720. query: {}
  14721. };
  14722. }
  14723. let path, query = {}, searchString = "";
  14724. const searchPos = location2.indexOf("?");
  14725. if (searchPos > -1) {
  14726. path = location2.slice(0, searchPos);
  14727. searchString = location2.slice(searchPos + 1);
  14728. query = parseQuery2(searchString);
  14729. } else {
  14730. path = location2;
  14731. }
  14732. path = resolveRelativePath(path != null ? path : location2, currentLocation);
  14733. return {
  14734. path,
  14735. query
  14736. };
  14737. }
  14738. function stringifyURL(stringifyQuery2, location2) {
  14739. const query = location2.query ? stringifyQuery2(location2.query) : "";
  14740. return location2.path + (query && "?") + query;
  14741. }
  14742. function getEnterRoute(router2) {
  14743. const options = uni.getLaunchOptionsSync();
  14744. return {
  14745. path: `/${options.path}`,
  14746. query: options.query || {}
  14747. };
  14748. }
  14749. function resolveRelativePath(to, from) {
  14750. if (to.startsWith("/"))
  14751. return to;
  14752. if (!from.startsWith("/")) {
  14753. return to;
  14754. }
  14755. if (!to)
  14756. return from;
  14757. const fromSegments = from.split("/");
  14758. const toSegments = to.split("/");
  14759. const lastToSegment = toSegments[toSegments.length - 1];
  14760. if (lastToSegment === ".." || lastToSegment === ".") {
  14761. toSegments.push("");
  14762. }
  14763. let position = fromSegments.length - 1;
  14764. let toPosition;
  14765. let segment;
  14766. for (toPosition = 0; toPosition < toSegments.length; toPosition++) {
  14767. segment = toSegments[toPosition];
  14768. if (segment === ".")
  14769. continue;
  14770. if (segment === "..") {
  14771. if (position > 1)
  14772. position--;
  14773. } else
  14774. break;
  14775. }
  14776. return `${fromSegments.slice(0, position).join("/")}/${toSegments.slice(toPosition - (toPosition === toSegments.length ? 1 : 0)).join("/")}`;
  14777. }
  14778. function createRouteMatcher(options) {
  14779. const aliasPathToRouteMap = /* @__PURE__ */ new Map();
  14780. const pathToRouteMap = /* @__PURE__ */ new Map();
  14781. const nameToRouteMap = /* @__PURE__ */ new Map();
  14782. function createRouteRecord(route2) {
  14783. let { path, aliasPath, name } = route2;
  14784. const routeStr = JSON.stringify(route2);
  14785. if (path == null || path === void 0) {
  14786. warn(`当前路由对象route:${routeStr}不规范,必须含有\`path\``, options.debug);
  14787. }
  14788. if (path.indexOf("/") !== 0 && path !== "*") {
  14789. warn(`当前路由对象route:${routeStr} \`path\`缺少前缀 ‘/’`, options.debug);
  14790. }
  14791. aliasPath = aliasPath || path;
  14792. pathToRouteMap.set(path, route2);
  14793. aliasPathToRouteMap.set(aliasPath, route2);
  14794. if (name) {
  14795. if (nameToRouteMap.has(name)) {
  14796. warn(`当前路由对象route:${routeStr} 的\`name\`已存在路由表中,将会覆盖旧值`, options.debug);
  14797. }
  14798. nameToRouteMap.set(name, route2);
  14799. }
  14800. }
  14801. options.routes.forEach((route2) => createRouteRecord(route2));
  14802. function getRouteByAliasPath(aliasPath) {
  14803. return aliasPathToRouteMap.get(aliasPath);
  14804. }
  14805. function getRouteByPath(path) {
  14806. return pathToRouteMap.get(path);
  14807. }
  14808. function getRouteByName(name) {
  14809. return nameToRouteMap.get(name);
  14810. }
  14811. return {
  14812. getRouteByAliasPath,
  14813. getRouteByPath,
  14814. getRouteByName
  14815. };
  14816. }
  14817. function routeLocationNormalized(router2, routeLocation) {
  14818. var _a2;
  14819. let { fullPath, path, name, query, meta } = routeLocation;
  14820. const { getRouteByAliasPath, getRouteByPath } = router2.routeMatcher;
  14821. const locationNormalized = Object.assign({}, START_LOCATION_NORMALIZED);
  14822. if (router2.options.platform === "h5") {
  14823. const route2 = path === "/" ? getRouteByAliasPath(path) : getRouteByPath(path);
  14824. query = routeLocation.query = decodeQuery((_a2 = parseURL(router2.parseQuery, fullPath)) === null || _a2 === void 0 ? void 0 : _a2.query);
  14825. fullPath = stringifyURL(router2.stringifyQuery, routeLocation);
  14826. meta = Object.assign({}, route2 === null || route2 === void 0 ? void 0 : route2.meta, meta);
  14827. name = route2 === null || route2 === void 0 ? void 0 : route2.name;
  14828. }
  14829. locationNormalized.fullPath = fullPath;
  14830. locationNormalized.meta = meta;
  14831. locationNormalized.path = path;
  14832. locationNormalized.name = name;
  14833. locationNormalized.query = query;
  14834. return locationNormalized;
  14835. }
  14836. function isRouteLocation(route2) {
  14837. return typeof route2 === "string" || route2 && typeof route2 === "object";
  14838. }
  14839. function isSameRouteLocation(a, b) {
  14840. if (a.fullPath || b.fullPath) {
  14841. return a.fullPath === b.fullPath;
  14842. } else {
  14843. return false;
  14844. }
  14845. }
  14846. function createRoute404(router2, to) {
  14847. const route2 = router2.resolve(WILDCARD);
  14848. if (!route2 || typeof route2.redirect === "undefined") {
  14849. warn("未匹配到*通配符路径,或者*通配符必须配合 redirect 使用。redirect: string | Location", router2.options.debug);
  14850. throw createRouterError(1, {
  14851. location: to
  14852. });
  14853. }
  14854. let redirect;
  14855. if (isFunction(route2.redirect)) {
  14856. redirect = route2.redirect(to);
  14857. } else {
  14858. redirect = route2.redirect;
  14859. }
  14860. const targetLocation = router2.resolve(redirect);
  14861. if (targetLocation === void 0) {
  14862. warn(`无法解析解析出redirect:${JSON.stringify(redirect)}中的内容,`, router2.options.debug);
  14863. throw createRouterError(1, {
  14864. location: to
  14865. });
  14866. }
  14867. return createRouterError(2, {
  14868. to: redirect,
  14869. from: to
  14870. });
  14871. }
  14872. function runGuardQueue(guards) {
  14873. return guards.reduce((promise2, guard) => promise2.then(() => guard()), Promise.resolve());
  14874. }
  14875. function guardToPromiseFn(guard, to, from) {
  14876. return () => new Promise((resolve2, reject) => {
  14877. const next = (valid) => {
  14878. if (valid === false) {
  14879. reject(createRouterError(4, {
  14880. to,
  14881. from
  14882. }));
  14883. } else if (valid instanceof Error) {
  14884. reject(valid);
  14885. } else if (isRouteLocation(valid)) {
  14886. reject(createRouterError(2, {
  14887. to: valid,
  14888. from: to
  14889. }));
  14890. } else {
  14891. resolve2();
  14892. }
  14893. };
  14894. const guardReturn = guard(to, from, next);
  14895. let guardCall = Promise.resolve(guardReturn);
  14896. if (typeof guardReturn === "object" && "then" in guardReturn) {
  14897. guardCall = guardCall.then(next);
  14898. } else if (guardReturn !== void 0) {
  14899. next(guardReturn);
  14900. }
  14901. guardCall.catch((err) => reject(err));
  14902. });
  14903. }
  14904. function getRouteByVueVm(vueVm, router2) {
  14905. let path = vueVm.$scope.route;
  14906. path = path.startsWith("/") ? path : `/${path}`;
  14907. const query = vueVm.$scope.options || {};
  14908. return {
  14909. path,
  14910. query
  14911. };
  14912. }
  14913. var __async$3 = (__this, __arguments, generator) => {
  14914. return new Promise((resolve2, reject) => {
  14915. var fulfilled = (value) => {
  14916. try {
  14917. step(generator.next(value));
  14918. } catch (e) {
  14919. reject(e);
  14920. }
  14921. };
  14922. var rejected = (value) => {
  14923. try {
  14924. step(generator.throw(value));
  14925. } catch (e) {
  14926. reject(e);
  14927. }
  14928. };
  14929. var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
  14930. step((generator = generator.apply(__this, __arguments)).next());
  14931. });
  14932. };
  14933. function createHook(originHook, proxyHook, vm, router2) {
  14934. return (...args) => {
  14935. proxyHook.call(vm, args, (options) => {
  14936. originHook.apply(vm, options);
  14937. }, router2);
  14938. };
  14939. }
  14940. function proxyPageHook(vm, router2) {
  14941. console.log(vm);
  14942. if (!proxyHooksConfig$1)
  14943. return;
  14944. if (!vm.$scope)
  14945. return;
  14946. for (const proxyHookKey in proxyHooksConfig$1) {
  14947. const proxyHook = proxyHooksConfig$1[proxyHookKey];
  14948. const originHook = vm.$scope[proxyHookKey];
  14949. if (originHook) {
  14950. vm.$scope[proxyHookKey] = createHook(originHook, proxyHook, vm, router2);
  14951. }
  14952. }
  14953. }
  14954. const proxyHooksConfig$1 = {
  14955. //修改onLoad拿到的参数
  14956. onLoad([options], originHook, router2) {
  14957. originHook([decodeQuery(options)]);
  14958. },
  14959. onShow(options, originHook, router2) {
  14960. console.log(options);
  14961. const pages = getCurrentPages();
  14962. const pagesLen = pages.length;
  14963. let toNormalized;
  14964. let fromNormalized;
  14965. if (router2.fromRoute) {
  14966. toNormalized = router2.currentRoute.value;
  14967. fromNormalized = router2.fromRoute;
  14968. router2.fromRoute = void 0;
  14969. } else {
  14970. const to = getRouteByVueVm(this);
  14971. toNormalized = routeLocationNormalized(router2, router2.resolve(to));
  14972. fromNormalized = router2.currentRoute.value;
  14973. if (isSameRouteLocation(toNormalized, fromNormalized)) {
  14974. return originHook(options);
  14975. }
  14976. router2.currentRoute.value = toNormalized;
  14977. }
  14978. const afterGuards = [];
  14979. for (const guard of router2.guards.afterGuards.list()) {
  14980. afterGuards.push(() => __async$3(this, null, function* () {
  14981. guard(toNormalized, fromNormalized);
  14982. }));
  14983. }
  14984. runGuardQueue(afterGuards);
  14985. router2.level = pagesLen;
  14986. originHook(options);
  14987. }
  14988. };
  14989. function getRouteByPages(pagesVm, router2) {
  14990. const path = pagesVm.$page.path;
  14991. const query = pagesVm.$page.options || {};
  14992. return {
  14993. path,
  14994. query
  14995. };
  14996. }
  14997. var __async$2 = (__this, __arguments, generator) => {
  14998. return new Promise((resolve2, reject) => {
  14999. var fulfilled = (value) => {
  15000. try {
  15001. step(generator.next(value));
  15002. } catch (e) {
  15003. reject(e);
  15004. }
  15005. };
  15006. var rejected = (value) => {
  15007. try {
  15008. step(generator.throw(value));
  15009. } catch (e) {
  15010. reject(e);
  15011. }
  15012. };
  15013. var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
  15014. step((generator = generator.apply(__this, __arguments)).next());
  15015. });
  15016. };
  15017. function proxyPageHookApp(vm, router2) {
  15018. if (!proxyHooksConfig)
  15019. return;
  15020. if (!vm.$)
  15021. return;
  15022. for (const proxyHookKey in proxyHooksConfig) {
  15023. const proxyHook = proxyHooksConfig[proxyHookKey];
  15024. const originHook = vm.$[proxyHookKey];
  15025. if (isArray(originHook)) {
  15026. originHook.unshift(proxyHook.bind(vm, router2));
  15027. } else {
  15028. vm.$[proxyHookKey] = [proxyHook.bind(vm, router2)];
  15029. }
  15030. }
  15031. }
  15032. const proxyHooksConfig = {
  15033. onShow(router2) {
  15034. const pages = getCurrentPages();
  15035. const pagesLen = pages.length;
  15036. let toNormalized;
  15037. let fromNormalized;
  15038. if (router2.fromRoute) {
  15039. toNormalized = router2.currentRoute.value;
  15040. fromNormalized = router2.fromRoute;
  15041. router2.fromRoute = void 0;
  15042. } else {
  15043. const to = getRouteByPages(this);
  15044. toNormalized = routeLocationNormalized(router2, router2.resolve(to));
  15045. fromNormalized = router2.currentRoute.value;
  15046. if (isSameRouteLocation(toNormalized, fromNormalized)) {
  15047. return;
  15048. }
  15049. router2.currentRoute.value = toNormalized;
  15050. }
  15051. const afterGuards = [];
  15052. for (const guard of router2.guards.afterGuards.list()) {
  15053. afterGuards.push(() => __async$2(this, null, function* () {
  15054. guard(toNormalized, fromNormalized);
  15055. }));
  15056. }
  15057. runGuardQueue(afterGuards);
  15058. router2.level = pagesLen;
  15059. }
  15060. };
  15061. function initMixins(app, router2) {
  15062. const mixin = getMixinByPlatform(router2);
  15063. app.mixin(mixin);
  15064. }
  15065. function getMixinByPlatform(router2) {
  15066. let platform = router2.options.platform;
  15067. if (mpPlatformReg.test(platform)) {
  15068. platform = "applets";
  15069. }
  15070. const mixinsMap = {
  15071. app: {
  15072. beforeCreate() {
  15073. if (this.$mpType === "page") {
  15074. proxyPageHookApp(this, router2);
  15075. }
  15076. }
  15077. },
  15078. h5: {},
  15079. applets: {
  15080. beforeCreate() {
  15081. if (this.$mpType === "page") {
  15082. proxyPageHook(this, router2);
  15083. }
  15084. }
  15085. }
  15086. };
  15087. return mixinsMap[platform] || {};
  15088. }
  15089. function mountVueRouter(app, router2) {
  15090. const { h5: config2 } = router2.options;
  15091. const vueRouter = app.config.globalProperties.$router;
  15092. const scrollBehavior = vueRouter.options.scrollBehavior;
  15093. Object.assign(vueRouter.options, config2);
  15094. vueRouter.options.scrollBehavior = function(to, from, savedPosition) {
  15095. if (config2 === null || config2 === void 0 ? void 0 : config2.scrollBehavior) {
  15096. return config2 === null || config2 === void 0 ? void 0 : config2.scrollBehavior(to, from, savedPosition);
  15097. }
  15098. return scrollBehavior(to, from, savedPosition);
  15099. };
  15100. router2.vueRouter = vueRouter;
  15101. for (const [guardName, guard] of Object.entries(router2.guards)) {
  15102. guard.list().forEach((fn) => {
  15103. registerVueRooterGuards(router2, guardName, fn);
  15104. });
  15105. }
  15106. vueRouter.afterEach((to) => {
  15107. router2.currentRoute.value = routeLocationNormalized(router2, to);
  15108. });
  15109. }
  15110. function registerVueRooterGuards(router2, guardName, userGuard) {
  15111. var _a2;
  15112. const guardHandler = {
  15113. beforeGuards: () => {
  15114. var _a22;
  15115. (_a22 = router2.vueRouter) === null || _a22 === void 0 ? void 0 : _a22.beforeEach((to, from, next) => {
  15116. const toRoute = router2.resolve(to);
  15117. const toNormalized = routeLocationNormalized(router2, to);
  15118. const fromNormalized = routeLocationNormalized(router2, from);
  15119. let failure;
  15120. if (toRoute === void 0) {
  15121. failure = createRoute404(router2, toNormalized);
  15122. }
  15123. const proxyNext = (valid) => {
  15124. if (isRouteLocation(valid) && !(valid instanceof Error)) {
  15125. if (isString(valid) || !valid.navType) {
  15126. const redirect = router2.resolve(valid);
  15127. if (redirect) {
  15128. next({
  15129. path: redirect.path,
  15130. query: redirect.query
  15131. });
  15132. }
  15133. } else {
  15134. const navType = valid.navType;
  15135. router2.navigate(valid, navType);
  15136. }
  15137. } else {
  15138. next(valid);
  15139. }
  15140. };
  15141. if (isNavigationFailure(
  15142. failure,
  15143. 2
  15144. /* NavigationErrorTypes.NAVIGATION_GUARD_REDIRECT */
  15145. )) {
  15146. router2.redirectTo(failure === null || failure === void 0 ? void 0 : failure.to);
  15147. return;
  15148. }
  15149. const guardReturn = userGuard(toNormalized, fromNormalized, proxyNext);
  15150. if (typeof guardReturn === "object" && "then" in guardReturn) {
  15151. guardReturn.then(proxyNext).catch(() => {
  15152. proxyNext(false);
  15153. });
  15154. } else if (guardReturn !== void 0) {
  15155. proxyNext(guardReturn);
  15156. }
  15157. });
  15158. },
  15159. afterGuards: () => {
  15160. var _a22;
  15161. (_a22 = router2.vueRouter) === null || _a22 === void 0 ? void 0 : _a22.afterEach((to, from) => {
  15162. const toNormalized = routeLocationNormalized(router2, to);
  15163. const fromNormalized = routeLocationNormalized(router2, from);
  15164. userGuard(toNormalized, fromNormalized);
  15165. });
  15166. }
  15167. };
  15168. (_a2 = guardHandler[guardName]) === null || _a2 === void 0 ? void 0 : _a2.call(guardHandler);
  15169. }
  15170. var __defProp$1 = Object.defineProperty;
  15171. var __defProps$1 = Object.defineProperties;
  15172. var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
  15173. var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
  15174. var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
  15175. var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
  15176. var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  15177. var __spreadValues$1 = (a, b) => {
  15178. for (var prop in b || (b = {}))
  15179. if (__hasOwnProp$1.call(b, prop))
  15180. __defNormalProp$1(a, prop, b[prop]);
  15181. if (__getOwnPropSymbols$1)
  15182. for (var prop of __getOwnPropSymbols$1(b)) {
  15183. if (__propIsEnum$1.call(b, prop))
  15184. __defNormalProp$1(a, prop, b[prop]);
  15185. }
  15186. return a;
  15187. };
  15188. var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
  15189. var __async$1 = (__this, __arguments, generator) => {
  15190. return new Promise((resolve2, reject) => {
  15191. var fulfilled = (value) => {
  15192. try {
  15193. step(generator.next(value));
  15194. } catch (e) {
  15195. reject(e);
  15196. }
  15197. };
  15198. var rejected = (value) => {
  15199. try {
  15200. step(generator.throw(value));
  15201. } catch (e) {
  15202. reject(e);
  15203. }
  15204. };
  15205. var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
  15206. step((generator = generator.apply(__this, __arguments)).next());
  15207. });
  15208. };
  15209. function resolve$1(router2, rawLocation, navType = "navigateTo") {
  15210. const { getRouteByName, getRouteByPath, getRouteByAliasPath } = router2.routeMatcher;
  15211. if (isString(rawLocation)) {
  15212. rawLocation = { path: rawLocation };
  15213. }
  15214. if (Reflect.has(rawLocation, "delta") && navType === "navigateBack" || rawLocation.from === "backbutton") {
  15215. return rawLocation;
  15216. }
  15217. if (Reflect.has(rawLocation, "url")) {
  15218. rawLocation = __spreadProps$1(__spreadValues$1({}, rawLocation), {
  15219. path: rawLocation.url
  15220. });
  15221. }
  15222. const currentPath = router2.currentRoute.value.path;
  15223. const currentLocation = currentPath === "/" ? getRouteByAliasPath(currentPath) : getRouteByPath(currentPath);
  15224. if (Reflect.has(rawLocation, "path")) {
  15225. const location2 = parseURL(router2.parseQuery, rawLocation.path, currentLocation === null || currentLocation === void 0 ? void 0 : currentLocation.path);
  15226. let toRouteRecord = getRouteByPath(location2.path);
  15227. if (toRouteRecord === void 0) {
  15228. toRouteRecord = getRouteByAliasPath(location2.path);
  15229. }
  15230. if (toRouteRecord === void 0) {
  15231. return;
  15232. }
  15233. const query = Object.assign({}, location2.query, rawLocation === null || rawLocation === void 0 ? void 0 : rawLocation.query);
  15234. const fullPath = stringifyURL(router2.stringifyQuery, {
  15235. path: toRouteRecord.path,
  15236. query
  15237. });
  15238. return __spreadProps$1(__spreadValues$1({}, rawLocation), {
  15239. path: toRouteRecord.path,
  15240. meta: toRouteRecord.meta || {},
  15241. name: toRouteRecord.name,
  15242. redirect: toRouteRecord.redirect,
  15243. fullPath,
  15244. query
  15245. });
  15246. } else if (Reflect.has(rawLocation, "name")) {
  15247. let toRouteRecord = getRouteByName(rawLocation.name);
  15248. if (toRouteRecord === void 0) {
  15249. toRouteRecord = getRouteByPath(WILDCARD);
  15250. return;
  15251. }
  15252. const query = Object.assign({}, rawLocation.query);
  15253. const fullPath = stringifyURL(router2.stringifyQuery, {
  15254. path: toRouteRecord.path,
  15255. query
  15256. });
  15257. return __spreadProps$1(__spreadValues$1({}, rawLocation), {
  15258. path: toRouteRecord.path,
  15259. meta: toRouteRecord.meta || {},
  15260. name: toRouteRecord.name,
  15261. redirect: toRouteRecord.redirect,
  15262. fullPath,
  15263. query
  15264. });
  15265. }
  15266. }
  15267. function mount$1(app, router2) {
  15268. mountVueRouter(app, router2);
  15269. }
  15270. function navigate$1(router2, to, navType = "navigateTo", redirectedFrom) {
  15271. let targetLocation = router2.resolve(to, navType);
  15272. let failure;
  15273. if (targetLocation === void 0) {
  15274. failure = createRoute404(router2, to);
  15275. }
  15276. const from = router2.currentRoute.value;
  15277. const pages = getCurrentPages();
  15278. if (navType === "navigateBack" && targetLocation.delta >= pages.length) {
  15279. targetLocation = router2.resolve("/", "reLaunch");
  15280. navType = "reLaunch";
  15281. }
  15282. return (failure ? Promise.resolve(failure) : router2.jump(targetLocation, navType)).catch((error) => {
  15283. return isNavigationFailure(
  15284. error,
  15285. 2
  15286. /* NavigationErrorTypes.NAVIGATION_GUARD_REDIRECT */
  15287. ) ? error : Promise.reject(error);
  15288. }).then((failure2) => {
  15289. if (failure2) {
  15290. if (isNavigationFailure(
  15291. failure2,
  15292. 2
  15293. /* NavigationErrorTypes.NAVIGATION_GUARD_REDIRECT */
  15294. )) {
  15295. const failureTo = router2.resolve(failure2 === null || failure2 === void 0 ? void 0 : failure2.to);
  15296. if (targetLocation && isSameRouteLocation(targetLocation, failureTo) && redirectedFrom && (redirectedFrom._count = redirectedFrom._count ? redirectedFrom._count + 1 : 1) > 30) {
  15297. vue.warn(`检测到从“${from.fullPath}”到“${targetLocation.fullPath}”时导航守卫中可能存在无限重定向。中止以避免堆栈溢出。
  15298. 是否总是在导航防护中返回新位置?这将导致此错误。仅在重定向或中止时返回,这应该可以解决此问题。如果未修复,这可能会在生产中中断`, router2.options.debug);
  15299. return Promise.reject(new Error("Infinite redirect in navigation guard"));
  15300. } else {
  15301. return router2.navigate(failureTo, failureTo.navType, redirectedFrom || targetLocation);
  15302. }
  15303. } else {
  15304. return Promise.resolve(failure2);
  15305. }
  15306. }
  15307. });
  15308. }
  15309. function jump$1(router2, toLocation, navType) {
  15310. return new Promise((resolve2, reject) => {
  15311. uniRouterApi[navType](__spreadProps$1(__spreadValues$1({}, toLocation), {
  15312. url: toLocation.fullPath,
  15313. success(res) {
  15314. var _a2;
  15315. resolve2(res);
  15316. (_a2 = toLocation.success) === null || _a2 === void 0 ? void 0 : _a2.call(toLocation, res);
  15317. },
  15318. fail(res) {
  15319. var _a2;
  15320. reject(res);
  15321. (_a2 = toLocation.fail) === null || _a2 === void 0 ? void 0 : _a2.call(toLocation, res);
  15322. },
  15323. complete(res) {
  15324. var _a2;
  15325. (_a2 = toLocation.complete) === null || _a2 === void 0 ? void 0 : _a2.call(toLocation, res);
  15326. }
  15327. }));
  15328. });
  15329. }
  15330. function forceGuardEach$1(router2) {
  15331. return __async$1(this, null, function* () {
  15332. throw new Error(`在h5端上使用:forceGuardEach 是无意义的,目前 forceGuardEach 仅支持在非h5端上使用`);
  15333. });
  15334. }
  15335. var h5Api = {
  15336. resolve: resolve$1,
  15337. mount: mount$1,
  15338. navigate: navigate$1,
  15339. jump: jump$1,
  15340. forceGuardEach: forceGuardEach$1
  15341. };
  15342. var __defProp = Object.defineProperty;
  15343. var __defProps = Object.defineProperties;
  15344. var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
  15345. var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  15346. var __hasOwnProp = Object.prototype.hasOwnProperty;
  15347. var __propIsEnum = Object.prototype.propertyIsEnumerable;
  15348. var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  15349. var __spreadValues = (a, b) => {
  15350. for (var prop in b || (b = {}))
  15351. if (__hasOwnProp.call(b, prop))
  15352. __defNormalProp(a, prop, b[prop]);
  15353. if (__getOwnPropSymbols)
  15354. for (var prop of __getOwnPropSymbols(b)) {
  15355. if (__propIsEnum.call(b, prop))
  15356. __defNormalProp(a, prop, b[prop]);
  15357. }
  15358. return a;
  15359. };
  15360. var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
  15361. var __async = (__this, __arguments, generator) => {
  15362. return new Promise((resolve2, reject) => {
  15363. var fulfilled = (value) => {
  15364. try {
  15365. step(generator.next(value));
  15366. } catch (e) {
  15367. reject(e);
  15368. }
  15369. };
  15370. var rejected = (value) => {
  15371. try {
  15372. step(generator.throw(value));
  15373. } catch (e) {
  15374. reject(e);
  15375. }
  15376. };
  15377. var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
  15378. step((generator = generator.apply(__this, __arguments)).next());
  15379. });
  15380. };
  15381. function resolve(router2, rawLocation, navType = "navigateTo") {
  15382. const { getRouteByName, getRouteByPath, getRouteByAliasPath } = router2.routeMatcher;
  15383. if (isString(rawLocation)) {
  15384. rawLocation = { path: rawLocation };
  15385. }
  15386. if (Reflect.has(rawLocation, "delta") && navType === "navigateBack" || rawLocation.from === "backbutton") {
  15387. rawLocation.delta = rawLocation.delta || 1;
  15388. const pages = getCurrentPages();
  15389. let backIndex = 0;
  15390. if (pages.length > rawLocation.delta) {
  15391. backIndex = pages.length - 1 - rawLocation.delta;
  15392. }
  15393. let toRoute;
  15394. if (router2.options.platform === "app") {
  15395. toRoute = getRouteByPages(pages[backIndex]);
  15396. } else {
  15397. toRoute = getRouteByVueVm(pages[backIndex].$vm);
  15398. }
  15399. rawLocation = __spreadProps(__spreadValues(__spreadValues({}, toRoute), rawLocation), {
  15400. force: rawLocation.from === "backbutton"
  15401. });
  15402. }
  15403. if (Reflect.has(rawLocation, "url")) {
  15404. rawLocation = __spreadProps(__spreadValues({}, rawLocation), {
  15405. path: rawLocation.url
  15406. });
  15407. }
  15408. const currentPath = router2.currentRoute.value.path;
  15409. const currentLocation = currentPath === "/" ? getRouteByAliasPath(currentPath) : getRouteByPath(currentPath);
  15410. if (Reflect.has(rawLocation, "path")) {
  15411. const location2 = parseURL(router2.parseQuery, rawLocation.path, currentLocation === null || currentLocation === void 0 ? void 0 : currentLocation.path);
  15412. let toRouteRecord = getRouteByPath(location2.path);
  15413. if (toRouteRecord === void 0) {
  15414. toRouteRecord = getRouteByAliasPath(location2.path);
  15415. }
  15416. if (toRouteRecord === void 0) {
  15417. return;
  15418. }
  15419. const query = Object.assign({}, location2.query, rawLocation === null || rawLocation === void 0 ? void 0 : rawLocation.query);
  15420. const fullPath = stringifyURL(router2.stringifyQuery, {
  15421. path: toRouteRecord.path,
  15422. query
  15423. });
  15424. return __spreadProps(__spreadValues({}, rawLocation), {
  15425. path: toRouteRecord.path,
  15426. meta: toRouteRecord.meta || {},
  15427. name: toRouteRecord.name,
  15428. redirect: toRouteRecord.redirect,
  15429. fullPath,
  15430. query
  15431. });
  15432. } else if (Reflect.has(rawLocation, "name")) {
  15433. const toRouteRecord = getRouteByName(rawLocation.name);
  15434. if (toRouteRecord === void 0) {
  15435. return;
  15436. }
  15437. const query = Object.assign({}, rawLocation.query);
  15438. const fullPath = stringifyURL(router2.stringifyQuery, {
  15439. path: toRouteRecord.path,
  15440. query
  15441. });
  15442. return __spreadProps(__spreadValues({}, rawLocation), {
  15443. path: toRouteRecord.path,
  15444. meta: toRouteRecord.meta || {},
  15445. name: toRouteRecord.name,
  15446. redirect: toRouteRecord.redirect,
  15447. fullPath,
  15448. query
  15449. });
  15450. }
  15451. }
  15452. function mount(app, router2) {
  15453. router2.forceGuardEach();
  15454. }
  15455. function navigate(router2, to, navType = "navigateTo", redirectedFrom) {
  15456. try {
  15457. const targetLocation = router2.resolve(to, navType);
  15458. const force = targetLocation === null || targetLocation === void 0 ? void 0 : targetLocation.force;
  15459. if (router2.lock && !force)
  15460. return Promise.resolve();
  15461. router2.lock = true;
  15462. const from = router2.currentRoute.value;
  15463. let failure;
  15464. if (targetLocation === void 0) {
  15465. failure = createRoute404(router2, to);
  15466. } else if (!force && isSameRouteLocation(targetLocation, from)) {
  15467. const toNormalized = routeLocationNormalized(router2, targetLocation);
  15468. failure = createRouterError(16, {
  15469. to: toNormalized,
  15470. from
  15471. });
  15472. }
  15473. return (failure ? Promise.resolve(failure) : router2.jump(targetLocation, navType)).catch((error) => {
  15474. return isNavigationFailure(
  15475. error,
  15476. 2
  15477. /* NavigationErrorTypes.NAVIGATION_GUARD_REDIRECT */
  15478. ) ? error : Promise.reject(error);
  15479. }).then((failure2) => {
  15480. if (failure2) {
  15481. if (isNavigationFailure(
  15482. failure2,
  15483. 2
  15484. /* NavigationErrorTypes.NAVIGATION_GUARD_REDIRECT */
  15485. )) {
  15486. const failureTo = router2.resolve(failure2 === null || failure2 === void 0 ? void 0 : failure2.to);
  15487. if (targetLocation && isSameRouteLocation(targetLocation, failureTo) && redirectedFrom && (redirectedFrom._count = redirectedFrom._count ? redirectedFrom._count + 1 : 1) > 30) {
  15488. warn(`检测到从“${from.fullPath}”到“${targetLocation.fullPath}”时导航守卫中可能存在无限重定向。中止以避免堆栈溢出。
  15489. 是否总是在导航防护中返回新位置?这将导致此错误。仅在重定向或中止时返回,这应该可以解决此问题。如果未修复,这可能会在生产中中断`, router2.options.debug);
  15490. return Promise.reject(new Error("Infinite redirect in navigation guard"));
  15491. } else {
  15492. router2.lock = false;
  15493. return router2.navigate(failureTo, failureTo.navType, redirectedFrom || targetLocation);
  15494. }
  15495. } else {
  15496. return Promise.resolve(failure2);
  15497. }
  15498. }
  15499. }).finally(() => {
  15500. router2.lock = false;
  15501. });
  15502. } catch (error) {
  15503. router2.lock = false;
  15504. return Promise.reject(error);
  15505. }
  15506. }
  15507. function jump(router2, toLocation, navType) {
  15508. return new Promise((resolve2, reject) => {
  15509. const toNormalized = routeLocationNormalized(router2, toLocation);
  15510. Promise.resolve().then(() => {
  15511. const beforeGuards = [];
  15512. for (const guard of router2.guards.beforeGuards.list()) {
  15513. beforeGuards.push(guardToPromiseFn(guard, toNormalized, router2.currentRoute.value));
  15514. }
  15515. return runGuardQueue(beforeGuards);
  15516. }).then(() => {
  15517. router2.fromRoute = router2.currentRoute.value;
  15518. router2.currentRoute.value = toNormalized;
  15519. uniRouterApi[navType](__spreadProps(__spreadValues({}, toLocation), {
  15520. url: toLocation.fullPath,
  15521. success(res) {
  15522. var _a2;
  15523. (_a2 = toLocation.success) === null || _a2 === void 0 ? void 0 : _a2.call(toLocation, res);
  15524. resolve2(res);
  15525. },
  15526. fail(res) {
  15527. var _a2;
  15528. (_a2 = toLocation.fail) === null || _a2 === void 0 ? void 0 : _a2.call(toLocation, res);
  15529. reject(res);
  15530. },
  15531. complete(res) {
  15532. var _a2;
  15533. (_a2 = toLocation.complete) === null || _a2 === void 0 ? void 0 : _a2.call(toLocation, res);
  15534. }
  15535. }));
  15536. }).catch(reject);
  15537. });
  15538. }
  15539. function forceGuardEach(router2) {
  15540. return __async(this, null, function* () {
  15541. const to = getEnterRoute();
  15542. const targetLocation = router2.resolve(to);
  15543. let failure;
  15544. if (targetLocation === void 0) {
  15545. failure = createRoute404(router2, to);
  15546. } else {
  15547. const toNormalized = routeLocationNormalized(router2, targetLocation);
  15548. const beforeGuards = [];
  15549. for (const guard of router2.guards.beforeGuards.list()) {
  15550. beforeGuards.push(guardToPromiseFn(guard, toNormalized, START_LOCATION_NORMALIZED));
  15551. }
  15552. try {
  15553. yield runGuardQueue(beforeGuards);
  15554. router2.currentRoute.value = toNormalized;
  15555. const afterGuards = [];
  15556. for (const guard of router2.guards.afterGuards.list()) {
  15557. afterGuards.push(() => __async(this, null, function* () {
  15558. guard(toNormalized, START_LOCATION_NORMALIZED);
  15559. }));
  15560. }
  15561. yield runGuardQueue(afterGuards);
  15562. } catch (error) {
  15563. failure = error;
  15564. }
  15565. }
  15566. if (isNavigationFailure(
  15567. failure,
  15568. 2
  15569. /* NavigationErrorTypes.NAVIGATION_GUARD_REDIRECT */
  15570. )) {
  15571. return router2.reLaunch(failure === null || failure === void 0 ? void 0 : failure.to);
  15572. }
  15573. });
  15574. }
  15575. var publicApi = {
  15576. resolve,
  15577. mount,
  15578. navigate,
  15579. jump,
  15580. forceGuardEach
  15581. };
  15582. function createApi(platform) {
  15583. switch (platform) {
  15584. case "h5":
  15585. return h5Api;
  15586. default:
  15587. return publicApi;
  15588. }
  15589. }
  15590. function createRouter$1(options) {
  15591. const guards = {
  15592. beforeGuards: useCallbacks(),
  15593. afterGuards: useCallbacks()
  15594. };
  15595. const currentRoute = vue.shallowRef(START_LOCATION_NORMALIZED);
  15596. const routeMatcher = createRouteMatcher(options);
  15597. const API = createApi(options.platform);
  15598. function resolve2(rawLocation, navType = "navigateTo") {
  15599. return API.resolve(router2, rawLocation, navType);
  15600. }
  15601. function jump2(toLocation, navType) {
  15602. return new Promise((resolve22, reject) => {
  15603. API.jump(router2, toLocation, navType).then(resolve22).catch(reject);
  15604. });
  15605. }
  15606. function navigate2(to, navType = "navigateTo", redirectedFrom) {
  15607. return new Promise((resolve22, reject) => {
  15608. let options2 = {};
  15609. if (isObject$2(to)) {
  15610. options2 = to;
  15611. }
  15612. API.navigate(router2, to, navType, redirectedFrom).then((res) => {
  15613. resolve22(res);
  15614. }).catch((error) => {
  15615. var _a2, _b2;
  15616. (_a2 = options2.fail) === null || _a2 === void 0 ? void 0 : _a2.call(options2, error);
  15617. (_b2 = options2.complete) === null || _b2 === void 0 ? void 0 : _b2.call(options2, error);
  15618. reject(error);
  15619. });
  15620. });
  15621. }
  15622. function forceGuardEach2() {
  15623. return new Promise((resolve22, reject) => {
  15624. API.forceGuardEach(router2).then(resolve22).catch(reject);
  15625. });
  15626. }
  15627. const router2 = {
  15628. level: 0,
  15629. lock: false,
  15630. currentRoute,
  15631. guards,
  15632. options,
  15633. vueRouter: null,
  15634. routeMatcher,
  15635. parseQuery: options.parseQuery || parseQuery,
  15636. stringifyQuery: options.stringifyQuery || stringifyQuery,
  15637. jump: jump2,
  15638. navigateTo(to) {
  15639. return navigate2(to, "navigateTo");
  15640. },
  15641. switchTab(to) {
  15642. return navigate2(to, "switchTab");
  15643. },
  15644. redirectTo(to) {
  15645. return navigate2(to, "redirectTo");
  15646. },
  15647. reLaunch(to) {
  15648. return navigate2(to, "reLaunch");
  15649. },
  15650. navigateBack(to = {
  15651. delta: 1
  15652. }) {
  15653. return navigate2(to, "navigateBack");
  15654. },
  15655. navigate: navigate2,
  15656. resolve: resolve2,
  15657. forceGuardEach: forceGuardEach2,
  15658. beforeEach(userGuard) {
  15659. guards.beforeGuards.add(userGuard);
  15660. },
  15661. afterEach(userGuard) {
  15662. guards.afterGuards.add(userGuard);
  15663. },
  15664. install(app) {
  15665. const reactiveRoute = {};
  15666. for (const key in START_LOCATION_NORMALIZED) {
  15667. reactiveRoute[key] = vue.computed(() => currentRoute.value[key]);
  15668. }
  15669. app.config.globalProperties.$uniRouter = router2;
  15670. Object.defineProperty(app.config.globalProperties, "$uniRoute", {
  15671. enumerable: true,
  15672. get: () => vue.unref(currentRoute)
  15673. });
  15674. app.provide(routerKey, router2);
  15675. app.provide(routeLocationKey, vue.reactive(reactiveRoute));
  15676. const mountApp = app.mount;
  15677. app.mount = function(...args) {
  15678. rewriteUniRouterApi(router2);
  15679. API.mount(app, router2);
  15680. initMixins(app, router2);
  15681. console.log(`%c uni-router %c v${"1.2.7"} `, "padding: 2px 1px; border-radius: 3px 0 0 3px; color: #fff; background: #606060; font-weight: bold;", "padding: 2px 1px; border-radius: 0 3px 3px 0; color: #fff; background: #42c02e; font-weight: bold;");
  15682. return mountApp(...args);
  15683. };
  15684. }
  15685. };
  15686. return router2;
  15687. }
  15688. function addRouterMethodAlias(router2) {
  15689. Object.assign(router2, {
  15690. push: (...args) => router2.navigate(...args),
  15691. pushTab: (...args) => router2.switchTab(...args),
  15692. replace: (...args) => router2.redirect(...args),
  15693. replaceAll: (...args) => router2.reLaunch(...args),
  15694. back: (options) => {
  15695. router2.navigateBack({ ...options || {}, delta: (options == null ? void 0 : options.delta) || options });
  15696. }
  15697. });
  15698. }
  15699. function createRouter(options) {
  15700. const router2 = createRouter$1({
  15701. platform: "app",
  15702. ...options || {}
  15703. });
  15704. addRouterMethodAlias(router2);
  15705. const rawInstall = router2.install;
  15706. router2.install = (app) => {
  15707. rawInstall(app);
  15708. app.config.globalProperties.$Router = router2;
  15709. Object.defineProperty(app.config.globalProperties, "$Route", {
  15710. enumerable: true,
  15711. get() {
  15712. return router2.currentRoute.value;
  15713. }
  15714. });
  15715. };
  15716. return router2;
  15717. }
  15718. function useRouter() {
  15719. const router2 = useRouter$1();
  15720. addRouterMethodAlias(router2);
  15721. return router2;
  15722. }
  15723. function defineMiddleware(name, handler, options) {
  15724. const { router: router2 } = options || {};
  15725. router2.beforeEach((to, from, next) => {
  15726. const middleware = to.meta.middleware || [];
  15727. if (!middleware.includes(name)) {
  15728. next();
  15729. } else {
  15730. handler({
  15731. ...router2,
  15732. beforeEach: (callback) => callback(to, from, next)
  15733. });
  15734. }
  15735. });
  15736. router2.afterEach((to, from) => {
  15737. const middleware = to.meta.middleware || [];
  15738. if (middleware.includes(name)) {
  15739. handler({
  15740. ...router2,
  15741. afterEach: (callback) => callback(to, from)
  15742. });
  15743. }
  15744. });
  15745. }
  15746. const _imports_0$5 = "/static/images/logo.png";
  15747. const _sfc_main$1c = {
  15748. __name: "index",
  15749. props: {
  15750. navLeftText: { type: String, default: "" },
  15751. navTitle: { type: String, default: "" },
  15752. navLeftArrow: { type: Boolean, default: true },
  15753. showNavBar: { type: Boolean, default: true }
  15754. },
  15755. setup(__props, { expose: __expose }) {
  15756. const { t: t2, locale } = useI18n();
  15757. const router2 = useRouter();
  15758. const orderStore = useOrderStore();
  15759. const rechargeStore = useRechargeStore();
  15760. const WebsocketData = useWebsocketDataStore();
  15761. const token = vue.ref(null);
  15762. let contentPaddingBottom = vue.ref("50px");
  15763. contentPaddingBottom.value = "50px";
  15764. const props = __props;
  15765. const userMoney = vue.ref(0);
  15766. const formatMoney = (val) => {
  15767. const num = Number(val);
  15768. if (isNaN(num))
  15769. return "0.00";
  15770. if (num >= 1e5) {
  15771. return (num / 1e4).toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + t2("万");
  15772. }
  15773. return num.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 });
  15774. };
  15775. const isShowTabbarRoute = vue.ref(false);
  15776. const safeModalRef = vue.ref(null);
  15777. const showSafeModal = vue.ref(false);
  15778. const safeWord = vue.ref("");
  15779. const retryModalRef = vue.ref(null);
  15780. const showRetryModal = vue.ref(false);
  15781. const retryFailures = vue.ref([]);
  15782. const isAutoAccept = vue.ref(uni.getStorageSync("autoAcceptOdds") !== false && uni.getStorageSync("autoAcceptOdds") !== "false");
  15783. const toggleAutoAccept = () => {
  15784. isAutoAccept.value = !isAutoAccept.value;
  15785. uni.setStorageSync("autoAcceptOdds", isAutoAccept.value);
  15786. };
  15787. const slots = vue.useSlots();
  15788. const hasLeftSlot = !!slots.left;
  15789. const hasTitleSlot = !!slots.title;
  15790. const hasRightSlot = !!slots.right;
  15791. const hassubNavRightSlot = !!slots.navBarRight;
  15792. const background = vue.reactive({ backgroundColor: "#212121" });
  15793. vue.watch(() => WebsocketData.data, cartSocketHandler);
  15794. vue.watch(() => WebsocketData.globalData, SocketHandler);
  15795. const checkIsLocked = (item) => {
  15796. if (!item)
  15797. return true;
  15798. if (Number(item.is_locked) === 1)
  15799. return true;
  15800. if (item.status !== void 0 && Number(item.status) !== 1)
  15801. return true;
  15802. if (!item.odds || item.odds === "-" || Number(item.odds) === 0)
  15803. return true;
  15804. if (item.state !== void 0) {
  15805. const state = Number(item.state);
  15806. if (state !== 0 && state !== 1)
  15807. return true;
  15808. }
  15809. return false;
  15810. };
  15811. const validOrders = vue.computed(() => {
  15812. return orderStore.selectOrders.filter((item) => !checkIsLocked(item));
  15813. });
  15814. const validTotalOdds = vue.computed(() => {
  15815. if (validOrders.value.length === 0)
  15816. return 0;
  15817. return validOrders.value.reduce((sum, item) => sum + (Number(item.odds) || 0), 0);
  15818. });
  15819. const validTotalAmount = vue.computed(() => {
  15820. if (validOrders.value.length === 0)
  15821. return 0;
  15822. return validOrders.value.reduce((sum, item) => sum + (Number(item.stake) || 0), 0);
  15823. });
  15824. const validTotalStake = vue.computed(() => {
  15825. return validOrders.value.reduce((sum, item) => sum + (Number(item.stake) || 0), 0);
  15826. });
  15827. const batchStakeValue = vue.ref(uni.getStorageSync("batchStakeCache") || "");
  15828. const applyBatchStake = () => {
  15829. let val = batchStakeValue.value;
  15830. uni.setStorageSync("batchStakeCache", val);
  15831. if (val === "") {
  15832. validOrders.value.forEach((item) => {
  15833. orderStore.updateStake(item.uniqueKey, "");
  15834. item.errorMsg = "";
  15835. });
  15836. return;
  15837. }
  15838. let numVal = Number(val);
  15839. if (isNaN(numVal) || numVal <= 0) {
  15840. return uni.showToast({ title: t2("请输入大于0的有效金额"), icon: "none" });
  15841. }
  15842. validOrders.value.forEach((item) => {
  15843. let itemVal = numVal;
  15844. if (item.mininum !== void 0 && itemVal < Number(item.mininum)) {
  15845. itemVal = Number(item.mininum);
  15846. }
  15847. if (item.maxinum !== void 0 && itemVal > Number(item.maxinum)) {
  15848. itemVal = Number(item.maxinum);
  15849. }
  15850. orderStore.updateStake(item.uniqueKey, itemVal);
  15851. item.errorMsg = "";
  15852. });
  15853. };
  15854. const openSheet = () => {
  15855. orderStore.setSheetOpen(true);
  15856. };
  15857. const closeSheet = () => {
  15858. orderStore.setSheetOpen(false);
  15859. };
  15860. const changeStake = (item, delta) => {
  15861. if (checkIsLocked(item))
  15862. return;
  15863. let val = Number(item.stake) || 0;
  15864. val += delta;
  15865. if (val < 0)
  15866. val = 0;
  15867. if (item.maxinum !== void 0 && val > Number(item.maxinum)) {
  15868. val = Number(item.maxinum);
  15869. }
  15870. orderStore.updateStake(item.uniqueKey, val);
  15871. item.errorMsg = "";
  15872. };
  15873. const onInputStake = (e, item) => {
  15874. if (checkIsLocked(item))
  15875. return;
  15876. orderStore.updateStake(item.uniqueKey, e.detail.value);
  15877. item.errorMsg = "";
  15878. };
  15879. const topUp = () => {
  15880. if (!uni.getStorageSync("token")) {
  15881. uni.showModal({
  15882. title: t2("提示"),
  15883. content: t2("您还未登录,是否前往登录?"),
  15884. success: (res) => {
  15885. if (res.confirm) {
  15886. router2.push({ name: "login" });
  15887. }
  15888. }
  15889. });
  15890. return;
  15891. }
  15892. router2.push({ name: "topUp" });
  15893. };
  15894. const submitBet = () => {
  15895. if (orderStore.selectOrders.length === 0) {
  15896. return uni.$u.toast(t2("请选择投注单"));
  15897. }
  15898. if (validOrders.value.length === 0) {
  15899. return uni.$u.toast(t2("暂无有效投注项,请移除锁定盘口或重新选择"));
  15900. }
  15901. for (let i = 0; i < validOrders.value.length; i++) {
  15902. const item = validOrders.value[i];
  15903. const stake = Number(item.stake);
  15904. if (!stake || stake <= 0) {
  15905. return uni.showToast({ title: t2("请输入大于0的有效投注金额"), icon: "none" });
  15906. }
  15907. if (item.mininum !== void 0 && stake < Number(item.mininum)) {
  15908. return uni.showToast({ title: `${t2("最低投注限额为")} ${item.mininum}`, icon: "none" });
  15909. }
  15910. if (item.maxinum !== void 0 && stake > Number(item.maxinum)) {
  15911. return uni.showToast({ title: `${t2("最高投注限额为")} ${item.maxinum}`, icon: "none" });
  15912. }
  15913. }
  15914. if (validTotalStake.value > userMoney.value) {
  15915. return uni.showToast({ title: t2("余额不足"), icon: "none" });
  15916. }
  15917. safeWord.value = "";
  15918. confirmSubmitBet();
  15919. };
  15920. const executeSubmit = (ordersData, submittedKeys, isRetry = false) => {
  15921. submitOrder({
  15922. data: ordersData,
  15923. safe_word: safeWord.value,
  15924. is_auto: isAutoAccept.value ? 1 : 0
  15925. }).then((res) => {
  15926. var _a2, _b2, _c;
  15927. if (res.code === 1) {
  15928. const failures = ((_a2 = res.data) == null ? void 0 : _a2.failure) || [];
  15929. const newOrders = [];
  15930. orderStore.selectOrders.forEach((order) => {
  15931. const isSubmitted = submittedKeys.includes(order.uniqueKey);
  15932. if (isSubmitted) {
  15933. const failInfo = failures.find(
  15934. (f) => String(f.data_id) === String(order.data_id) && String(f.id) === String(order.marketId) && String(f.value) === String(order.optionValue) && String(f.handicap || "") === String(order.handicap || "")
  15935. );
  15936. if (failInfo) {
  15937. order.errorMsg = failInfo.msg || t2("投注失败");
  15938. if (failInfo.odd)
  15939. order.odds = failInfo.odd;
  15940. newOrders.push(order);
  15941. }
  15942. } else {
  15943. newOrders.push(order);
  15944. }
  15945. });
  15946. orderStore.selectOrders = newOrders;
  15947. orderStore.saveToStorage();
  15948. if (isRetry) {
  15949. showRetryModal.value = false;
  15950. } else {
  15951. showSafeModal.value = false;
  15952. }
  15953. if (failures.length === 0) {
  15954. uni.showToast({ title: t2("投注成功"), icon: "success" });
  15955. if (orderStore.selectOrders.length === 0)
  15956. closeSheet();
  15957. } else {
  15958. const successCount = ordersData.length - failures.length;
  15959. if (successCount > 0) {
  15960. uni.showToast({ title: `成功 ${successCount}单,失败 ${failures.length}单`, icon: "none", duration: 2500 });
  15961. }
  15962. orderStore.setSheetOpen(true);
  15963. retryFailures.value = failures;
  15964. setTimeout(() => {
  15965. showRetryModal.value = true;
  15966. }, 500);
  15967. }
  15968. getData();
  15969. } else {
  15970. uni.showToast({ title: res.msg || t2("投注失败"), icon: "none" });
  15971. if (isRetry) {
  15972. (_b2 = retryModalRef.value) == null ? void 0 : _b2.clearLoading();
  15973. } else {
  15974. (_c = safeModalRef.value) == null ? void 0 : _c.clearLoading();
  15975. }
  15976. }
  15977. }).catch((err) => {
  15978. var _a2, _b2;
  15979. if (isRetry) {
  15980. (_a2 = retryModalRef.value) == null ? void 0 : _a2.clearLoading();
  15981. } else {
  15982. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  15983. }
  15984. });
  15985. };
  15986. const confirmSubmitBet = () => {
  15987. uni.showModal({
  15988. title: t2("提示"),
  15989. content: t2("确认提交吗?"),
  15990. success: (res) => {
  15991. if (res.confirm) {
  15992. const submittedKeys = [];
  15993. const ordersData = validOrders.value.map((item) => {
  15994. submittedKeys.push(item.uniqueKey);
  15995. const payload = {
  15996. data_id: item.data_id,
  15997. amount: item.stake,
  15998. id: item.marketId,
  15999. value: item.selection.submit_value,
  16000. value_text: item.selection.value_text,
  16001. odd: item.odds
  16002. };
  16003. if (item.handicap !== null && item.handicap !== void 0 && item.handicap !== "") {
  16004. payload.handicap = String(item.handicap);
  16005. }
  16006. return payload;
  16007. });
  16008. executeSubmit(ordersData, submittedKeys, false);
  16009. }
  16010. }
  16011. });
  16012. };
  16013. const confirmRetryBet = () => {
  16014. var _a2;
  16015. const submittedKeys = [];
  16016. const validRetries = retryFailures.value.filter((f) => f.is_submit === 1);
  16017. if (validRetries.length === 0) {
  16018. showRetryModal.value = false;
  16019. (_a2 = retryModalRef.value) == null ? void 0 : _a2.clearLoading();
  16020. return;
  16021. }
  16022. const ordersData = validRetries.map((f) => {
  16023. let hdp = f.handicap !== null && f.handicap !== void 0 && f.handicap !== "" ? `_${f.handicap}` : "";
  16024. submittedKeys.push(`${f.data_id}_${f.id}_${f.value}${hdp}`);
  16025. const payload = {
  16026. data_id: f.data_id,
  16027. amount: f.amount,
  16028. id: f.id,
  16029. value: f.value,
  16030. value_text: f.value_text,
  16031. odd: f.odd
  16032. };
  16033. if (f.handicap !== null && f.handicap !== void 0 && f.handicap !== "") {
  16034. payload.handicap = String(f.handicap);
  16035. }
  16036. return payload;
  16037. });
  16038. executeSubmit(ordersData, submittedKeys, true);
  16039. };
  16040. const onClickLeft = () => {
  16041. if (!hasLeftSlot && !isShowTabbarRoute.value) {
  16042. uni.navigateBack({ delta: 1 });
  16043. }
  16044. };
  16045. function goTopUp() {
  16046. router2.push({ name: "topUp" });
  16047. }
  16048. function goToHome() {
  16049. router2.pushTab({ name: "index" });
  16050. }
  16051. function getData() {
  16052. getBalance().then((res) => {
  16053. userMoney.value = res.data.money;
  16054. }).catch((err) => {
  16055. });
  16056. }
  16057. function SocketHandler(data) {
  16058. var _a2;
  16059. const res = typeof data === "string" ? JSON.parse(data) : data;
  16060. if (res.type === "order_failure") {
  16061. const failData = (_a2 = res.message) == null ? void 0 : _a2.data;
  16062. if (!failData)
  16063. return;
  16064. let contentStr = t2(failData.msg);
  16065. if (failData.sport_info) {
  16066. const home = locale.value === "zh" ? failData.sport_info.home_team || failData.sport_info.home_team_en : failData.sport_info.home_team_en;
  16067. const guest = locale.value === "zh" ? failData.sport_info.guest_team || failData.sport_info.home_team_en : failData.sport_info.guest_team_en;
  16068. const handicapStr = failData.handicap ? ` [${failData.handicap}]` : "";
  16069. contentStr = `${home} vs ${guest}
  16070. ${locale.value === "zh" ? failData.value_text || failData.value : failData.value}${handicapStr} @${failData.odd}
  16071. ${t2("原因")}: ${t2(failData.msg)}`;
  16072. }
  16073. uni.showModal({
  16074. title: t2("注单被拒"),
  16075. content: contentStr,
  16076. showCancel: false,
  16077. confirmText: t2("确定"),
  16078. confirmColor: "#f8b932"
  16079. });
  16080. let hdp = failData.handicap !== null && failData.handicap !== void 0 && failData.handicap !== "" ? `_${failData.handicap}` : "";
  16081. const uniqueKey = `${failData.data_id}_${failData.id}_${failData.value}${hdp}`;
  16082. const existingIndex = orderStore.selectOrders.findIndex((item) => item.uniqueKey === uniqueKey);
  16083. if (existingIndex > -1) {
  16084. orderStore.selectOrders[existingIndex].errorMsg = failData.msg;
  16085. orderStore.selectOrders[existingIndex].odds = failData.odd;
  16086. if (failData.amount) {
  16087. orderStore.selectOrders[existingIndex].stake = failData.amount;
  16088. }
  16089. } else {
  16090. const sportInfo = failData.sport_info || {};
  16091. let betType = failData.id;
  16092. let betTypeEn = failData.id;
  16093. let betTypeName = failData.value_text || failData.value;
  16094. let betTypeNameEn = failData.value;
  16095. if (sportInfo.odds && Array.isArray(sportInfo.odds)) {
  16096. const market = sportInfo.odds.find((m) => String(m.id) === String(failData.id));
  16097. if (market) {
  16098. betType = market.name;
  16099. betTypeEn = market.name;
  16100. const option = market.values.find((v) => String(v.value) === String(failData.value));
  16101. if (option) {
  16102. betTypeName = option.value_text || option.value;
  16103. betTypeNameEn = option.value;
  16104. }
  16105. }
  16106. }
  16107. const newItem = {
  16108. uniqueKey,
  16109. data_id: failData.data_id,
  16110. marketId: failData.id,
  16111. optionValue: failData.value,
  16112. handicap: failData.handicap,
  16113. handicap_text: failData.handicap,
  16114. odds: failData.odd,
  16115. stake: failData.amount,
  16116. errorMsg: failData.msg,
  16117. homeTeam: sportInfo.home_team,
  16118. home_team_en: sportInfo.home_team_en,
  16119. guestTeam: sportInfo.guest_team,
  16120. guest_team_en: sportInfo.guest_team_en,
  16121. league: sportInfo.league,
  16122. league_en: sportInfo.league_en,
  16123. score: sportInfo.score,
  16124. is_locked: sportInfo.is_locked || 0,
  16125. state: sportInfo.state,
  16126. status: sportInfo.status,
  16127. betType,
  16128. betTypeEn,
  16129. betTypeName,
  16130. betTypeNameEn,
  16131. selection: { submit_value: failData.value }
  16132. };
  16133. orderStore.selectOrders.push(newItem);
  16134. }
  16135. if (orderStore.saveToStorage) {
  16136. orderStore.saveToStorage();
  16137. }
  16138. orderStore.setSheetOpen(true);
  16139. }
  16140. if (res.type === "rgcz") {
  16141. rechargeStore.showModal(res.message);
  16142. }
  16143. }
  16144. function cartSocketHandler(data) {
  16145. try {
  16146. const res = typeof data === "string" ? JSON.parse(data) : data;
  16147. if (res.type === "sport_list" && Array.isArray(res.message)) {
  16148. if (orderStore.selectOrders.length === 0)
  16149. return;
  16150. res.message.forEach((newMatch) => {
  16151. orderStore.selectOrders.forEach((cartItem) => {
  16152. if (String(cartItem.data_id) === String(newMatch.data_id)) {
  16153. cartItem.score = newMatch.score;
  16154. cartItem.state = newMatch.state;
  16155. cartItem.status = newMatch.status;
  16156. cartItem.is_roll = newMatch.is_roll;
  16157. cartItem.is_locked = newMatch.is_locked;
  16158. let parsedOdds = newMatch.odds;
  16159. if (typeof parsedOdds === "string") {
  16160. try {
  16161. parsedOdds = JSON.parse(parsedOdds);
  16162. } catch (e) {
  16163. parsedOdds = [];
  16164. }
  16165. }
  16166. if (parsedOdds && Array.isArray(parsedOdds) && parsedOdds.length > 0) {
  16167. const targetMarket = parsedOdds.find((m) => String(m.id) === String(cartItem.marketId));
  16168. if (targetMarket && targetMarket.values) {
  16169. const targetOption = targetMarket.values.find((opt) => {
  16170. const isValueMatch = String(opt.value) === String(cartItem.optionValue);
  16171. const isHandicapMatch = cartItem.handicap !== null && cartItem.handicap !== void 0 && cartItem.handicap !== "" ? String(opt.handicap) === String(cartItem.handicap) : true;
  16172. return isValueMatch && isHandicapMatch;
  16173. });
  16174. if (targetOption) {
  16175. cartItem.odds = targetOption.odd;
  16176. if (targetOption.suspended || !targetOption.odd || targetOption.odd === "-" || Number(targetOption.odd) === 0) {
  16177. cartItem.is_locked = 1;
  16178. }
  16179. } else {
  16180. cartItem.is_locked = 1;
  16181. }
  16182. } else {
  16183. cartItem.is_locked = 1;
  16184. }
  16185. }
  16186. }
  16187. });
  16188. });
  16189. }
  16190. } catch (error) {
  16191. formatAppLog("error", "at components/PageContainer/index.vue:806", "Cart WS Sync Error:", error);
  16192. }
  16193. }
  16194. vue.onMounted(() => {
  16195. const pages = getCurrentPages();
  16196. if (pages.length > 0) {
  16197. const currentPage = pages[pages.length - 1];
  16198. const pageRoute = currentPage.route || "";
  16199. const showTabbarRoutes = [
  16200. "pages/Tabbar/Home/index",
  16201. "pages/Tabbar/RollingBall/index",
  16202. "pages/Tabbar/SportsBetting/index",
  16203. "pages/Tabbar/Entertainment/index",
  16204. "pages/Tabbar/WorldCup/index",
  16205. "pages/Tabbar/My/index",
  16206. "pages/Tabbar/BettingHistory/index"
  16207. ];
  16208. isShowTabbarRoute.value = showTabbarRoutes.some((route2) => pageRoute.includes(route2));
  16209. }
  16210. });
  16211. onShow(() => {
  16212. token.value = uni.getStorageSync("token");
  16213. batchStakeValue.value = uni.getStorageSync("batchStakeCache") || "";
  16214. isAutoAccept.value = uni.getStorageSync("autoAcceptOdds") !== false && uni.getStorageSync("autoAcceptOdds") !== "false";
  16215. if (token.value) {
  16216. getData();
  16217. }
  16218. });
  16219. __expose({
  16220. getData
  16221. });
  16222. const __returned__ = { t: t2, locale, router: router2, orderStore, rechargeStore, WebsocketData, token, get contentPaddingBottom() {
  16223. return contentPaddingBottom;
  16224. }, set contentPaddingBottom(v) {
  16225. contentPaddingBottom = v;
  16226. }, props, userMoney, formatMoney, isShowTabbarRoute, safeModalRef, showSafeModal, safeWord, retryModalRef, showRetryModal, retryFailures, isAutoAccept, toggleAutoAccept, slots, hasLeftSlot, hasTitleSlot, hasRightSlot, hassubNavRightSlot, background, checkIsLocked, validOrders, validTotalOdds, validTotalAmount, validTotalStake, batchStakeValue, applyBatchStake, openSheet, closeSheet, changeStake, onInputStake, topUp, submitBet, executeSubmit, confirmSubmitBet, confirmRetryBet, onClickLeft, goTopUp, goToHome, getData, SocketHandler, cartSocketHandler, ref: vue.ref, useSlots: vue.useSlots, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, reactive: vue.reactive, computed: vue.computed, watch: vue.watch, get useI18n() {
  16227. return useI18n;
  16228. }, get onShow() {
  16229. return onShow;
  16230. }, get useOrderStore() {
  16231. return useOrderStore;
  16232. }, get getBalance() {
  16233. return getBalance;
  16234. }, get submitOrder() {
  16235. return submitOrder;
  16236. }, get useWebsocketDataStore() {
  16237. return useWebsocketDataStore;
  16238. }, SystemNoticeModal, RechargeModal: RechargeModal$1, AppDownloadBanner, get useRechargeStore() {
  16239. return useRechargeStore;
  16240. } };
  16241. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  16242. return __returned__;
  16243. }
  16244. };
  16245. function _sfc_render$1b(_ctx, _cache, $props, $setup, $data, $options) {
  16246. const _component_u_button = __unplugin_components_2$1;
  16247. const _component_selectLang = selectLang;
  16248. const _component_u_icon = __unplugin_components_0$5;
  16249. const _component_u_navbar = __unplugin_components_3$1;
  16250. const _component_u_tag = __unplugin_components_2$2;
  16251. const _component_u_popup = __unplugin_components_2$3;
  16252. const _component_u_input = __unplugin_components_3$2;
  16253. const _component_u_modal = __unplugin_components_4$3;
  16254. return vue.openBlock(), vue.createElementBlock(
  16255. "view",
  16256. {
  16257. class: vue.normalizeClass(["global-page-container", [$setup.isShowTabbarRoute ? "global-page-container-tabbar" : "global-page-container-children"]])
  16258. },
  16259. [
  16260. $props.showNavBar ? (vue.openBlock(), vue.createBlock(_component_u_navbar, {
  16261. key: 0,
  16262. background: $setup.background,
  16263. "border-bottom": false,
  16264. "custom-back": $setup.onClickLeft,
  16265. "back-icon-name": "",
  16266. "back-text": "",
  16267. title: "",
  16268. onTouchmove: _cache[4] || (_cache[4] = vue.withModifiers(() => {
  16269. }, ["stop", "prevent"]))
  16270. }, vue.createSlots({
  16271. left: vue.withCtx(() => [
  16272. vue.createElementVNode("view", {
  16273. class: "logo-container",
  16274. onClick: vue.withModifiers($setup.goToHome, ["stop"])
  16275. }, [
  16276. vue.createElementVNode("image", {
  16277. src: _imports_0$5,
  16278. mode: "widthFix",
  16279. style: { "width": "100%", "height": "auto" }
  16280. })
  16281. ])
  16282. ]),
  16283. right: vue.withCtx(() => [
  16284. $setup.token ? (vue.openBlock(), vue.createElementBlock("view", {
  16285. key: 0,
  16286. class: "navbar-right"
  16287. }, [
  16288. vue.createVNode(_component_u_button, {
  16289. customStyle: { height: "32px", padding: "0 4px", marginRight: "10px", fontSize: "14px" },
  16290. size: "small",
  16291. type: "primary",
  16292. onClick: $setup.goTopUp
  16293. }, {
  16294. default: vue.withCtx(() => [
  16295. vue.createElementVNode(
  16296. "text",
  16297. { style: { "color": "#000", "margin": "0 4px", "font-weight": "bold" } },
  16298. vue.toDisplayString($setup.formatMoney($setup.userMoney)) + " " + vue.toDisplayString(_ctx.$currency),
  16299. 1
  16300. /* TEXT */
  16301. )
  16302. ]),
  16303. _: 1
  16304. /* STABLE */
  16305. }),
  16306. vue.createElementVNode("view", { class: "nav-btn" }, [
  16307. vue.createVNode(_component_selectLang, { isBall: true })
  16308. ]),
  16309. vue.createElementVNode("view", {
  16310. class: "nav-btn ml-2",
  16311. onClick: _cache[0] || (_cache[0] = ($event) => $setup.router.pushTab({ name: "My" }))
  16312. }, [
  16313. vue.createVNode(_component_u_icon, {
  16314. color: "#fff",
  16315. name: "account-fill"
  16316. })
  16317. ]),
  16318. vue.createElementVNode("view", {
  16319. class: "nav-btn ml-2",
  16320. onClick: _cache[1] || (_cache[1] = ($event) => $setup.router.push({ name: "customerService" }))
  16321. }, [
  16322. vue.createVNode(_component_u_icon, {
  16323. color: "#fff",
  16324. name: "kefu-ermai"
  16325. })
  16326. ])
  16327. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  16328. key: 1,
  16329. style: { "display": "flex", "align-items": "center", "gap": "10px" }
  16330. }, [
  16331. vue.createElementVNode("view", { class: "nav-btn" }, [
  16332. vue.createVNode(_component_selectLang, { isBall: true })
  16333. ]),
  16334. vue.createElementVNode(
  16335. "view",
  16336. {
  16337. style: { "color": "#ccc", "text-decoration": "underline", "margin-right": "6px" },
  16338. onClick: _cache[2] || (_cache[2] = ($event) => $setup.router.push({ name: "register" }))
  16339. },
  16340. vue.toDisplayString($setup.t("注册")),
  16341. 1
  16342. /* TEXT */
  16343. ),
  16344. vue.createElementVNode(
  16345. "view",
  16346. {
  16347. style: { "color": "#ccc", "text-decoration": "underline", "margin-right": "16px" },
  16348. onClick: _cache[3] || (_cache[3] = ($event) => $setup.router.push({ name: "login" }))
  16349. },
  16350. vue.toDisplayString($setup.t("登录")),
  16351. 1
  16352. /* TEXT */
  16353. )
  16354. ]))
  16355. ]),
  16356. _: 2
  16357. /* DYNAMIC */
  16358. }, [
  16359. $setup.hasLeftSlot ? {
  16360. name: "left",
  16361. fn: vue.withCtx(() => [
  16362. vue.renderSlot(_ctx.$slots, "left", {}, void 0, true)
  16363. ]),
  16364. key: "0"
  16365. } : void 0,
  16366. $setup.hasTitleSlot ? {
  16367. name: "center",
  16368. fn: vue.withCtx(() => [
  16369. vue.renderSlot(_ctx.$slots, "title", {}, void 0, true)
  16370. ]),
  16371. key: "1"
  16372. } : void 0,
  16373. $setup.hasRightSlot ? {
  16374. name: "right",
  16375. fn: vue.withCtx(() => [
  16376. vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
  16377. ]),
  16378. key: "2"
  16379. } : void 0
  16380. ]), 1032, ["background"])) : vue.createCommentVNode("v-if", true),
  16381. $setup.isShowTabbarRoute ? (vue.openBlock(), vue.createBlock($setup["AppDownloadBanner"], { key: 1 })) : vue.createCommentVNode("v-if", true),
  16382. $props.showNavBar && !$setup.isShowTabbarRoute ? (vue.openBlock(), vue.createElementBlock(
  16383. "view",
  16384. {
  16385. key: 2,
  16386. class: "sub-navbar",
  16387. onTouchmove: _cache[5] || (_cache[5] = vue.withModifiers(() => {
  16388. }, ["stop", "prevent"]))
  16389. },
  16390. [
  16391. vue.createElementVNode("view", { class: "sub-navbar-left" }, [
  16392. vue.createElementVNode("view", {
  16393. class: "sub-navbar-arrow-left nav-btn",
  16394. onClick: $setup.onClickLeft
  16395. }, [
  16396. vue.createVNode(_component_u_icon, {
  16397. color: "#f1f1f1",
  16398. name: "arrow-left",
  16399. size: "36"
  16400. })
  16401. ]),
  16402. vue.createElementVNode(
  16403. "span",
  16404. null,
  16405. vue.toDisplayString($props.navTitle ? _ctx.$t($props.navTitle) : ""),
  16406. 1
  16407. /* TEXT */
  16408. )
  16409. ]),
  16410. vue.createElementVNode("view", { class: "sub-navbar-right" }, [
  16411. vue.renderSlot(_ctx.$slots, "navBarRight", {}, void 0, true)
  16412. ])
  16413. ],
  16414. 32
  16415. /* NEED_HYDRATION */
  16416. )) : vue.createCommentVNode("v-if", true),
  16417. !$setup.isShowTabbarRoute ? (vue.openBlock(), vue.createElementBlock(
  16418. "view",
  16419. {
  16420. key: 3,
  16421. style: { "height": "50px" },
  16422. onTouchmove: _cache[6] || (_cache[6] = vue.withModifiers(() => {
  16423. }, ["stop", "prevent"]))
  16424. },
  16425. null,
  16426. 32
  16427. /* NEED_HYDRATION */
  16428. )) : vue.createCommentVNode("v-if", true),
  16429. vue.createElementVNode(
  16430. "view",
  16431. {
  16432. class: vue.normalizeClass([[$setup.isShowTabbarRoute ? "tabbar-content-box" : ""], "content-box"]),
  16433. style: vue.normalizeStyle({
  16434. paddingBottom: $setup.isShowTabbarRoute ? $setup.contentPaddingBottom : ""
  16435. })
  16436. },
  16437. [
  16438. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  16439. ],
  16440. 6
  16441. /* CLASS, STYLE */
  16442. ),
  16443. $setup.isShowTabbarRoute && _ctx.$Route.path !== "/pages/Tabbar/Entertainment/index" && _ctx.$Route.path !== "/pages/Tabbar/My/index" || _ctx.$Route.path === "/pages/common/sportDetail/index" ? (vue.openBlock(), vue.createElementBlock(
  16444. "view",
  16445. {
  16446. key: 4,
  16447. onTouchmove: _cache[12] || (_cache[12] = vue.withModifiers(() => {
  16448. }, ["stop", "prevent"]))
  16449. },
  16450. [
  16451. !$setup.orderStore.isOpen ? (vue.openBlock(), vue.createElementBlock(
  16452. "view",
  16453. {
  16454. key: 0,
  16455. class: vue.normalizeClass(["sticky-header-bar", [_ctx.$Route.path === "/pages/common/sportDetail/index" ? "sportDetail-cart-bar" : ""]]),
  16456. onClick: $setup.openSheet
  16457. },
  16458. [
  16459. vue.createElementVNode("view", { class: "betting-sheet-header" }, [
  16460. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  16461. $setup.orderStore.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock(
  16462. "view",
  16463. {
  16464. key: 0,
  16465. class: "sheet-badge"
  16466. },
  16467. vue.toDisplayString($setup.orderStore.selectedCount),
  16468. 1
  16469. /* TEXT */
  16470. )) : vue.createCommentVNode("v-if", true),
  16471. vue.createElementVNode(
  16472. "text",
  16473. { class: "header-text" },
  16474. vue.toDisplayString($setup.t("投注单")),
  16475. 1
  16476. /* TEXT */
  16477. ),
  16478. vue.createVNode(_component_u_icon, {
  16479. color: "#666",
  16480. name: "arrow-up"
  16481. })
  16482. ]),
  16483. vue.createElementVNode("view", { class: "betting-sheet-header-right" }, [
  16484. vue.createElementVNode("view", { class: "settings-btn" }, [
  16485. vue.createVNode(_component_u_button, {
  16486. size: "mini",
  16487. type: "primary",
  16488. onClick: $setup.openSheet
  16489. }, {
  16490. default: vue.withCtx(() => [
  16491. vue.createTextVNode(
  16492. vue.toDisplayString($setup.t("投注")),
  16493. 1
  16494. /* TEXT */
  16495. )
  16496. ]),
  16497. _: 1
  16498. /* STABLE */
  16499. })
  16500. ])
  16501. ])
  16502. ])
  16503. ],
  16504. 2
  16505. /* CLASS */
  16506. )) : vue.createCommentVNode("v-if", true),
  16507. vue.createVNode(_component_u_popup, {
  16508. mask: true,
  16509. "mask-close-able": true,
  16510. modelValue: $setup.orderStore.isOpen,
  16511. "safe-area-inset-bottom": true,
  16512. "z-index": 990,
  16513. "border-radius": "24",
  16514. height: "70%",
  16515. mode: "bottom",
  16516. onClose: $setup.closeSheet
  16517. }, {
  16518. default: vue.withCtx(() => [
  16519. vue.createElementVNode("view", { class: "popup-betting-sheet-header" }, [
  16520. vue.createElementVNode("view", {
  16521. class: "betting-sheet-header border-bottom",
  16522. onClick: $setup.closeSheet
  16523. }, [
  16524. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  16525. $setup.orderStore.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock(
  16526. "view",
  16527. {
  16528. key: 0,
  16529. class: "sheet-badge"
  16530. },
  16531. vue.toDisplayString($setup.orderStore.selectedCount),
  16532. 1
  16533. /* TEXT */
  16534. )) : vue.createCommentVNode("v-if", true),
  16535. vue.createElementVNode(
  16536. "text",
  16537. { class: "header-text" },
  16538. vue.toDisplayString($setup.t("投注单")),
  16539. 1
  16540. /* TEXT */
  16541. ),
  16542. vue.createVNode(_component_u_icon, {
  16543. color: "#666",
  16544. name: "arrow-down"
  16545. })
  16546. ]),
  16547. vue.createElementVNode("view", { class: "betting-sheet-header-right" }, [
  16548. vue.createElementVNode("view", { class: "settings-btn" }, [
  16549. vue.createElementVNode(
  16550. "text",
  16551. {
  16552. class: "tmc",
  16553. style: { "font-size": "12px", "margin-right": "16px" },
  16554. onClick: _cache[7] || (_cache[7] = vue.withModifiers((...args) => $setup.orderStore.clearAllOrders && $setup.orderStore.clearAllOrders(...args), ["stop"]))
  16555. },
  16556. vue.toDisplayString($setup.t("清空")),
  16557. 1
  16558. /* TEXT */
  16559. )
  16560. ])
  16561. ])
  16562. ]),
  16563. $setup.orderStore.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  16564. key: 0,
  16565. class: "batch-stake-box"
  16566. }, [
  16567. vue.createElementVNode(
  16568. "text",
  16569. { class: "batch-label" },
  16570. vue.toDisplayString($setup.t("批量设置金额")),
  16571. 1
  16572. /* TEXT */
  16573. ),
  16574. vue.createElementVNode("view", { class: "batch-input-wrapper" }, [
  16575. vue.withDirectives(vue.createElementVNode("input", {
  16576. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.batchStakeValue = $event),
  16577. class: "batch-input",
  16578. placeholder: $setup.t("请输入金额"),
  16579. type: "number"
  16580. }, null, 8, ["placeholder"]), [
  16581. [vue.vModelText, $setup.batchStakeValue]
  16582. ])
  16583. ]),
  16584. vue.createVNode(_component_u_button, {
  16585. size: "mini",
  16586. type: "primary",
  16587. style: { "margin-left": "10px" },
  16588. onClick: $setup.applyBatchStake
  16589. }, {
  16590. default: vue.withCtx(() => [
  16591. vue.createTextVNode(
  16592. vue.toDisplayString($setup.t("确定")),
  16593. 1
  16594. /* TEXT */
  16595. )
  16596. ]),
  16597. _: 1
  16598. /* STABLE */
  16599. })
  16600. ])) : vue.createCommentVNode("v-if", true)
  16601. ]),
  16602. $setup.orderStore.selectedCount === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  16603. key: 0,
  16604. class: "empty-sheet"
  16605. }, [
  16606. vue.createElementVNode(
  16607. "text",
  16608. null,
  16609. vue.toDisplayString($setup.t("暂无投注项")),
  16610. 1
  16611. /* TEXT */
  16612. )
  16613. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  16614. key: 1,
  16615. class: "bet-list"
  16616. }, [
  16617. (vue.openBlock(true), vue.createElementBlock(
  16618. vue.Fragment,
  16619. null,
  16620. vue.renderList($setup.orderStore.selectOrders, (item, index) => {
  16621. return vue.openBlock(), vue.createElementBlock(
  16622. "view",
  16623. {
  16624. key: index,
  16625. class: vue.normalizeClass([{ "is-locked": $setup.checkIsLocked(item) }, "bet-item"])
  16626. },
  16627. [
  16628. $setup.checkIsLocked(item) ? (vue.openBlock(), vue.createElementBlock("view", {
  16629. key: 0,
  16630. class: "lock-overlay"
  16631. }, [
  16632. vue.createVNode(_component_u_icon, {
  16633. color: "#fff",
  16634. name: "lock-fill",
  16635. size: "32"
  16636. }),
  16637. vue.createElementVNode(
  16638. "text",
  16639. { class: "lock-text" },
  16640. vue.toDisplayString($setup.t("盘口已失效或关闭")),
  16641. 1
  16642. /* TEXT */
  16643. )
  16644. ])) : vue.createCommentVNode("v-if", true),
  16645. item.errorMsg ? (vue.openBlock(), vue.createElementBlock("view", {
  16646. key: 1,
  16647. class: "fail-msg-box"
  16648. }, [
  16649. vue.createVNode(_component_u_icon, {
  16650. color: "#fa3534",
  16651. name: "info-circle-fill",
  16652. size: "28"
  16653. }),
  16654. vue.createElementVNode(
  16655. "text",
  16656. { class: "fail-text" },
  16657. vue.toDisplayString($setup.t(item.errorMsg)),
  16658. 1
  16659. /* TEXT */
  16660. )
  16661. ])) : vue.createCommentVNode("v-if", true),
  16662. vue.createElementVNode("view", { class: "item-header" }, [
  16663. vue.createElementVNode("view", {
  16664. class: "team-names",
  16665. style: { "display": "flex", "align-items": "center" }
  16666. }, [
  16667. vue.createVNode(_component_u_tag, {
  16668. size: "mini",
  16669. type: "success",
  16670. style: { "margin-right": "4px" }
  16671. }, {
  16672. default: vue.withCtx(() => [
  16673. vue.createTextVNode(
  16674. vue.toDisplayString($setup.t("主")),
  16675. 1
  16676. /* TEXT */
  16677. )
  16678. ]),
  16679. _: 1
  16680. /* STABLE */
  16681. }),
  16682. vue.createTextVNode(
  16683. vue.toDisplayString($setup.locale === "zh" ? item.homeTeam : item.home_team_en) + " - " + vue.toDisplayString($setup.locale === "zh" ? item.guestTeam : item.guest_team_en),
  16684. 1
  16685. /* TEXT */
  16686. ),
  16687. vue.createVNode(_component_u_tag, {
  16688. size: "mini",
  16689. type: "error",
  16690. style: { "margin-left": "4px" }
  16691. }, {
  16692. default: vue.withCtx(() => [
  16693. vue.createTextVNode(
  16694. vue.toDisplayString($setup.t("客")),
  16695. 1
  16696. /* TEXT */
  16697. )
  16698. ]),
  16699. _: 1
  16700. /* STABLE */
  16701. })
  16702. ]),
  16703. $setup.checkIsLocked(item) ? (vue.openBlock(), vue.createElementBlock("view", {
  16704. key: 0,
  16705. class: "close-btn",
  16706. onClick: vue.withModifiers(($event) => $setup.orderStore.removeOrderItem(item.uniqueKey), ["stop"])
  16707. }, [
  16708. vue.createVNode(_component_u_icon, {
  16709. color: "#666",
  16710. name: "close",
  16711. size: "16"
  16712. })
  16713. ], 8, ["onClick"])) : (vue.openBlock(), vue.createElementBlock("view", {
  16714. key: 1,
  16715. style: { "margin-right": "8px" },
  16716. onClick: vue.withModifiers(($event) => $setup.orderStore.removeOrderItem(item.uniqueKey), ["stop"])
  16717. }, [
  16718. vue.createVNode(_component_u_icon, {
  16719. color: "#666",
  16720. name: "close",
  16721. size: "16"
  16722. })
  16723. ], 8, ["onClick"]))
  16724. ]),
  16725. vue.createElementVNode("view", { class: "item-info" }, [
  16726. vue.createElementVNode("view", { class: "bet-type" }, [
  16727. vue.createElementVNode("text", { class: "type-name" }, [
  16728. vue.createTextVNode(
  16729. vue.toDisplayString($setup.locale === "zh" ? item.betType : item.betTypeEn) + ": " + vue.toDisplayString($setup.locale === "zh" ? item.betTypeName : item.betTypeNameEn) + " ",
  16730. 1
  16731. /* TEXT */
  16732. ),
  16733. item.handicap_text ? (vue.openBlock(), vue.createElementBlock(
  16734. "text",
  16735. {
  16736. key: 0,
  16737. style: { "margin-left": "4px", "color": "#f8b932" }
  16738. },
  16739. "[" + vue.toDisplayString(item.handicap_text) + "]",
  16740. 1
  16741. /* TEXT */
  16742. )) : vue.createCommentVNode("v-if", true)
  16743. ])
  16744. ]),
  16745. vue.createElementVNode("view", { class: "odds-box" }, [
  16746. vue.createElementVNode(
  16747. "text",
  16748. { class: "odds-val" },
  16749. vue.toDisplayString(item.odds),
  16750. 1
  16751. /* TEXT */
  16752. )
  16753. ])
  16754. ]),
  16755. vue.createElementVNode("view", { class: "league-info" }, [
  16756. vue.createElementVNode(
  16757. "text",
  16758. null,
  16759. vue.toDisplayString($setup.locale === "zh" ? item.league : item.league_en),
  16760. 1
  16761. /* TEXT */
  16762. ),
  16763. item.score && item.score !== "-" ? (vue.openBlock(), vue.createElementBlock(
  16764. "text",
  16765. {
  16766. key: 0,
  16767. class: "live-score"
  16768. },
  16769. vue.toDisplayString($setup.t("当前比分")) + ": " + vue.toDisplayString(item.score),
  16770. 1
  16771. /* TEXT */
  16772. )) : vue.createCommentVNode("v-if", true)
  16773. ]),
  16774. vue.createElementVNode(
  16775. "view",
  16776. {
  16777. class: vue.normalizeClass([{ "error-border": item.errorMsg || !$setup.checkIsLocked(item) && item.stake !== "" && item.stake !== void 0 && Number(item.stake) <= 0 || !$setup.checkIsLocked(item) && Number(item.stake) > Number($setup.userMoney) || !$setup.checkIsLocked(item) && item.mininum !== void 0 && item.stake !== "" && item.stake !== void 0 && Number(item.stake) < Number(item.mininum) || !$setup.checkIsLocked(item) && item.maxinum !== void 0 && Number(item.stake) > Number(item.maxinum) }, "stake-input-box"])
  16778. },
  16779. [
  16780. vue.createElementVNode("view", {
  16781. class: "stepper-btn",
  16782. onClick: vue.withModifiers(($event) => $setup.changeStake(item, -10), ["stop"])
  16783. }, [
  16784. vue.createVNode(_component_u_icon, {
  16785. name: "minus",
  16786. size: "24"
  16787. })
  16788. ], 8, ["onClick"]),
  16789. vue.withDirectives(vue.createElementVNode("input", {
  16790. "onUpdate:modelValue": ($event) => item.stake = $event,
  16791. disabled: $setup.checkIsLocked(item),
  16792. class: "stake-input",
  16793. placeholder: $setup.t("本金"),
  16794. type: "number",
  16795. onInput: (e) => $setup.onInputStake(e, item)
  16796. }, null, 40, ["onUpdate:modelValue", "disabled", "placeholder", "onInput"]), [
  16797. [vue.vModelText, item.stake]
  16798. ]),
  16799. vue.createElementVNode("view", {
  16800. class: "stepper-btn",
  16801. onClick: vue.withModifiers(($event) => $setup.changeStake(item, 10), ["stop"])
  16802. }, [
  16803. vue.createVNode(_component_u_icon, {
  16804. name: "plus",
  16805. size: "24"
  16806. })
  16807. ], 8, ["onClick"])
  16808. ],
  16809. 2
  16810. /* CLASS */
  16811. ),
  16812. vue.createElementVNode("view", { class: "item-footer" }, [
  16813. item.mininum !== void 0 && item.maxinum !== void 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  16814. key: 0,
  16815. style: { "font-size": "12px", "color": "#999" }
  16816. }, [
  16817. vue.createElementVNode(
  16818. "text",
  16819. null,
  16820. vue.toDisplayString($setup.t("单注限额")),
  16821. 1
  16822. /* TEXT */
  16823. ),
  16824. vue.createElementVNode(
  16825. "text",
  16826. null,
  16827. vue.toDisplayString(item.mininum) + " ~ " + vue.toDisplayString(item.maxinum),
  16828. 1
  16829. /* TEXT */
  16830. )
  16831. ])) : vue.createCommentVNode("v-if", true),
  16832. !$setup.checkIsLocked(item) && item.stake !== "" && item.stake !== void 0 && Number(item.stake) <= 0 ? (vue.openBlock(), vue.createElementBlock(
  16833. "view",
  16834. {
  16835. key: 1,
  16836. class: "err-msg"
  16837. },
  16838. vue.toDisplayString($setup.t("金额不能小于等于0")),
  16839. 1
  16840. /* TEXT */
  16841. )) : !$setup.checkIsLocked(item) && item.mininum !== void 0 && item.stake !== "" && item.stake !== void 0 && Number(item.stake) < Number(item.mininum) ? (vue.openBlock(), vue.createElementBlock(
  16842. "view",
  16843. {
  16844. key: 2,
  16845. class: "err-msg"
  16846. },
  16847. vue.toDisplayString($setup.t("单注最低限制为")) + " " + vue.toDisplayString(item.mininum),
  16848. 1
  16849. /* TEXT */
  16850. )) : !$setup.checkIsLocked(item) && item.maxinum !== void 0 && Number(item.stake) > Number(item.maxinum) ? (vue.openBlock(), vue.createElementBlock(
  16851. "view",
  16852. {
  16853. key: 3,
  16854. class: "err-msg"
  16855. },
  16856. vue.toDisplayString($setup.t("单注最高限制为")) + " " + vue.toDisplayString(item.maxinum),
  16857. 1
  16858. /* TEXT */
  16859. )) : !$setup.checkIsLocked(item) && Number(item.stake) > Number($setup.userMoney) ? (vue.openBlock(), vue.createElementBlock(
  16860. "view",
  16861. {
  16862. key: 4,
  16863. class: "err-msg"
  16864. },
  16865. vue.toDisplayString($setup.t("投注额超过您的余额")),
  16866. 1
  16867. /* TEXT */
  16868. )) : (vue.openBlock(), vue.createElementBlock("view", {
  16869. key: 5,
  16870. class: "potential-win"
  16871. }, [
  16872. vue.createTextVNode(
  16873. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  16874. 1
  16875. /* TEXT */
  16876. ),
  16877. vue.createElementVNode(
  16878. "text",
  16879. { class: "win-amount" },
  16880. vue.toDisplayString((Number(item.stake) * Number(item.odds)).toFixed(2)) + " " + vue.toDisplayString(_ctx.$currency),
  16881. 1
  16882. /* TEXT */
  16883. )
  16884. ]))
  16885. ])
  16886. ],
  16887. 2
  16888. /* CLASS */
  16889. );
  16890. }),
  16891. 128
  16892. /* KEYED_FRAGMENT */
  16893. ))
  16894. ])),
  16895. vue.createElementVNode(
  16896. "view",
  16897. {
  16898. class: vue.normalizeClass(["sheet-action-bar", [_ctx.$Route.path === "/pages/common/sportDetail/index" ? "isDetail" : ""]])
  16899. },
  16900. [
  16901. $setup.orderStore.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  16902. key: 0,
  16903. class: "total-odds-row"
  16904. }, [
  16905. vue.createElementVNode(
  16906. "text",
  16907. { class: "label" },
  16908. vue.toDisplayString($setup.t("总金额")),
  16909. 1
  16910. /* TEXT */
  16911. ),
  16912. vue.createElementVNode(
  16913. "text",
  16914. { class: "val" },
  16915. vue.toDisplayString($setup.validTotalAmount.toFixed(2)),
  16916. 1
  16917. /* TEXT */
  16918. )
  16919. ])) : vue.createCommentVNode("v-if", true),
  16920. vue.createElementVNode("view", {
  16921. class: "auto-accept-box",
  16922. onClick: $setup.toggleAutoAccept
  16923. }, [
  16924. vue.createVNode(_component_u_icon, {
  16925. name: $setup.isAutoAccept ? "checkmark-circle-fill" : "checkmark-circle",
  16926. color: $setup.isAutoAccept ? "#ffbc00" : "#c0c4cc",
  16927. size: "36"
  16928. }, null, 8, ["name", "color"]),
  16929. vue.createElementVNode(
  16930. "text",
  16931. { class: "auto-accept-text" },
  16932. vue.toDisplayString($setup.t("自动接受更好的赔率")),
  16933. 1
  16934. /* TEXT */
  16935. )
  16936. ]),
  16937. $setup.validTotalStake > $setup.userMoney ? (vue.openBlock(), vue.createBlock(_component_u_button, {
  16938. key: 1,
  16939. type: "primary",
  16940. onClick: $setup.topUp
  16941. }, {
  16942. default: vue.withCtx(() => [
  16943. vue.createTextVNode(
  16944. vue.toDisplayString($setup.t("存款")),
  16945. 1
  16946. /* TEXT */
  16947. )
  16948. ]),
  16949. _: 1
  16950. /* STABLE */
  16951. })) : (vue.openBlock(), vue.createBlock(_component_u_button, {
  16952. key: 2,
  16953. type: "primary",
  16954. onClick: $setup.submitBet
  16955. }, {
  16956. default: vue.withCtx(() => [
  16957. vue.createTextVNode(
  16958. vue.toDisplayString($setup.t("投注")),
  16959. 1
  16960. /* TEXT */
  16961. )
  16962. ]),
  16963. _: 1
  16964. /* STABLE */
  16965. }))
  16966. ],
  16967. 2
  16968. /* CLASS */
  16969. ),
  16970. vue.createElementVNode("view", { style: { "height": "120px" } })
  16971. ]),
  16972. _: 1
  16973. /* STABLE */
  16974. }, 8, ["modelValue"]),
  16975. vue.createVNode(_component_u_modal, {
  16976. ref: "safeModalRef",
  16977. modelValue: $setup.showSafeModal,
  16978. "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.showSafeModal = $event),
  16979. "async-close": true,
  16980. "cancel-text": $setup.t("取消"),
  16981. "confirm-text": $setup.t("确定投注"),
  16982. "show-cancel-button": true,
  16983. title: $setup.t("安全验证"),
  16984. "confirm-color": "#f8b932",
  16985. onConfirm: $setup.confirmSubmitBet
  16986. }, {
  16987. default: vue.withCtx(() => [
  16988. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  16989. vue.createElementVNode(
  16990. "text",
  16991. { class: "safe-tips" },
  16992. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  16993. 1
  16994. /* TEXT */
  16995. ),
  16996. vue.createVNode(_component_u_input, {
  16997. modelValue: $setup.safeWord,
  16998. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.safeWord = $event),
  16999. border: true,
  17000. clearable: true,
  17001. placeholder: $setup.t("请输入资金密码"),
  17002. "border-color": "#e4e7ed",
  17003. type: "password"
  17004. }, null, 8, ["modelValue", "placeholder"])
  17005. ])
  17006. ]),
  17007. _: 1
  17008. /* STABLE */
  17009. }, 8, ["modelValue", "cancel-text", "confirm-text", "title"]),
  17010. vue.createVNode(_component_u_modal, {
  17011. ref: "retryModalRef",
  17012. modelValue: $setup.showRetryModal,
  17013. "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => $setup.showRetryModal = $event),
  17014. "async-close": true,
  17015. title: $setup.t("提示"),
  17016. "show-cancel-button": true,
  17017. "confirm-text": $setup.t("确定"),
  17018. "cancel-text": $setup.t("取消"),
  17019. "confirm-color": "#f8b932",
  17020. onConfirm: $setup.confirmRetryBet
  17021. }, {
  17022. default: vue.withCtx(() => [
  17023. vue.createElementVNode("view", { class: "retry-modal-content" }, [
  17024. vue.createElementVNode(
  17025. "text",
  17026. { class: "retry-tips" },
  17027. vue.toDisplayString($setup.t("以下注单提交失败,是否重新提交?")),
  17028. 1
  17029. /* TEXT */
  17030. ),
  17031. vue.createElementVNode("scroll-view", {
  17032. "scroll-y": "",
  17033. class: "retry-list"
  17034. }, [
  17035. (vue.openBlock(true), vue.createElementBlock(
  17036. vue.Fragment,
  17037. null,
  17038. vue.renderList($setup.retryFailures, (err, idx) => {
  17039. return vue.openBlock(), vue.createElementBlock("view", {
  17040. class: "retry-item",
  17041. key: idx
  17042. }, [
  17043. err.is_submit !== 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  17044. key: 0,
  17045. class: "retry-lock-overlay"
  17046. }, [
  17047. vue.createElementVNode(
  17048. "text",
  17049. { class: "retry-lock-text" },
  17050. vue.toDisplayString($setup.t("不可重新提交")),
  17051. 1
  17052. /* TEXT */
  17053. )
  17054. ])) : vue.createCommentVNode("v-if", true),
  17055. vue.createElementVNode("text", { class: "err-val" }, [
  17056. vue.createTextVNode(
  17057. vue.toDisplayString($setup.locale === "zh" ? err.value_text : err.value) + " ",
  17058. 1
  17059. /* TEXT */
  17060. ),
  17061. err.handicap ? (vue.openBlock(), vue.createElementBlock(
  17062. "text",
  17063. { key: 0 },
  17064. "[" + vue.toDisplayString(err.handicap) + "]",
  17065. 1
  17066. /* TEXT */
  17067. )) : vue.createCommentVNode("v-if", true),
  17068. vue.createTextVNode(
  17069. " @" + vue.toDisplayString(err.odd),
  17070. 1
  17071. /* TEXT */
  17072. )
  17073. ]),
  17074. vue.createElementVNode(
  17075. "text",
  17076. { class: "err-msg" },
  17077. vue.toDisplayString($setup.t(err.msg)),
  17078. 1
  17079. /* TEXT */
  17080. )
  17081. ]);
  17082. }),
  17083. 128
  17084. /* KEYED_FRAGMENT */
  17085. ))
  17086. ])
  17087. ])
  17088. ]),
  17089. _: 1
  17090. /* STABLE */
  17091. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"])
  17092. ],
  17093. 32
  17094. /* NEED_HYDRATION */
  17095. )) : vue.createCommentVNode("v-if", true),
  17096. vue.createVNode($setup["RechargeModal"]),
  17097. vue.createVNode($setup["SystemNoticeModal"])
  17098. ],
  17099. 2
  17100. /* CLASS */
  17101. );
  17102. }
  17103. const PageContainer = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["render", _sfc_render$1b], ["__scopeId", "data-v-633a219d"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/components/PageContainer/index.vue"]]);
  17104. const ImageProps = {
  17105. ...baseProps,
  17106. /** 图片地址 */
  17107. src: { type: String, default: "" },
  17108. /** 裁剪模式 */
  17109. mode: { type: String, default: "aspectFill" },
  17110. /** 宽度,单位任意,如果为数值,则为rpx单位(默认100%) */
  17111. width: { type: [String, Number], default: "100%" },
  17112. /** 高度,单位任意,如果为数值,则为rpx单位(默认 auto) */
  17113. height: { type: [String, Number], default: "auto" },
  17114. /** 图片形状,circle-圆形,square-方形(默认square) */
  17115. shape: { type: String, default: "square" },
  17116. /** 圆角值,单位任意,如果为数值,则为rpx单位(默认 0) */
  17117. borderRadius: { type: [String, Number], default: 0 },
  17118. /** 是否懒加载,仅微信小程序、App、百度小程序、字节跳动小程序有效(默认 true) */
  17119. lazyLoad: { type: Boolean, default: true },
  17120. /** 是否开启长按图片显示识别小程序码菜单,仅微信小程序有效(默认 true) */
  17121. showMenuByLongpress: { type: Boolean, default: true },
  17122. /** 加载中的图标,或者小图片(默认 photo) */
  17123. loadingIcon: { type: String, default: "photo" },
  17124. /** 加载失败的图标,或者小图片(默认 error-circle) */
  17125. errorIcon: { type: String, default: "error-circle" },
  17126. /** 是否显示加载中的图标或者自定义的slot(默认 true) */
  17127. showLoading: { type: Boolean, default: true },
  17128. /** 是否显示加载错误的图标或者自定义的slot(默认 true) */
  17129. showError: { type: Boolean, default: true },
  17130. /** 是否需要淡入效果(默认 true) */
  17131. fade: { type: Boolean, default: true },
  17132. /** 只支持网络资源,只对微信小程序有效(默认 false) */
  17133. webp: { type: Boolean, default: false },
  17134. /** 搭配fade参数的过渡时间,单位ms(默认 500) */
  17135. duration: { type: [String, Number], default: 500 },
  17136. /** 背景颜色,用于深色页面加载图片时,为了和背景色融合(默认 var(--u-bg-color)) */
  17137. bgColor: { type: String, default: "var(--u-bg-color)" },
  17138. /** 使用插槽名称对象,用于自定义插槽,默认 undefined,当动态切换slot隐藏时,需要使用useSlots使用,兼容头条小程序 */
  17139. useSlots: { type: Object, default: void 0 }
  17140. };
  17141. const __default__$b = {
  17142. name: "u-image",
  17143. options: {
  17144. addGlobalClass: true,
  17145. virtualHost: true,
  17146. styleIsolation: "shared"
  17147. }
  17148. };
  17149. const _sfc_main$1b = /* @__PURE__ */ vue.defineComponent({
  17150. ...__default__$b,
  17151. props: ImageProps,
  17152. emits: ["click", "error", "load"],
  17153. setup(__props, { expose: __expose, emit: __emit }) {
  17154. const emit = __emit;
  17155. const props = __props;
  17156. const isError = vue.ref(false);
  17157. const loading = vue.ref(true);
  17158. const opacity = vue.ref(1);
  17159. const durationTime = vue.ref(props.duration);
  17160. const backgroundStyle = vue.ref({});
  17161. vue.watch(
  17162. () => props.src,
  17163. (n) => {
  17164. if (!n) {
  17165. isError.value = true;
  17166. loading.value = false;
  17167. } else {
  17168. isError.value = false;
  17169. loading.value = true;
  17170. }
  17171. },
  17172. { immediate: true }
  17173. );
  17174. const wrapStyle = vue.computed(() => {
  17175. let style = {};
  17176. style.width = $u.addUnit(props.width);
  17177. style.height = $u.addUnit(props.height);
  17178. style.borderRadius = props.shape === "circle" ? "50%" : $u.addUnit(props.borderRadius);
  17179. style.overflow = Number(props.borderRadius) > 0 ? "hidden" : "visible";
  17180. if (props.fade) {
  17181. style.opacity = opacity.value;
  17182. style.transition = `opacity ${Number(durationTime.value) / 1e3}s ease-in-out`;
  17183. }
  17184. return style;
  17185. });
  17186. function onClick() {
  17187. emit("click");
  17188. }
  17189. function onErrorHandler(err) {
  17190. loading.value = false;
  17191. isError.value = true;
  17192. emit("error", err);
  17193. }
  17194. function onLoadHandler() {
  17195. loading.value = false;
  17196. isError.value = false;
  17197. emit("load");
  17198. if (!props.fade)
  17199. return removeBgColor();
  17200. opacity.value = 0;
  17201. durationTime.value = 0;
  17202. setTimeout(() => {
  17203. durationTime.value = props.duration;
  17204. opacity.value = 1;
  17205. setTimeout(() => {
  17206. removeBgColor();
  17207. }, Number(durationTime.value));
  17208. }, 50);
  17209. }
  17210. function removeBgColor() {
  17211. backgroundStyle.value = {
  17212. backgroundColor: "transparent"
  17213. };
  17214. }
  17215. function changeStatus(status) {
  17216. if (status === "loading") {
  17217. loading.value = true;
  17218. isError.value = false;
  17219. } else if (status === "error") {
  17220. loading.value = false;
  17221. isError.value = true;
  17222. } else {
  17223. loading.value = false;
  17224. isError.value = false;
  17225. }
  17226. }
  17227. const $slots = vue.useSlots();
  17228. function hasSlot(name) {
  17229. return props.useSlots ? !!$slots[name] && props.useSlots[name] : !!$slots[name];
  17230. }
  17231. __expose({
  17232. changeStatus
  17233. });
  17234. const __returned__ = { emit, props, isError, loading, opacity, durationTime, backgroundStyle, wrapStyle, onClick, onErrorHandler, onLoadHandler, removeBgColor, changeStatus, $slots, hasSlot, get $u() {
  17235. return $u;
  17236. } };
  17237. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  17238. return __returned__;
  17239. }
  17240. });
  17241. function _sfc_render$1a(_ctx, _cache, $props, $setup, $data, $options) {
  17242. const _component_u_icon = __unplugin_components_0$5;
  17243. return vue.openBlock(), vue.createElementBlock(
  17244. "view",
  17245. {
  17246. class: vue.normalizeClass(["u-image", _ctx.customClass]),
  17247. onClick: $setup.onClick,
  17248. style: vue.normalizeStyle($setup.$u.toStyle($setup.wrapStyle, $setup.backgroundStyle, _ctx.customStyle))
  17249. },
  17250. [
  17251. !$setup.isError ? (vue.openBlock(), vue.createElementBlock("image", {
  17252. key: 0,
  17253. src: _ctx.src,
  17254. mode: _ctx.mode,
  17255. onError: $setup.onErrorHandler,
  17256. onLoad: $setup.onLoadHandler,
  17257. "lazy-load": _ctx.lazyLoad,
  17258. class: "u-image__image",
  17259. "show-menu-by-longpress": _ctx.showMenuByLongpress,
  17260. style: vue.normalizeStyle({ borderRadius: _ctx.shape === "circle" ? "50%" : $setup.$u.addUnit(_ctx.borderRadius) })
  17261. }, null, 44, ["src", "mode", "lazy-load", "show-menu-by-longpress"])) : vue.createCommentVNode("v-if", true),
  17262. _ctx.showLoading && $setup.loading ? (vue.openBlock(), vue.createElementBlock(
  17263. "view",
  17264. {
  17265. key: 1,
  17266. class: "u-image__loading",
  17267. style: vue.normalizeStyle({ borderRadius: _ctx.shape === "circle" ? "50%" : $setup.$u.addUnit(_ctx.borderRadius), backgroundColor: _ctx.bgColor })
  17268. },
  17269. [
  17270. $setup.hasSlot("loading") ? vue.renderSlot(_ctx.$slots, "loading", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createBlock(_component_u_icon, {
  17271. key: 1,
  17272. name: _ctx.loadingIcon,
  17273. width: _ctx.width,
  17274. height: _ctx.height
  17275. }, null, 8, ["name", "width", "height"]))
  17276. ],
  17277. 4
  17278. /* STYLE */
  17279. )) : vue.createCommentVNode("v-if", true),
  17280. _ctx.showError && $setup.isError && !$setup.loading ? (vue.openBlock(), vue.createElementBlock(
  17281. "view",
  17282. {
  17283. key: 2,
  17284. class: "u-image__error",
  17285. style: vue.normalizeStyle({ borderRadius: _ctx.shape === "circle" ? "50%" : $setup.$u.addUnit(_ctx.borderRadius) })
  17286. },
  17287. [
  17288. $setup.hasSlot("error") ? vue.renderSlot(_ctx.$slots, "error", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createBlock(_component_u_icon, {
  17289. key: 1,
  17290. name: _ctx.errorIcon,
  17291. width: _ctx.width,
  17292. height: _ctx.height
  17293. }, null, 8, ["name", "width", "height"]))
  17294. ],
  17295. 4
  17296. /* STYLE */
  17297. )) : vue.createCommentVNode("v-if", true)
  17298. ],
  17299. 6
  17300. /* CLASS, STYLE */
  17301. );
  17302. }
  17303. const __unplugin_components_1$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["render", _sfc_render$1a], ["__scopeId", "data-v-cb47dfc7"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-image/u-image.vue"]]);
  17304. const skeleton = {
  17305. loading: true,
  17306. animate: true,
  17307. rows: 0,
  17308. rowsWidth: "100%",
  17309. rowsHeight: 18,
  17310. title: true,
  17311. titleWidth: "50%",
  17312. titleHeight: 18,
  17313. avatar: false,
  17314. avatarSize: 32,
  17315. avatarShape: "circle"
  17316. };
  17317. const SkeletonProps = {
  17318. ...baseProps,
  17319. // 是否展示骨架组件
  17320. loading: {
  17321. type: Boolean,
  17322. default: skeleton.loading
  17323. },
  17324. // 是否开启动画效果
  17325. animate: {
  17326. type: Boolean,
  17327. default: skeleton.animate
  17328. },
  17329. // 段落占位图行数
  17330. rows: {
  17331. type: [String, Number],
  17332. default: skeleton.rows
  17333. },
  17334. // 段落占位图的宽度
  17335. rowsWidth: {
  17336. type: [String, Number, Array],
  17337. default: skeleton.rowsWidth
  17338. },
  17339. // 段落占位图的高度
  17340. rowsHeight: {
  17341. type: [String, Number, Array],
  17342. default: skeleton.rowsHeight
  17343. },
  17344. // 是否展示标题占位图
  17345. title: {
  17346. type: Boolean,
  17347. default: skeleton.title
  17348. },
  17349. // 段落标题的宽度
  17350. titleWidth: {
  17351. type: [String, Number],
  17352. default: skeleton.titleWidth
  17353. },
  17354. // 段落标题的高度
  17355. titleHeight: {
  17356. type: [String, Number],
  17357. default: skeleton.titleHeight
  17358. },
  17359. // 是否展示头像占位图
  17360. avatar: {
  17361. type: Boolean,
  17362. default: skeleton.avatar
  17363. },
  17364. // 头像占位图大小
  17365. avatarSize: {
  17366. type: [String, Number],
  17367. default: skeleton.avatarSize
  17368. },
  17369. // 头像占位图的形状,circle-圆形,square-方形
  17370. avatarShape: {
  17371. type: String,
  17372. default: skeleton.avatarShape
  17373. }
  17374. };
  17375. const _sfc_main$1a = /* @__PURE__ */ vue.defineComponent({
  17376. __name: "u-skeleton",
  17377. props: SkeletonProps,
  17378. setup(__props, { expose: __expose }) {
  17379. __expose();
  17380. const props = __props;
  17381. const instance = vue.getCurrentInstance();
  17382. const width = vue.ref(0);
  17383. const skeletonRef = vue.ref(null);
  17384. const contentRef = vue.ref(null);
  17385. vue.watch(
  17386. () => [props.loading],
  17387. () => {
  17388. getComponentWidth();
  17389. }
  17390. );
  17391. const rowsArray = vue.computed(() => {
  17392. if (/%$/.test(props.rowsHeight)) {
  17393. console.error("rowsHeight参数不支持百分比单位");
  17394. }
  17395. const resultRows = [];
  17396. const rowsCount = Number(props.rows) || 0;
  17397. for (let i = 0; i < rowsCount; i++) {
  17398. let item = {};
  17399. const rowWidth = $u.test.array(props.rowsWidth) ? props.rowsWidth[i] || (i === rowsCount - 1 ? "70%" : "100%") : i === rowsCount - 1 ? "70%" : props.rowsWidth;
  17400. const rowHeight = $u.test.array(props.rowsHeight) ? props.rowsHeight[i] || "18px" : props.rowsHeight;
  17401. item.marginTop = !props.title && i === 0 ? 0 : props.title && i === 0 ? "20px" : "12px";
  17402. if (/%$/.test(rowWidth)) {
  17403. item.width = $u.addUnit(width.value * parseInt(String(rowWidth)) / 100, "px");
  17404. } else {
  17405. item.width = $u.addUnit(rowWidth, "px");
  17406. }
  17407. item.height = $u.addUnit(rowHeight, "px");
  17408. resultRows.push(item);
  17409. }
  17410. return resultRows;
  17411. });
  17412. const uTitleWidth = vue.computed(() => {
  17413. let tWidth = 0;
  17414. if (/%$/.test(props.titleWidth)) {
  17415. tWidth = $u.addUnit(width.value * parseInt(String(props.titleWidth)) / 100, "px");
  17416. } else {
  17417. tWidth = $u.addUnit(props.titleWidth, "px");
  17418. }
  17419. return $u.addUnit(tWidth, "px");
  17420. });
  17421. function init() {
  17422. getComponentWidth();
  17423. }
  17424. async function setNvueAnimation() {
  17425. }
  17426. async function getComponentWidth() {
  17427. await $u.sleep(20);
  17428. $u.getRect(".u-skeleton__wrapper__content", instance).then((res) => {
  17429. width.value = res.width;
  17430. });
  17431. }
  17432. vue.onMounted(() => {
  17433. init();
  17434. });
  17435. const __returned__ = { props, instance, width, skeletonRef, contentRef, rowsArray, uTitleWidth, init, setNvueAnimation, getComponentWidth, get $u() {
  17436. return $u;
  17437. } };
  17438. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  17439. return __returned__;
  17440. }
  17441. });
  17442. function _sfc_render$19(_ctx, _cache, $props, $setup, $data, $options) {
  17443. return vue.openBlock(), vue.createElementBlock(
  17444. "view",
  17445. {
  17446. class: vue.normalizeClass(["u-skeleton", _ctx.customClass]),
  17447. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle))
  17448. },
  17449. [
  17450. _ctx.loading ? (vue.openBlock(), vue.createElementBlock(
  17451. "view",
  17452. {
  17453. key: 0,
  17454. class: "u-skeleton__wrapper",
  17455. ref: "skeletonRef",
  17456. style: { "display": "flex", "flex-direction": "row" }
  17457. },
  17458. [
  17459. _ctx.avatar ? (vue.openBlock(), vue.createElementBlock(
  17460. "view",
  17461. {
  17462. key: 0,
  17463. class: vue.normalizeClass(["u-skeleton__wrapper__avatar", [`u-skeleton__wrapper__avatar--${_ctx.avatarShape}`, _ctx.animate && "animate"]]),
  17464. style: vue.normalizeStyle({
  17465. height: $setup.$u.addUnit(_ctx.avatarSize, "px"),
  17466. width: $setup.$u.addUnit(_ctx.avatarSize, "px")
  17467. })
  17468. },
  17469. null,
  17470. 6
  17471. /* CLASS, STYLE */
  17472. )) : vue.createCommentVNode("v-if", true),
  17473. vue.createElementVNode(
  17474. "view",
  17475. {
  17476. class: "u-skeleton__wrapper__content",
  17477. ref: "contentRef",
  17478. style: { "flex": "1" }
  17479. },
  17480. [
  17481. _ctx.title ? (vue.openBlock(), vue.createElementBlock(
  17482. "view",
  17483. {
  17484. key: 0,
  17485. class: vue.normalizeClass(["u-skeleton__wrapper__content__title", [_ctx.animate && "animate"]]),
  17486. style: vue.normalizeStyle({
  17487. width: $setup.uTitleWidth,
  17488. height: $setup.$u.addUnit(_ctx.titleHeight, "px")
  17489. })
  17490. },
  17491. null,
  17492. 6
  17493. /* CLASS, STYLE */
  17494. )) : vue.createCommentVNode("v-if", true),
  17495. (vue.openBlock(true), vue.createElementBlock(
  17496. vue.Fragment,
  17497. null,
  17498. vue.renderList($setup.rowsArray, (item, index) => {
  17499. return vue.openBlock(), vue.createElementBlock(
  17500. "view",
  17501. {
  17502. class: vue.normalizeClass(["u-skeleton__wrapper__content__rows", [_ctx.animate && "animate"]]),
  17503. key: index,
  17504. style: vue.normalizeStyle({
  17505. width: item.width,
  17506. height: item.height,
  17507. marginTop: item.marginTop
  17508. })
  17509. },
  17510. null,
  17511. 6
  17512. /* CLASS, STYLE */
  17513. );
  17514. }),
  17515. 128
  17516. /* KEYED_FRAGMENT */
  17517. ))
  17518. ],
  17519. 512
  17520. /* NEED_PATCH */
  17521. )
  17522. ],
  17523. 512
  17524. /* NEED_PATCH */
  17525. )) : vue.renderSlot(_ctx.$slots, "default", { key: 1 }, void 0, true)
  17526. ],
  17527. 6
  17528. /* CLASS, STYLE */
  17529. );
  17530. }
  17531. const __unplugin_components_0$3 = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["render", _sfc_render$19], ["__scopeId", "data-v-31db018b"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-skeleton/u-skeleton.vue"]]);
  17532. const zStatic = {
  17533. base64Arrow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAD1BMVEVHcExRUVFMTExRUVFRUVE9CdWsAAAABHRSTlMAjjrY9ZnUjwAAAQFJREFUWMPt2MsNgzAMgGEEE1B1gKJmAIRYoCH7z9RCXrabh33iYktcIv35EEg5ZBh07pvxJU6MFSPOSRnjnBUjUsaciRUjMsb4xIoRCWNiYsUInzE5sWKEyxiYWDbyefqHx1zIeiYTk7mQYziTYecxHvEJjwmIT3hMQELCYSISEg4TkZj0mYTEpM8kJCU9JiMp6TEZyUmbAUhO2gxAQNJiIAKSFgMRmNQZhMCkziAEJTUGIyipMRjBSZkhCE7KDEFIUmTeGCHJxWz0zXaE0GTCG8ZFtEaS347r/1fe11YyHYVfubxayfjoHmc0YYwmmmiiiSaaaKLJ7ckyz5ve+dw3Xw2emdwm9xSbAAAAAElFTkSuQmCC",
  17534. base64ArrowWhite: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAElBMVEVHcEz///////////////////+IGTx/AAAABnRSTlMA/dAkXZOhASU/AAABYElEQVRYw+2YwXLCIBCGsdAHWGbyAKZ4zxi9O017rxLf/1UaWFAgA1m8dcpedNSPf/l/Vh0Ya/Wn6hN0JcGvoCqRM4C8VBFiDwBqqNuJKV0rAnCgy3AUqZE57x0iqTL8Br4U3WBf/YWaIlTKfAcELU/h9w72CSVPa3C3OCDvhpHbRp/s2vq4fHhCeiCl2A3m4Qd71DQR257mFBlMcTlbFnFWzNtHxewYEfSiaLS4el8d8nyhmKJd1CF4eOS0keLMAuSxubLBIeIGQW8YHCFFo7EH9+YDcQt9FMZEswTheaNxTHwHT8SZorJjMrEVwo4Zo0U8HSEyZvJMOg4RjnmmRr8nDYeIz3OMkbfE/QhBo+U9RnZJxjGCRh/WKmHEMWLNkfPKsGh/CWJk1JjG0kcuJggTt34VDP8aWAFhp4nybVb5+9qQhjSkIQ1pSEMa8k+Q5U9rV3dF8MpFBK+/7miVq1/HZ2qmo9D+pAAAAABJRU5ErkJggg==",
  17535. base64Flower: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAKlBMVEVHcEzDw8Ovr6+pqamUlJTCwsKenp61tbWxsbGysrLNzc2bm5u5ubmjo6MpovhuAAAACnRSTlMA/P79/sHDhiZS0DxZowAABBBJREFUWMPtl89rE0EUx7ctTXatB3MI1SWnDbUKPUgXqh4ED8Uf7KUVSm3ooVSpSii0Fn/gD4j4o+APiEoVmos9FO2celiqZVgwgaKHPQiCCkv+F99kM7Ozm5kxq1dfD91k9pPve9/3ZjbRNHHok/mKli4eIPNgSuRObuN9SqSEzM20iGnm0yIbqCuV7NSSSIV7uyPM6JMBYdeTOanh/QihJYZsUCSby+VkMj2AvOt0rAeQAwqE3lfKMZVlQCZk1QOCKkkVPadITCfIRNKxfoJI5+0OIFtJx14CMSg1mRSDko7VAfksRQzEbGYqxOJcVTWMCH2I1/IACNW0PWU2M8cmAVHtnH5mM1VRWtwKZjOd5JbF6s1IbaYqaotjNlPHgDAnlAizubTR6ovMYn052g/U5qcmOpi0WL8xTS/3IfSet5m8MEr5ajjF5le6dq/OJpobrdY0t3i9QgefWrxW9/1BLhk0E9m8FeUMhhXal499iD0eQRfDF+ts/tttORRerfp+oV7f4xJj82iUYm1Yzod+ZQEAlS/8mMBwKebVmCVp1f0JLS6zKd17+iwRKTARVg2SHtz3iEbBH+Q+U28zW2Jiza8Tjb1YFoYZMsJyjDqp3M9XBQdSdPLFdxEpvOB37JrHcmR/y9+LgoTlCFGZEa2sc6d4PGlweEa2JSVPoVm+IfGG3ZL037iV9oH+P+Jxc4HGVflNq1M0pivao/EopO4b/ojVCP9GjmiXOeS0DOn1o/iiccT4ORnyvBGF3yUywkQajW4Ti0SGuiy/wVSg/L8w+X/8Q+hvUx8Xd90z4oV5a1i88MbFWHz0WZZ1UrTwBGPX3Rat9AFiXRMRjoMdIdJLEOt2h7jrYOzgOamKZSWSNspOS0X8SAqRYmxRL7sg4eLzYmNehcxh3uoyud/BH2Udux4ywxFTc1xC7Mgf4vMhc5S+kSH3Y7yj+qpwIWSoPTVCOOPVthGx9FbGqrwFw6wSFxJr+17zeKcztt3u+2roAEVgUjDd+AHGuxHy2rZHaa8JMkTHEeyi85ANPO9j9BVuBRD2FY5LDMo/Sz/2hReqGIs/KiFin+CsPsYO/yvM3jL2vE8EbX7/Bf8ejtr2GLN65bioAdgLd8Bis/mD5GmP2qeqyo2ZwQEOtAjRIDH7mBKpUcMoApbZJ5UIxkEwxyMZyMxW/uKFvHCFR3SSmerHyDNQ2dF4JG6zIMpBgLfjSF9x1D6smFcYnGApjmSLICO3ecCDWrQ48geba9DI3STy2i7ax6WIB62fSyIZIiO3GFQqSURp8wCo7GhJBGwuSovJBNjb7kT6FPVnIa9qJ2Ko+l9mefGIdinaMp0yC1URYiwsdfNE45EuA5Cx9EhalfvN5s+UyItm81vaB3p4joniN+SCP7Qc1hblAAAAAElFTkSuQmCC",
  17536. base64FlowerWhite: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAElBMVEX///9HcEz///////////////84chYNAAAABnRSTlP/AGzCOYZj5g1nAAACfklEQVRYw+2YTVPDIBCGtza9Jw25a0bvcax30o73OOr//yvma2F3YWlpPTijXNpAHrK8LLALVPFium2vNIFSbwGKTGQA2GUiHcD29yDNy3sMIdUBQl7r2H8mOEVqAHgPkYZUS6Qc2zYhQqtjyDZEximCZwWZLIBeIgYShs2NzxKpSUehYpMJhURGb+O+w5BpMCAREKPnCDHbIY20SzhM5yxziAXpOiBXydrekT9i5XDEq4NIIHHgyU5mRGqviII4mREJJA4QJzMiILwlRJzpKxJKvCBm8OsBBbLux0tsPl4RKYm5aPu6jw1U4mGxEUR9g8M1PcqBEp/WJliNgYOXueBzS4jZSIcgY5lCtevgDSgyzE+rAfuOTQMq0yzvoGH18qju27Mayzs4fPyMziCx81NJa5RNfW7vPYK9KOfDiVkBxFHG8hAj9txuoBuSWORsFfkpBf7xKFLSeaOefEojh5jz22DJEqMP8fUyaKdQx+RnG+yXMpe8Aars8ueR1pVH/bW3FyyvPRw90upLDHwpgBDtg4aUBNkxRLXMAi03IhcZtr1m+FeI/O/JNyDmmL1djLOauSlNflBpW18RQ2bPqXI22MXXEk75KRHTnkPkYbESbdKP2ZFk0r5sIwffAjy1lx+vx7NLjB6/E7Jfv5ERKhzpN0w8IDE8IGFDv5dhz10s7GFiXRZcUeLCEG5P5nDq9k4PFDcoMpE3GY4OuxuCXhmuyNB6k0RsLIAvqp9NE5r8ZCSS8gxnUp7ODdYhZTqxuiJ9uyJJtPmpqJ7wVj+XVieS903iViHziqAhchLEJAyb7jWU647EpUofQ0ziUuXXXhDddtlllSwjgSQu7r4BRWhQqfDPMVwAAAAASUVORK5CYII=",
  17537. base64Success: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAElBMVEVRUVFHcExTU1NRUVFRUVFRUVFOSlSUAAAABnRSTlP/AI6+VySB3ZENAAACcElEQVRYw+2YyYKCMAyGI8hdpdxdZu7gcpdZ7jL6/s8yYheSNi0aPdqbwOffpGmaFOYPD3gj4bisN7vddv17N/JVgxn5x12IWgIaWTuO/IE3PseQbwjGPo2cgRmHFLJwdm/X643zwiqOKPPJ1nj3sjEP2iiifZWj5bhopSyGaEO2HX5fbQJzwJ+W7x/jw5ZFjsEU0PMph9xE8i5EqprKALW95eJQURkgzw98uJ/JvwGecR7bIjWWsUgVrrIfFZ2HlLy3sKETD1mmRLRMRhGVssRa0xJkdn3SpJBymBkM8+pSSDXMDNyDaToVHd2fgpNt0sjwiUZO19+jGQ+gQEg9Oq+bufmAVGihomNmjQG7UG3020vrlm7lkFnKFGU3kZ0KGAdmKe821pipQ+qEKcrZeTL2g5FsUks4cStjEZWwXg0b0n4GxmEpkWwIs5VBynjgK7xZaz1/0D7OxkVuLpsY5BQNFyLS84VBjjbg0iL2r2EQHBOxBhikuUOkdxODVF1cxHoWtPPsiyXO455Iv34hssCO8EV4ZIYTjS8SR4qYSHRiTiYQ4ZFbHi0iIhhBTi6dTCgSWRcnw4h4yGTuyTAiOGBIWGoZTgSHJQl+LcOJ4OCnW6yX2bMnJ9pidCOXtkTkTrIGpYuOynAiOF14SamMiOCk5Ke+mq8BcOrrvym8d0zKIQnWT+M1WwOQNO4fFiWb18hhERxJPx2fblbPHHyC41VyiAtKBUFBIih7JMWVoIQTFIr3lKPN80WvoLSWFPC653ioTZA0I0FrQ7qU6asaK0H7JmkSJa2ooOGVtNUsc3j9FYHkIkJy3SG6VHnfXKXGP9t4N9Q4Ye98AAAAAElFTkSuQmCC",
  17538. base64SuccessWhite: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAGFBMVEVHcEz///////////////////////////8dS1W+AAAAB3RSTlMAiVYk6KvDHLfaegAAAo1JREFUWMPtWEtzmzAQNhCTq910ytXpiyvxTNOr60zrayepx9d02gnX4sTm7xcEiJX2gdnkGJ1A4tOnfWqXyeR1vMRYzrcPD9v5h5MBl3/Ldvx4cxIg/FWC8X0xjLjalM54uhhCfCrRuJURX0pi3EmIqZV7O59vrRZmguStHL9b7S7ftfLwOtiZDw7AHMtmquAQ12b5Wwbnordm8g9zLLO49qc/m2n6aKnhwPOGZ08hAiNHhheiHae1lOUPGZpQkPKa3q0mOUjaRzSRaGUjpy/mmWSwySSpllcEteBKAT52KEnSbblA51pJEPxBQoiH1FP4E3s5+FJv07h6/ylD6ui7B+9fq/ehrFB98ghec9EoVtyjK8pqCHLmCBOwMWSCeWFNN4MbPAk55NhsvoFHSSVR0k5TCTTEzlUGcqV/nVp7n9oIVkmtaqbAEqEgfdgHJPwsEAyZ9r4VAZXFjpEwyaw3+H2v42KYxKhs1XvY/gSSGv+IHyUSuHXCeZhLAgVI3EjgSGo1Fb3xO0tGGU9S2/KAIbtjxpJASG73qox6w5LUq0cEOa+iIONIWIilQSQ0pPa2jgaRQAgQP7c0mITRWGxpMAmEQFN2NAQJNCV0mI6GIIEO47hlQ0ORQLd0nL+hoUjg1m6I1TRr8uYEAriBHLcVFQ5UEMiBe3XkTBEG04WXlGKGxPnMS305XQPA1Ocn2JiuAZwE66fxnKwBnDTuXxZTMq85lwW6kt5ndLqZPefiU1yvmktcUSooChJF2aMprhQlnKJQ5FxRKkcVRa+itNYU8Io2oVkY14w0NMWYlqft91Bj9VHq+ca3b43BxjWJmla0sfKohlfTVpPN+93L/yLQ/IjQ/O5Q/VR5HdL4D7mlxmjwVdELAAAAAElFTkSuQmCC",
  17539. base64Empty: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAMAAAAL34HQAAALeGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTAyLTIyVDIxOjIxOjQ1KzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTAxLTEzVDE5OjA5OjQwKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNC0wMS0xM1QxOTowOTo0MCswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZWQwMWYzNWQtOWRjOC00MDBiLWEyMmQtNjM5OGZiNzVhNGRiIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZDhlMzQ3ZmEtMDY2My1jYTRiLTgzNTctNTk4YjBkNGIzOTU2IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZDA4MDI4MDItMzUyYS04NTRhLTkxYjctNmRlNmQ1MmViM2QwIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjMwMDAwMDAvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjMwMDAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjMwMCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjMwMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZDA4MDI4MDItMzUyYS04NTRhLTkxYjctNmRlNmQ1MmViM2QwIiBzdEV2dDp3aGVuPSIyMDIyLTAyLTIyVDIxOjIxOjQ1KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQwNjg2NzJkLWY5NDMtOTU0Mi1iMDBiLTVlMDExNmE1NmIzZSIgc3RFdnQ6d2hlbj0iMjAyNC0wMS0xM1QxMDoyNjoxNiswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphYmJkZmUyZC0xY2Q2LTJiNDgtYjUyNS05YzlhZjdlNjA4NDMiIHN0RXZ0OndoZW49IjIwMjQtMDEtMTNUMTE6MjM6NDArMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YTQ5MjM5MDAtNDhiZC03YTQ1LWI4NGItYmVlZTVjOWUxYTM1IiBzdEV2dDp3aGVuPSIyMDI0LTAxLTEzVDExOjIzOjQwKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmVkMDFmMzVkLTlkYzgtNDAwYi1hMjJkLTYzOThmYjc1YTRkYiIgc3RFdnQ6d2hlbj0iMjAyNC0wMS0xM1QxOTowOTo0MCswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmFiYmRmZTJkLTFjZDYtMmI0OC1iNTI1LTljOWFmN2U2MDg0MyIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjM2ZGQ4NTQxLWQ0MWEtYmY0Yy1iZjA3LWNmNjZhNjZhMDg2MSIgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmQwODAyODAyLTM1MmEtODU0YS05MWI3LTZkZTZkNTJlYjNkMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pm30U/gAAAAJcEhZcwAALiMAAC4jAXilP3YAAAA/UExURUdwTODg4O3t7e7u7unp6d7e3uTk5M/Pz8nJyePj4+jo6Pj4+MrKyszMzO7u7unp6fb29vLy8vr6+v7+/sHBweag3xAAAAAOdFJOUwAxia5pF0n+/vzX3KbULQ2DYQAACG1JREFUeNrtm4l2o7gShi20IWFrAd7/WUc7EosDWKZ976Hc7WTmdMKXv0qlqpLyeNx222233Xbbbbfddtv/mOHn8xexSNsiRH5PrbFtW4p+DetpsF4v8Gs+HA3WEwOAfwzriYxaLTVsP8X1QK0z+vqQCzewYogi60aL9SEX5oyxphYVCFTGjfSJCTmN1jBruN5KTGCUS8bhySQGHRaohmW4glwtldbOeYJYKlgvbyUuA8aFFEKc++aIM4hrRnyiMnIZKq1PrihcM3GNKboMF1Naa9X9+8T1KrxIlVbGjv3cAEHOYYMqqgUsVuJqqehV3+sjDwB+DTJp0lYtMCyZpxqjF4e+74+sRcQSFZO8UonUSEFzuUY+DKo59A2kZDatGCjzCauy/2AmhSyCq0WHEj0KTNJDmVeNhErMt1Q8W4xti4/FwMJ4jaxl05TKFiNtD3kBGrHnhiph9V0eXQc6DkyE2xX830AlKshFTErXeuCZXK/9m41wFsGSfZ4lcGeyZ98PrylJ7MWCojQZ3qSukL2QslgdngqJnTEPdTJhXvbNBoR/+7wabIxWduN/Ja5dWEivm4XSZ2uQckNzmRlHrn2lc6eiafvS4V2Hd12tesau8toZW0CtWoZYb9t+OqxdCYKYjVPF16pVbILIy/gR7MVaWMHYPCoa2VkzkX4Iry2rirXbumGyAjGC1h62YLw6ApsNKZph3fpIWHt08JovRWD62sejpXhTrhWrPpl6zZ6PW2oTG5ltlvgtF6weNYCWKeJJSfg4W6PNJlj3sVZgOXV4lc8n4RlkMTLEBDVoYc3nI09kpyzzfgWsjyzBZSNDKF2/wjh+sxYvn8Y1scxlfLF9T1RBO3wVHsnq8Fk4oGkEh/0KJPSa8T2CeWE5X9BPmgLsaRIGeNL2kshCsWoLBmdPJW5Wbz1ndAKUXjPwxXYAUpSV3fy5BJg1aa1tyVXHHMgVH31ewDVrleHr9XqC684SUF4mecR3+wW5SC2QNvxUizRv98mLDhPgYiMDb+v8g0OADxqxcnf9w01mZYJF0fUVP5LcdswbsMmy1DVs5PlE5NpNiTR8M8qAWZkOy6aN13VcoOF2/s3xn3Mes8Xza05tgR/BuNz69nlNzMR0fH45p+G4R9oxh2mKt9MF4J7K/lvWUojwF5nCgCpuRUptnZMQ3au0nSo2UsHgV3xpmeLYzGml3ZFBBzYGPCpOQRwXs1/GG1J74dlZc6JKUOtjBAz9XjVxucGWHbZVJDPJQGYDRl1Qmf1ovk2Sbghb6MQlnF7mBzM1bgOqJAPpoOQaVe+4Skcit3uqHMyG/Sh1rHNN0gAfM0nnPrmulfLVBSm20TSZSdWa0LJl2ukVyE4vTYCgP3uQkwv1TKtQWgxDzBSg80OQjCs4klKvuUzHLCfIbDKIE/S5VIGqD1iD2819pkAqTWdmeina+oZABi7X5B1MGoTJqJSchuk6JNHcgUPAcsVFk0+N0oDN68Vo7FQSmCXjx46OEtUk1lpY2ZFQGr/AcpqVato4wPUD+RhfAeyQI5sJ6l2sDwnKqNFSJvpiyJbFl3kTOjZ2ievwCR7hkUoWeV2vOLAXvB39AJoyqYa81A5cvaAidXYTFTycKDBcalVK5f3XS89kzLVl9txfL+K+p6NUnitz5KkKm7D3DrRPNq4bk7l20aFRppNilmuQI+uzTtj9wPBkTsVwM7HbJ5pwGgujyRyZDzQLNoiRFluRtQ+GzEguqRxUL+ZMFqulMzIfaP3ARj2k/txB8c+2HyjmDizCaVWtNoE5MvMlKs/4VQ7HUJZCrU6qCKcNJ2aSWUZhJZu4VI0LB4CHFdj77DRuGi28WKAxoRyZyzGVrmc0jmk1nP5QaxZo1puqq1YIAqgZb8e/rABZJWNCNxV7DSTpOO7Aail9J9nYHtua/4ouE/aS0X1qtXQzwGx+rnbi2vhF/TfZG52oc6DPo1WCi3RTDnRk7TEntoEp38gg+DjYs2opkR3JW5EpL9rU0XSK5/6LOTAVS+72x7pm60zSf5HMdldjhzJqw1FRcxXdS3ZNZp0s92FiyluUvBPoD9ynZNkBiu2NF11ofnlnQbZgKqvusj9R/f6DOzgVsahbNlXxlsxU8y7qrbTupitRyxFBKG6H3aEPUqj7YrzAymq41FXlZLlO4WLbvG2Kg4vYB+wPfWS2B5Rq8TW9ROpAZbiF6MmCTsx1NLLsx7NOoOiZup2CNbZ36xc96ErcxzuILGrmmFhimjtwKo/yTm7feTVwB61IzbnW4967Kt3cDDotGt8JKrTiUyO3Uy2PZZt9tapXEfXhWmTgcoB+JchFWsiCKvYnhmn/tKuJDbgly897FnFfkE1rQLKy810OU7xW3bEJHCD5gERtuTGuxoJqA6qI9TNMa6MbvZomsiubbPYx78YXDaaRqqsyqfSaLZdjYGHLu65rDgydXCWm1P5EvcQ828f9pcBapTILSMv1nZCAc0WzFIFsGfUi/kmAxc6cFqDSYuPSMIbs1OVrwITTQM9HVRFJ5JL56qcoFzzT1uVcd2v9jFw8BHlcWtmEI86hp5Dy/zOlK8cUp/rVseRUBqawz6kmAcPLM9l5m8h4V53Iz/2mFJaTCvF8JbsMvPjU/7crbUXart0v4WyE0LnDPcAX95Knj4VUE8HCdNdUP8BDcOXKdPl4uSWbh4LfOV0HDdfipOmu+eIRrDsNPkIT7np/8ZAzVdOd1u8wHIqeXt8VqtgiO50ePeNaGG+uO9rHiKdL71pnIun8jxEKXv2r2HYBzO/mz96vFKoMM5WLk7tQXS9U5kwCu5lk7n6++kdCFWRaTUzm0/5fClWGWTrM/AGhCrJO/ZBQhTPFLwmV7ebgcdttt91222233Xbbbf+H9h+2WEtdHVinLAAAAABJRU5ErkJggg==",
  17540. base64Error: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAMAAAAL34HQAAALeGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTAyLTIyVDIxOjIxOjQ1KzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTAxLTEzVDE5OjEwOjEwKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNC0wMS0xM1QxOToxMDoxMCswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTQ3NTExNjAtZDY5MC00ZTkzLWFhNGUtNGMwYTViNGU1ZGFjIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YzRiNzlkYWMtZTJmYS1iNzQ0LWIxM2ItOWU1N2VjMDhhM2YwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZDA4MDI4MDItMzUyYS04NTRhLTkxYjctNmRlNmQ1MmViM2QwIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjMwMDAwMDAvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjMwMDAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjMwMCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjMwMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZDA4MDI4MDItMzUyYS04NTRhLTkxYjctNmRlNmQ1MmViM2QwIiBzdEV2dDp3aGVuPSIyMDIyLTAyLTIyVDIxOjIxOjQ1KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQwNjg2NzJkLWY5NDMtOTU0Mi1iMDBiLTVlMDExNmE1NmIzZSIgc3RFdnQ6d2hlbj0iMjAyNC0wMS0xM1QxMDoyNjoxNiswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjk1NTE1OC04MjFiLTA4NDUtYWJmNS05YTE1NGM1ZTY4NjEiIHN0RXZ0OndoZW49IjIwMjQtMDEtMTNUMTE6MDQ6MDQrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGM1Y2IyNWItZDZlNC0yZjQ2LTgyODQtZmUwOTNlY2M2ZTkxIiBzdEV2dDp3aGVuPSIyMDI0LTAxLTEzVDExOjA0OjA0KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjE0NzUxMTYwLWQ2OTAtNGU5My1hYTRlLTRjMGE1YjRlNWRhYyIgc3RFdnQ6d2hlbj0iMjAyNC0wMS0xM1QxOToxMDoxMCswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmNmOTU1MTU4LTgyMWItMDg0NS1hYmY1LTlhMTU0YzVlNjg2MSIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjM2ZGQ4NTQxLWQ0MWEtYmY0Yy1iZjA3LWNmNjZhNjZhMDg2MSIgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmQwODAyODAyLTM1MmEtODU0YS05MWI3LTZkZTZkNTJlYjNkMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ph2LDQsAAAAJcEhZcwAACxMAAAsTAQCanBgAAAA5UExURUdwTNra2s7Ozq2tre3t7dPT087OzuPj4+3t7dbW1u/v79bW1vz8/MrKytDQ0Nzc3MPDw/X19bi4uMZQDnEAAAAKdFJOUwBqEPywotz+wzqApqiTAAAHW0lEQVR42u1b25akIAwcbx2UFoj//7HLTQVBRcSZfTDnbM/uTl/KSlEkwf75eeONN95444033njjjTduR9/0/yOsbqoevObL7101tYX1HFs9QFtfZalRP+rpQVgdAFx990ZnT8L6eZItUl99jeGpf1DxdV/VP9fV1f/PFlF1bYHoVFSRC60IyVjrFRnuB8IoxpExSrstsErKHpJw1eqybNLbAQvAYkKjUrjoBgKRqAaeIjG5+qaps6hKcMWmcdSwqAJWBbAgCZZaIYbsqggqqlHNbFFa5yVR4jKvrKEErOEjNCqNSwHrfE8lpLsod/u+cOPPMPBJ+Gz5dM0cXNgclre+pSxhYI1WW5Tf9ENSMIdLCiWs6q9hwQprBVYKFqyPlx4WtoSvrT9lC/wkGt8qlkQooC3hi6sgW3Bb8gtdpSV/za/mn49pC0oYhONbfyd5hzDLFivKFpTS1gKM0we0tQCEncfgQn7Rt+DC/299i1MSRJcBC0r7VviG5KZvwV5WIUobxHyrJKy8VRjXVgFYsPu5kOtbxdhycCDuihziXVLoW7xwEiUmDgd544B46luWLW+nugMLB2BimmC3cxTNxCDg8xFtuUSNqoFsDKzY8psa+XtBNWXr74N6qxwsS5T6VL5robKl10+ZRu5S9qBvUYuJwVHzjwjrE3G33qKh+WXBgmkmCvHYquTvZ8oo7rLFA4PJgYW0MdePIRQIGUPNbSMw5lubJMKtJI6+Wk6cVFMmACO+VVryeL7ZgI8MhwS2fnNPPK0geHBRd11eJSiyL4KjrL2umm1XIpRii1MKB/mU/iCZwF+pt5z3UJ7UiF3nQqadAXC3T3xEW2IyuDBe3yDTe0+A64it2WTyYSGVHymUI/EduvSWKJ80Dtv2NbYSoQxbMkVC7yzNGIWFvDF7gRD79RYrWW/BDGti4wwLtgvO7gWKUZ8Mt94qX8vLJE70+xVNwzDm9ghNM+FX7p/jlZUId2HJD+Tf79hMe3WNrAK/30E+C8/6xOCqbqxE5JNMYrNbnaLUvJAewfCg8zF0Ba/tbviWLvPYfsGFA1PVD8ZdnjlVc/DS/o7LK4NHjOjKKbfCTSCo5XmwKbaZM4jlc9NGEYd9Ijd0QS5ZGaOR2O+DPlGyRb2nXZzgnI1GdFWF+0gh3ifyTRqvzpXI2eElk58FeHziCF5hY+hSMV9Ge/mohUTGuQ4vzHYe8bW5sNdFQ58St22Vcf5zzJbtcGT4iYQ7iz8dFuxoWRYMjAM7KCnypHOTLSqdUwYIFpndOD/6B2FBzNQxYmW/zxYE4j8yLHga1s2Rbm/O5PXtGcuNDIW1dTj5hpjGsO+7z2Kk9NP1JWDlnWKAM4H6zCUNM05KyVPHBclYzUbgjE3N3tP2JWHBmbqD4GLeCs2jhMT13lMVljwcEbetwZgtHUxVQ21ho3fE7inf2s8vzMWq0EWpfOBg5hcDSGwaF2+LaysRIzNFqRgBv2sMhi/Ix0WiW8rBKNBv4ExBI7eorx9ANazsPCb5FkSNH+Reacos+AYxaFzX76KMH65c8ytzZ40YvpFAqtgC/otn1eCmMI5K8yVRQVVwq3aVtU+jJktwjyP7x+BKv8vtoH098vXYSJcrWGJcAW11r8WVRxe5vgcuFbXqwnaEZejS6mrLwYKUg1ch2RJswTFYgMOwoau+AQsSp/FuDhVZi7J402ifgGla/GJIzGLYG5H4rnKMCUydL9wcsmZSuPikR2QmjQbWqaV2ob2RdMvaLEvFlRiXpYeTwqVOtMZF+qi0dS4uEjJKMvWuYK3S0jHZwaq7BylYp/O2uu3q04lNqudLWEJQd/3paTBz12IaLIPtzE5P1AUuW9TB8NVzaG9/TIfV+eXsWeezz6HWlptEbo4SIAeWur/Y/RZC/gmZTiLzUY2j5ct6fjKsFvxqgyQxE9sbmfYtnJMIciEKo6+FL0wziJmtkzspIcUl0PgWrL7VCKP7hl61U4WLeN+7Ieli2vZhmq0VgjDOgIyhJ62sSpDkWNZa1wiB8WoLlxzy29XpGVPgn1ut5VYcGyRLK7OCiJaDYMrAneJUkZWdw0yDgNm5nDowqLc0Kp581FO7QS4pC9S/YRW9xkVdNOj0ZHCp9anEZw3VEK/fopiDrkMObkcdJtT1g6+uzQ60bIdUPztdWZWy53m+v/zFYPOGHO4AZsalmtJNkyHrCAx1RXX7mt5g1L1pDezpkXv8wJwpVRSSaf2c26Y0rrXXxyWBptu/ovdak+VhkqjGBZUdvKygqANKA/MqZ/36kcGwFn90RnWp66ksKuHgitLFY8BU+F2ZvqpxpMY9qR3YwOUJ12fc0KUHVKdswcKXuwetErCnwvMKuXxfc/3RVJ2yFc+iosQd3X+WGSVz1UiuN2J156FyVyHbsOUp3krezaPUT/VxXqdfwvknb/Zgp+idTxTbrkLqYuKreRnhy65Gf4W0NsDoYiqf6uZsvr8V9eo6XWc5+3TVf/3N1TfeeOONN95444033njjjTfeSI1/IeOYOeO4fGAAAAAASUVORK5CYII=",
  17541. base64BackToTop: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADIBAMAAABfdrOtAAAAElBMVEVRUVH+/v5HcEyZmZlRUVFRUVGm1ByOAAAABnRSTlPMzADMTZAJBBGsAAAEnElEQVR42t2cS27jMAyGf7/2U+QCQeDsbeQCgZDujaC5/1UmkzaJn+JDFGcw3LdfflKibJkkDnxrL7dbg7sNt6+L4O8OYBM+B0ys+QrGkHZG+OEEQ8g6go8Bx1GIGMdpNOQyIG6XdMgnSPtKhLQDGEZFBgYMkhKFtGBb0EIEjDgFRowoBVaMGAWpMedEfxMiZtwpUsgZCqtlkCNUdpVAWigtCCCDFtLwIWeoreZCWiRYYEKGFEjDg+yRZCUH0iLRAgNyToXUNCRZyMqWhGnUN2IPm3wSlwJ7IUspyCBkIQUZhCykIIeQuRTkEDKXAuM9srrtYbrZN7Y98giZSoFd+t1OxmMITG0dcrSFXFchZ1tIvQZpYWxhBbK3hpQrkMEa0iwh5t4a+QvZvDXyF7J5a+Qv5PPW21/I5623v5DPW29/IaO3Xv5Clrw1y1/Ikrdm+Qs5svw83yNnSJ5BQb4F/F7EIEJSnThGBAXxkFQfLOviQUE8JAUPsosHBfGQfDAtHhREQ1JxIV00KIgmrnRI84S0yAd5BAXxxJUck0f6Qnwr9qmr6xF5xLMjcwn/iudIEAdWnyjkEXlQKZiRVzoqRyLbgeUKKR8Q4alY7cSnoxzSf2ggsqehKr6YVpcXpOd7H93f60cKhOd7Re2LteUF4eLqiVS1mr0ge4io6C2+soaFkJ7MuuuQs1yITEp9hwwKISIpzR2iESKSIoT0rLNwuVHQqoSIpAQJpGce60vIUSdEIuUqgPTsJ5QFZK8UIpBS8iG94GFrDjlrhfCl8CG96Llxmle4kEr6vKWBPIVo9kqDQSRk9/3cWoikcCFPAd33v4dIChPyEvLzBA6RlEYWke4JEUnhKXkLeUEKxRHJFfKCQHGucIW8IdZSRkLeEGMpYyEjiK2UsZARxFTKRMgYYillImQMMZQyFTKB2EmZCplAuFLIHT8TMoWwpQwiIVMIUwqpZP5bp5CCvCTiQKr5f5lCQN+tPCBn2ZvVDFJwIDUP0m1BYAfZYRNSsCB7BqTbhoARePIxtZ9tgwWkoJcwCalmv3MBAemtO4R6dah2HaKQqj8Zvp9sQDjvJ21+SPCBHPJDDk6QITekEV7gqCC19CpKAym9IMfckKv4olMBCeIrWwVEfvkshzQekO9r9P1/ALk+IG1eSPCDiCJfyG+FyU+A6ZCa/piZDinpz7LpkCv5gdkAEshP5emQhv7onw6pGeULyZCSUYiRDAmMkpJkCKs4JhFSq8p8hJBSVbAkhARV6ZUQoisik0FqXTmcDHLVFfbJIEFXoiiCNMpiSxGkVJaNiiBBWQArgTTaUl4JpNQWJUsgQVteXQg+AKkLxQWFGKW+5J2+eVp4S168X3CF1CltCKdTJ8lb84YK2bUBO+wZW0Pqv9nk4tKu49N45NJC5dMM5tLW5tOg59Jq6NM06dL+abFXwr/RkuvTXJwae1abtE/Dt0/ruksTvs84AZ/BCC4jHnyGVfiM3VBQFANEXEah+Ax18RlP4zNox2dkkM/wI58xTn8yDCXGYCDV3W5RGSajtXyGhG1jbpbjzpwGt/0MJft8jqC7iUbQ/QZaxdnKqcIftwAAAABJRU5ErkJggg=="
  17542. };
  17543. const _sfc_main$19 = {
  17544. name: "z-paging-empty-view",
  17545. data() {
  17546. return {};
  17547. },
  17548. props: {
  17549. // 空数据描述文字
  17550. emptyViewText: {
  17551. type: String,
  17552. default: "没有数据哦~"
  17553. },
  17554. // 空数据图片
  17555. emptyViewImg: {
  17556. type: String,
  17557. default: ""
  17558. },
  17559. // 是否显示空数据图重新加载按钮
  17560. showEmptyViewReload: {
  17561. type: Boolean,
  17562. default: false
  17563. },
  17564. // 空数据点击重新加载文字
  17565. emptyViewReloadText: {
  17566. type: String,
  17567. default: "重新加载"
  17568. },
  17569. // 是否是加载失败
  17570. isLoadFailed: {
  17571. type: Boolean,
  17572. default: false
  17573. },
  17574. // 空数据图样式
  17575. emptyViewStyle: {
  17576. type: Object,
  17577. default: function() {
  17578. return {};
  17579. }
  17580. },
  17581. // 空数据图img样式
  17582. emptyViewImgStyle: {
  17583. type: Object,
  17584. default: function() {
  17585. return {};
  17586. }
  17587. },
  17588. // 空数据图描述文字样式
  17589. emptyViewTitleStyle: {
  17590. type: Object,
  17591. default: function() {
  17592. return {};
  17593. }
  17594. },
  17595. // 空数据图重新加载按钮样式
  17596. emptyViewReloadStyle: {
  17597. type: Object,
  17598. default: function() {
  17599. return {};
  17600. }
  17601. },
  17602. // 空数据图z-index
  17603. emptyViewZIndex: {
  17604. type: Number,
  17605. default: 9
  17606. },
  17607. // 空数据图片是否使用fixed布局并铺满z-paging
  17608. emptyViewFixed: {
  17609. type: Boolean,
  17610. default: true
  17611. },
  17612. // 空数据图中布局的单位,默认为rpx
  17613. unit: {
  17614. type: String,
  17615. default: "rpx"
  17616. }
  17617. },
  17618. computed: {
  17619. emptyImg() {
  17620. return this.isLoadFailed ? zStatic.base64Error : zStatic.base64Empty;
  17621. },
  17622. finalEmptyViewStyle() {
  17623. this.emptyViewStyle["z-index"] = this.emptyViewZIndex;
  17624. return this.emptyViewStyle;
  17625. }
  17626. },
  17627. methods: {
  17628. // 点击了reload按钮
  17629. reloadClick() {
  17630. this.$emit("reload");
  17631. },
  17632. // 点击了空数据view
  17633. emptyViewClick() {
  17634. this.$emit("viewClick");
  17635. }
  17636. }
  17637. };
  17638. function _sfc_render$18(_ctx, _cache, $props, $setup, $data, $options) {
  17639. return vue.openBlock(), vue.createElementBlock(
  17640. "view",
  17641. {
  17642. class: vue.normalizeClass({ "zp-container": true, "zp-container-fixed": $props.emptyViewFixed }),
  17643. style: vue.normalizeStyle([$options.finalEmptyViewStyle]),
  17644. onClick: _cache[1] || (_cache[1] = (...args) => $options.emptyViewClick && $options.emptyViewClick(...args))
  17645. },
  17646. [
  17647. vue.createElementVNode("view", { class: "zp-main" }, [
  17648. !$props.emptyViewImg.length ? (vue.openBlock(), vue.createElementBlock("image", {
  17649. key: 0,
  17650. class: vue.normalizeClass({ "zp-main-image-rpx": $props.unit === "rpx", "zp-main-image-px": $props.unit === "px" }),
  17651. style: vue.normalizeStyle([$props.emptyViewImgStyle]),
  17652. src: $options.emptyImg
  17653. }, null, 14, ["src"])) : (vue.openBlock(), vue.createElementBlock("image", {
  17654. key: 1,
  17655. class: vue.normalizeClass({ "zp-main-image-rpx": $props.unit === "rpx", "zp-main-image-px": $props.unit === "px" }),
  17656. mode: "aspectFit",
  17657. style: vue.normalizeStyle([$props.emptyViewImgStyle]),
  17658. src: $props.emptyViewImg
  17659. }, null, 14, ["src"])),
  17660. vue.createElementVNode(
  17661. "text",
  17662. {
  17663. class: vue.normalizeClass(["zp-main-title", { "zp-main-title-rpx": $props.unit === "rpx", "zp-main-title-px": $props.unit === "px" }]),
  17664. style: vue.normalizeStyle([$props.emptyViewTitleStyle])
  17665. },
  17666. vue.toDisplayString($props.emptyViewText),
  17667. 7
  17668. /* TEXT, CLASS, STYLE */
  17669. ),
  17670. $props.showEmptyViewReload ? (vue.openBlock(), vue.createElementBlock(
  17671. "text",
  17672. {
  17673. key: 2,
  17674. class: vue.normalizeClass({ "zp-main-error-btn": true, "zp-main-error-btn-rpx": $props.unit === "rpx", "zp-main-error-btn-px": $props.unit === "px" }),
  17675. style: vue.normalizeStyle([$props.emptyViewReloadStyle]),
  17676. onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.reloadClick && $options.reloadClick(...args), ["stop"]))
  17677. },
  17678. vue.toDisplayString($props.emptyViewReloadText),
  17679. 7
  17680. /* TEXT, CLASS, STYLE */
  17681. )) : vue.createCommentVNode("v-if", true)
  17682. ])
  17683. ],
  17684. 6
  17685. /* CLASS, STYLE */
  17686. );
  17687. }
  17688. const __easycom_0$2 = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["render", _sfc_render$18], ["__scopeId", "data-v-b55bdf15"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/z-paging/components/z-paging-empty-view/z-paging-empty-view.vue"]]);
  17689. const c = {
  17690. // 当前版本号
  17691. version: "2.8.6",
  17692. // 延迟操作的通用时间
  17693. delayTime: 100,
  17694. // 请求失败时候全局emit使用的key
  17695. errorUpdateKey: "z-paging-error-emit",
  17696. // 全局emit complete的key
  17697. completeUpdateKey: "z-paging-complete-emit",
  17698. // z-paging缓存的前缀key
  17699. cachePrefixKey: "z-paging-cache",
  17700. // 虚拟列表中列表index的key
  17701. listCellIndexKey: "zp_index",
  17702. // 虚拟列表中列表的唯一key
  17703. listCellIndexUniqueKey: "zp_unique_index"
  17704. };
  17705. const zLocalConfig = {};
  17706. const storageKey = "Z-PAGING-REFRESHER-TIME-STORAGE-KEY";
  17707. let config$1 = null;
  17708. let configLoaded = false;
  17709. let cachedSystemInfo = null;
  17710. const timeoutMap = {};
  17711. function gc(key, defaultValue) {
  17712. return () => {
  17713. _handleDefaultConfig();
  17714. if (!config$1)
  17715. return defaultValue;
  17716. const value = config$1[key];
  17717. return value === void 0 ? defaultValue : value;
  17718. };
  17719. }
  17720. function getTouch(e) {
  17721. let touch = null;
  17722. if (e.touches && e.touches.length) {
  17723. touch = e.touches[0];
  17724. } else if (e.changedTouches && e.changedTouches.length) {
  17725. touch = e.changedTouches[0];
  17726. } else if (e.datail && e.datail != {}) {
  17727. touch = e.datail;
  17728. } else {
  17729. return { touchX: 0, touchY: 0 };
  17730. }
  17731. return {
  17732. touchX: touch.clientX,
  17733. touchY: touch.clientY
  17734. };
  17735. }
  17736. function getTouchFromZPaging(target) {
  17737. if (target && target.tagName && target.tagName !== "BODY" && target.tagName !== "UNI-PAGE-BODY") {
  17738. const classList = target.classList;
  17739. if (classList && classList.contains("z-paging-content")) {
  17740. return {
  17741. isFromZp: true,
  17742. isPageScroll: classList.contains("z-paging-content-page"),
  17743. isReachedTop: classList.contains("z-paging-reached-top"),
  17744. isUseChatRecordMode: classList.contains("z-paging-use-chat-record-mode")
  17745. };
  17746. } else {
  17747. return getTouchFromZPaging(target.parentNode);
  17748. }
  17749. } else {
  17750. return { isFromZp: false };
  17751. }
  17752. }
  17753. function getParent(parent) {
  17754. if (!parent)
  17755. return null;
  17756. if (parent.$refs.paging)
  17757. return parent;
  17758. return getParent(parent.$parent);
  17759. }
  17760. function consoleErr(err) {
  17761. console.error(`[z-paging]${err}`);
  17762. }
  17763. function delay(callback, ms = c.delayTime, key) {
  17764. const timeout2 = setTimeout(callback, ms);
  17765. if (!!key) {
  17766. timeoutMap[key] && clearTimeout(timeoutMap[key]);
  17767. timeoutMap[key] = timeout2;
  17768. }
  17769. return timeout2;
  17770. }
  17771. function setRefesrherTime(time, key) {
  17772. const datas = getRefesrherTime() || {};
  17773. datas[key] = time;
  17774. uni.setStorageSync(storageKey, datas);
  17775. }
  17776. function getRefesrherTime() {
  17777. return uni.getStorageSync(storageKey);
  17778. }
  17779. function getRefesrherTimeByKey(key) {
  17780. const datas = getRefesrherTime();
  17781. return datas && datas[key] ? datas[key] : null;
  17782. }
  17783. function getRefesrherFormatTimeByKey(key, textMap) {
  17784. const time = getRefesrherTimeByKey(key);
  17785. const timeText = time ? _timeFormat(time, textMap) : textMap.none;
  17786. return `${textMap.title}${timeText}`;
  17787. }
  17788. function convertToPx(text) {
  17789. const dataType = Object.prototype.toString.call(text);
  17790. if (dataType === "[object Number]")
  17791. return text;
  17792. let isRpx = false;
  17793. if (text.indexOf("rpx") !== -1 || text.indexOf("upx") !== -1) {
  17794. text = text.replace("rpx", "").replace("upx", "");
  17795. isRpx = true;
  17796. } else if (text.indexOf("px") !== -1) {
  17797. text = text.replace("px", "");
  17798. }
  17799. if (!isNaN(text)) {
  17800. if (isRpx)
  17801. return Number(rpx2px(text));
  17802. return Number(text);
  17803. }
  17804. return 0;
  17805. }
  17806. function rpx2px(rpx) {
  17807. return uni.upx2px(rpx);
  17808. }
  17809. function getSystemInfoSync(useCache = false) {
  17810. if (useCache && cachedSystemInfo) {
  17811. return cachedSystemInfo;
  17812. }
  17813. const infoTypes = ["DeviceInfo", "AppBaseInfo", "WindowInfo"];
  17814. const { deviceInfo, appBaseInfo, windowInfo } = infoTypes.reduce((acc, key) => {
  17815. const method2 = `get${key}`;
  17816. if (uni[method2] && uni.canIUse(method2)) {
  17817. acc[key.charAt(0).toLowerCase() + key.slice(1)] = uni[method2]();
  17818. }
  17819. return acc;
  17820. }, {});
  17821. if (deviceInfo && appBaseInfo && windowInfo) {
  17822. cachedSystemInfo = { ...deviceInfo, ...appBaseInfo, ...windowInfo };
  17823. } else {
  17824. cachedSystemInfo = uni.getSystemInfoSync();
  17825. }
  17826. return cachedSystemInfo;
  17827. }
  17828. function getTime() {
  17829. return (/* @__PURE__ */ new Date()).getTime();
  17830. }
  17831. function getInstanceId() {
  17832. const s = [];
  17833. const hexDigits = "0123456789abcdef";
  17834. for (let i = 0; i < 10; i++) {
  17835. s[i] = hexDigits.substr(Math.floor(Math.random() * 16), 1);
  17836. }
  17837. return s.join("") + getTime();
  17838. }
  17839. function wait(ms) {
  17840. return new Promise((resolve2) => {
  17841. setTimeout(resolve2, ms);
  17842. });
  17843. }
  17844. function isPromise(func2) {
  17845. return Object.prototype.toString.call(func2) === "[object Promise]";
  17846. }
  17847. function addUnit(value, unit) {
  17848. if (Object.prototype.toString.call(value) === "[object String]") {
  17849. let tempValue = value;
  17850. tempValue = tempValue.replace("rpx", "").replace("upx", "").replace("px", "");
  17851. if (value.indexOf("rpx") === -1 && value.indexOf("upx") === -1 && value.indexOf("px") !== -1) {
  17852. tempValue = parseFloat(tempValue) * 2;
  17853. }
  17854. value = tempValue;
  17855. }
  17856. return unit === "rpx" ? value + "rpx" : value / 2 + "px";
  17857. }
  17858. function deepCopy(obj) {
  17859. if (typeof obj !== "object" || obj === null)
  17860. return obj;
  17861. let newObj = Array.isArray(obj) ? [] : {};
  17862. for (let key in obj) {
  17863. if (obj.hasOwnProperty(key)) {
  17864. newObj[key] = deepCopy(obj[key]);
  17865. }
  17866. }
  17867. return newObj;
  17868. }
  17869. function _handleDefaultConfig() {
  17870. if (configLoaded)
  17871. return;
  17872. if (zLocalConfig && Object.keys(zLocalConfig).length) {
  17873. config$1 = zLocalConfig;
  17874. }
  17875. if (!config$1 && uni.$zp) {
  17876. config$1 = uni.$zp.config;
  17877. }
  17878. config$1 = config$1 ? Object.keys(config$1).reduce((result, key) => {
  17879. result[_toCamelCase(key)] = config$1[key];
  17880. return result;
  17881. }, {}) : null;
  17882. configLoaded = true;
  17883. }
  17884. function _timeFormat(time, textMap) {
  17885. const date2 = new Date(time);
  17886. const currentDate = /* @__PURE__ */ new Date();
  17887. const dateDay = new Date(time).setHours(0, 0, 0, 0);
  17888. const currentDateDay = (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0);
  17889. const disTime = dateDay - currentDateDay;
  17890. let dayStr = "";
  17891. const timeStr = _dateTimeFormat(date2);
  17892. if (disTime === 0) {
  17893. dayStr = textMap.today;
  17894. } else if (disTime === -864e5) {
  17895. dayStr = textMap.yesterday;
  17896. } else {
  17897. dayStr = _dateDayFormat(date2, date2.getFullYear() !== currentDate.getFullYear());
  17898. }
  17899. return `${dayStr} ${timeStr}`;
  17900. }
  17901. function _dateDayFormat(date2, showYear = true) {
  17902. const year = date2.getFullYear();
  17903. const month = date2.getMonth() + 1;
  17904. const day = date2.getDate();
  17905. return showYear ? `${year}-${_fullZeroToTwo(month)}-${_fullZeroToTwo(day)}` : `${_fullZeroToTwo(month)}-${_fullZeroToTwo(day)}`;
  17906. }
  17907. function _dateTimeFormat(date2) {
  17908. const hour = date2.getHours();
  17909. const minute = date2.getMinutes();
  17910. return `${_fullZeroToTwo(hour)}:${_fullZeroToTwo(minute)}`;
  17911. }
  17912. function _fullZeroToTwo(str) {
  17913. str = str.toString();
  17914. return str.length === 1 ? "0" + str : str;
  17915. }
  17916. function _toCamelCase(value) {
  17917. return value.replace(/-([a-z])/g, (_, group1) => group1.toUpperCase());
  17918. }
  17919. const u = {
  17920. gc,
  17921. setRefesrherTime,
  17922. getRefesrherFormatTimeByKey,
  17923. getTouch,
  17924. getTouchFromZPaging,
  17925. getParent,
  17926. convertToPx,
  17927. getTime,
  17928. getInstanceId,
  17929. consoleErr,
  17930. delay,
  17931. wait,
  17932. isPromise,
  17933. addUnit,
  17934. deepCopy,
  17935. rpx2px,
  17936. getSystemInfoSync
  17937. };
  17938. const Enum = {
  17939. // 当前加载类型 refresher:下拉刷新 load-more:上拉加载更多
  17940. LoadingType: {
  17941. Refresher: "refresher",
  17942. LoadMore: "load-more"
  17943. },
  17944. // 下拉刷新状态 default:默认状态 release-to-refresh:松手立即刷新 loading:刷新中 complete:刷新结束 go-f2:松手进入二楼
  17945. Refresher: {
  17946. Default: "default",
  17947. ReleaseToRefresh: "release-to-refresh",
  17948. Loading: "loading",
  17949. Complete: "complete",
  17950. GoF2: "go-f2"
  17951. },
  17952. // 底部加载更多状态 default:默认状态 loading:加载中 no-more:没有更多数据 fail:加载失败
  17953. More: {
  17954. Default: "default",
  17955. Loading: "loading",
  17956. NoMore: "no-more",
  17957. Fail: "fail"
  17958. },
  17959. // @query触发来源 user-pull-down:用户主动下拉刷新 reload:通过reload触发 refresh:通过refresh触发 load-more:通过滚动到底部加载更多或点击底部加载更多触发
  17960. QueryFrom: {
  17961. UserPullDown: "user-pull-down",
  17962. Reload: "reload",
  17963. Refresh: "refresh",
  17964. LoadMore: "load-more"
  17965. },
  17966. // 虚拟列表cell高度模式
  17967. CellHeightMode: {
  17968. // 固定高度
  17969. Fixed: "fixed",
  17970. // 动态高度
  17971. Dynamic: "dynamic"
  17972. },
  17973. // 列表缓存模式
  17974. CacheMode: {
  17975. // 默认模式,只会缓存一次
  17976. Default: "default",
  17977. // 总是缓存,每次列表刷新(下拉刷新、调用reload等)都会更新缓存
  17978. Always: "always"
  17979. }
  17980. };
  17981. const _sfc_main$18 = {
  17982. name: "z-paging-refresh",
  17983. data() {
  17984. return {
  17985. R: Enum.Refresher,
  17986. refresherTimeText: "",
  17987. zTheme: {
  17988. title: { white: "#efefef", black: "#555555" },
  17989. arrow: { white: zStatic.base64ArrowWhite, black: zStatic.base64Arrow },
  17990. flower: { white: zStatic.base64FlowerWhite, black: zStatic.base64Flower },
  17991. success: { white: zStatic.base64SuccessWhite, black: zStatic.base64Success },
  17992. indicator: { white: "#eeeeee", black: "#777777" }
  17993. }
  17994. };
  17995. },
  17996. props: [
  17997. "status",
  17998. "defaultThemeStyle",
  17999. "defaultText",
  18000. "pullingText",
  18001. "refreshingText",
  18002. "completeText",
  18003. "goF2Text",
  18004. "defaultImg",
  18005. "pullingImg",
  18006. "refreshingImg",
  18007. "completeImg",
  18008. "refreshingAnimated",
  18009. "showUpdateTime",
  18010. "updateTimeKey",
  18011. "imgStyle",
  18012. "titleStyle",
  18013. "updateTimeStyle",
  18014. "updateTimeTextMap",
  18015. "unit",
  18016. "isIos"
  18017. ],
  18018. computed: {
  18019. ts() {
  18020. return this.defaultThemeStyle;
  18021. },
  18022. // 当前状态Map
  18023. statusTextMap() {
  18024. this.updateTime();
  18025. const { R, defaultText, pullingText, refreshingText, completeText, goF2Text } = this;
  18026. return {
  18027. [R.Default]: defaultText,
  18028. [R.ReleaseToRefresh]: pullingText,
  18029. [R.Loading]: refreshingText,
  18030. [R.Complete]: completeText,
  18031. [R.GoF2]: goF2Text
  18032. };
  18033. },
  18034. // 当前状态文字
  18035. currentTitle() {
  18036. return this.statusTextMap[this.status] || this.defaultText;
  18037. },
  18038. // 左侧图片class
  18039. leftImageClass() {
  18040. const preSizeClass = `zp-r-left-image-pre-size-${this.unit}`;
  18041. if (this.status === this.R.Complete)
  18042. return preSizeClass;
  18043. return `zp-r-left-image ${preSizeClass} ${this.status === this.R.Default ? "zp-r-arrow-down" : "zp-r-arrow-top"}`;
  18044. },
  18045. // 左侧图片style
  18046. leftImageStyle() {
  18047. const showUpdateTime = this.showUpdateTime;
  18048. const size = showUpdateTime ? u.addUnit(36, this.unit) : u.addUnit(34, this.unit);
  18049. return { width: size, height: size, "margin-right": showUpdateTime ? u.addUnit(20, this.unit) : u.addUnit(9, this.unit) };
  18050. },
  18051. // 左侧图片src
  18052. leftImageSrc() {
  18053. const R = this.R;
  18054. const status = this.status;
  18055. if (status === R.Default) {
  18056. if (!!this.defaultImg)
  18057. return this.defaultImg;
  18058. return this.zTheme.arrow[this.ts];
  18059. } else if (status === R.ReleaseToRefresh) {
  18060. if (!!this.pullingImg)
  18061. return this.pullingImg;
  18062. if (!!this.defaultImg)
  18063. return this.defaultImg;
  18064. return this.zTheme.arrow[this.ts];
  18065. } else if (status === R.Loading) {
  18066. if (!!this.refreshingImg)
  18067. return this.refreshingImg;
  18068. return this.zTheme.flower[this.ts];
  18069. } else if (status === R.Complete) {
  18070. if (!!this.completeImg)
  18071. return this.completeImg;
  18072. return this.zTheme.success[this.ts];
  18073. } else if (status === R.GoF2) {
  18074. return this.zTheme.arrow[this.ts];
  18075. }
  18076. return "";
  18077. },
  18078. // 右侧文字style
  18079. rightTextStyle() {
  18080. let stl = {};
  18081. stl["color"] = this.zTheme.title[this.ts];
  18082. stl["font-size"] = u.addUnit(30, this.unit);
  18083. return stl;
  18084. }
  18085. },
  18086. methods: {
  18087. // 添加单位
  18088. addUnit(value, unit) {
  18089. return u.addUnit(value, unit);
  18090. },
  18091. // 更新下拉刷新时间
  18092. updateTime() {
  18093. if (this.showUpdateTime) {
  18094. this.refresherTimeText = u.getRefesrherFormatTimeByKey(this.updateTimeKey, this.updateTimeTextMap);
  18095. }
  18096. }
  18097. }
  18098. };
  18099. function _sfc_render$17(_ctx, _cache, $props, $setup, $data, $options) {
  18100. return vue.openBlock(), vue.createElementBlock("view", { style: { "height": "100%" } }, [
  18101. vue.createElementVNode(
  18102. "view",
  18103. {
  18104. class: vue.normalizeClass($props.showUpdateTime ? "zp-r-container zp-r-container-padding" : "zp-r-container")
  18105. },
  18106. [
  18107. vue.createElementVNode("view", { class: "zp-r-left" }, [
  18108. vue.createCommentVNode(" 非加载中(继续下拉刷新、松手立即刷新状态图片) "),
  18109. $props.status !== $data.R.Loading ? (vue.openBlock(), vue.createElementBlock("image", {
  18110. key: 0,
  18111. class: vue.normalizeClass($options.leftImageClass),
  18112. style: vue.normalizeStyle([$options.leftImageStyle, $props.imgStyle]),
  18113. src: $options.leftImageSrc
  18114. }, null, 14, ["src"])) : (vue.openBlock(), vue.createElementBlock(
  18115. vue.Fragment,
  18116. { key: 1 },
  18117. [
  18118. vue.createCommentVNode(" 加载状态图片 "),
  18119. vue.createElementVNode("image", {
  18120. class: vue.normalizeClass({ "zp-line-loading-image": $props.refreshingAnimated, "zp-r-left-image": true, "zp-r-left-image-pre-size-rpx": $props.unit === "rpx", "zp-r-left-image-pre-size-px": $props.unit === "px" }),
  18121. style: vue.normalizeStyle([$options.leftImageStyle, $props.imgStyle]),
  18122. src: $options.leftImageSrc
  18123. }, null, 14, ["src"])
  18124. ],
  18125. 2112
  18126. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  18127. )),
  18128. vue.createCommentVNode(" 在nvue中,加载状态loading使用系统loading ")
  18129. ]),
  18130. vue.createCommentVNode(" 右侧文字内容 "),
  18131. vue.createElementVNode("view", { class: "zp-r-right" }, [
  18132. vue.createCommentVNode(" 右侧下拉刷新状态文字 "),
  18133. vue.createElementVNode(
  18134. "text",
  18135. {
  18136. class: "zp-r-right-text",
  18137. style: vue.normalizeStyle([$options.rightTextStyle, $props.titleStyle])
  18138. },
  18139. vue.toDisplayString($options.currentTitle),
  18140. 5
  18141. /* TEXT, STYLE */
  18142. ),
  18143. vue.createCommentVNode(" 右侧下拉刷新时间文字 "),
  18144. $props.showUpdateTime && $data.refresherTimeText.length ? (vue.openBlock(), vue.createElementBlock(
  18145. "text",
  18146. {
  18147. key: 0,
  18148. class: vue.normalizeClass(["zp-r-right-text", { "zp-r-right-time-text-rpx": $props.unit === "rpx", "zp-r-right-time-text-px": $props.unit === "px" }]),
  18149. style: vue.normalizeStyle([{ color: $data.zTheme.title[$options.ts] }, $props.updateTimeStyle])
  18150. },
  18151. vue.toDisplayString($data.refresherTimeText),
  18152. 7
  18153. /* TEXT, CLASS, STYLE */
  18154. )) : vue.createCommentVNode("v-if", true)
  18155. ])
  18156. ],
  18157. 2
  18158. /* CLASS */
  18159. )
  18160. ]);
  18161. }
  18162. const zPagingRefresh = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["render", _sfc_render$17], ["__scopeId", "data-v-fff6d205"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/z-paging/components/z-paging/components/z-paging-refresh.vue"]]);
  18163. const _sfc_main$17 = {
  18164. name: "z-paging-load-more",
  18165. data() {
  18166. return {
  18167. M: Enum.More,
  18168. zTheme: {
  18169. title: { white: "#efefef", black: "#a4a4a4" },
  18170. line: { white: "#efefef", black: "#eeeeee" },
  18171. circleBorder: { white: "#aaaaaa", black: "#c8c8c8" },
  18172. circleBorderTop: { white: "#ffffff", black: "#444444" },
  18173. flower: { white: zStatic.base64FlowerWhite, black: zStatic.base64Flower },
  18174. indicator: { white: "#eeeeee", black: "#777777" }
  18175. }
  18176. };
  18177. },
  18178. props: ["zConfig"],
  18179. computed: {
  18180. ts() {
  18181. return this.c.defaultThemeStyle;
  18182. },
  18183. // 底部加载更多配置
  18184. c() {
  18185. return this.zConfig || {};
  18186. },
  18187. // 底部加载更多文字
  18188. ownLoadingMoreText() {
  18189. return {
  18190. [this.M.Default]: this.c.defaultText,
  18191. [this.M.Loading]: this.c.loadingText,
  18192. [this.M.NoMore]: this.c.noMoreText,
  18193. [this.M.Fail]: this.c.failText
  18194. }[this.finalStatus];
  18195. },
  18196. // 底部加载更多状态
  18197. finalStatus() {
  18198. if (this.c.defaultAsLoading && this.c.status === this.M.Default)
  18199. return this.M.Loading;
  18200. return this.c.status;
  18201. },
  18202. // 加载更多icon类型
  18203. finalLoadingIconType() {
  18204. return this.c.loadingIconType;
  18205. }
  18206. },
  18207. methods: {
  18208. // 点击了加载更多
  18209. doClick() {
  18210. this.$emit("doClick");
  18211. }
  18212. }
  18213. };
  18214. function _sfc_render$16(_ctx, _cache, $props, $setup, $data, $options) {
  18215. return vue.openBlock(), vue.createElementBlock(
  18216. "view",
  18217. {
  18218. class: vue.normalizeClass(["zp-l-container", { "zp-l-container-rpx": $options.c.unit === "rpx", "zp-l-container-px": $options.c.unit === "px" }]),
  18219. style: vue.normalizeStyle([$options.c.customStyle]),
  18220. onClick: _cache[0] || (_cache[0] = (...args) => $options.doClick && $options.doClick(...args))
  18221. },
  18222. [
  18223. !$options.c.hideContent ? (vue.openBlock(), vue.createElementBlock(
  18224. vue.Fragment,
  18225. { key: 0 },
  18226. [
  18227. vue.createCommentVNode(" 底部加载更多没有更多数据分割线 "),
  18228. $options.c.showNoMoreLine && $options.finalStatus === $data.M.NoMore ? (vue.openBlock(), vue.createElementBlock(
  18229. "text",
  18230. {
  18231. key: 0,
  18232. class: vue.normalizeClass({ "zp-l-line-rpx": $options.c.unit === "rpx", "zp-l-line-px": $options.c.unit === "px" }),
  18233. style: vue.normalizeStyle([{ backgroundColor: $data.zTheme.line[$options.ts] }, $options.c.noMoreLineCustomStyle])
  18234. },
  18235. null,
  18236. 6
  18237. /* CLASS, STYLE */
  18238. )) : vue.createCommentVNode("v-if", true),
  18239. vue.createCommentVNode(" 底部加载更多loading "),
  18240. $options.finalStatus === $data.M.Loading && !!$options.c.loadingIconCustomImage ? (vue.openBlock(), vue.createElementBlock("image", {
  18241. key: 1,
  18242. src: $options.c.loadingIconCustomImage,
  18243. style: vue.normalizeStyle([$options.c.iconCustomStyle]),
  18244. class: vue.normalizeClass({ "zp-l-line-loading-custom-image": true, "zp-l-line-loading-custom-image-animated": $options.c.loadingAnimated, "zp-l-line-loading-custom-image-rpx": $options.c.unit === "rpx", "zp-l-line-loading-custom-image-px": $options.c.unit === "px" })
  18245. }, null, 14, ["src"])) : vue.createCommentVNode("v-if", true),
  18246. $options.finalStatus === $data.M.Loading && $options.finalLoadingIconType === "flower" && !$options.c.loadingIconCustomImage.length ? (vue.openBlock(), vue.createElementBlock("image", {
  18247. key: 2,
  18248. class: vue.normalizeClass({ "zp-line-loading-image": true, "zp-line-loading-image-rpx": $options.c.unit === "rpx", "zp-line-loading-image-px": $options.c.unit === "px" }),
  18249. style: vue.normalizeStyle([$options.c.iconCustomStyle]),
  18250. src: $data.zTheme.flower[$options.ts]
  18251. }, null, 14, ["src"])) : vue.createCommentVNode("v-if", true),
  18252. vue.createCommentVNode(" 底部加载更多文字 "),
  18253. $options.finalStatus === $data.M.Loading && $options.finalLoadingIconType === "circle" && !$options.c.loadingIconCustomImage.length ? (vue.openBlock(), vue.createElementBlock(
  18254. "text",
  18255. {
  18256. key: 3,
  18257. class: vue.normalizeClass(["zp-l-circle-loading-view", { "zp-l-circle-loading-view-rpx": $options.c.unit === "rpx", "zp-l-circle-loading-view-px": $options.c.unit === "px" }]),
  18258. style: vue.normalizeStyle([{ borderColor: $data.zTheme.circleBorder[$options.ts], borderTopColor: $data.zTheme.circleBorderTop[$options.ts] }, $options.c.iconCustomStyle])
  18259. },
  18260. null,
  18261. 6
  18262. /* CLASS, STYLE */
  18263. )) : vue.createCommentVNode("v-if", true),
  18264. !$options.c.isChat || !$options.c.chatDefaultAsLoading && $options.finalStatus === $data.M.Default || $options.finalStatus === $data.M.Fail ? (vue.openBlock(), vue.createElementBlock(
  18265. "text",
  18266. {
  18267. key: 4,
  18268. class: vue.normalizeClass({ "zp-l-text-rpx": $options.c.unit === "rpx", "zp-l-text-px": $options.c.unit === "px" }),
  18269. style: vue.normalizeStyle([{ color: $data.zTheme.title[$options.ts] }, $options.c.titleCustomStyle])
  18270. },
  18271. vue.toDisplayString($options.ownLoadingMoreText),
  18272. 7
  18273. /* TEXT, CLASS, STYLE */
  18274. )) : vue.createCommentVNode("v-if", true),
  18275. vue.createCommentVNode(" 底部加载更多没有更多数据分割线 "),
  18276. $options.c.showNoMoreLine && $options.finalStatus === $data.M.NoMore ? (vue.openBlock(), vue.createElementBlock(
  18277. "text",
  18278. {
  18279. key: 5,
  18280. class: vue.normalizeClass({ "zp-l-line-rpx": $options.c.unit === "rpx", "zp-l-line-px": $options.c.unit === "px" }),
  18281. style: vue.normalizeStyle([{ backgroundColor: $data.zTheme.line[$options.ts] }, $options.c.noMoreLineCustomStyle])
  18282. },
  18283. null,
  18284. 6
  18285. /* CLASS, STYLE */
  18286. )) : vue.createCommentVNode("v-if", true)
  18287. ],
  18288. 64
  18289. /* STABLE_FRAGMENT */
  18290. )) : vue.createCommentVNode("v-if", true)
  18291. ],
  18292. 6
  18293. /* CLASS, STYLE */
  18294. );
  18295. }
  18296. const zPagingLoadMore = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["render", _sfc_render$16], ["__scopeId", "data-v-0a5fd7d6"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/z-paging/components/z-paging/components/z-paging-load-more.vue"]]);
  18297. const commonLayoutModule = {
  18298. data() {
  18299. return {
  18300. systemInfo: null,
  18301. cssSafeAreaInsetBottom: -1,
  18302. isReadyDestroy: false
  18303. };
  18304. },
  18305. computed: {
  18306. // 顶部可用距离
  18307. windowTop() {
  18308. if (!this.systemInfo)
  18309. return 0;
  18310. return this.systemInfo.windowTop || 0;
  18311. },
  18312. // 底部安全区域高度
  18313. safeAreaBottom() {
  18314. if (!this.systemInfo)
  18315. return 0;
  18316. let safeAreaBottom = 0;
  18317. safeAreaBottom = this.systemInfo.safeAreaInsets.bottom || 0;
  18318. return safeAreaBottom;
  18319. },
  18320. // 是否是比较老的webview,在一些老的webview中,需要进行一些特殊处理
  18321. isOldWebView() {
  18322. try {
  18323. const systemInfos = u.getSystemInfoSync(true).system.split(" ");
  18324. const deviceType = systemInfos[0];
  18325. const version2 = parseInt(systemInfos[1]);
  18326. if (deviceType === "iOS" && version2 <= 10 || deviceType === "Android" && version2 <= 6) {
  18327. return true;
  18328. }
  18329. } catch (e) {
  18330. return false;
  18331. }
  18332. return false;
  18333. },
  18334. // 当前组件的$slots,兼容不同平台
  18335. zSlots() {
  18336. return this.$slots;
  18337. }
  18338. },
  18339. beforeDestroy() {
  18340. this.isReadyDestroy = true;
  18341. },
  18342. unmounted() {
  18343. this.isReadyDestroy = true;
  18344. },
  18345. methods: {
  18346. // 更新fixed模式下z-paging的布局
  18347. updateFixedLayout() {
  18348. this.fixed && this.$nextTick(() => {
  18349. this.systemInfo = u.getSystemInfoSync();
  18350. });
  18351. },
  18352. // 获取节点尺寸
  18353. _getNodeClientRect(select, inDom = true, scrollOffset = false) {
  18354. if (this.isReadyDestroy) {
  18355. return Promise.resolve(false);
  18356. }
  18357. let res = !!inDom ? uni.createSelectorQuery().in(inDom === true ? this : inDom) : uni.createSelectorQuery();
  18358. scrollOffset ? res.select(select).scrollOffset() : res.select(select).boundingClientRect();
  18359. return new Promise((resolve2, reject) => {
  18360. res.exec((data) => {
  18361. resolve2(data && data != "" && data != void 0 && data.length ? data : false);
  18362. });
  18363. });
  18364. },
  18365. // 获取slot="left"和slot="right"宽度并且更新布局
  18366. _updateLeftAndRightWidth(targetStyle, parentNodePrefix) {
  18367. this.$nextTick(() => {
  18368. let delayTime = 0;
  18369. setTimeout(() => {
  18370. ["left", "right"].map((position) => {
  18371. this._getNodeClientRect(`.${parentNodePrefix}-${position}`).then((res) => {
  18372. this.$set(targetStyle, position, res ? res[0].width + "px" : "0px");
  18373. });
  18374. });
  18375. }, delayTime);
  18376. });
  18377. },
  18378. // 通过获取css设置的底部安全区域占位view高度设置bottom距离(直接通过systemInfo在部分平台上无法获取到底部安全区域)
  18379. _getCssSafeAreaInsetBottom(success) {
  18380. this._getNodeClientRect(".zp-safe-area-inset-bottom").then((res) => {
  18381. this.cssSafeAreaInsetBottom = res ? res[0].height : -1;
  18382. res && success && success();
  18383. });
  18384. },
  18385. // 同步获取系统信息,兼容不同平台(供z-paging-swiper使用)
  18386. _getSystemInfoSync(useCache = false) {
  18387. return u.getSystemInfoSync(useCache);
  18388. }
  18389. }
  18390. };
  18391. const queryKey = "Query";
  18392. const fetchParamsKey = "FetchParams";
  18393. const fetchResultKey = "FetchResult";
  18394. const language2LocalKey = "Language2Local";
  18395. function handleQuery(callback) {
  18396. _addHandleByKey(queryKey, callback);
  18397. return this;
  18398. }
  18399. function _handleQuery(pageNo, pageSize, from, lastItem) {
  18400. const callback = _getHandleByKey(queryKey);
  18401. return callback ? callback(pageNo, pageSize, from, lastItem) : [pageNo, pageSize, from];
  18402. }
  18403. function handleFetchParams(callback) {
  18404. _addHandleByKey(fetchParamsKey, callback);
  18405. return this;
  18406. }
  18407. function _handleFetchParams(parmas, extraParams) {
  18408. const callback = _getHandleByKey(fetchParamsKey);
  18409. return callback ? callback(parmas, extraParams || {}) : { pageNo: parmas.pageNo, pageSize: parmas.pageSize, ...extraParams || {} };
  18410. }
  18411. function handleFetchResult(callback) {
  18412. _addHandleByKey(fetchResultKey, callback);
  18413. return this;
  18414. }
  18415. function _handleFetchResult(result, paging, params) {
  18416. const callback = _getHandleByKey(fetchResultKey);
  18417. callback && callback(result, paging, params);
  18418. return callback ? true : false;
  18419. }
  18420. function handleLanguage2Local(callback) {
  18421. _addHandleByKey(language2LocalKey, callback);
  18422. return this;
  18423. }
  18424. function _handleLanguage2Local(language, local) {
  18425. const callback = _getHandleByKey(language2LocalKey);
  18426. return callback ? callback(language, local) : local;
  18427. }
  18428. function _getApp() {
  18429. return getApp();
  18430. }
  18431. function _hasGlobalData() {
  18432. return _getApp() && _getApp().globalData;
  18433. }
  18434. function _addHandleByKey(key, callback) {
  18435. try {
  18436. setTimeout(function() {
  18437. if (_hasGlobalData()) {
  18438. _getApp().globalData[`zp_handle${key}Callback`] = callback;
  18439. }
  18440. }, 1);
  18441. } catch (_) {
  18442. }
  18443. }
  18444. function _getHandleByKey(key) {
  18445. return _hasGlobalData() ? _getApp().globalData[`zp_handle${key}Callback`] : null;
  18446. }
  18447. const interceptor = {
  18448. handleQuery,
  18449. _handleQuery,
  18450. handleFetchParams,
  18451. _handleFetchParams,
  18452. handleFetchResult,
  18453. _handleFetchResult,
  18454. handleLanguage2Local,
  18455. _handleLanguage2Local
  18456. };
  18457. const dataHandleModule = {
  18458. props: {
  18459. // 自定义初始的pageNo,默认为1
  18460. defaultPageNo: {
  18461. type: Number,
  18462. default: u.gc("defaultPageNo", 1),
  18463. observer: function(newVal) {
  18464. this.pageNo = newVal;
  18465. }
  18466. },
  18467. // 自定义pageSize,默认为10
  18468. defaultPageSize: {
  18469. type: Number,
  18470. default: u.gc("defaultPageSize", 10),
  18471. validator: (value) => {
  18472. if (value <= 0)
  18473. u.consoleErr("default-page-size必须大于0!");
  18474. return value > 0;
  18475. }
  18476. },
  18477. // 为保证数据一致,设置当前tab切换时的标识key,并在complete中传递相同key,若二者不一致,则complete将不会生效
  18478. dataKey: {
  18479. type: [Number, String, Object],
  18480. default: u.gc("dataKey", null)
  18481. },
  18482. // 使用缓存,若开启将自动缓存第一页的数据,默认为否。请注意,因考虑到切换tab时不同tab数据不同的情况,默认仅会缓存组件首次加载时第一次请求到的数据,后续的下拉刷新操作不会更新缓存。
  18483. useCache: {
  18484. type: Boolean,
  18485. default: u.gc("useCache", false)
  18486. },
  18487. // 使用缓存时缓存的key,用于区分不同列表的缓存数据,useCache为true时必须设置,否则缓存无效
  18488. cacheKey: {
  18489. type: String,
  18490. default: u.gc("cacheKey", null)
  18491. },
  18492. // 缓存模式,默认仅会缓存组件首次加载时第一次请求到的数据,可设置为always,即代表总是缓存,每次列表刷新(下拉刷新、调用reload等)都会更新缓存
  18493. cacheMode: {
  18494. type: String,
  18495. default: u.gc("cacheMode", Enum.CacheMode.Default)
  18496. },
  18497. // 自动注入的list名,可自动修改父view(包含ref="paging")中对应name的list值
  18498. autowireListName: {
  18499. type: String,
  18500. default: u.gc("autowireListName", "")
  18501. },
  18502. // 自动注入的query名,可自动调用父view(包含ref="paging")中的query方法
  18503. autowireQueryName: {
  18504. type: String,
  18505. default: u.gc("autowireQueryName", "")
  18506. },
  18507. // 获取分页数据Function,功能与@query类似。若设置了fetch则@query将不再触发
  18508. fetch: {
  18509. type: Function,
  18510. default: null
  18511. },
  18512. // fetch的附加参数,fetch配置后有效
  18513. fetchParams: {
  18514. type: Object,
  18515. default: u.gc("fetchParams", null)
  18516. },
  18517. // z-paging mounted后自动调用reload方法(mounted后自动调用接口),默认为是
  18518. auto: {
  18519. type: Boolean,
  18520. default: u.gc("auto", true)
  18521. },
  18522. // 用户下拉刷新时是否触发reload方法,默认为是
  18523. reloadWhenRefresh: {
  18524. type: Boolean,
  18525. default: u.gc("reloadWhenRefresh", true)
  18526. },
  18527. // reload时自动滚动到顶部,默认为是
  18528. autoScrollToTopWhenReload: {
  18529. type: Boolean,
  18530. default: u.gc("autoScrollToTopWhenReload", true)
  18531. },
  18532. // reload时立即自动清空原list,默认为是,若立即自动清空,则在reload之后、请求回调之前页面是空白的
  18533. autoCleanListWhenReload: {
  18534. type: Boolean,
  18535. default: u.gc("autoCleanListWhenReload", true)
  18536. },
  18537. // 列表刷新时自动显示下拉刷新view,默认为否
  18538. showRefresherWhenReload: {
  18539. type: Boolean,
  18540. default: u.gc("showRefresherWhenReload", false)
  18541. },
  18542. // 列表刷新时自动显示加载更多view,且为加载中状态,默认为否
  18543. showLoadingMoreWhenReload: {
  18544. type: Boolean,
  18545. default: u.gc("showLoadingMoreWhenReload", false)
  18546. },
  18547. // 组件created时立即触发reload(可解决一些情况下先看到页面再看到loading的问题),auto为true时有效。为否时将在mounted+nextTick后触发reload,默认为否
  18548. createdReload: {
  18549. type: Boolean,
  18550. default: u.gc("createdReload", false)
  18551. },
  18552. // 本地分页时上拉加载更多延迟时间,单位为毫秒,默认200毫秒
  18553. localPagingLoadingTime: {
  18554. type: [Number, String],
  18555. default: u.gc("localPagingLoadingTime", 200)
  18556. },
  18557. // 自动拼接complete中传过来的数组(使用聊天记录模式时无效)
  18558. concat: {
  18559. type: Boolean,
  18560. default: u.gc("concat", true)
  18561. },
  18562. // 请求失败是否触发reject,默认为是
  18563. callNetworkReject: {
  18564. type: Boolean,
  18565. default: u.gc("callNetworkReject", true)
  18566. },
  18567. // 父组件v-model所绑定的list的值
  18568. value: {
  18569. type: Array,
  18570. default: function() {
  18571. return [];
  18572. }
  18573. },
  18574. modelValue: {
  18575. type: Array,
  18576. default: function() {
  18577. return [];
  18578. }
  18579. }
  18580. },
  18581. data() {
  18582. return {
  18583. currentData: [],
  18584. totalData: [],
  18585. realTotalData: [],
  18586. totalLocalPagingList: [],
  18587. dataPromiseResultMap: {
  18588. reload: null,
  18589. complete: null,
  18590. localPaging: null
  18591. },
  18592. isSettingCacheList: false,
  18593. pageNo: 1,
  18594. currentRefreshPageSize: 0,
  18595. isLocalPaging: false,
  18596. isAddedData: false,
  18597. isTotalChangeFromAddData: false,
  18598. privateConcat: true,
  18599. myParentQuery: -1,
  18600. firstPageLoaded: false,
  18601. pagingLoaded: false,
  18602. loaded: false,
  18603. isUserReload: true,
  18604. fromEmptyViewReload: false,
  18605. queryFrom: "",
  18606. listRendering: false,
  18607. isHandlingRefreshToPage: false,
  18608. isFirstPageAndNoMore: false,
  18609. totalDataChangeThrow: true
  18610. };
  18611. },
  18612. computed: {
  18613. pageSize() {
  18614. return this.defaultPageSize;
  18615. },
  18616. finalConcat() {
  18617. return this.concat && this.privateConcat;
  18618. },
  18619. finalUseCache() {
  18620. if (this.useCache && !this.cacheKey) {
  18621. u.consoleErr("use-cache为true时,必须设置cache-key,否则缓存无效!");
  18622. }
  18623. return this.useCache && !!this.cacheKey;
  18624. },
  18625. finalCacheKey() {
  18626. return this.cacheKey ? `${c.cachePrefixKey}-${this.cacheKey}` : null;
  18627. },
  18628. isFirstPage() {
  18629. return this.pageNo === this.defaultPageNo;
  18630. }
  18631. },
  18632. watch: {
  18633. totalData(newVal, oldVal) {
  18634. this._totalDataChange(newVal, oldVal, this.totalDataChangeThrow);
  18635. this.totalDataChangeThrow = true;
  18636. },
  18637. currentData(newVal, oldVal) {
  18638. this._currentDataChange(newVal, oldVal);
  18639. },
  18640. useChatRecordMode(newVal, oldVal) {
  18641. if (newVal) {
  18642. this.nLoadingMoreFixedHeight = false;
  18643. }
  18644. },
  18645. value: {
  18646. handler(newVal) {
  18647. if (newVal !== this.totalData) {
  18648. this.totalDataChangeThrow = false;
  18649. this.totalData = newVal;
  18650. }
  18651. },
  18652. immediate: true
  18653. },
  18654. modelValue: {
  18655. handler(newVal) {
  18656. if (newVal !== this.totalData) {
  18657. this.totalDataChangeThrow = false;
  18658. this.totalData = newVal;
  18659. }
  18660. },
  18661. immediate: true
  18662. }
  18663. },
  18664. methods: {
  18665. // 请求结束(成功或者失败)调用此方法,将请求的结果传递给z-paging处理,第一个参数为请求结果数组,第二个参数为是否成功(默认为是)
  18666. complete(data, success = true) {
  18667. this.customNoMore = -1;
  18668. return this.addData(data, success);
  18669. },
  18670. //【保证数据一致】请求结束(成功或者失败)调用此方法,将请求的结果传递给z-paging处理,第一个参数为请求结果数组,第二个参数为dataKey,需与:data-key绑定的一致,第三个参数为是否成功(默认为是)
  18671. completeByKey(data, dataKey = null, success = true) {
  18672. if (dataKey !== null && this.dataKey !== null && dataKey !== this.dataKey) {
  18673. this.isFirstPage && this.endRefresh();
  18674. return new Promise((resolve2) => resolve2());
  18675. }
  18676. this.customNoMore = -1;
  18677. return this.addData(data, success);
  18678. },
  18679. //【通过total判断是否有更多数据】请求结束(成功或者失败)调用此方法,将请求的结果传递给z-paging处理,第一个参数为请求结果数组,第二个参数为total(列表总数),第三个参数为是否成功(默认为是)
  18680. completeByTotal(data, total, success = true) {
  18681. if (total == "undefined") {
  18682. this.customNoMore = -1;
  18683. } else {
  18684. const dataTypeRes = this._checkDataType(data, success, false);
  18685. data = dataTypeRes.data;
  18686. success = dataTypeRes.success;
  18687. if (total >= 0 && success) {
  18688. return new Promise((resolve2, reject) => {
  18689. this.$nextTick(() => {
  18690. let nomore = false;
  18691. const realTotalDataCount = this.pageNo == this.defaultPageNo ? 0 : this.realTotalData.length;
  18692. const dataLength = this.privateConcat ? data.length : 0;
  18693. let exceedCount = realTotalDataCount + dataLength - total;
  18694. if (exceedCount >= 0) {
  18695. nomore = true;
  18696. exceedCount = this.defaultPageSize - exceedCount;
  18697. if (this.privateConcat && exceedCount > 0 && exceedCount < data.length) {
  18698. data = data.splice(0, exceedCount);
  18699. }
  18700. }
  18701. this.completeByNoMore(data, nomore, success).then((res) => resolve2(res)).catch(() => reject());
  18702. });
  18703. });
  18704. }
  18705. }
  18706. return this.addData(data, success);
  18707. },
  18708. //【自行判断是否有更多数据】请求结束(成功或者失败)调用此方法,将请求的结果传递给z-paging处理,第一个参数为请求结果数组,第二个参数为是否没有更多数据,第三个参数为是否成功(默认是是)
  18709. completeByNoMore(data, nomore, success = true) {
  18710. if (nomore != "undefined") {
  18711. this.customNoMore = nomore == true ? 1 : 0;
  18712. }
  18713. return this.addData(data, success);
  18714. },
  18715. // 请求结束且请求失败时调用,支持传入请求失败原因
  18716. completeByError(errorMsg) {
  18717. this.customerEmptyViewErrorText = errorMsg;
  18718. return this.complete(false);
  18719. },
  18720. // 与上方complete方法功能一致,新版本中设置服务端回调数组请使用complete方法
  18721. addData(data, success = true) {
  18722. if (!this.fromCompleteEmit) {
  18723. this.disabledCompleteEmit = true;
  18724. this.fromCompleteEmit = false;
  18725. }
  18726. const currentTimeStamp = u.getTime();
  18727. const disTime = currentTimeStamp - this.requestTimeStamp;
  18728. let minDelay = this.minDelay;
  18729. if (this.isFirstPage && this.finalShowRefresherWhenReload) {
  18730. minDelay = Math.max(400, minDelay);
  18731. }
  18732. const addDataDalay = this.requestTimeStamp > 0 && disTime < minDelay ? minDelay - disTime : 0;
  18733. this.$nextTick(() => {
  18734. u.delay(() => {
  18735. this._addData(data, success, false);
  18736. }, this.delay > 0 ? this.delay : addDataDalay);
  18737. });
  18738. return new Promise((resolve2, reject) => {
  18739. this.dataPromiseResultMap.complete = { resolve: resolve2, reject };
  18740. });
  18741. },
  18742. // 从顶部添加数据,不会影响分页的pageNo和pageSize
  18743. addDataFromTop(data, toTop = true, toTopWithAnimate = true) {
  18744. let addFromTop = !this.isChatRecordModeAndNotInversion;
  18745. data = Object.prototype.toString.call(data) !== "[object Array]" ? [data] : addFromTop ? data.reverse() : data;
  18746. this.finalUseVirtualList && this._setCellIndex(data, "top");
  18747. this.totalData = addFromTop ? [...data, ...this.totalData] : [...this.totalData, ...data];
  18748. if (toTop) {
  18749. u.delay(() => this.useChatRecordMode ? this.scrollToBottom(toTopWithAnimate) : this.scrollToTop(toTopWithAnimate));
  18750. }
  18751. },
  18752. // 重新设置列表数据,调用此方法不会影响pageNo和pageSize,也不会触发请求。适用场景:当需要删除列表中某一项时,将删除对应项后的数组通过此方法传递给z-paging。(当出现类似的需要修改列表数组的场景时,请使用此方法,请勿直接修改page中:list.sync绑定的数组)
  18753. resetTotalData(data) {
  18754. this.isTotalChangeFromAddData = true;
  18755. data = Object.prototype.toString.call(data) !== "[object Array]" ? [data] : data;
  18756. this.totalData = data;
  18757. },
  18758. // 设置本地分页数据,请求结束(成功或者失败)调用此方法,将请求的结果传递给z-paging作分页处理(若调用了此方法,则上拉加载更多时内部会自动分页,不会触发@query所绑定的事件)
  18759. setLocalPaging(data, success = true) {
  18760. this.isLocalPaging = true;
  18761. this.$nextTick(() => {
  18762. this._addData(data, success, true);
  18763. });
  18764. return new Promise((resolve2, reject) => {
  18765. this.dataPromiseResultMap.localPaging = { resolve: resolve2, reject };
  18766. });
  18767. },
  18768. // 重新加载分页数据,pageNo会恢复为默认值,相当于下拉刷新的效果(animate为true时会展示下拉刷新动画,默认为false)
  18769. reload(animate = this.showRefresherWhenReload) {
  18770. if (animate) {
  18771. this.privateShowRefresherWhenReload = animate;
  18772. this.isUserPullDown = true;
  18773. }
  18774. if (!this.showLoadingMoreWhenReload) {
  18775. this.listRendering = true;
  18776. }
  18777. this.$nextTick(() => {
  18778. this._preReload(animate, false);
  18779. });
  18780. return new Promise((resolve2, reject) => {
  18781. this.dataPromiseResultMap.reload = { resolve: resolve2, reject };
  18782. });
  18783. },
  18784. // 刷新列表数据,pageNo和pageSize不会重置,列表数据会重新从服务端获取。必须保证@query绑定的方法中的pageNo和pageSize和传给服务端的一致
  18785. refresh() {
  18786. return this._handleRefreshWithDisPageNo(this.pageNo - this.defaultPageNo + 1);
  18787. },
  18788. // 刷新列表数据至指定页,例如pageNo=5时则代表刷新列表至第5页,此时pageNo会变为5,列表会展示前5页的数据。必须保证@query绑定的方法中的pageNo和pageSize和传给服务端的一致
  18789. refreshToPage(pageNo) {
  18790. this.isHandlingRefreshToPage = true;
  18791. return this._handleRefreshWithDisPageNo(pageNo + this.defaultPageNo - 1);
  18792. },
  18793. // 手动更新列表缓存数据,将自动截取v-model绑定的list中的前pageSize条覆盖缓存,请确保在list数据更新到预期结果后再调用此方法
  18794. updateCache() {
  18795. if (this.finalUseCache && this.totalData.length) {
  18796. this._saveLocalCache(this.totalData.slice(0, Math.min(this.totalData.length, this.pageSize)));
  18797. }
  18798. },
  18799. // 清空分页数据
  18800. clean() {
  18801. this._reload(true);
  18802. this._addData([], true, false);
  18803. },
  18804. // 清空分页数据
  18805. clear() {
  18806. this.clean();
  18807. },
  18808. // reload之前的一些处理
  18809. _preReload(animate = this.showRefresherWhenReload, isFromMounted = true, retryCount = 0) {
  18810. const showRefresher = this.finalRefresherEnabled && this.useCustomRefresher;
  18811. if (this.customRefresherHeight === -1 && showRefresher) {
  18812. u.delay(() => {
  18813. retryCount++;
  18814. if (retryCount % 10 === 0) {
  18815. this._updateCustomRefresherHeight();
  18816. }
  18817. this._preReload(animate, isFromMounted, retryCount);
  18818. }, c.delayTime / 2);
  18819. return;
  18820. }
  18821. this.isUserReload = true;
  18822. this.loadingType = Enum.LoadingType.Refresher;
  18823. if (animate) {
  18824. this.privateShowRefresherWhenReload = animate;
  18825. if (this.useCustomRefresher) {
  18826. this._doRefresherRefreshAnimate();
  18827. } else {
  18828. this.refresherTriggered = true;
  18829. }
  18830. } else {
  18831. this._refresherEnd(false, false, false, false);
  18832. }
  18833. this._reload(false, isFromMounted);
  18834. },
  18835. // 重新加载分页数据
  18836. _reload(isClean = false, isFromMounted = false, isUserPullDown = false) {
  18837. this.isAddedData = false;
  18838. this.insideOfPaging = -1;
  18839. this.cacheScrollNodeHeight = -1;
  18840. this.pageNo = this.defaultPageNo;
  18841. this._cleanRefresherEndTimeout();
  18842. !this.privateShowRefresherWhenReload && !isClean && this._startLoading(true);
  18843. this.firstPageLoaded = true;
  18844. this.isTotalChangeFromAddData = false;
  18845. if (!this.isSettingCacheList) {
  18846. this.totalData = [];
  18847. }
  18848. if (!isClean) {
  18849. this._emitQuery(this.pageNo, this.defaultPageSize, isUserPullDown ? Enum.QueryFrom.UserPullDown : Enum.QueryFrom.Reload);
  18850. let delay2 = 0;
  18851. u.delay(this._callMyParentQuery, delay2);
  18852. if (!isFromMounted && this.autoScrollToTopWhenReload) {
  18853. this._scrollToTop(false);
  18854. }
  18855. }
  18856. },
  18857. // 处理服务端返回的数组
  18858. _addData(data, success, isLocal) {
  18859. this.isAddedData = true;
  18860. this.fromEmptyViewReload = false;
  18861. this.isTotalChangeFromAddData = true;
  18862. this.refresherTriggered = false;
  18863. this._endSystemLoadingAndRefresh();
  18864. const tempIsUserPullDown = this.isUserPullDown;
  18865. if (this.showRefresherUpdateTime && this.isFirstPage) {
  18866. u.setRefesrherTime(u.getTime(), this.refresherUpdateTimeKey);
  18867. this.$refs.refresh && this.$refs.refresh.updateTime();
  18868. }
  18869. if (!isLocal && tempIsUserPullDown && this.isFirstPage) {
  18870. this.isUserPullDown = false;
  18871. }
  18872. this.listRendering = true;
  18873. this.$nextTick(() => {
  18874. u.delay(() => this.listRendering = false);
  18875. });
  18876. let dataTypeRes = this._checkDataType(data, success, isLocal);
  18877. data = dataTypeRes.data;
  18878. success = dataTypeRes.success;
  18879. let delayTime = c.delayTime;
  18880. if (this.useChatRecordMode)
  18881. delayTime = 0;
  18882. this.loadingForNow = false;
  18883. u.delay(() => {
  18884. this.pagingLoaded = true;
  18885. this.$nextTick(() => {
  18886. !isLocal && this._refresherEnd(delayTime > 0, true, tempIsUserPullDown);
  18887. });
  18888. });
  18889. if (this.isFirstPage) {
  18890. this.isLoadFailed = !success;
  18891. this.$emit("isLoadFailedChange", this.isLoadFailed);
  18892. if (this.finalUseCache && success && (this.cacheMode === Enum.CacheMode.Always ? true : this.isSettingCacheList)) {
  18893. this._saveLocalCache(data);
  18894. }
  18895. }
  18896. this.isSettingCacheList = false;
  18897. if (success) {
  18898. if (!(this.privateConcat === false && !this.isHandlingRefreshToPage && this.loadingStatus === Enum.More.NoMore)) {
  18899. this.loadingStatus = Enum.More.Default;
  18900. }
  18901. if (isLocal) {
  18902. this.totalLocalPagingList = data;
  18903. const localPageNo = this.defaultPageNo;
  18904. const localPageSize = this.queryFrom !== Enum.QueryFrom.Refresh ? this.defaultPageSize : this.currentRefreshPageSize;
  18905. this._localPagingQueryList(localPageNo, localPageSize, 0, (res) => {
  18906. u.delay(() => {
  18907. this.completeByTotal(res, this.totalLocalPagingList.length);
  18908. }, 0);
  18909. });
  18910. } else {
  18911. let dataChangeDelayTime = 0;
  18912. u.delay(() => {
  18913. this._currentDataChange(data, this.currentData);
  18914. this._callDataPromise(true, this.totalData);
  18915. }, dataChangeDelayTime);
  18916. }
  18917. if (this.isHandlingRefreshToPage) {
  18918. this.isHandlingRefreshToPage = false;
  18919. this.pageNo = this.defaultPageNo + Math.ceil(data.length / this.pageSize) - 1;
  18920. if (data.length % this.pageSize !== 0) {
  18921. this.customNoMore = 1;
  18922. }
  18923. }
  18924. } else {
  18925. this._currentDataChange(data, this.currentData);
  18926. this._callDataPromise(false);
  18927. this.loadingStatus = Enum.More.Fail;
  18928. this.isHandlingRefreshToPage = false;
  18929. if (this.loadingType === Enum.LoadingType.LoadMore) {
  18930. this.pageNo--;
  18931. }
  18932. }
  18933. },
  18934. // 所有数据改变时调用
  18935. _totalDataChange(newVal, oldVal, eventThrow = true) {
  18936. if ((!this.isUserReload || !this.autoCleanListWhenReload) && this.firstPageLoaded && !newVal.length && oldVal.length) {
  18937. return;
  18938. }
  18939. this._doCheckScrollViewShouldFullHeight(newVal);
  18940. if (!this.realTotalData.length && !newVal.length) {
  18941. eventThrow = false;
  18942. }
  18943. this.realTotalData = newVal;
  18944. if (eventThrow) {
  18945. this.$emit("input", newVal);
  18946. this.$emit("update:modelValue", newVal);
  18947. this.$emit("update:list", newVal);
  18948. this.$emit("listChange", newVal);
  18949. this._callMyParentList(newVal);
  18950. }
  18951. this.firstPageLoaded = false;
  18952. this.isTotalChangeFromAddData = false;
  18953. this.$nextTick(() => {
  18954. u.delay(() => {
  18955. this._getNodeClientRect(".zp-paging-container-content").then((res) => {
  18956. res && this.$emit("contentHeightChanged", res[0].height);
  18957. });
  18958. }, c.delayTime * (this.isIos ? 1 : 3));
  18959. });
  18960. },
  18961. // 当前数据改变时调用
  18962. _currentDataChange(newVal, oldVal) {
  18963. newVal = [...newVal];
  18964. this.finalUseVirtualList && this._setCellIndex(newVal, "bottom");
  18965. if (this.isFirstPage && this.finalConcat) {
  18966. this.totalData = [];
  18967. }
  18968. if (this.customNoMore !== -1) {
  18969. if (this.customNoMore === 1 || this.customNoMore !== 0 && !newVal.length) {
  18970. this.loadingStatus = Enum.More.NoMore;
  18971. }
  18972. } else {
  18973. if (!newVal.length || newVal.length && newVal.length < this.defaultPageSize) {
  18974. this.loadingStatus = Enum.More.NoMore;
  18975. }
  18976. }
  18977. if (!this.totalData.length) {
  18978. this.totalData = newVal;
  18979. } else {
  18980. if (this.finalConcat) {
  18981. this.oldScrollTop;
  18982. this.totalData = [...this.totalData, ...newVal];
  18983. } else {
  18984. this.totalData = newVal;
  18985. }
  18986. }
  18987. this.privateConcat = true;
  18988. },
  18989. // 根据pageNo处理refresh操作
  18990. _handleRefreshWithDisPageNo(pageNo) {
  18991. if (!this.isHandlingRefreshToPage && !this.realTotalData.length)
  18992. return this.reload();
  18993. if (pageNo >= 1) {
  18994. this.loading = true;
  18995. this.privateConcat = false;
  18996. const totalPageSize = pageNo * this.pageSize;
  18997. this.currentRefreshPageSize = totalPageSize;
  18998. if (this.isLocalPaging && this.isHandlingRefreshToPage) {
  18999. this._localPagingQueryList(this.defaultPageNo, totalPageSize, 0, (res) => {
  19000. this.complete(res);
  19001. });
  19002. } else {
  19003. this._emitQuery(this.defaultPageNo, totalPageSize, Enum.QueryFrom.Refresh);
  19004. this._callMyParentQuery(this.defaultPageNo, totalPageSize);
  19005. }
  19006. }
  19007. return new Promise((resolve2, reject) => {
  19008. this.dataPromiseResultMap.reload = { resolve: resolve2, reject };
  19009. });
  19010. },
  19011. // 本地分页请求
  19012. _localPagingQueryList(pageNo, pageSize, localPagingLoadingTime, callback) {
  19013. pageNo = Math.max(1, pageNo);
  19014. pageSize = Math.max(1, pageSize);
  19015. const totalPagingList = [...this.totalLocalPagingList];
  19016. const pageNoIndex = (pageNo - 1) * pageSize;
  19017. const finalPageNoIndex = Math.min(totalPagingList.length, pageNoIndex + pageSize);
  19018. const resultPagingList = totalPagingList.splice(pageNoIndex, finalPageNoIndex - pageNoIndex);
  19019. u.delay(() => callback(resultPagingList), localPagingLoadingTime);
  19020. },
  19021. // 存储列表缓存数据
  19022. _saveLocalCache(data) {
  19023. uni.setStorageSync(this.finalCacheKey, data);
  19024. },
  19025. // 通过缓存数据填充列表数据
  19026. _setListByLocalCache() {
  19027. this.totalData = uni.getStorageSync(this.finalCacheKey) || [];
  19028. this.isSettingCacheList = true;
  19029. },
  19030. // 修改父view的list
  19031. _callMyParentList(newVal) {
  19032. if (this.autowireListName.length) {
  19033. const myParent = u.getParent(this.$parent);
  19034. if (myParent && myParent[this.autowireListName]) {
  19035. myParent[this.autowireListName] = newVal;
  19036. }
  19037. }
  19038. },
  19039. // 调用父view的query
  19040. _callMyParentQuery(customPageNo = 0, customPageSize = 0) {
  19041. if (this.autowireQueryName) {
  19042. if (this.myParentQuery === -1) {
  19043. const myParent = u.getParent(this.$parent);
  19044. if (myParent && myParent[this.autowireQueryName]) {
  19045. this.myParentQuery = myParent[this.autowireQueryName];
  19046. }
  19047. }
  19048. if (this.myParentQuery !== -1) {
  19049. customPageSize > 0 ? this.myParentQuery(customPageNo, customPageSize) : this.myParentQuery(this.pageNo, this.defaultPageSize);
  19050. }
  19051. }
  19052. },
  19053. // emit query事件
  19054. _emitQuery(pageNo, pageSize, from) {
  19055. this.queryFrom = from;
  19056. this.requestTimeStamp = u.getTime();
  19057. const [lastItem] = this.realTotalData.slice(-1);
  19058. if (this.fetch) {
  19059. const fetchParams = interceptor._handleFetchParams({ pageNo, pageSize, from, lastItem: lastItem || null }, this.fetchParams);
  19060. const fetchResult = this.fetch(fetchParams);
  19061. if (!interceptor._handleFetchResult(fetchResult, this, fetchParams)) {
  19062. u.isPromise(fetchResult) ? fetchResult.then((res) => {
  19063. this.complete(res);
  19064. }).catch((err) => {
  19065. this.complete(false);
  19066. }) : this.complete(fetchResult);
  19067. }
  19068. } else {
  19069. this.$emit("query", ...interceptor._handleQuery(pageNo, pageSize, from, lastItem || null));
  19070. }
  19071. },
  19072. // 触发数据改变promise
  19073. _callDataPromise(success, totalList) {
  19074. for (const key in this.dataPromiseResultMap) {
  19075. const obj = this.dataPromiseResultMap[key];
  19076. if (!obj)
  19077. continue;
  19078. success ? obj.resolve({ totalList, noMore: this.loadingStatus === Enum.More.NoMore }) : this.callNetworkReject && obj.reject(`z-paging-${key}-error`);
  19079. }
  19080. },
  19081. // 检查complete data的类型
  19082. _checkDataType(data, success, isLocal) {
  19083. const dataType = Object.prototype.toString.call(data);
  19084. if (dataType === "[object Boolean]") {
  19085. success = data;
  19086. data = [];
  19087. } else if (dataType !== "[object Array]") {
  19088. data = [];
  19089. if (dataType !== "[object Undefined]" && dataType !== "[object Null]") {
  19090. u.consoleErr(`${isLocal ? "setLocalPaging" : "complete"}参数类型不正确,第一个参数类型必须为Array!`);
  19091. }
  19092. }
  19093. return { data, success };
  19094. }
  19095. }
  19096. };
  19097. const isObject$1 = (val) => val !== null && typeof val === "object";
  19098. const defaultDelimiters = ["{", "}"];
  19099. class BaseFormatter {
  19100. constructor() {
  19101. this._caches = /* @__PURE__ */ Object.create(null);
  19102. }
  19103. interpolate(message, values, delimiters = defaultDelimiters) {
  19104. if (!values) {
  19105. return [message];
  19106. }
  19107. let tokens = this._caches[message];
  19108. if (!tokens) {
  19109. tokens = parse(message, delimiters);
  19110. this._caches[message] = tokens;
  19111. }
  19112. return compile(tokens, values);
  19113. }
  19114. }
  19115. const RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
  19116. const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
  19117. function parse(format2, [startDelimiter, endDelimiter]) {
  19118. const tokens = [];
  19119. let position = 0;
  19120. let text = "";
  19121. while (position < format2.length) {
  19122. let char = format2[position++];
  19123. if (char === startDelimiter) {
  19124. if (text) {
  19125. tokens.push({ type: "text", value: text });
  19126. }
  19127. text = "";
  19128. let sub = "";
  19129. char = format2[position++];
  19130. while (char !== void 0 && char !== endDelimiter) {
  19131. sub += char;
  19132. char = format2[position++];
  19133. }
  19134. const isClosed = char === endDelimiter;
  19135. const type2 = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown";
  19136. tokens.push({ value: sub, type: type2 });
  19137. } else {
  19138. text += char;
  19139. }
  19140. }
  19141. text && tokens.push({ type: "text", value: text });
  19142. return tokens;
  19143. }
  19144. function compile(tokens, values) {
  19145. const compiled = [];
  19146. let index = 0;
  19147. const mode = Array.isArray(values) ? "list" : isObject$1(values) ? "named" : "unknown";
  19148. if (mode === "unknown") {
  19149. return compiled;
  19150. }
  19151. while (index < tokens.length) {
  19152. const token = tokens[index];
  19153. switch (token.type) {
  19154. case "text":
  19155. compiled.push(token.value);
  19156. break;
  19157. case "list":
  19158. compiled.push(values[parseInt(token.value, 10)]);
  19159. break;
  19160. case "named":
  19161. if (mode === "named") {
  19162. compiled.push(values[token.value]);
  19163. } else {
  19164. {
  19165. console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);
  19166. }
  19167. }
  19168. break;
  19169. case "unknown":
  19170. {
  19171. console.warn(`Detect 'unknown' type of token!`);
  19172. }
  19173. break;
  19174. }
  19175. index++;
  19176. }
  19177. return compiled;
  19178. }
  19179. const LOCALE_ZH_HANS = "zh-Hans";
  19180. const LOCALE_ZH_HANT = "zh-Hant";
  19181. const LOCALE_EN = "en";
  19182. const LOCALE_FR = "fr";
  19183. const LOCALE_ES = "es";
  19184. const hasOwnProperty = Object.prototype.hasOwnProperty;
  19185. const hasOwn = (val, key) => hasOwnProperty.call(val, key);
  19186. const defaultFormatter = new BaseFormatter();
  19187. function include(str, parts) {
  19188. return !!parts.find((part) => str.indexOf(part) !== -1);
  19189. }
  19190. function startsWith(str, parts) {
  19191. return parts.find((part) => str.indexOf(part) === 0);
  19192. }
  19193. function normalizeLocale(locale, messages2) {
  19194. if (!locale) {
  19195. return;
  19196. }
  19197. locale = locale.trim().replace(/_/g, "-");
  19198. if (messages2 && messages2[locale]) {
  19199. return locale;
  19200. }
  19201. locale = locale.toLowerCase();
  19202. if (locale === "chinese") {
  19203. return LOCALE_ZH_HANS;
  19204. }
  19205. if (locale.indexOf("zh") === 0) {
  19206. if (locale.indexOf("-hans") > -1) {
  19207. return LOCALE_ZH_HANS;
  19208. }
  19209. if (locale.indexOf("-hant") > -1) {
  19210. return LOCALE_ZH_HANT;
  19211. }
  19212. if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
  19213. return LOCALE_ZH_HANT;
  19214. }
  19215. return LOCALE_ZH_HANS;
  19216. }
  19217. let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
  19218. if (messages2 && Object.keys(messages2).length > 0) {
  19219. locales = Object.keys(messages2);
  19220. }
  19221. const lang = startsWith(locale, locales);
  19222. if (lang) {
  19223. return lang;
  19224. }
  19225. }
  19226. class I18n {
  19227. constructor({ locale, fallbackLocale, messages: messages2, watcher, formater: formater2 }) {
  19228. this.locale = LOCALE_EN;
  19229. this.fallbackLocale = LOCALE_EN;
  19230. this.message = {};
  19231. this.messages = {};
  19232. this.watchers = [];
  19233. if (fallbackLocale) {
  19234. this.fallbackLocale = fallbackLocale;
  19235. }
  19236. this.formater = formater2 || defaultFormatter;
  19237. this.messages = messages2 || {};
  19238. this.setLocale(locale || LOCALE_EN);
  19239. if (watcher) {
  19240. this.watchLocale(watcher);
  19241. }
  19242. }
  19243. setLocale(locale) {
  19244. const oldLocale = this.locale;
  19245. this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;
  19246. if (!this.messages[this.locale]) {
  19247. this.messages[this.locale] = {};
  19248. }
  19249. this.message = this.messages[this.locale];
  19250. if (oldLocale !== this.locale) {
  19251. this.watchers.forEach((watcher) => {
  19252. watcher(this.locale, oldLocale);
  19253. });
  19254. }
  19255. }
  19256. getLocale() {
  19257. return this.locale;
  19258. }
  19259. watchLocale(fn) {
  19260. const index = this.watchers.push(fn) - 1;
  19261. return () => {
  19262. this.watchers.splice(index, 1);
  19263. };
  19264. }
  19265. add(locale, message, override = true) {
  19266. const curMessages = this.messages[locale];
  19267. if (curMessages) {
  19268. if (override) {
  19269. Object.assign(curMessages, message);
  19270. } else {
  19271. Object.keys(message).forEach((key) => {
  19272. if (!hasOwn(curMessages, key)) {
  19273. curMessages[key] = message[key];
  19274. }
  19275. });
  19276. }
  19277. } else {
  19278. this.messages[locale] = message;
  19279. }
  19280. }
  19281. f(message, values, delimiters) {
  19282. return this.formater.interpolate(message, values, delimiters).join("");
  19283. }
  19284. t(key, locale, values) {
  19285. let message = this.message;
  19286. if (typeof locale === "string") {
  19287. locale = normalizeLocale(locale, this.messages);
  19288. locale && (message = this.messages[locale]);
  19289. } else {
  19290. values = locale;
  19291. }
  19292. if (!hasOwn(message, key)) {
  19293. console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);
  19294. return key;
  19295. }
  19296. return this.formater.interpolate(message[key], values).join("");
  19297. }
  19298. }
  19299. function watchAppLocale(appVm, i18n2) {
  19300. if (appVm.$watchLocale) {
  19301. appVm.$watchLocale((newLocale) => {
  19302. i18n2.setLocale(newLocale);
  19303. });
  19304. } else {
  19305. appVm.$watch(() => appVm.$locale, (newLocale) => {
  19306. i18n2.setLocale(newLocale);
  19307. });
  19308. }
  19309. }
  19310. function getDefaultLocale() {
  19311. if (typeof uni !== "undefined" && uni.getLocale) {
  19312. return uni.getLocale();
  19313. }
  19314. if (typeof global !== "undefined" && global.getLocale) {
  19315. return global.getLocale();
  19316. }
  19317. return LOCALE_EN;
  19318. }
  19319. function initVueI18n(locale, messages2 = {}, fallbackLocale, watcher) {
  19320. if (typeof locale !== "string") {
  19321. const options = [
  19322. messages2,
  19323. locale
  19324. ];
  19325. locale = options[0];
  19326. messages2 = options[1];
  19327. }
  19328. if (typeof locale !== "string") {
  19329. locale = getDefaultLocale();
  19330. }
  19331. if (typeof fallbackLocale !== "string") {
  19332. fallbackLocale = typeof __uniConfig !== "undefined" && __uniConfig.fallbackLocale || LOCALE_EN;
  19333. }
  19334. const i18n2 = new I18n({
  19335. locale,
  19336. fallbackLocale,
  19337. messages: messages2,
  19338. watcher
  19339. });
  19340. let t2 = (key, values) => {
  19341. if (typeof getApp !== "function") {
  19342. t2 = function(key2, values2) {
  19343. return i18n2.t(key2, values2);
  19344. };
  19345. } else {
  19346. let isWatchedAppLocale = false;
  19347. t2 = function(key2, values2) {
  19348. const appVm = getApp().$vm;
  19349. if (appVm) {
  19350. appVm.$locale;
  19351. if (!isWatchedAppLocale) {
  19352. isWatchedAppLocale = true;
  19353. watchAppLocale(appVm, i18n2);
  19354. }
  19355. }
  19356. return i18n2.t(key2, values2);
  19357. };
  19358. }
  19359. return t2(key, values);
  19360. };
  19361. return {
  19362. i18n: i18n2,
  19363. f(message, values, delimiters) {
  19364. return i18n2.f(message, values, delimiters);
  19365. },
  19366. t(key, values) {
  19367. return t2(key, values);
  19368. },
  19369. add(locale2, message, override = true) {
  19370. return i18n2.add(locale2, message, override);
  19371. },
  19372. watch(fn) {
  19373. return i18n2.watchLocale(fn);
  19374. },
  19375. getLocale() {
  19376. return i18n2.getLocale();
  19377. },
  19378. setLocale(newLocale) {
  19379. return i18n2.setLocale(newLocale);
  19380. }
  19381. };
  19382. }
  19383. const en = {
  19384. "zp.refresher.default": "Pull down to refresh",
  19385. "zp.refresher.pulling": "Release to refresh",
  19386. "zp.refresher.refreshing": "Refreshing...",
  19387. "zp.refresher.complete": "Refresh succeeded",
  19388. "zp.refresher.f2": "Refresh to enter 2f",
  19389. "zp.loadingMore.default": "Click to load more",
  19390. "zp.loadingMore.loading": "Loading...",
  19391. "zp.loadingMore.noMore": "No more data",
  19392. "zp.loadingMore.fail": "Load failed,click to reload",
  19393. "zp.emptyView.title": "No data",
  19394. "zp.emptyView.reload": "Reload",
  19395. "zp.emptyView.error": "Sorry,load failed",
  19396. "zp.refresherUpdateTime.title": "Last update: ",
  19397. "zp.refresherUpdateTime.none": "None",
  19398. "zp.refresherUpdateTime.today": "Today",
  19399. "zp.refresherUpdateTime.yesterday": "Yesterday",
  19400. "zp.systemLoading.title": "Loading..."
  19401. };
  19402. const zhHans = {
  19403. "zp.refresher.default": "继续下拉刷新",
  19404. "zp.refresher.pulling": "松开立即刷新",
  19405. "zp.refresher.refreshing": "正在刷新...",
  19406. "zp.refresher.complete": "刷新成功",
  19407. "zp.refresher.f2": "松手进入二楼",
  19408. "zp.loadingMore.default": "点击加载更多",
  19409. "zp.loadingMore.loading": "正在加载...",
  19410. "zp.loadingMore.noMore": "没有更多了",
  19411. "zp.loadingMore.fail": "加载失败,点击重新加载",
  19412. "zp.emptyView.title": "没有数据哦~",
  19413. "zp.emptyView.reload": "重新加载",
  19414. "zp.emptyView.error": "很抱歉,加载失败",
  19415. "zp.refresherUpdateTime.title": "最后更新:",
  19416. "zp.refresherUpdateTime.none": "无",
  19417. "zp.refresherUpdateTime.today": "今天",
  19418. "zp.refresherUpdateTime.yesterday": "昨天",
  19419. "zp.systemLoading.title": "加载中..."
  19420. };
  19421. const zhHant = {
  19422. "zp.refresher.default": "繼續下拉重繪",
  19423. "zp.refresher.pulling": "鬆開立即重繪",
  19424. "zp.refresher.refreshing": "正在重繪...",
  19425. "zp.refresher.complete": "重繪成功",
  19426. "zp.refresher.f2": "鬆手進入二樓",
  19427. "zp.loadingMore.default": "點擊加載更多",
  19428. "zp.loadingMore.loading": "正在加載...",
  19429. "zp.loadingMore.noMore": "沒有更多了",
  19430. "zp.loadingMore.fail": "加載失敗,點擊重新加載",
  19431. "zp.emptyView.title": "沒有數據哦~",
  19432. "zp.emptyView.reload": "重新加載",
  19433. "zp.emptyView.error": "很抱歉,加載失敗",
  19434. "zp.refresherUpdateTime.title": "最後更新:",
  19435. "zp.refresherUpdateTime.none": "無",
  19436. "zp.refresherUpdateTime.today": "今天",
  19437. "zp.refresherUpdateTime.yesterday": "昨天",
  19438. "zp.systemLoading.title": "加載中..."
  19439. };
  19440. const messages$1 = {
  19441. en,
  19442. "zh-Hans": zhHans,
  19443. "zh-Hant": zhHant
  19444. };
  19445. const { t: t$2 } = initVueI18n(messages$1);
  19446. const i18nModule = {
  19447. computed: {
  19448. finalLanguage() {
  19449. try {
  19450. const local = uni.getLocale();
  19451. const language = this.systemInfo.appLanguage;
  19452. return local === "auto" ? interceptor._handleLanguage2Local(language, this._language2Local(language)) : local;
  19453. } catch (e) {
  19454. return "zh-Hans";
  19455. }
  19456. },
  19457. // 最终的下拉刷新默认状态的文字
  19458. finalRefresherDefaultText() {
  19459. return this._getI18nText("zp.refresher.default", this.refresherDefaultText);
  19460. },
  19461. // 最终的下拉刷新下拉中的文字
  19462. finalRefresherPullingText() {
  19463. return this._getI18nText("zp.refresher.pulling", this.refresherPullingText);
  19464. },
  19465. // 最终的下拉刷新中文字
  19466. finalRefresherRefreshingText() {
  19467. return this._getI18nText("zp.refresher.refreshing", this.refresherRefreshingText);
  19468. },
  19469. // 最终的下拉刷新完成文字
  19470. finalRefresherCompleteText() {
  19471. return this._getI18nText("zp.refresher.complete", this.refresherCompleteText);
  19472. },
  19473. // 最终的下拉刷新上次更新时间文字
  19474. finalRefresherUpdateTimeTextMap() {
  19475. return {
  19476. title: t$2("zp.refresherUpdateTime.title"),
  19477. none: t$2("zp.refresherUpdateTime.none"),
  19478. today: t$2("zp.refresherUpdateTime.today"),
  19479. yesterday: t$2("zp.refresherUpdateTime.yesterday")
  19480. };
  19481. },
  19482. // 最终的继续下拉进入二楼文字
  19483. finalRefresherGoF2Text() {
  19484. return this._getI18nText("zp.refresher.f2", this.refresherGoF2Text);
  19485. },
  19486. // 最终的底部加载更多默认状态文字
  19487. finalLoadingMoreDefaultText() {
  19488. return this._getI18nText("zp.loadingMore.default", this.loadingMoreDefaultText);
  19489. },
  19490. // 最终的底部加载更多加载中文字
  19491. finalLoadingMoreLoadingText() {
  19492. return this._getI18nText("zp.loadingMore.loading", this.loadingMoreLoadingText);
  19493. },
  19494. // 最终的底部加载更多没有更多数据文字
  19495. finalLoadingMoreNoMoreText() {
  19496. return this._getI18nText("zp.loadingMore.noMore", this.loadingMoreNoMoreText);
  19497. },
  19498. // 最终的底部加载更多加载失败文字
  19499. finalLoadingMoreFailText() {
  19500. return this._getI18nText("zp.loadingMore.fail", this.loadingMoreFailText);
  19501. },
  19502. // 最终的空数据图title
  19503. finalEmptyViewText() {
  19504. return this.isLoadFailed ? this.finalEmptyViewErrorText : this._getI18nText("zp.emptyView.title", this.emptyViewText);
  19505. },
  19506. // 最终的空数据图reload title
  19507. finalEmptyViewReloadText() {
  19508. return this._getI18nText("zp.emptyView.reload", this.emptyViewReloadText);
  19509. },
  19510. // 最终的空数据图加载失败文字
  19511. finalEmptyViewErrorText() {
  19512. return this.customerEmptyViewErrorText || this._getI18nText("zp.emptyView.error", this.emptyViewErrorText);
  19513. },
  19514. // 最终的系统loading title
  19515. finalSystemLoadingText() {
  19516. return this._getI18nText("zp.systemLoading.title", this.systemLoadingText);
  19517. }
  19518. },
  19519. methods: {
  19520. // 获取当前z-paging的语言
  19521. getLanguage() {
  19522. return this.finalLanguage;
  19523. },
  19524. // 获取国际化转换后的文本
  19525. _getI18nText(key, value) {
  19526. const dataType = Object.prototype.toString.call(value);
  19527. if (dataType === "[object Object]") {
  19528. const nextValue = value[this.finalLanguage];
  19529. if (nextValue)
  19530. return nextValue;
  19531. } else if (dataType === "[object String]") {
  19532. return value;
  19533. }
  19534. return t$2(key);
  19535. },
  19536. // 系统language转i18n local
  19537. _language2Local(language) {
  19538. const formatedLanguage = language.toLowerCase().replace(new RegExp("_", ""), "-");
  19539. if (formatedLanguage.indexOf("zh") !== -1) {
  19540. if (formatedLanguage === "zh" || formatedLanguage === "zh-cn" || formatedLanguage.indexOf("zh-hans") !== -1) {
  19541. return "zh-Hans";
  19542. }
  19543. return "zh-Hant";
  19544. }
  19545. if (formatedLanguage.indexOf("en") !== -1)
  19546. return "en";
  19547. return language;
  19548. }
  19549. }
  19550. };
  19551. const nvueModule = {
  19552. props: {},
  19553. data() {
  19554. return {
  19555. nRefresherLoading: false,
  19556. nListIsDragging: false,
  19557. nShowBottom: true,
  19558. nFixFreezing: false,
  19559. nShowRefresherReveal: false,
  19560. nLoadingMoreFixedHeight: false,
  19561. nShowRefresherRevealHeight: 0,
  19562. nOldShowRefresherRevealHeight: -1,
  19563. nRefresherWidth: u.rpx2px(750),
  19564. nF2Opacity: 0
  19565. };
  19566. },
  19567. computed: {},
  19568. mounted() {
  19569. },
  19570. methods: {}
  19571. };
  19572. const emptyModule = {
  19573. props: {
  19574. // 是否强制隐藏空数据图,默认为否
  19575. hideEmptyView: {
  19576. type: Boolean,
  19577. default: u.gc("hideEmptyView", false)
  19578. },
  19579. // 空数据图描述文字,默认为“没有数据哦~”
  19580. emptyViewText: {
  19581. type: [String, Object],
  19582. default: u.gc("emptyViewText", null)
  19583. },
  19584. // 是否显示空数据图重新加载按钮(无数据时),默认为否
  19585. showEmptyViewReload: {
  19586. type: Boolean,
  19587. default: u.gc("showEmptyViewReload", false)
  19588. },
  19589. // 加载失败时是否显示空数据图重新加载按钮,默认为是
  19590. showEmptyViewReloadWhenError: {
  19591. type: Boolean,
  19592. default: u.gc("showEmptyViewReloadWhenError", true)
  19593. },
  19594. // 空数据图点击重新加载文字,默认为“重新加载”
  19595. emptyViewReloadText: {
  19596. type: [String, Object],
  19597. default: u.gc("emptyViewReloadText", null)
  19598. },
  19599. // 空数据图图片,默认使用z-paging内置的图片
  19600. emptyViewImg: {
  19601. type: String,
  19602. default: u.gc("emptyViewImg", "")
  19603. },
  19604. // 空数据图“加载失败”描述文字,默认为“很抱歉,加载失败”
  19605. emptyViewErrorText: {
  19606. type: [String, Object],
  19607. default: u.gc("emptyViewErrorText", null)
  19608. },
  19609. // 空数据图“加载失败”图片,默认使用z-paging内置的图片
  19610. emptyViewErrorImg: {
  19611. type: String,
  19612. default: u.gc("emptyViewErrorImg", "")
  19613. },
  19614. // 空数据图样式
  19615. emptyViewStyle: {
  19616. type: Object,
  19617. default: u.gc("emptyViewStyle", {})
  19618. },
  19619. // 空数据图容器样式
  19620. emptyViewSuperStyle: {
  19621. type: Object,
  19622. default: u.gc("emptyViewSuperStyle", {})
  19623. },
  19624. // 空数据图img样式
  19625. emptyViewImgStyle: {
  19626. type: Object,
  19627. default: u.gc("emptyViewImgStyle", {})
  19628. },
  19629. // 空数据图描述文字样式
  19630. emptyViewTitleStyle: {
  19631. type: Object,
  19632. default: u.gc("emptyViewTitleStyle", {})
  19633. },
  19634. // 空数据图重新加载按钮样式
  19635. emptyViewReloadStyle: {
  19636. type: Object,
  19637. default: u.gc("emptyViewReloadStyle", {})
  19638. },
  19639. // 空数据图片是否铺满z-paging,默认为否,即填充满z-paging内列表(滚动区域)部分。若设置为否,则为填铺满整个z-paging
  19640. emptyViewFixed: {
  19641. type: Boolean,
  19642. default: u.gc("emptyViewFixed", false)
  19643. },
  19644. // 空数据图片是否垂直居中,默认为是,若设置为否即为从空数据容器顶部开始显示。emptyViewFixed为false时有效
  19645. emptyViewCenter: {
  19646. type: Boolean,
  19647. default: u.gc("emptyViewCenter", true)
  19648. },
  19649. // 加载中时是否自动隐藏空数据图,默认为是
  19650. autoHideEmptyViewWhenLoading: {
  19651. type: Boolean,
  19652. default: u.gc("autoHideEmptyViewWhenLoading", true)
  19653. },
  19654. // 用户下拉列表触发下拉刷新加载中时是否自动隐藏空数据图,默认为是
  19655. autoHideEmptyViewWhenPull: {
  19656. type: Boolean,
  19657. default: u.gc("autoHideEmptyViewWhenPull", true)
  19658. },
  19659. // 空数据view的z-index,默认为9
  19660. emptyViewZIndex: {
  19661. type: Number,
  19662. default: u.gc("emptyViewZIndex", 9)
  19663. }
  19664. },
  19665. data() {
  19666. return {
  19667. customerEmptyViewErrorText: ""
  19668. };
  19669. },
  19670. computed: {
  19671. finalEmptyViewImg() {
  19672. return this.isLoadFailed ? this.emptyViewErrorImg : this.emptyViewImg;
  19673. },
  19674. finalShowEmptyViewReload() {
  19675. return this.isLoadFailed ? this.showEmptyViewReloadWhenError : this.showEmptyViewReload;
  19676. },
  19677. // 是否展示空数据图
  19678. showEmpty() {
  19679. if (this.refresherOnly || this.hideEmptyView || this.realTotalData.length)
  19680. return false;
  19681. if (this.autoHideEmptyViewWhenLoading) {
  19682. if (this.isAddedData && !this.firstPageLoaded && !this.loading)
  19683. return true;
  19684. } else {
  19685. return true;
  19686. }
  19687. return !this.autoHideEmptyViewWhenPull && !this.isUserReload;
  19688. }
  19689. },
  19690. methods: {
  19691. // 点击了空数据view重新加载按钮
  19692. _emptyViewReload() {
  19693. let callbacked = false;
  19694. this.$emit("emptyViewReload", (reload) => {
  19695. if (reload === void 0 || reload === true) {
  19696. this.fromEmptyViewReload = true;
  19697. this.reload().catch(() => {
  19698. });
  19699. }
  19700. callbacked = true;
  19701. });
  19702. this.$nextTick(() => {
  19703. if (!callbacked) {
  19704. this.fromEmptyViewReload = true;
  19705. this.reload().catch(() => {
  19706. });
  19707. }
  19708. });
  19709. },
  19710. // 点击了空数据view
  19711. _emptyViewClick() {
  19712. this.$emit("emptyViewClick");
  19713. }
  19714. }
  19715. };
  19716. const refresherModule = {
  19717. props: {
  19718. // 下拉刷新的主题样式,支持black,white,默认black
  19719. refresherThemeStyle: {
  19720. type: String,
  19721. default: u.gc("refresherThemeStyle", "")
  19722. },
  19723. // 自定义下拉刷新中左侧图标的样式
  19724. refresherImgStyle: {
  19725. type: Object,
  19726. default: u.gc("refresherImgStyle", {})
  19727. },
  19728. // 自定义下拉刷新中右侧状态描述文字的样式
  19729. refresherTitleStyle: {
  19730. type: Object,
  19731. default: u.gc("refresherTitleStyle", {})
  19732. },
  19733. // 自定义下拉刷新中右侧最后更新时间文字的样式(show-refresher-update-time为true时有效)
  19734. refresherUpdateTimeStyle: {
  19735. type: Object,
  19736. default: u.gc("refresherUpdateTimeStyle", {})
  19737. },
  19738. // 在微信小程序和QQ小程序中,是否实时监听下拉刷新中进度,默认为否
  19739. watchRefresherTouchmove: {
  19740. type: Boolean,
  19741. default: u.gc("watchRefresherTouchmove", false)
  19742. },
  19743. // 底部加载更多的主题样式,支持black,white,默认black
  19744. loadingMoreThemeStyle: {
  19745. type: String,
  19746. default: u.gc("loadingMoreThemeStyle", "")
  19747. },
  19748. // 是否只使用下拉刷新,设置为true后将关闭mounted自动请求数据、关闭滚动到底部加载更多,强制隐藏空数据图。默认为否
  19749. refresherOnly: {
  19750. type: Boolean,
  19751. default: u.gc("refresherOnly", false)
  19752. },
  19753. // 自定义下拉刷新默认状态下回弹动画时间,单位为毫秒,默认为100毫秒,nvue无效
  19754. refresherDefaultDuration: {
  19755. type: [Number, String],
  19756. default: u.gc("refresherDefaultDuration", 100)
  19757. },
  19758. // 自定义下拉刷新结束以后延迟回弹的时间,单位为毫秒,默认为0
  19759. refresherCompleteDelay: {
  19760. type: [Number, String],
  19761. default: u.gc("refresherCompleteDelay", 0)
  19762. },
  19763. // 自定义下拉刷新结束回弹动画时间,单位为毫秒,默认为300毫秒(refresherEndBounceEnabled为false时,refresherCompleteDuration为设定值的1/3),nvue无效
  19764. refresherCompleteDuration: {
  19765. type: [Number, String],
  19766. default: u.gc("refresherCompleteDuration", 300)
  19767. },
  19768. // 自定义下拉刷新中是否允许列表滚动,默认为是
  19769. refresherRefreshingScrollable: {
  19770. type: Boolean,
  19771. default: u.gc("refresherRefreshingScrollable", true)
  19772. },
  19773. // 自定义下拉刷新结束状态下是否允许列表滚动,默认为否
  19774. refresherCompleteScrollable: {
  19775. type: Boolean,
  19776. default: u.gc("refresherCompleteScrollable", false)
  19777. },
  19778. // 是否使用自定义的下拉刷新,默认为是,即使用z-paging的下拉刷新。设置为false即代表使用uni scroll-view自带的下拉刷新,h5、App、微信小程序以外的平台不支持uni scroll-view自带的下拉刷新
  19779. useCustomRefresher: {
  19780. type: Boolean,
  19781. default: u.gc("useCustomRefresher", true)
  19782. },
  19783. // 自定义下拉刷新下拉帧率,默认为40,过高可能会出现抖动问题
  19784. refresherFps: {
  19785. type: [Number, String],
  19786. default: u.gc("refresherFps", 40)
  19787. },
  19788. // 自定义下拉刷新允许触发的最大下拉角度,默认为40度,当下拉角度小于设定值时,自定义下拉刷新动画不会被触发
  19789. refresherMaxAngle: {
  19790. type: [Number, String],
  19791. default: u.gc("refresherMaxAngle", 40)
  19792. },
  19793. // 自定义下拉刷新的角度由未达到最大角度变到达到最大角度时,是否继续下拉刷新手势,默认为否
  19794. refresherAngleEnableChangeContinued: {
  19795. type: Boolean,
  19796. default: u.gc("refresherAngleEnableChangeContinued", false)
  19797. },
  19798. // 自定义下拉刷新默认状态下的文字
  19799. refresherDefaultText: {
  19800. type: [String, Object],
  19801. default: u.gc("refresherDefaultText", null)
  19802. },
  19803. // 自定义下拉刷新松手立即刷新状态下的文字
  19804. refresherPullingText: {
  19805. type: [String, Object],
  19806. default: u.gc("refresherPullingText", null)
  19807. },
  19808. // 自定义下拉刷新刷新中状态下的文字
  19809. refresherRefreshingText: {
  19810. type: [String, Object],
  19811. default: u.gc("refresherRefreshingText", null)
  19812. },
  19813. // 自定义下拉刷新刷新结束状态下的文字
  19814. refresherCompleteText: {
  19815. type: [String, Object],
  19816. default: u.gc("refresherCompleteText", null)
  19817. },
  19818. // 自定义继续下拉进入二楼文字
  19819. refresherGoF2Text: {
  19820. type: [String, Object],
  19821. default: u.gc("refresherGoF2Text", null)
  19822. },
  19823. // 自定义下拉刷新默认状态下的图片
  19824. refresherDefaultImg: {
  19825. type: String,
  19826. default: u.gc("refresherDefaultImg", null)
  19827. },
  19828. // 自定义下拉刷新松手立即刷新状态下的图片,默认与refresherDefaultImg一致
  19829. refresherPullingImg: {
  19830. type: String,
  19831. default: u.gc("refresherPullingImg", null)
  19832. },
  19833. // 自定义下拉刷新刷新中状态下的图片
  19834. refresherRefreshingImg: {
  19835. type: String,
  19836. default: u.gc("refresherRefreshingImg", null)
  19837. },
  19838. // 自定义下拉刷新刷新结束状态下的图片
  19839. refresherCompleteImg: {
  19840. type: String,
  19841. default: u.gc("refresherCompleteImg", null)
  19842. },
  19843. // 自定义下拉刷新刷新中状态下是否展示旋转动画
  19844. refresherRefreshingAnimated: {
  19845. type: Boolean,
  19846. default: u.gc("refresherRefreshingAnimated", true)
  19847. },
  19848. // 是否开启自定义下拉刷新刷新结束回弹效果,默认为是
  19849. refresherEndBounceEnabled: {
  19850. type: Boolean,
  19851. default: u.gc("refresherEndBounceEnabled", true)
  19852. },
  19853. // 是否开启自定义下拉刷新,默认为是
  19854. refresherEnabled: {
  19855. type: Boolean,
  19856. default: u.gc("refresherEnabled", true)
  19857. },
  19858. // 设置自定义下拉刷新阈值,默认为80rpx
  19859. refresherThreshold: {
  19860. type: [Number, String],
  19861. default: u.gc("refresherThreshold", "80rpx")
  19862. },
  19863. // 设置系统下拉刷新默认样式,支持设置 black,white,none,none 表示不使用默认样式,默认为black
  19864. refresherDefaultStyle: {
  19865. type: String,
  19866. default: u.gc("refresherDefaultStyle", "black")
  19867. },
  19868. // 设置自定义下拉刷新区域背景
  19869. refresherBackground: {
  19870. type: String,
  19871. default: u.gc("refresherBackground", "transparent")
  19872. },
  19873. // 设置固定的自定义下拉刷新区域背景
  19874. refresherFixedBackground: {
  19875. type: String,
  19876. default: u.gc("refresherFixedBackground", "transparent")
  19877. },
  19878. // 设置固定的自定义下拉刷新区域高度,默认为0
  19879. refresherFixedBacHeight: {
  19880. type: [Number, String],
  19881. default: u.gc("refresherFixedBacHeight", 0)
  19882. },
  19883. // 设置自定义下拉刷新下拉超出阈值后继续下拉位移衰减的比例,范围0-1,值越大代表衰减越多。默认为0.65(nvue无效)
  19884. refresherOutRate: {
  19885. type: Number,
  19886. default: u.gc("refresherOutRate", 0.65)
  19887. },
  19888. // 是否开启下拉进入二楼功能,默认为否
  19889. refresherF2Enabled: {
  19890. type: Boolean,
  19891. default: u.gc("refresherF2Enabled", false)
  19892. },
  19893. // 下拉进入二楼阈值,默认为200rpx
  19894. refresherF2Threshold: {
  19895. type: [Number, String],
  19896. default: u.gc("refresherF2Threshold", "200rpx")
  19897. },
  19898. // 下拉进入二楼动画时间,单位为毫秒,默认为200毫秒
  19899. refresherF2Duration: {
  19900. type: [Number, String],
  19901. default: u.gc("refresherF2Duration", 200)
  19902. },
  19903. // 下拉进入二楼状态松手后是否弹出二楼,默认为是
  19904. showRefresherF2: {
  19905. type: Boolean,
  19906. default: u.gc("showRefresherF2", true)
  19907. },
  19908. // 设置自定义下拉刷新下拉时实际下拉位移与用户下拉距离的比值,默认为0.75,即代表若用户下拉10px,则实际位移为7.5px(nvue无效)
  19909. refresherPullRate: {
  19910. type: Number,
  19911. default: u.gc("refresherPullRate", 0.75)
  19912. },
  19913. // 是否显示最后更新时间,默认为否
  19914. showRefresherUpdateTime: {
  19915. type: Boolean,
  19916. default: u.gc("showRefresherUpdateTime", false)
  19917. },
  19918. // 如果需要区别不同页面的最后更新时间,请为不同页面的z-paging的`refresher-update-time-key`设置不同的字符串
  19919. refresherUpdateTimeKey: {
  19920. type: String,
  19921. default: u.gc("refresherUpdateTimeKey", "default")
  19922. },
  19923. // 下拉刷新时下拉到“松手立即刷新”或“松手进入二楼”状态时是否使手机短振动,默认为否(h5无效)
  19924. refresherVibrate: {
  19925. type: Boolean,
  19926. default: u.gc("refresherVibrate", false)
  19927. },
  19928. // 下拉刷新时是否禁止下拉刷新view跟随用户触摸竖直移动,默认为否。注意此属性只是禁止下拉刷新view移动,其他下拉刷新逻辑依然会正常触发
  19929. refresherNoTransform: {
  19930. type: Boolean,
  19931. default: u.gc("refresherNoTransform", false)
  19932. },
  19933. // 是否开启下拉刷新状态栏占位,适用于隐藏导航栏时,下拉刷新需要避开状态栏高度的情况,默认为否
  19934. useRefresherStatusBarPlaceholder: {
  19935. type: Boolean,
  19936. default: u.gc("useRefresherStatusBarPlaceholder", false)
  19937. }
  19938. },
  19939. data() {
  19940. return {
  19941. R: Enum.Refresher,
  19942. //下拉刷新状态
  19943. refresherStatus: Enum.Refresher.Default,
  19944. refresherTouchstartY: 0,
  19945. lastRefresherTouchmove: null,
  19946. refresherReachMaxAngle: true,
  19947. refresherTransform: "translateY(0px)",
  19948. refresherTransition: "",
  19949. finalRefresherDefaultStyle: "black",
  19950. refresherRevealStackCount: 0,
  19951. refresherCompleteTimeout: null,
  19952. refresherCompleteSubTimeout: null,
  19953. refresherEndTimeout: null,
  19954. isTouchmovingTimeout: null,
  19955. refresherTriggered: false,
  19956. isTouchmoving: false,
  19957. isTouchEnded: false,
  19958. isUserPullDown: false,
  19959. privateRefresherEnabled: -1,
  19960. privateShowRefresherWhenReload: false,
  19961. customRefresherHeight: -1,
  19962. showCustomRefresher: false,
  19963. doRefreshAnimateAfter: false,
  19964. isRefresherInComplete: false,
  19965. showF2: false,
  19966. f2Transform: "",
  19967. pullDownTimeStamp: 0,
  19968. moveDis: 0,
  19969. oldMoveDis: 0,
  19970. currentDis: 0,
  19971. oldCurrentMoveDis: 0,
  19972. oldRefresherTouchmoveY: 0,
  19973. oldTouchDirection: "",
  19974. oldEmitedTouchDirection: "",
  19975. oldPullingDistance: -1,
  19976. refresherThresholdUpdateTag: 0
  19977. };
  19978. },
  19979. watch: {
  19980. refresherDefaultStyle: {
  19981. handler(newVal) {
  19982. if (newVal.length) {
  19983. this.finalRefresherDefaultStyle = newVal;
  19984. }
  19985. },
  19986. immediate: true
  19987. },
  19988. refresherStatus(newVal) {
  19989. newVal === Enum.Refresher.Loading && this._cleanRefresherEndTimeout();
  19990. this.refresherVibrate && (newVal === Enum.Refresher.ReleaseToRefresh || newVal === Enum.Refresher.GoF2) && this._doVibrateShort();
  19991. this.$emit("refresherStatusChange", newVal);
  19992. this.$emit("update:refresherStatus", newVal);
  19993. },
  19994. // 监听当前下拉刷新启用/禁用状态
  19995. refresherEnabled(newVal) {
  19996. !newVal && this.endRefresh();
  19997. }
  19998. },
  19999. computed: {
  20000. pullDownDisTimeStamp() {
  20001. return 1e3 / this.refresherFps;
  20002. },
  20003. refresherThresholdUnitConverted() {
  20004. return u.addUnit(this.refresherThreshold, this.unit);
  20005. },
  20006. finalRefresherEnabled() {
  20007. if (this.useChatRecordMode)
  20008. return false;
  20009. if (this.privateRefresherEnabled === -1)
  20010. return this.refresherEnabled;
  20011. return this.privateRefresherEnabled === 1;
  20012. },
  20013. finalRefresherThreshold() {
  20014. let refresherThreshold = this.refresherThresholdUnitConverted;
  20015. let idDefault = false;
  20016. if (refresherThreshold === u.addUnit(80, this.unit)) {
  20017. idDefault = true;
  20018. if (this.showRefresherUpdateTime) {
  20019. refresherThreshold = u.addUnit(120, this.unit);
  20020. }
  20021. }
  20022. if (idDefault && this.customRefresherHeight > 0)
  20023. return this.customRefresherHeight + this.finalRefresherThresholdPlaceholder;
  20024. return u.convertToPx(refresherThreshold) + this.finalRefresherThresholdPlaceholder;
  20025. },
  20026. finalRefresherF2Threshold() {
  20027. return u.convertToPx(u.addUnit(this.refresherF2Threshold, this.unit));
  20028. },
  20029. finalRefresherThresholdPlaceholder() {
  20030. return this.useRefresherStatusBarPlaceholder ? this.statusBarHeight : 0;
  20031. },
  20032. finalRefresherFixedBacHeight() {
  20033. return u.convertToPx(this.refresherFixedBacHeight);
  20034. },
  20035. finalRefresherThemeStyle() {
  20036. return this.refresherThemeStyle.length ? this.refresherThemeStyle : this.defaultThemeStyle;
  20037. },
  20038. finalRefresherOutRate() {
  20039. let rate = this.refresherOutRate;
  20040. rate = Math.max(0, rate);
  20041. rate = Math.min(1, rate);
  20042. return rate;
  20043. },
  20044. finalRefresherPullRate() {
  20045. let rate = this.refresherPullRate;
  20046. rate = Math.max(0, rate);
  20047. return rate;
  20048. },
  20049. finalRefresherTransform() {
  20050. if (this.refresherNoTransform || this.refresherTransform === "translateY(0px)")
  20051. return "none";
  20052. return this.refresherTransform;
  20053. },
  20054. finalShowRefresherWhenReload() {
  20055. return this.showRefresherWhenReload || this.privateShowRefresherWhenReload;
  20056. },
  20057. finalRefresherTriggered() {
  20058. if (!(this.finalRefresherEnabled && !this.useCustomRefresher))
  20059. return false;
  20060. return this.refresherTriggered;
  20061. },
  20062. showRefresher() {
  20063. const showRefresher = this.finalRefresherEnabled || this.useCustomRefresher && !this.useChatRecordMode;
  20064. this.active && this.customRefresherHeight === -1 && showRefresher && this.updateCustomRefresherHeight();
  20065. return showRefresher;
  20066. },
  20067. hasTouchmove() {
  20068. return this.watchRefresherTouchmove;
  20069. }
  20070. },
  20071. methods: {
  20072. // 终止下拉刷新状态
  20073. endRefresh() {
  20074. this.totalData = this.realTotalData;
  20075. this._refresherEnd();
  20076. this._endSystemLoadingAndRefresh();
  20077. this._handleScrollViewBounce({ bounce: true });
  20078. this.$nextTick(() => {
  20079. this.refresherTriggered = false;
  20080. });
  20081. },
  20082. // 手动更新自定义下拉刷新view高度
  20083. updateCustomRefresherHeight() {
  20084. u.delay(() => this.$nextTick(this._updateCustomRefresherHeight));
  20085. },
  20086. // 关闭二楼
  20087. closeF2() {
  20088. this._handleCloseF2();
  20089. },
  20090. // 自定义下拉刷新被触发
  20091. _onRefresh(fromScrollView = false, isUserPullDown = true) {
  20092. if (fromScrollView && !(this.finalRefresherEnabled && !this.useCustomRefresher))
  20093. return;
  20094. this.$emit("onRefresh");
  20095. this.$emit("Refresh");
  20096. if (this.loading || this.isRefresherInComplete)
  20097. return;
  20098. this.loadingType = Enum.LoadingType.Refresher;
  20099. if (this.nShowRefresherReveal)
  20100. return;
  20101. this.isUserPullDown = isUserPullDown;
  20102. this.isUserReload = !isUserPullDown;
  20103. this._startLoading(true);
  20104. this.refresherTriggered = true;
  20105. if (this.reloadWhenRefresh && isUserPullDown) {
  20106. this.useChatRecordMode ? this._onLoadingMore("click") : this._reload(false, false, isUserPullDown);
  20107. }
  20108. },
  20109. // 自定义下拉刷新被复位
  20110. _onRestore() {
  20111. this.refresherTriggered = "restore";
  20112. this.$emit("onRestore");
  20113. this.$emit("Restore");
  20114. },
  20115. // 进一步处理touch开始结果
  20116. _handleRefresherTouchstart(touch) {
  20117. if (!this.loading && this.isTouchEnded) {
  20118. this.isTouchmoving = false;
  20119. }
  20120. this.loadingType = Enum.LoadingType.Refresher;
  20121. this.isTouchmovingTimeout && clearTimeout(this.isTouchmovingTimeout);
  20122. this.isTouchEnded = false;
  20123. this.refresherTransition = "";
  20124. this.refresherTouchstartY = touch.touchY;
  20125. this.$emit("refresherTouchstart", this.refresherTouchstartY);
  20126. this.lastRefresherTouchmove = touch;
  20127. this._cleanRefresherCompleteTimeout();
  20128. this._cleanRefresherEndTimeout();
  20129. },
  20130. // 非app-vue或微信小程序或QQ小程序或h5平台,使用js控制下拉刷新
  20131. // 进一步处理touch中结果
  20132. _handleRefresherTouchmove(moveDis, touch) {
  20133. this.refresherReachMaxAngle = true;
  20134. this.isTouchmovingTimeout && clearTimeout(this.isTouchmovingTimeout);
  20135. this.isTouchmoving = true;
  20136. this.isTouchEnded = false;
  20137. if (moveDis >= this.finalRefresherThreshold) {
  20138. this.refresherStatus = this.refresherF2Enabled && moveDis >= this.finalRefresherF2Threshold ? Enum.Refresher.GoF2 : Enum.Refresher.ReleaseToRefresh;
  20139. } else {
  20140. this.refresherStatus = Enum.Refresher.Default;
  20141. }
  20142. this.moveDis = moveDis;
  20143. },
  20144. // 进一步处理touch结束结果
  20145. _handleRefresherTouchend(moveDis) {
  20146. this.isTouchmovingTimeout && clearTimeout(this.isTouchmovingTimeout);
  20147. this.refresherReachMaxAngle = true;
  20148. this.isTouchEnded = true;
  20149. const refresherThreshold = this.finalRefresherThreshold;
  20150. if (moveDis >= refresherThreshold && (this.refresherStatus === Enum.Refresher.ReleaseToRefresh || this.refresherStatus === Enum.Refresher.GoF2)) {
  20151. if (this.refresherStatus === Enum.Refresher.GoF2) {
  20152. this._handleGoF2();
  20153. this._refresherEnd();
  20154. } else {
  20155. u.delay(() => {
  20156. this._emitTouchmove({ pullingDistance: refresherThreshold, dy: this.moveDis - refresherThreshold });
  20157. }, 0.1);
  20158. this.moveDis = refresherThreshold;
  20159. this.refresherStatus = Enum.Refresher.Loading;
  20160. this._doRefresherLoad();
  20161. }
  20162. } else {
  20163. this._refresherEnd();
  20164. this.isTouchmovingTimeout = u.delay(() => {
  20165. this.isTouchmoving = false;
  20166. }, this.refresherDefaultDuration);
  20167. }
  20168. this.scrollEnable = true;
  20169. this.$emit("refresherTouchend", moveDis);
  20170. },
  20171. // 处理列表触摸开始事件
  20172. _handleListTouchstart() {
  20173. if (this.useChatRecordMode && this.autoHideKeyboardWhenChat) {
  20174. uni.hideKeyboard();
  20175. this.$emit("hidedKeyboard");
  20176. }
  20177. },
  20178. // 处理scroll-view bounce是否生效
  20179. _handleScrollViewBounce({ bounce }) {
  20180. if (!this.usePageScroll && !this.scrollToTopBounceEnabled) {
  20181. if (this.wxsScrollTop <= 5) {
  20182. this.refresherTransition = "";
  20183. this.scrollEnable = bounce;
  20184. } else if (bounce) {
  20185. this.scrollEnable = bounce;
  20186. }
  20187. }
  20188. },
  20189. // wxs正在下拉状态改变处理
  20190. _handleWxsPullingDownStatusChange(onPullingDown) {
  20191. this.wxsOnPullingDown = onPullingDown;
  20192. if (onPullingDown && !this.useChatRecordMode) {
  20193. this.renderPropScrollTop = 0;
  20194. }
  20195. },
  20196. // wxs正在下拉处理
  20197. _handleWxsPullingDown({ moveDis, diffDis }) {
  20198. this._emitTouchmove({ pullingDistance: moveDis, dy: diffDis });
  20199. },
  20200. // wxs触摸方向改变
  20201. _handleTouchDirectionChange({ direction }) {
  20202. this.$emit("touchDirectionChange", direction);
  20203. },
  20204. // wxs通知更新其props
  20205. _handlePropUpdate() {
  20206. this.wxsPropType = u.getTime().toString();
  20207. },
  20208. // 下拉刷新结束
  20209. _refresherEnd(shouldEndLoadingDelay = true, fromAddData = false, isUserPullDown = false, setLoading = true) {
  20210. if (this.loadingType === Enum.LoadingType.Refresher) {
  20211. const refresherCompleteDelay = fromAddData && (isUserPullDown || this.showRefresherWhenReload) ? this.refresherCompleteDelay : 0;
  20212. const refresherStatus = refresherCompleteDelay > 0 ? Enum.Refresher.Complete : Enum.Refresher.Default;
  20213. if (this.finalShowRefresherWhenReload) {
  20214. const stackCount = this.refresherRevealStackCount;
  20215. this.refresherRevealStackCount--;
  20216. if (stackCount > 1)
  20217. return;
  20218. }
  20219. this._cleanRefresherEndTimeout();
  20220. this.refresherEndTimeout = u.delay(() => {
  20221. this.refresherStatus = refresherStatus;
  20222. if (refresherStatus !== Enum.Refresher.Complete) {
  20223. this.isRefresherInComplete = false;
  20224. }
  20225. }, this.refresherStatus !== Enum.Refresher.Default && refresherStatus === Enum.Refresher.Default ? this.refresherCompleteDuration : 0);
  20226. if (refresherCompleteDelay > 0) {
  20227. this.isRefresherInComplete = true;
  20228. }
  20229. this._cleanRefresherCompleteTimeout();
  20230. this.refresherCompleteTimeout = u.delay(() => {
  20231. let animateDuration = 1;
  20232. const animateType = this.refresherEndBounceEnabled && fromAddData ? "cubic-bezier(0.19,1.64,0.42,0.72)" : "linear";
  20233. if (fromAddData) {
  20234. animateDuration = this.refresherEndBounceEnabled ? this.refresherCompleteDuration / 1e3 : this.refresherCompleteDuration / 3e3;
  20235. }
  20236. this.refresherTransition = `transform ${fromAddData ? animateDuration : this.refresherDefaultDuration / 1e3}s ${animateType}`;
  20237. this.wxsPropType = this.refresherTransition + "end" + u.getTime();
  20238. this.moveDis = 0;
  20239. if (refresherStatus === Enum.Refresher.Complete) {
  20240. if (this.refresherCompleteSubTimeout) {
  20241. clearTimeout(this.refresherCompleteSubTimeout);
  20242. this.refresherCompleteSubTimeout = null;
  20243. }
  20244. this.refresherCompleteSubTimeout = u.delay(() => {
  20245. this.$nextTick(() => {
  20246. this.refresherStatus = Enum.Refresher.Default;
  20247. this.isRefresherInComplete = false;
  20248. });
  20249. }, animateDuration * 800);
  20250. }
  20251. this._emitTouchmove({ pullingDistance: 0, dy: this.moveDis });
  20252. }, refresherCompleteDelay);
  20253. }
  20254. if (setLoading) {
  20255. u.delay(() => this.loading = false, shouldEndLoadingDelay ? 10 : 0);
  20256. isUserPullDown && this._onRestore();
  20257. }
  20258. },
  20259. // 处理进入二楼
  20260. _handleGoF2() {
  20261. if (this.showF2 || !this.refresherF2Enabled)
  20262. return;
  20263. this.$emit("refresherF2Change", "go");
  20264. if (!this.showRefresherF2)
  20265. return;
  20266. this.f2Transform = `translateY(${-this.superContentHeight}px)`;
  20267. this.showF2 = true;
  20268. u.delay(() => {
  20269. this.f2Transform = "translateY(0px)";
  20270. }, 100, "f2ShowDelay");
  20271. },
  20272. // 处理退出二楼
  20273. _handleCloseF2() {
  20274. if (!this.showF2 || !this.refresherF2Enabled)
  20275. return;
  20276. this.$emit("refresherF2Change", "close");
  20277. if (!this.showRefresherF2)
  20278. return;
  20279. this.f2Transform = `translateY(${-this.superContentHeight}px)`;
  20280. u.delay(() => {
  20281. this.showF2 = false;
  20282. this.nF2Opacity = 0;
  20283. }, this.refresherF2Duration, "f2CloseDelay");
  20284. },
  20285. // 模拟用户手动触发下拉刷新
  20286. _doRefresherRefreshAnimate() {
  20287. this._cleanRefresherCompleteTimeout();
  20288. const doRefreshAnimateAfter = !this.doRefreshAnimateAfter && this.finalShowRefresherWhenReload && this.customRefresherHeight === -1 && this.refresherThreshold === u.addUnit(80, this.unit);
  20289. if (doRefreshAnimateAfter) {
  20290. this.doRefreshAnimateAfter = true;
  20291. return;
  20292. }
  20293. this.refresherRevealStackCount++;
  20294. this.wxsPropType = "begin" + u.getTime();
  20295. this.moveDis = this.finalRefresherThreshold;
  20296. this.refresherStatus = Enum.Refresher.Loading;
  20297. this.isTouchmoving = true;
  20298. this.isTouchmovingTimeout && clearTimeout(this.isTouchmovingTimeout);
  20299. this._doRefresherLoad(false);
  20300. },
  20301. // 触发下拉刷新
  20302. _doRefresherLoad(isUserPullDown = true) {
  20303. this._onRefresh(false, isUserPullDown);
  20304. this.loading = true;
  20305. },
  20306. // 更新自定义下拉刷新view高度
  20307. _updateCustomRefresherHeight() {
  20308. this._getNodeClientRect(".zp-custom-refresher-slot-view").then((res) => {
  20309. this.customRefresherHeight = res ? res[0].height : 0;
  20310. this.showCustomRefresher = this.customRefresherHeight > 0;
  20311. if (this.doRefreshAnimateAfter) {
  20312. this.doRefreshAnimateAfter = false;
  20313. this._doRefresherRefreshAnimate();
  20314. }
  20315. });
  20316. },
  20317. // emit pullingDown事件
  20318. _emitTouchmove(e) {
  20319. e.viewHeight = this.finalRefresherThreshold;
  20320. e.rate = e.viewHeight > 0 ? e.pullingDistance / e.viewHeight : 0;
  20321. this.hasTouchmove && this.oldPullingDistance !== e.pullingDistance && this.$emit("refresherTouchmove", e);
  20322. this.oldPullingDistance = e.pullingDistance;
  20323. },
  20324. // 清除refresherCompleteTimeout
  20325. _cleanRefresherCompleteTimeout() {
  20326. this.refresherCompleteTimeout = this._cleanTimeout(this.refresherCompleteTimeout);
  20327. },
  20328. // 清除refresherEndTimeout
  20329. _cleanRefresherEndTimeout() {
  20330. this.refresherEndTimeout = this._cleanTimeout(this.refresherEndTimeout);
  20331. }
  20332. }
  20333. };
  20334. const loadMoreModule = {
  20335. props: {
  20336. // 自定义底部加载更多样式
  20337. loadingMoreCustomStyle: {
  20338. type: Object,
  20339. default: u.gc("loadingMoreCustomStyle", {})
  20340. },
  20341. // 自定义底部加载更多文字样式
  20342. loadingMoreTitleCustomStyle: {
  20343. type: Object,
  20344. default: u.gc("loadingMoreTitleCustomStyle", {})
  20345. },
  20346. // 自定义底部加载更多加载中动画样式
  20347. loadingMoreLoadingIconCustomStyle: {
  20348. type: Object,
  20349. default: u.gc("loadingMoreLoadingIconCustomStyle", {})
  20350. },
  20351. // 自定义底部加载更多加载中动画图标类型,可选flower或circle,默认为flower
  20352. loadingMoreLoadingIconType: {
  20353. type: String,
  20354. default: u.gc("loadingMoreLoadingIconType", "flower")
  20355. },
  20356. // 自定义底部加载更多加载中动画图标图片
  20357. loadingMoreLoadingIconCustomImage: {
  20358. type: String,
  20359. default: u.gc("loadingMoreLoadingIconCustomImage", "")
  20360. },
  20361. // 底部加载更多加载中view是否展示旋转动画,默认为是
  20362. loadingMoreLoadingAnimated: {
  20363. type: Boolean,
  20364. default: u.gc("loadingMoreLoadingAnimated", true)
  20365. },
  20366. // 是否启用加载更多数据(含滑动到底部加载更多数据和点击加载更多数据),默认为是
  20367. loadingMoreEnabled: {
  20368. type: Boolean,
  20369. default: u.gc("loadingMoreEnabled", true)
  20370. },
  20371. // 是否启用滑动到底部加载更多数据,默认为是
  20372. toBottomLoadingMoreEnabled: {
  20373. type: Boolean,
  20374. default: u.gc("toBottomLoadingMoreEnabled", true)
  20375. },
  20376. // 滑动到底部状态为默认状态时,以加载中的状态展示,默认为否。若设置为是,可避免滚动到底部看到默认状态然后立刻变为加载中状态的问题,但分页数量未超过一屏时,不会显示【点击加载更多】
  20377. loadingMoreDefaultAsLoading: {
  20378. type: Boolean,
  20379. default: u.gc("loadingMoreDefaultAsLoading", false)
  20380. },
  20381. // 滑动到底部"默认"文字,默认为【点击加载更多】
  20382. loadingMoreDefaultText: {
  20383. type: [String, Object],
  20384. default: u.gc("loadingMoreDefaultText", null)
  20385. },
  20386. // 滑动到底部"加载中"文字,默认为【正在加载...】
  20387. loadingMoreLoadingText: {
  20388. type: [String, Object],
  20389. default: u.gc("loadingMoreLoadingText", null)
  20390. },
  20391. // 滑动到底部"没有更多"文字,默认为【没有更多了】
  20392. loadingMoreNoMoreText: {
  20393. type: [String, Object],
  20394. default: u.gc("loadingMoreNoMoreText", null)
  20395. },
  20396. // 滑动到底部"加载失败"文字,默认为【加载失败,点击重新加载】
  20397. loadingMoreFailText: {
  20398. type: [String, Object],
  20399. default: u.gc("loadingMoreFailText", null)
  20400. },
  20401. // 当没有更多数据且分页内容未超出z-paging时是否隐藏没有更多数据的view,默认为否
  20402. hideNoMoreInside: {
  20403. type: Boolean,
  20404. default: u.gc("hideNoMoreInside", false)
  20405. },
  20406. // 当没有更多数据且分页数组长度少于这个值时,隐藏没有更多数据的view,默认为0,代表不限制。
  20407. hideNoMoreByLimit: {
  20408. type: Number,
  20409. default: u.gc("hideNoMoreByLimit", 0)
  20410. },
  20411. // 是否显示默认的加载更多text,默认为是
  20412. showDefaultLoadingMoreText: {
  20413. type: Boolean,
  20414. default: u.gc("showDefaultLoadingMoreText", true)
  20415. },
  20416. // 是否显示没有更多数据的view
  20417. showLoadingMoreNoMoreView: {
  20418. type: Boolean,
  20419. default: u.gc("showLoadingMoreNoMoreView", true)
  20420. },
  20421. // 是否显示没有更多数据的分割线,默认为是
  20422. showLoadingMoreNoMoreLine: {
  20423. type: Boolean,
  20424. default: u.gc("showLoadingMoreNoMoreLine", true)
  20425. },
  20426. // 自定义底部没有更多数据的分割线样式
  20427. loadingMoreNoMoreLineCustomStyle: {
  20428. type: Object,
  20429. default: u.gc("loadingMoreNoMoreLineCustomStyle", {})
  20430. },
  20431. // 当分页未满一屏时,是否自动加载更多,默认为否(nvue无效)
  20432. insideMore: {
  20433. type: Boolean,
  20434. default: u.gc("insideMore", false)
  20435. },
  20436. // 距底部/右边多远时(单位px),触发 scrolltolower 事件,默认为100rpx
  20437. lowerThreshold: {
  20438. type: [Number, String],
  20439. default: u.gc("lowerThreshold", "100rpx")
  20440. }
  20441. },
  20442. data() {
  20443. return {
  20444. M: Enum.More,
  20445. // 底部加载更多状态
  20446. loadingStatus: Enum.More.Default,
  20447. // 在渲染之后的底部加载更多状态
  20448. loadingStatusAfterRender: Enum.More.Default,
  20449. // 底部加载更多时间戳
  20450. loadingMoreTimeStamp: 0,
  20451. // 底部加载更多slot
  20452. loadingMoreDefaultSlot: null,
  20453. // 是否展示底部加载更多
  20454. showLoadingMore: false,
  20455. // 是否是开发者自定义的加载更多,-1代表交由z-paging自行判断;1代表没有更多了;0代表还有更多数据
  20456. customNoMore: -1
  20457. };
  20458. },
  20459. computed: {
  20460. // 底部加载更多配置
  20461. zLoadMoreConfig() {
  20462. return {
  20463. status: this.loadingStatusAfterRender,
  20464. defaultAsLoading: this.loadingMoreDefaultAsLoading || this.useChatRecordMode && this.chatLoadingMoreDefaultAsLoading,
  20465. defaultThemeStyle: this.finalLoadingMoreThemeStyle,
  20466. customStyle: this.loadingMoreCustomStyle,
  20467. titleCustomStyle: this.loadingMoreTitleCustomStyle,
  20468. iconCustomStyle: this.loadingMoreLoadingIconCustomStyle,
  20469. loadingIconType: this.loadingMoreLoadingIconType,
  20470. loadingIconCustomImage: this.loadingMoreLoadingIconCustomImage,
  20471. loadingAnimated: this.loadingMoreLoadingAnimated,
  20472. showNoMoreLine: this.showLoadingMoreNoMoreLine,
  20473. noMoreLineCustomStyle: this.loadingMoreNoMoreLineCustomStyle,
  20474. defaultText: this.finalLoadingMoreDefaultText,
  20475. loadingText: this.finalLoadingMoreLoadingText,
  20476. noMoreText: this.finalLoadingMoreNoMoreText,
  20477. failText: this.finalLoadingMoreFailText,
  20478. hideContent: !this.loadingMoreDefaultAsLoading && this.listRendering,
  20479. unit: this.unit,
  20480. isChat: this.useChatRecordMode,
  20481. chatDefaultAsLoading: this.chatLoadingMoreDefaultAsLoading
  20482. };
  20483. },
  20484. // 最终的底部加载更多主题
  20485. finalLoadingMoreThemeStyle() {
  20486. return this.loadingMoreThemeStyle.length ? this.loadingMoreThemeStyle : this.defaultThemeStyle;
  20487. },
  20488. // 最终的底部加载更多触发阈值
  20489. finalLowerThreshold() {
  20490. return u.convertToPx(this.lowerThreshold);
  20491. },
  20492. // 是否显示默认状态下的底部加载更多
  20493. showLoadingMoreDefault() {
  20494. return this._showLoadingMore("Default");
  20495. },
  20496. // 是否显示加载中状态下的底部加载更多
  20497. showLoadingMoreLoading() {
  20498. return this._showLoadingMore("Loading");
  20499. },
  20500. // 是否显示没有更多了状态下的底部加载更多
  20501. showLoadingMoreNoMore() {
  20502. return this._showLoadingMore("NoMore");
  20503. },
  20504. // 是否显示加载失败状态下的底部加载更多
  20505. showLoadingMoreFail() {
  20506. return this._showLoadingMore("Fail");
  20507. },
  20508. // 是否显示自定义状态下的底部加载更多
  20509. showLoadingMoreCustom() {
  20510. return this._showLoadingMore("Custom");
  20511. },
  20512. // 底部加载更多固定高度
  20513. loadingMoreFixedHeight() {
  20514. return u.addUnit("80rpx", this.unit);
  20515. }
  20516. },
  20517. methods: {
  20518. // 页面滚动到底部时通知z-paging进行进一步处理
  20519. pageReachBottom() {
  20520. !this.useChatRecordMode && this.toBottomLoadingMoreEnabled && this._onLoadingMore("toBottom");
  20521. },
  20522. // 手动触发上拉加载更多(非必须,可依据具体需求使用)
  20523. doLoadMore(type2) {
  20524. this._onLoadingMore(type2);
  20525. },
  20526. // 通过@scroll事件检测是否滚动到了底部(顺带检测下是否滚动到了顶部)
  20527. _checkScrolledToBottom(scrollDiff, checked = false) {
  20528. if (this.cacheScrollNodeHeight === -1) {
  20529. this._getNodeClientRect(".zp-scroll-view").then((res) => {
  20530. if (res) {
  20531. const scrollNodeHeight = res[0].height;
  20532. this.cacheScrollNodeHeight = scrollNodeHeight;
  20533. if (scrollDiff - scrollNodeHeight <= this.finalLowerThreshold) {
  20534. this._onLoadingMore("toBottom");
  20535. }
  20536. }
  20537. });
  20538. } else {
  20539. if (scrollDiff - this.cacheScrollNodeHeight <= this.finalLowerThreshold) {
  20540. this._onLoadingMore("toBottom");
  20541. } else if (scrollDiff - this.cacheScrollNodeHeight <= 500 && !checked) {
  20542. u.delay(() => {
  20543. this._getNodeClientRect(".zp-scroll-view", true, true).then((res) => {
  20544. if (res) {
  20545. this.oldScrollTop = res[0].scrollTop;
  20546. const newScrollDiff = res[0].scrollHeight - this.oldScrollTop;
  20547. this._checkScrolledToBottom(newScrollDiff, true);
  20548. }
  20549. });
  20550. }, 150, "checkScrolledToBottomDelay");
  20551. }
  20552. if (this.oldScrollTop <= 150 && this.oldScrollTop !== 0) {
  20553. u.delay(() => {
  20554. if (this.oldScrollTop !== 0) {
  20555. this._getNodeClientRect(".zp-scroll-view", true, true).then((res) => {
  20556. if (res && res[0].scrollTop === 0 && this.oldScrollTop !== 0) {
  20557. this._onScrollToUpper();
  20558. }
  20559. });
  20560. }
  20561. }, 150, "checkScrolledToTopDelay");
  20562. }
  20563. }
  20564. },
  20565. // 触发加载更多时调用,from:toBottom-滑动到底部触发;click-点击加载更多触发
  20566. _onLoadingMore(from = "click") {
  20567. if (this.isIos && from === "toBottom" && !this.scrollToBottomBounceEnabled && this.scrollEnable) {
  20568. this.scrollEnable = false;
  20569. this.$nextTick(() => {
  20570. this.scrollEnable = true;
  20571. });
  20572. }
  20573. this._emitScrollEvent("scrolltolower");
  20574. if (this.refresherOnly || !this.loadingMoreEnabled || !(this.loadingStatus === Enum.More.Default || this.loadingStatus === Enum.More.Fail) || this.loading || this.showEmpty)
  20575. return;
  20576. this._doLoadingMore();
  20577. },
  20578. // 处理开始加载更多
  20579. _doLoadingMore() {
  20580. if (this.pageNo >= this.defaultPageNo && this.loadingStatus !== Enum.More.NoMore) {
  20581. this.pageNo++;
  20582. this._startLoading(false);
  20583. if (this.isLocalPaging) {
  20584. this._localPagingQueryList(this.pageNo, this.defaultPageSize, this.localPagingLoadingTime, (res) => {
  20585. this.completeByTotal(res, this.totalLocalPagingList.length);
  20586. this.queryFrom = Enum.QueryFrom.LoadMore;
  20587. });
  20588. } else {
  20589. this._emitQuery(this.pageNo, this.defaultPageSize, Enum.QueryFrom.LoadMore);
  20590. this._callMyParentQuery();
  20591. }
  20592. this.loadingType = Enum.LoadingType.LoadMore;
  20593. }
  20594. },
  20595. // (预处理)判断当没有更多数据且分页内容未超出z-paging时是否显示没有更多数据的view
  20596. _preCheckShowNoMoreInside(newVal, scrollViewNode, pagingContainerNode) {
  20597. if (this.loadingStatus === Enum.More.NoMore && this.hideNoMoreByLimit > 0 && newVal.length) {
  20598. this.showLoadingMore = newVal.length > this.hideNoMoreByLimit;
  20599. } else if (this.loadingStatus === Enum.More.NoMore && this.hideNoMoreInside && newVal.length || this.insideMore && this.insideOfPaging !== false && newVal.length) {
  20600. this.$nextTick(() => {
  20601. this._checkShowNoMoreInside(newVal, scrollViewNode, pagingContainerNode);
  20602. });
  20603. if (this.insideMore && this.insideOfPaging !== false && newVal.length) {
  20604. this.showLoadingMore = newVal.length;
  20605. }
  20606. } else {
  20607. this.showLoadingMore = newVal.length;
  20608. }
  20609. },
  20610. // 判断当没有更多数据且分页内容未超出z-paging时是否显示没有更多数据的view
  20611. async _checkShowNoMoreInside(totalData, oldScrollViewNode, oldPagingContainerNode) {
  20612. try {
  20613. const scrollViewNode = oldScrollViewNode || await this._getNodeClientRect(".zp-scroll-view");
  20614. if (this.usePageScroll) {
  20615. if (scrollViewNode) {
  20616. const scrollViewTotalH = scrollViewNode[0].top + scrollViewNode[0].height;
  20617. this.insideOfPaging = scrollViewTotalH < this.windowHeight;
  20618. if (this.hideNoMoreInside) {
  20619. this.showLoadingMore = !this.insideOfPaging;
  20620. }
  20621. this._updateInsideOfPaging();
  20622. }
  20623. } else {
  20624. const pagingContainerNode = oldPagingContainerNode || await this._getNodeClientRect(".zp-paging-container-content");
  20625. const pagingContainerH = pagingContainerNode ? pagingContainerNode[0].height : 0;
  20626. const scrollViewH = scrollViewNode ? scrollViewNode[0].height : 0;
  20627. this.insideOfPaging = pagingContainerH < scrollViewH;
  20628. if (this.hideNoMoreInside) {
  20629. this.showLoadingMore = !this.insideOfPaging;
  20630. }
  20631. this._updateInsideOfPaging();
  20632. }
  20633. } catch (e) {
  20634. this.insideOfPaging = !totalData.length;
  20635. if (this.hideNoMoreInside) {
  20636. this.showLoadingMore = !this.insideOfPaging;
  20637. }
  20638. this._updateInsideOfPaging();
  20639. }
  20640. },
  20641. // 是否要展示上拉加载更多view
  20642. _showLoadingMore(type2) {
  20643. if (!this.showLoadingMoreWhenReload && (!(this.loadingStatus === Enum.More.Default ? this.nShowBottom : true) || !this.realTotalData.length))
  20644. return false;
  20645. if ((!this.showLoadingMoreWhenReload || this.isUserPullDown || this.loadingStatus !== Enum.More.Loading) && !this.showLoadingMore || !this.loadingMoreEnabled && (!this.showLoadingMoreWhenReload || this.isUserPullDown || this.loadingStatus !== Enum.More.Loading) || this.refresherOnly) {
  20646. return false;
  20647. }
  20648. if (this.useChatRecordMode && type2 !== "Loading")
  20649. return false;
  20650. if (!this.zSlots)
  20651. return false;
  20652. if (type2 === "Custom") {
  20653. return this.showDefaultLoadingMoreText && !(this.loadingStatus === Enum.More.NoMore && !this.showLoadingMoreNoMoreView);
  20654. }
  20655. const res = this.loadingStatus === Enum.More[type2] && this.zSlots[`loadingMore${type2}`] && (type2 === "NoMore" ? this.showLoadingMoreNoMoreView : true);
  20656. return res;
  20657. }
  20658. }
  20659. };
  20660. const loadingModule = {
  20661. props: {
  20662. // 第一次加载后自动隐藏loading slot,默认为是
  20663. autoHideLoadingAfterFirstLoaded: {
  20664. type: Boolean,
  20665. default: u.gc("autoHideLoadingAfterFirstLoaded", true)
  20666. },
  20667. // loading slot是否铺满屏幕并固定,默认为否
  20668. loadingFullFixed: {
  20669. type: Boolean,
  20670. default: u.gc("loadingFullFixed", false)
  20671. },
  20672. // 是否自动显示系统Loading:即uni.showLoading,若开启则将在刷新列表时(调用reload、refresh时)显示,下拉刷新和滚动到底部加载更多不会显示,默认为false。
  20673. autoShowSystemLoading: {
  20674. type: Boolean,
  20675. default: u.gc("autoShowSystemLoading", false)
  20676. },
  20677. // 显示系统Loading时是否显示透明蒙层,防止触摸穿透,默认为是(H5、App、微信小程序、百度小程序有效)
  20678. systemLoadingMask: {
  20679. type: Boolean,
  20680. default: u.gc("systemLoadingMask", true)
  20681. },
  20682. // 显示系统Loading时显示的文字,默认为"加载中"
  20683. systemLoadingText: {
  20684. type: [String, Object],
  20685. default: u.gc("systemLoadingText", null)
  20686. }
  20687. },
  20688. data() {
  20689. return {
  20690. loading: false,
  20691. loadingForNow: false
  20692. };
  20693. },
  20694. watch: {
  20695. // loading状态
  20696. loadingStatus(newVal) {
  20697. this.$emit("loadingStatusChange", newVal);
  20698. this.$nextTick(() => {
  20699. this.loadingStatusAfterRender = newVal;
  20700. });
  20701. if (this.useChatRecordMode) {
  20702. if (this.isFirstPage && (newVal === Enum.More.NoMore || newVal === Enum.More.Fail)) {
  20703. this.isFirstPageAndNoMore = true;
  20704. return;
  20705. }
  20706. }
  20707. this.isFirstPageAndNoMore = false;
  20708. },
  20709. loading(newVal) {
  20710. if (newVal) {
  20711. this.loadingForNow = newVal;
  20712. }
  20713. }
  20714. },
  20715. computed: {
  20716. // 是否显示loading
  20717. showLoading() {
  20718. if (this.firstPageLoaded || !this.loading || !this.loadingForNow)
  20719. return false;
  20720. if (this.finalShowSystemLoading) {
  20721. uni.showLoading({
  20722. title: this.finalSystemLoadingText,
  20723. mask: this.systemLoadingMask
  20724. });
  20725. }
  20726. return this.autoHideLoadingAfterFirstLoaded ? this.fromEmptyViewReload ? true : !this.pagingLoaded : this.loadingType === Enum.LoadingType.Refresher;
  20727. },
  20728. // 最终的是否显示系统loading
  20729. finalShowSystemLoading() {
  20730. return this.autoShowSystemLoading && this.loadingType === Enum.LoadingType.Refresher;
  20731. }
  20732. },
  20733. methods: {
  20734. // 处理开始加载更多状态
  20735. _startLoading(isReload = false) {
  20736. if (this.showLoadingMoreWhenReload && !this.isUserPullDown || !isReload) {
  20737. this.loadingStatus = Enum.More.Loading;
  20738. }
  20739. this.loading = true;
  20740. },
  20741. // 停止系统loading和refresh
  20742. _endSystemLoadingAndRefresh() {
  20743. this.finalShowSystemLoading && uni.hideLoading();
  20744. !this.useCustomRefresher && uni.stopPullDownRefresh();
  20745. }
  20746. }
  20747. };
  20748. const chatRecordModerModule = {
  20749. props: {
  20750. // 使用聊天记录模式,默认为否
  20751. useChatRecordMode: {
  20752. type: Boolean,
  20753. default: u.gc("useChatRecordMode", false)
  20754. },
  20755. // 使用聊天记录模式时滚动到顶部后,列表垂直移动偏移距离。默认0rpx。单位px(暂时无效)
  20756. chatRecordMoreOffset: {
  20757. type: [Number, String],
  20758. default: u.gc("chatRecordMoreOffset", "0rpx")
  20759. },
  20760. // 使用聊天记录模式时是否自动隐藏键盘:在用户触摸列表时候自动隐藏键盘,默认为是
  20761. autoHideKeyboardWhenChat: {
  20762. type: Boolean,
  20763. default: u.gc("autoHideKeyboardWhenChat", true)
  20764. },
  20765. // 使用聊天记录模式中键盘弹出时是否自动调整slot="bottom"高度,默认为是
  20766. autoAdjustPositionWhenChat: {
  20767. type: Boolean,
  20768. default: u.gc("autoAdjustPositionWhenChat", true)
  20769. },
  20770. // 使用聊天记录模式中键盘弹出时占位高度偏移距离。默认0rpx。单位px
  20771. chatAdjustPositionOffset: {
  20772. type: [Number, String],
  20773. default: u.gc("chatAdjustPositionOffset", "0rpx")
  20774. },
  20775. // 使用聊天记录模式中键盘弹出时是否自动滚动到底部,默认为否
  20776. autoToBottomWhenChat: {
  20777. type: Boolean,
  20778. default: u.gc("autoToBottomWhenChat", false)
  20779. },
  20780. // 使用聊天记录模式中reload时是否显示chatLoading,默认为否
  20781. showChatLoadingWhenReload: {
  20782. type: Boolean,
  20783. default: u.gc("showChatLoadingWhenReload", false)
  20784. },
  20785. // 在聊天记录模式中滑动到顶部状态为默认状态时,以加载中的状态展示,默认为是。若设置为否,则默认会显示【点击加载更多】,然后才会显示loading
  20786. chatLoadingMoreDefaultAsLoading: {
  20787. type: Boolean,
  20788. default: u.gc("chatLoadingMoreDefaultAsLoading", true)
  20789. }
  20790. },
  20791. data() {
  20792. return {
  20793. // 键盘高度
  20794. keyboardHeight: 0,
  20795. // 键盘高度是否未改变,此时占位高度变化不需要动画效果
  20796. isKeyboardHeightChanged: false
  20797. };
  20798. },
  20799. computed: {
  20800. finalChatRecordMoreOffset() {
  20801. return u.convertToPx(this.chatRecordMoreOffset);
  20802. },
  20803. finalChatAdjustPositionOffset() {
  20804. return u.convertToPx(this.chatAdjustPositionOffset);
  20805. },
  20806. // 聊天记录模式旋转180度style
  20807. chatRecordRotateStyle() {
  20808. let cellStyle;
  20809. cellStyle = this.useChatRecordMode ? { transform: "scaleY(-1)" } : {};
  20810. this.$emit("update:cellStyle", cellStyle);
  20811. this.$emit("cellStyleChange", cellStyle);
  20812. this.$nextTick(() => {
  20813. if (this.isFirstPage && this.isChatRecordModeAndNotInversion) {
  20814. this.$nextTick(() => {
  20815. this._scrollToBottom(false);
  20816. u.delay(() => {
  20817. this._scrollToBottom(false);
  20818. u.delay(() => {
  20819. this._scrollToBottom(false);
  20820. }, 50);
  20821. }, 50);
  20822. });
  20823. }
  20824. });
  20825. return cellStyle;
  20826. },
  20827. // 是否是聊天记录列表并且有配置transform
  20828. isChatRecordModeHasTransform() {
  20829. return this.useChatRecordMode && this.chatRecordRotateStyle && this.chatRecordRotateStyle.transform;
  20830. },
  20831. // 是否是聊天记录列表并且列表未倒置
  20832. isChatRecordModeAndNotInversion() {
  20833. return this.isChatRecordModeHasTransform && this.chatRecordRotateStyle.transform === "scaleY(1)";
  20834. },
  20835. // 是否是聊天记录列表并且列表倒置
  20836. isChatRecordModeAndInversion() {
  20837. return this.isChatRecordModeHasTransform && this.chatRecordRotateStyle.transform === "scaleY(-1)";
  20838. },
  20839. // 最终的聊天记录模式中底部安全区域的高度,如果开启了底部安全区域并且键盘未弹出,则添加底部区域高度
  20840. chatRecordModeSafeAreaBottom() {
  20841. return this.safeAreaInsetBottom && !this.keyboardHeight ? this.safeAreaBottom : 0;
  20842. }
  20843. },
  20844. mounted() {
  20845. if (this.useChatRecordMode) {
  20846. uni.onKeyboardHeightChange(this._handleKeyboardHeightChange);
  20847. }
  20848. },
  20849. methods: {
  20850. // 添加聊天记录
  20851. addChatRecordData(data, toBottom = true, toBottomWithAnimate = true) {
  20852. if (!this.useChatRecordMode)
  20853. return;
  20854. this.isTotalChangeFromAddData = true;
  20855. this.addDataFromTop(data, toBottom, toBottomWithAnimate);
  20856. },
  20857. // 手动触发滚动到顶部加载更多,聊天记录模式时有效
  20858. doChatRecordLoadMore() {
  20859. this.useChatRecordMode && this._onLoadingMore("click");
  20860. },
  20861. // 处理键盘高度变化
  20862. _handleKeyboardHeightChange(res) {
  20863. this.$emit("keyboardHeightChange", res);
  20864. if (this.autoAdjustPositionWhenChat) {
  20865. this.isKeyboardHeightChanged = true;
  20866. this.keyboardHeight = res.height > 0 ? res.height + this.finalChatAdjustPositionOffset : res.height;
  20867. }
  20868. if (this.autoToBottomWhenChat && this.keyboardHeight > 0) {
  20869. u.delay(() => {
  20870. this.scrollToBottom(false);
  20871. u.delay(() => {
  20872. this.scrollToBottom(false);
  20873. });
  20874. });
  20875. }
  20876. }
  20877. }
  20878. };
  20879. const scrollerModule = {
  20880. props: {
  20881. // 使用页面滚动,默认为否,当设置为是时则使用页面的滚动而非此组件内部的scroll-view的滚动,使用页面滚动时z-paging无需设置确定的高度且对于长列表展示性能更高,但配置会略微繁琐
  20882. usePageScroll: {
  20883. type: Boolean,
  20884. default: u.gc("usePageScroll", false)
  20885. },
  20886. // 是否可以滚动,使用内置scroll-view和nvue时有效,默认为是
  20887. scrollable: {
  20888. type: Boolean,
  20889. default: u.gc("scrollable", true)
  20890. },
  20891. // 控制是否出现滚动条,默认为是
  20892. showScrollbar: {
  20893. type: Boolean,
  20894. default: u.gc("showScrollbar", true)
  20895. },
  20896. // 是否允许横向滚动,默认为否
  20897. scrollX: {
  20898. type: Boolean,
  20899. default: u.gc("scrollX", false)
  20900. },
  20901. // iOS设备上滚动到顶部时是否允许回弹效果,默认为否。关闭回弹效果后可使滚动到顶部与下拉刷新更连贯,但是有吸顶view时滚动到顶部时可能出现抖动。
  20902. scrollToTopBounceEnabled: {
  20903. type: Boolean,
  20904. default: u.gc("scrollToTopBounceEnabled", false)
  20905. },
  20906. // iOS设备上滚动到底部时是否允许回弹效果,默认为是。
  20907. scrollToBottomBounceEnabled: {
  20908. type: Boolean,
  20909. default: u.gc("scrollToBottomBounceEnabled", true)
  20910. },
  20911. // 在设置滚动条位置时使用动画过渡,默认为否
  20912. scrollWithAnimation: {
  20913. type: Boolean,
  20914. default: u.gc("scrollWithAnimation", false)
  20915. },
  20916. // 值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素
  20917. scrollIntoView: {
  20918. type: String,
  20919. default: u.gc("scrollIntoView", "")
  20920. }
  20921. },
  20922. data() {
  20923. return {
  20924. scrollTop: 0,
  20925. oldScrollTop: 0,
  20926. scrollLeft: 0,
  20927. oldScrollLeft: 0,
  20928. scrollViewStyle: {},
  20929. scrollViewContainerStyle: {},
  20930. scrollViewInStyle: {},
  20931. pageScrollTop: -1,
  20932. scrollEnable: true,
  20933. privateScrollWithAnimation: -1,
  20934. cacheScrollNodeHeight: -1,
  20935. superContentHeight: 0
  20936. };
  20937. },
  20938. watch: {
  20939. oldScrollTop(newVal) {
  20940. !this.usePageScroll && this._scrollTopChange(newVal, false);
  20941. },
  20942. pageScrollTop(newVal) {
  20943. this.usePageScroll && this._scrollTopChange(newVal, true);
  20944. },
  20945. usePageScroll: {
  20946. handler(newVal) {
  20947. this.loaded && this.autoHeight && this._setAutoHeight(!newVal);
  20948. },
  20949. immediate: true
  20950. },
  20951. finalScrollTop(newVal) {
  20952. this.renderPropScrollTop = newVal < 6 ? 0 : 10;
  20953. }
  20954. },
  20955. computed: {
  20956. finalScrollWithAnimation() {
  20957. if (this.privateScrollWithAnimation !== -1) {
  20958. return this.privateScrollWithAnimation === 1;
  20959. }
  20960. return this.scrollWithAnimation;
  20961. },
  20962. finalScrollViewStyle() {
  20963. if (this.superContentZIndex != 1) {
  20964. this.scrollViewStyle["z-index"] = this.superContentZIndex;
  20965. this.scrollViewStyle["position"] = "relative";
  20966. }
  20967. return this.scrollViewStyle;
  20968. },
  20969. finalScrollTop() {
  20970. return this.usePageScroll ? this.pageScrollTop : this.oldScrollTop;
  20971. },
  20972. // 当前是否是旧版webview
  20973. finalIsOldWebView() {
  20974. return this.isOldWebView && !this.usePageScroll;
  20975. },
  20976. // 当前scroll-view/list-view是否允许滚动
  20977. finalScrollable() {
  20978. return this.scrollable && !this.usePageScroll && this.scrollEnable && (this.refresherCompleteScrollable ? true : this.refresherStatus !== Enum.Refresher.Complete) && (this.refresherRefreshingScrollable ? true : this.refresherStatus !== Enum.Refresher.Loading);
  20979. }
  20980. },
  20981. methods: {
  20982. // 滚动到顶部,animate为是否展示滚动动画,默认为是
  20983. scrollToTop(animate, checkReverse = true) {
  20984. if (this.useChatRecordMode && checkReverse && !this.isChatRecordModeAndNotInversion) {
  20985. this.scrollToBottom(animate, false);
  20986. return;
  20987. }
  20988. this.$nextTick(() => {
  20989. this._scrollToTop(animate, false);
  20990. });
  20991. },
  20992. // 滚动到底部,animate为是否展示滚动动画,默认为是
  20993. scrollToBottom(animate, checkReverse = true) {
  20994. if (this.useChatRecordMode && checkReverse && !this.isChatRecordModeAndNotInversion) {
  20995. this.scrollToTop(animate, false);
  20996. return;
  20997. }
  20998. this.$nextTick(() => {
  20999. this._scrollToBottom(animate);
  21000. });
  21001. },
  21002. // 滚动到指定view(vue中有效)。sel为需要滚动的view的id值,不包含"#";offset为偏移量,单位为px;animate为是否展示滚动动画,默认为否
  21003. scrollIntoViewById(sel, offset, animate) {
  21004. this._scrollIntoView(sel, offset, animate);
  21005. },
  21006. // 滚动到指定view(vue中有效)。nodeTop为需要滚动的view的top值(通过uni.createSelectorQuery()获取);offset为偏移量,单位为px;animate为是否展示滚动动画,默认为否
  21007. scrollIntoViewByNodeTop(nodeTop, offset, animate) {
  21008. this.scrollTop = this.oldScrollTop;
  21009. this.$nextTick(() => {
  21010. this._scrollIntoViewByNodeTop(nodeTop, offset, animate);
  21011. });
  21012. },
  21013. // y轴滚动到指定位置(vue中有效)。y为与顶部的距离,单位为px;offset为偏移量,单位为px;animate为是否展示滚动动画,默认为否
  21014. scrollToY(y, offset, animate) {
  21015. this.scrollTop = this.oldScrollTop;
  21016. this.$nextTick(() => {
  21017. this._scrollToY(y, offset, animate);
  21018. });
  21019. },
  21020. // x轴滚动到指定位置(非页面滚动且在vue中有效)。x为与左侧的距离,单位为px;offset为偏移量,单位为px;animate为是否展示滚动动画,默认为否
  21021. scrollToX(x, offset, animate) {
  21022. this.scrollLeft = this.oldScrollLeft;
  21023. this.$nextTick(() => {
  21024. this._scrollToX(x, offset, animate);
  21025. });
  21026. },
  21027. // 滚动到指定view(nvue中和虚拟列表中有效)。index为需要滚动的view的index(第几个,从0开始);offset为偏移量,单位为px;animate为是否展示滚动动画,默认为否
  21028. scrollIntoViewByIndex(index, offset, animate) {
  21029. if (index >= this.realTotalData.length) {
  21030. u.consoleErr("当前滚动的index超出已渲染列表长度,请先通过refreshToPage加载到对应index页并等待渲染成功后再调用此方法!");
  21031. return;
  21032. }
  21033. this.$nextTick(() => {
  21034. if (this.finalUseVirtualList) {
  21035. const isCellFixed = this.cellHeightMode === Enum.CellHeightMode.Fixed;
  21036. u.delay(() => {
  21037. if (this.finalUseVirtualList) {
  21038. const scrollTop = isCellFixed ? this.virtualCellHeight * index : this.virtualHeightCacheList[index].lastTotalHeight;
  21039. this.scrollToY(scrollTop, offset, animate);
  21040. }
  21041. }, isCellFixed ? 0 : 100);
  21042. }
  21043. });
  21044. },
  21045. // 滚动到指定view(nvue中有效)。view为需要滚动的view(通过`this.$refs.xxx`获取),不包含"#";offset为偏移量,单位为px;animate为是否展示滚动动画,默认为否
  21046. scrollIntoViewByView(view, offset, animate) {
  21047. this._scrollIntoView(view, offset, animate);
  21048. },
  21049. // 当使用页面滚动并且自定义下拉刷新时,请在页面的onPageScroll中调用此方法,告知z-paging当前的pageScrollTop,否则会导致在任意位置都可以下拉刷新
  21050. updatePageScrollTop(value) {
  21051. this.pageScrollTop = value;
  21052. },
  21053. // 当使用页面滚动并且设置了slot="top"时,默认初次加载会自动获取其高度,并使内部容器下移,当slot="top"的view高度动态改变时,在其高度需要更新时调用此方法
  21054. updatePageScrollTopHeight() {
  21055. this._updatePageScrollTopOrBottomHeight("top");
  21056. },
  21057. // 当使用页面滚动并且设置了slot="bottom"时,默认初次加载会自动获取其高度,并使内部容器下移,当slot="bottom"的view高度动态改变时,在其高度需要更新时调用此方法
  21058. updatePageScrollBottomHeight() {
  21059. this._updatePageScrollTopOrBottomHeight("bottom");
  21060. },
  21061. // 更新slot="left"和slot="right"宽度,当slot="left"或slot="right"宽度动态改变时调用
  21062. updateLeftAndRightWidth() {
  21063. if (!this.finalIsOldWebView)
  21064. return;
  21065. this.$nextTick(() => this._updateLeftAndRightWidth(this.scrollViewContainerStyle, "zp-page"));
  21066. },
  21067. // 更新z-paging内置scroll-view的scrollTop
  21068. updateScrollViewScrollTop(scrollTop, animate = true) {
  21069. this._updatePrivateScrollWithAnimation(animate);
  21070. this.scrollTop = this.oldScrollTop;
  21071. this.$nextTick(() => {
  21072. this.scrollTop = scrollTop;
  21073. this.oldScrollTop = this.scrollTop;
  21074. });
  21075. },
  21076. // 当滚动到顶部时
  21077. _onScrollToUpper() {
  21078. this._emitScrollEvent("scrolltoupper");
  21079. this.$emit("scrollTopChange", 0);
  21080. this.$nextTick(() => {
  21081. this.oldScrollTop = 0;
  21082. });
  21083. },
  21084. // 当滚动到底部时
  21085. _onScrollToLower(e) {
  21086. (!e.detail || !e.detail.direction || e.detail.direction === "bottom") && this.toBottomLoadingMoreEnabled && this._onLoadingMore(this.useChatRecordMode ? "click" : "toBottom");
  21087. },
  21088. // 滚动到顶部
  21089. _scrollToTop(animate = true, isPrivate = true) {
  21090. if (this.usePageScroll) {
  21091. this.$nextTick(() => {
  21092. uni.pageScrollTo({
  21093. scrollTop: 0,
  21094. duration: animate ? 100 : 0
  21095. });
  21096. });
  21097. return;
  21098. }
  21099. this._updatePrivateScrollWithAnimation(animate);
  21100. this.scrollTop = this.oldScrollTop;
  21101. this.$nextTick(() => {
  21102. this.scrollTop = 0;
  21103. this.oldScrollTop = this.scrollTop;
  21104. });
  21105. },
  21106. // 滚动到底部
  21107. async _scrollToBottom(animate = true) {
  21108. if (this.usePageScroll) {
  21109. this.$nextTick(() => {
  21110. uni.pageScrollTo({
  21111. scrollTop: Number.MAX_VALUE,
  21112. duration: animate ? 100 : 0
  21113. });
  21114. });
  21115. return;
  21116. }
  21117. try {
  21118. this._updatePrivateScrollWithAnimation(animate);
  21119. const pagingContainerNode = await this._getNodeClientRect(".zp-paging-container");
  21120. const scrollViewNode = await this._getNodeClientRect(".zp-scroll-view");
  21121. const pagingContainerH = pagingContainerNode ? pagingContainerNode[0].height : 0;
  21122. const scrollViewH = scrollViewNode ? scrollViewNode[0].height : 0;
  21123. if (pagingContainerH > scrollViewH) {
  21124. this.scrollTop = this.oldScrollTop;
  21125. this.$nextTick(() => {
  21126. this.scrollTop = pagingContainerH - scrollViewH + this.virtualPlaceholderTopHeight;
  21127. this.oldScrollTop = this.scrollTop;
  21128. });
  21129. }
  21130. } catch (e) {
  21131. }
  21132. },
  21133. // 滚动到指定view
  21134. _scrollIntoView(sel, offset = 0, animate = false, finishCallback) {
  21135. try {
  21136. this.scrollTop = this.oldScrollTop;
  21137. this.$nextTick(() => {
  21138. this._getNodeClientRect("#" + sel.replace("#", ""), this.$parent).then((node2) => {
  21139. if (node2) {
  21140. let nodeTop = node2[0].top;
  21141. this._scrollIntoViewByNodeTop(nodeTop, offset, animate);
  21142. finishCallback && finishCallback();
  21143. }
  21144. });
  21145. });
  21146. } catch (e) {
  21147. }
  21148. },
  21149. // 通过nodeTop滚动到指定view
  21150. _scrollIntoViewByNodeTop(nodeTop, offset = 0, animate = false) {
  21151. if (this.isChatRecordModeAndInversion) {
  21152. this._getNodeClientRect(".zp-scroll-view").then((sNode) => {
  21153. if (sNode) {
  21154. this._scrollToY(sNode[0].height - nodeTop, offset, animate, true);
  21155. }
  21156. });
  21157. } else {
  21158. this._scrollToY(nodeTop, offset, animate, true);
  21159. }
  21160. },
  21161. // y轴滚动到指定位置
  21162. _scrollToY(y, offset = 0, animate = false, addScrollTop = false) {
  21163. this._updatePrivateScrollWithAnimation(animate);
  21164. u.delay(() => {
  21165. if (this.usePageScroll) {
  21166. if (addScrollTop && this.pageScrollTop !== -1) {
  21167. y += this.pageScrollTop;
  21168. }
  21169. const scrollTop = y - offset;
  21170. uni.pageScrollTo({
  21171. scrollTop,
  21172. duration: animate ? 100 : 0
  21173. });
  21174. } else {
  21175. if (addScrollTop) {
  21176. y += this.oldScrollTop;
  21177. }
  21178. this.scrollTop = y - offset;
  21179. }
  21180. }, 10);
  21181. },
  21182. // x轴滚动到指定位置
  21183. _scrollToX(x, offset = 0, animate = false) {
  21184. this._updatePrivateScrollWithAnimation(animate);
  21185. u.delay(() => {
  21186. if (!this.usePageScroll) {
  21187. this.scrollLeft = x - offset;
  21188. } else {
  21189. u.consoleErr("使用页面滚动时不支持scrollToX");
  21190. }
  21191. }, 10);
  21192. },
  21193. // scroll-view滚动中
  21194. _scroll(e) {
  21195. this.$emit("scroll", e);
  21196. const { scrollTop, scrollLeft } = e.detail;
  21197. this.finalUseVirtualList && this._updateVirtualScroll(scrollTop, this.oldScrollTop - scrollTop);
  21198. this.oldScrollTop = scrollTop;
  21199. this.oldScrollLeft = scrollLeft;
  21200. const scrollDiff = e.detail.scrollHeight - this.oldScrollTop;
  21201. !this.isIos && this._checkScrolledToBottom(scrollDiff);
  21202. },
  21203. // emit scrolltolower/scrolltoupper事件
  21204. _emitScrollEvent(type2) {
  21205. const reversedType = type2 === "scrolltolower" ? "scrolltoupper" : "scrolltolower";
  21206. const eventType = this.useChatRecordMode && !this.isChatRecordModeAndNotInversion ? reversedType : type2;
  21207. this.$emit(eventType);
  21208. },
  21209. // 更新内置的scroll-view是否启用滚动动画
  21210. _updatePrivateScrollWithAnimation(animate) {
  21211. this.privateScrollWithAnimation = animate ? 1 : 0;
  21212. u.delay(() => this.$nextTick(() => {
  21213. this.privateScrollWithAnimation = -1;
  21214. }), 100, "updateScrollWithAnimationDelay");
  21215. },
  21216. // 检测scrollView是否要铺满屏幕
  21217. _doCheckScrollViewShouldFullHeight(totalData) {
  21218. if (this.autoFullHeight && this.usePageScroll && this.isTotalChangeFromAddData) {
  21219. this.$nextTick(() => {
  21220. this._checkScrollViewShouldFullHeight((scrollViewNode, pagingContainerNode) => {
  21221. this._preCheckShowNoMoreInside(totalData, scrollViewNode, pagingContainerNode);
  21222. });
  21223. });
  21224. } else {
  21225. this._preCheckShowNoMoreInside(totalData);
  21226. }
  21227. },
  21228. // 检测z-paging是否要全屏覆盖(当使用页面滚动并且不满全屏时,默认z-paging需要铺满全屏,避免数据过少时内部的empty-view无法正确展示)
  21229. async _checkScrollViewShouldFullHeight(callback) {
  21230. try {
  21231. const scrollViewNode = await this._getNodeClientRect(".zp-scroll-view");
  21232. const pagingContainerNode = await this._getNodeClientRect(".zp-paging-container-content");
  21233. if (!scrollViewNode || !pagingContainerNode)
  21234. return;
  21235. const scrollViewHeight = pagingContainerNode[0].height;
  21236. const scrollViewTop = scrollViewNode[0].top;
  21237. if (this.isAddedData && scrollViewHeight + scrollViewTop <= this.windowHeight) {
  21238. this._setAutoHeight(true, scrollViewNode);
  21239. callback(scrollViewNode, pagingContainerNode);
  21240. } else {
  21241. this._setAutoHeight(false);
  21242. callback(null, null);
  21243. }
  21244. } catch (e) {
  21245. callback(null, null);
  21246. }
  21247. },
  21248. // 更新缓存中z-paging整个内容容器高度
  21249. async _updateCachedSuperContentHeight() {
  21250. const superContentNode = await this._getNodeClientRect(".z-paging-content");
  21251. if (superContentNode) {
  21252. this.superContentHeight = superContentNode[0].height;
  21253. }
  21254. },
  21255. // scrollTop改变时触发
  21256. _scrollTopChange(newVal, isPageScrollTop) {
  21257. this.$emit("scrollTopChange", newVal);
  21258. this.$emit("update:scrollTop", newVal);
  21259. this._checkShouldShowBackToTop(newVal);
  21260. const scrollTop = newVal > 5 ? 6 : 0;
  21261. if (isPageScrollTop && this.wxsPageScrollTop !== scrollTop) {
  21262. this.wxsPageScrollTop = scrollTop;
  21263. } else if (!isPageScrollTop && this.wxsScrollTop !== scrollTop) {
  21264. this.wxsScrollTop = scrollTop;
  21265. if (scrollTop > 6) {
  21266. this.scrollEnable = true;
  21267. }
  21268. }
  21269. },
  21270. // 更新使用页面滚动时slot="top"或"bottom"插入view的高度
  21271. _updatePageScrollTopOrBottomHeight(type2) {
  21272. if (!this.usePageScroll)
  21273. return;
  21274. this._doCheckScrollViewShouldFullHeight(this.realTotalData);
  21275. const node2 = `.zp-page-${type2}`;
  21276. const marginText = `margin${type2.slice(0, 1).toUpperCase() + type2.slice(1)}`;
  21277. let safeAreaInsetBottomAdd = this.safeAreaInsetBottom;
  21278. this.$nextTick(() => {
  21279. let delayTime = 0;
  21280. u.delay(() => {
  21281. this._getNodeClientRect(node2).then((res) => {
  21282. if (res) {
  21283. let pageScrollNodeHeight = res[0].height;
  21284. if (type2 === "bottom") {
  21285. if (safeAreaInsetBottomAdd) {
  21286. pageScrollNodeHeight += this.safeAreaBottom;
  21287. }
  21288. } else {
  21289. this.cacheTopHeight = pageScrollNodeHeight;
  21290. }
  21291. this.$set(this.scrollViewStyle, marginText, `${pageScrollNodeHeight}px`);
  21292. } else if (safeAreaInsetBottomAdd) {
  21293. this.$set(this.scrollViewStyle, marginText, `${this.safeAreaBottom}px`);
  21294. }
  21295. });
  21296. }, delayTime);
  21297. });
  21298. }
  21299. }
  21300. };
  21301. const backToTopModule = {
  21302. props: {
  21303. // 自动显示点击返回顶部按钮,默认为否
  21304. autoShowBackToTop: {
  21305. type: Boolean,
  21306. default: u.gc("autoShowBackToTop", false)
  21307. },
  21308. // 点击返回顶部按钮显示/隐藏的阈值(滚动距离),单位为px,默认为400rpx
  21309. backToTopThreshold: {
  21310. type: [Number, String],
  21311. default: u.gc("backToTopThreshold", "400rpx")
  21312. },
  21313. // 点击返回顶部按钮的自定义图片地址,默认使用z-paging内置的图片
  21314. backToTopImg: {
  21315. type: String,
  21316. default: u.gc("backToTopImg", "")
  21317. },
  21318. // 点击返回顶部按钮返回到顶部时是否展示过渡动画,默认为是
  21319. backToTopWithAnimate: {
  21320. type: Boolean,
  21321. default: u.gc("backToTopWithAnimate", true)
  21322. },
  21323. // 点击返回顶部按钮与底部的距离,注意添加单位px或rpx,默认为160rpx
  21324. backToTopBottom: {
  21325. type: [Number, String],
  21326. default: u.gc("backToTopBottom", "160rpx")
  21327. },
  21328. // 点击返回顶部按钮的自定义样式
  21329. backToTopStyle: {
  21330. type: Object,
  21331. default: u.gc("backToTopStyle", {})
  21332. },
  21333. // iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向,默认为是
  21334. enableBackToTop: {
  21335. type: Boolean,
  21336. default: u.gc("enableBackToTop", true)
  21337. }
  21338. },
  21339. data() {
  21340. return {
  21341. // 点击返回顶部的class
  21342. backToTopClass: "zp-back-to-top zp-back-to-top-hide",
  21343. // 上次点击返回顶部的时间
  21344. lastBackToTopShowTime: 0,
  21345. // 点击返回顶部显示的class是否在展示中,使得按钮展示/隐藏过度效果更自然
  21346. showBackToTopClass: false
  21347. };
  21348. },
  21349. computed: {
  21350. backToTopThresholdUnitConverted() {
  21351. return u.addUnit(this.backToTopThreshold, this.unit);
  21352. },
  21353. backToTopBottomUnitConverted() {
  21354. return u.addUnit(this.backToTopBottom, this.unit);
  21355. },
  21356. finalEnableBackToTop() {
  21357. return this.usePageScroll ? false : this.enableBackToTop;
  21358. },
  21359. finalBackToTopThreshold() {
  21360. return u.convertToPx(this.backToTopThresholdUnitConverted);
  21361. },
  21362. finalBackToTopStyle() {
  21363. const backToTopStyle = this.backToTopStyle;
  21364. if (!backToTopStyle.bottom) {
  21365. backToTopStyle.bottom = this.windowBottom + u.convertToPx(this.backToTopBottomUnitConverted) + "px";
  21366. }
  21367. if (!backToTopStyle.position) {
  21368. backToTopStyle.position = this.usePageScroll ? "fixed" : "absolute";
  21369. }
  21370. return backToTopStyle;
  21371. },
  21372. finalBackToTopClass() {
  21373. return `${this.backToTopClass} zp-back-to-top-${this.unit}`;
  21374. }
  21375. },
  21376. methods: {
  21377. // 点击了返回顶部
  21378. _backToTopClick() {
  21379. let callbacked = false;
  21380. this.$emit("backToTopClick", (toTop) => {
  21381. (toTop === void 0 || toTop === true) && this._handleToTop();
  21382. callbacked = true;
  21383. });
  21384. this.$nextTick(() => {
  21385. !callbacked && this._handleToTop();
  21386. });
  21387. },
  21388. // 处理滚动到顶部(聊天记录模式中为滚动到底部)
  21389. _handleToTop() {
  21390. !this.backToTopWithAnimate && this._checkShouldShowBackToTop(0);
  21391. !this.useChatRecordMode ? this.scrollToTop(this.backToTopWithAnimate) : this.scrollToBottom(this.backToTopWithAnimate);
  21392. },
  21393. // 判断是否要显示返回顶部按钮
  21394. _checkShouldShowBackToTop(scrollTop) {
  21395. if (!this.autoShowBackToTop) {
  21396. this.showBackToTopClass = false;
  21397. return;
  21398. }
  21399. if (scrollTop > this.finalBackToTopThreshold) {
  21400. if (!this.showBackToTopClass) {
  21401. this.showBackToTopClass = true;
  21402. this.lastBackToTopShowTime = (/* @__PURE__ */ new Date()).getTime();
  21403. u.delay(() => {
  21404. this.backToTopClass = "zp-back-to-top zp-back-to-top-show";
  21405. }, 300);
  21406. }
  21407. } else {
  21408. if (this.showBackToTopClass) {
  21409. this.backToTopClass = "zp-back-to-top zp-back-to-top-hide";
  21410. u.delay(() => {
  21411. this.showBackToTopClass = false;
  21412. }, (/* @__PURE__ */ new Date()).getTime() - this.lastBackToTopShowTime < 500 ? 0 : 300);
  21413. }
  21414. }
  21415. }
  21416. }
  21417. };
  21418. const virtualListModule = {
  21419. props: {
  21420. // 是否使用虚拟列表,默认为否
  21421. useVirtualList: {
  21422. type: Boolean,
  21423. default: u.gc("useVirtualList", false)
  21424. },
  21425. // 在使用虚拟列表时,是否使用兼容模式,默认为否
  21426. useCompatibilityMode: {
  21427. type: Boolean,
  21428. default: u.gc("useCompatibilityMode", false)
  21429. },
  21430. // 使用兼容模式时传递的附加数据
  21431. extraData: {
  21432. type: Object,
  21433. default: u.gc("extraData", {})
  21434. },
  21435. // 是否在z-paging内部循环渲染列表(内置列表),默认为否。若use-virtual-list为true,则此项恒为true
  21436. useInnerList: {
  21437. type: Boolean,
  21438. default: u.gc("useInnerList", false)
  21439. },
  21440. // 强制关闭inner-list,默认为false,如果为true将强制关闭innerList,适用于开启了虚拟列表后需要强制关闭inner-list的情况
  21441. forceCloseInnerList: {
  21442. type: Boolean,
  21443. default: u.gc("forceCloseInnerList", false)
  21444. },
  21445. // 内置列表cell的key名称,仅nvue有效,在nvue中开启use-inner-list时必须填此项
  21446. cellKeyName: {
  21447. type: String,
  21448. default: u.gc("cellKeyName", "")
  21449. },
  21450. // innerList样式
  21451. innerListStyle: {
  21452. type: Object,
  21453. default: u.gc("innerListStyle", {})
  21454. },
  21455. // innerCell样式
  21456. innerCellStyle: {
  21457. type: Object,
  21458. default: u.gc("innerCellStyle", {})
  21459. },
  21460. // 预加载的列表可视范围(列表高度)页数,默认为12,即预加载当前页及上下各12页的cell。此数值越大,则虚拟列表中加载的dom越多,内存消耗越大(会维持在一个稳定值),但增加预加载页面数量可缓解快速滚动短暂白屏问题
  21461. preloadPage: {
  21462. type: [Number, String],
  21463. default: u.gc("preloadPage", 12),
  21464. validator: (value) => {
  21465. if (value <= 0)
  21466. u.consoleErr("preload-page必须大于0!");
  21467. return value > 0;
  21468. }
  21469. },
  21470. // 虚拟列表cell高度模式,默认为fixed,也就是每个cell高度完全相同,将以第一个cell高度为准进行计算。可选值【dynamic】,即代表高度是动态非固定的,【dynamic】性能低于【fixed】。
  21471. cellHeightMode: {
  21472. type: String,
  21473. default: u.gc("cellHeightMode", Enum.CellHeightMode.Fixed)
  21474. },
  21475. // 固定的cell高度,cellHeightMode=fixed才有效,若设置了值,则不计算第一个cell高度而使用设置的cell高度
  21476. fixedCellHeight: {
  21477. type: [Number, String],
  21478. default: u.gc("fixedCellHeight", 0)
  21479. },
  21480. // 虚拟列表列数,默认为1。常用于每行有多列的情况,例如每行有2列数据,需要将此值设置为2
  21481. virtualListCol: {
  21482. type: [Number, String],
  21483. default: u.gc("virtualListCol", 1)
  21484. },
  21485. // 虚拟列表scroll取样帧率,默认为80,过低容易出现白屏问题,过高容易出现卡顿问题
  21486. virtualScrollFps: {
  21487. type: [Number, String],
  21488. default: u.gc("virtualScrollFps", 80)
  21489. },
  21490. // 虚拟列表cell id的前缀,适用于一个页面有多个虚拟列表的情况,用以区分不同虚拟列表cell的id,注意:请勿传数字或以数字开头的字符串。如设置为list1,则cell的id应为:list1-zp-id-${item.zp_index}
  21491. virtualCellIdPrefix: {
  21492. type: String,
  21493. default: u.gc("virtualCellIdPrefix", "")
  21494. },
  21495. // 虚拟列表是否使用swiper-item包裹,默认为否,此属性为了解决vue3+(微信小程序或QQ小程序)中,使用非内置列表写法时,若z-paging在swiper-item内存在无法获取slot插入的cell高度进而导致虚拟列表失败的问题
  21496. // 仅vue3+(微信小程序或QQ小程序)+非内置列表写法虚拟列表有效,其他情况此属性设置任何值都无效,所以如果您在swiper-item内使用z-paging的非内置虚拟列表写法,将此属性设置为true即可
  21497. virtualInSwiperSlot: {
  21498. type: Boolean,
  21499. default: false
  21500. }
  21501. },
  21502. data() {
  21503. return {
  21504. virtualListKey: u.getInstanceId(),
  21505. virtualPageHeight: 0,
  21506. virtualCellHeight: 0,
  21507. virtualScrollTimeStamp: 0,
  21508. virtualList: [],
  21509. virtualPlaceholderTopHeight: 0,
  21510. virtualPlaceholderBottomHeight: 0,
  21511. virtualTopRangeIndex: 0,
  21512. virtualBottomRangeIndex: 0,
  21513. lastVirtualTopRangeIndex: 0,
  21514. lastVirtualBottomRangeIndex: 0,
  21515. virtualItemInsertedCount: 0,
  21516. virtualHeightCacheList: [],
  21517. getCellHeightRetryCount: {
  21518. fixed: 0,
  21519. dynamic: 0
  21520. },
  21521. pagingOrgTop: -1,
  21522. updateVirtualListFromDataChange: false
  21523. };
  21524. },
  21525. watch: {
  21526. // 监听总数据的改变,刷新虚拟列表布局
  21527. realTotalData() {
  21528. this.updateVirtualListRender();
  21529. },
  21530. // 监听虚拟列表渲染数组的改变并emit
  21531. virtualList(newVal) {
  21532. this.$emit("update:virtualList", newVal);
  21533. this.$emit("virtualListChange", newVal);
  21534. },
  21535. // 监听虚拟列表顶部占位高度改变并emit
  21536. virtualPlaceholderTopHeight(newVal) {
  21537. this.$emit("virtualTopHeightChange", newVal);
  21538. }
  21539. },
  21540. computed: {
  21541. virtualCellIndexKey() {
  21542. return c.listCellIndexKey;
  21543. },
  21544. finalUseVirtualList() {
  21545. if (this.useVirtualList && this.usePageScroll) {
  21546. u.consoleErr("使用页面滚动时,开启虚拟列表无效!");
  21547. }
  21548. return this.useVirtualList && !this.usePageScroll;
  21549. },
  21550. finalUseInnerList() {
  21551. return this.useInnerList || this.finalUseVirtualList && !this.forceCloseInnerList;
  21552. },
  21553. finalCellKeyName() {
  21554. return this.cellKeyName;
  21555. },
  21556. finalVirtualPageHeight() {
  21557. return this.virtualPageHeight > 0 ? this.virtualPageHeight : this.windowHeight;
  21558. },
  21559. finalFixedCellHeight() {
  21560. return u.convertToPx(this.fixedCellHeight);
  21561. },
  21562. fianlVirtualCellIdPrefix() {
  21563. const prefix = this.virtualCellIdPrefix ? this.virtualCellIdPrefix + "-" : "";
  21564. return prefix + "zp-id";
  21565. },
  21566. finalPlaceholderTopHeightStyle() {
  21567. return {};
  21568. },
  21569. virtualRangePageHeight() {
  21570. return this.finalVirtualPageHeight * this.preloadPage;
  21571. },
  21572. virtualScrollDisTimeStamp() {
  21573. return 1e3 / this.virtualScrollFps;
  21574. }
  21575. },
  21576. methods: {
  21577. // 在使用动态高度虚拟列表时,若在列表数组中需要插入某个item,需要调用此方法;item:需要插入的item,index:插入的cell位置,若index为2,则插入的item在原list的index=1之后,index从0开始
  21578. doInsertVirtualListItem(item, index) {
  21579. if (this.cellHeightMode !== Enum.CellHeightMode.Dynamic)
  21580. return;
  21581. this.realTotalData.splice(index, 0, item);
  21582. this.realTotalData = [...this.realTotalData];
  21583. this.virtualItemInsertedCount++;
  21584. if (!item || Object.prototype.toString.call(item) !== "[object Object]") {
  21585. item = { item };
  21586. }
  21587. const cellIndexKey = this.virtualCellIndexKey;
  21588. item[cellIndexKey] = `custom-${this.virtualItemInsertedCount}`;
  21589. item[c.listCellIndexUniqueKey] = `${this.virtualListKey}-${item[cellIndexKey]}`;
  21590. this.$nextTick(async () => {
  21591. let retryCount = 0;
  21592. while (retryCount <= 10) {
  21593. await u.wait(c.delayTime);
  21594. const cellNode = await this._getVirtualCellNodeByIndex(item[cellIndexKey]);
  21595. if (!cellNode) {
  21596. retryCount++;
  21597. continue;
  21598. }
  21599. const currentHeight = cellNode ? cellNode[0].height : 0;
  21600. const lastHeightCache = this.virtualHeightCacheList[index - 1];
  21601. const lastTotalHeight = lastHeightCache ? lastHeightCache.totalHeight : 0;
  21602. this.virtualHeightCacheList.splice(index, 0, {
  21603. height: currentHeight,
  21604. lastTotalHeight,
  21605. totalHeight: lastTotalHeight + currentHeight
  21606. });
  21607. for (let i = index + 1; i < this.virtualHeightCacheList.length; i++) {
  21608. const thisNode = this.virtualHeightCacheList[i];
  21609. thisNode.lastTotalHeight += currentHeight;
  21610. thisNode.totalHeight += currentHeight;
  21611. }
  21612. this._updateVirtualScroll(this.oldScrollTop);
  21613. break;
  21614. }
  21615. });
  21616. },
  21617. // 在使用动态高度虚拟列表时,手动更新指定cell的缓存高度(当cell高度在初始化之后再次改变后调用);index:需要更新的cell在列表中的位置,从0开始
  21618. didUpdateVirtualListCell(index) {
  21619. if (this.cellHeightMode !== Enum.CellHeightMode.Dynamic)
  21620. return;
  21621. const currentNode = this.virtualHeightCacheList[index];
  21622. this.$nextTick(() => {
  21623. this._getVirtualCellNodeByIndex(index).then((cellNode) => {
  21624. const cellNodeHeight = cellNode ? cellNode[0].height : 0;
  21625. const heightDis = cellNodeHeight - currentNode.height;
  21626. currentNode.height = cellNodeHeight;
  21627. currentNode.totalHeight = currentNode.lastTotalHeight + cellNodeHeight;
  21628. for (let i = index + 1; i < this.virtualHeightCacheList.length; i++) {
  21629. const thisNode = this.virtualHeightCacheList[i];
  21630. thisNode.totalHeight += heightDis;
  21631. thisNode.lastTotalHeight += heightDis;
  21632. }
  21633. });
  21634. });
  21635. },
  21636. // 在使用动态高度虚拟列表时,若删除了列表数组中的某个item,需要调用此方法以更新高度缓存数组;index:删除的cell在列表中的位置,从0开始
  21637. didDeleteVirtualListCell(index) {
  21638. if (this.cellHeightMode !== Enum.CellHeightMode.Dynamic)
  21639. return;
  21640. const currentNode = this.virtualHeightCacheList[index];
  21641. for (let i = index + 1; i < this.virtualHeightCacheList.length; i++) {
  21642. const thisNode = this.virtualHeightCacheList[i];
  21643. thisNode.totalHeight -= currentNode.height;
  21644. thisNode.lastTotalHeight -= currentNode.height;
  21645. }
  21646. this.virtualHeightCacheList.splice(index, 1);
  21647. },
  21648. // 手动触发虚拟列表渲染更新,可用于解决例如修改了虚拟列表数组中元素,但展示未更新的情况
  21649. updateVirtualListRender() {
  21650. if (this.finalUseVirtualList) {
  21651. this.updateVirtualListFromDataChange = true;
  21652. this.$nextTick(() => {
  21653. this.getCellHeightRetryCount.fixed = 0;
  21654. if (this.realTotalData.length) {
  21655. this.cellHeightMode === Enum.CellHeightMode.Fixed && this.isFirstPage && this._updateFixedCellHeight();
  21656. } else {
  21657. this._resetDynamicListState(!this.isUserPullDown);
  21658. }
  21659. this._updateVirtualScroll(this.oldScrollTop);
  21660. });
  21661. }
  21662. },
  21663. // 初始化虚拟列表
  21664. _virtualListInit() {
  21665. this.$nextTick(() => {
  21666. u.delay(() => {
  21667. this._getNodeClientRect(".zp-scroll-view").then((node2) => {
  21668. if (node2) {
  21669. this.pagingOrgTop = node2[0].top;
  21670. this.virtualPageHeight = node2[0].height;
  21671. }
  21672. });
  21673. });
  21674. });
  21675. },
  21676. // cellHeightMode为fixed时获取第一个cell高度
  21677. _updateFixedCellHeight() {
  21678. if (!this.finalFixedCellHeight) {
  21679. this.$nextTick(() => {
  21680. u.delay(() => {
  21681. this._getVirtualCellNodeByIndex(0).then((cellNode) => {
  21682. if (!cellNode) {
  21683. if (this.getCellHeightRetryCount.fixed > 10)
  21684. return;
  21685. this.getCellHeightRetryCount.fixed++;
  21686. this._updateFixedCellHeight();
  21687. } else {
  21688. this.virtualCellHeight = cellNode[0].height;
  21689. this._updateVirtualScroll(this.oldScrollTop);
  21690. }
  21691. });
  21692. }, c.delayTime, "updateFixedCellHeightDelay");
  21693. });
  21694. } else {
  21695. this.virtualCellHeight = this.finalFixedCellHeight;
  21696. }
  21697. },
  21698. // cellHeightMode为dynamic时获取每个cell高度
  21699. _updateDynamicCellHeight(list2, dataFrom = "bottom") {
  21700. const dataFromTop = dataFrom === "top";
  21701. const heightCacheList = this.virtualHeightCacheList;
  21702. const currentCacheList = dataFromTop ? [] : heightCacheList;
  21703. let listTotalHeight = 0;
  21704. this.$nextTick(() => {
  21705. u.delay(async () => {
  21706. for (let i = 0; i < list2.length; i++) {
  21707. const cellNode = await this._getVirtualCellNodeByIndex(list2[i][this.virtualCellIndexKey]);
  21708. const currentHeight = cellNode ? cellNode[0].height : 0;
  21709. if (!cellNode) {
  21710. if (this.getCellHeightRetryCount.dynamic <= 10) {
  21711. heightCacheList.splice(heightCacheList.length - i, i);
  21712. this.getCellHeightRetryCount.dynamic++;
  21713. this._updateDynamicCellHeight(list2, dataFrom);
  21714. }
  21715. return;
  21716. }
  21717. const lastHeightCache = currentCacheList.length ? currentCacheList.slice(-1)[0] : null;
  21718. const lastTotalHeight = lastHeightCache ? lastHeightCache.totalHeight : 0;
  21719. currentCacheList.push({
  21720. height: currentHeight,
  21721. lastTotalHeight,
  21722. totalHeight: lastTotalHeight + currentHeight
  21723. });
  21724. if (dataFromTop) {
  21725. listTotalHeight += currentHeight;
  21726. }
  21727. }
  21728. if (dataFromTop && list2.length) {
  21729. for (let i = 0; i < heightCacheList.length; i++) {
  21730. const heightCacheItem = heightCacheList[i];
  21731. heightCacheItem.lastTotalHeight += listTotalHeight;
  21732. heightCacheItem.totalHeight += listTotalHeight;
  21733. }
  21734. this.virtualHeightCacheList = currentCacheList.concat(heightCacheList);
  21735. }
  21736. this._updateVirtualScroll(this.oldScrollTop);
  21737. }, c.delayTime, "updateDynamicCellHeightDelay");
  21738. });
  21739. },
  21740. // 设置cellItem的index
  21741. _setCellIndex(list2, dataFrom = "bottom") {
  21742. let currentItemIndex = 0;
  21743. const cellIndexKey = this.virtualCellIndexKey;
  21744. dataFrom === "bottom" && [Enum.QueryFrom.Refresh, Enum.QueryFrom.Reload].indexOf(this.queryFrom) >= 0 && this._resetDynamicListState();
  21745. if (this.totalData.length && this.queryFrom !== Enum.QueryFrom.Refresh) {
  21746. if (dataFrom === "bottom") {
  21747. currentItemIndex = this.realTotalData.length;
  21748. const lastItem = this.realTotalData.length ? this.realTotalData.slice(-1)[0] : null;
  21749. if (lastItem && lastItem[cellIndexKey] !== void 0) {
  21750. currentItemIndex = lastItem[cellIndexKey] + 1;
  21751. }
  21752. } else if (dataFrom === "top") {
  21753. const firstItem = this.realTotalData.length ? this.realTotalData[0] : null;
  21754. if (firstItem && firstItem[cellIndexKey] !== void 0) {
  21755. currentItemIndex = firstItem[cellIndexKey] - list2.length;
  21756. }
  21757. }
  21758. } else {
  21759. this._resetDynamicListState();
  21760. }
  21761. for (let i = 0; i < list2.length; i++) {
  21762. let item = list2[i];
  21763. if (!item || Object.prototype.toString.call(item) !== "[object Object]") {
  21764. item = { item };
  21765. }
  21766. if (item[c.listCellIndexUniqueKey]) {
  21767. item = u.deepCopy(item);
  21768. }
  21769. item[cellIndexKey] = currentItemIndex + i;
  21770. item[c.listCellIndexUniqueKey] = `${this.virtualListKey}-${item[cellIndexKey]}`;
  21771. list2[i] = item;
  21772. }
  21773. this.getCellHeightRetryCount.dynamic = 0;
  21774. this.cellHeightMode === Enum.CellHeightMode.Dynamic && this._updateDynamicCellHeight(list2, dataFrom);
  21775. },
  21776. // 更新scroll滚动(虚拟列表滚动时触发)
  21777. _updateVirtualScroll(scrollTop, scrollDiff = 0) {
  21778. const currentTimeStamp = u.getTime();
  21779. scrollTop === 0 && this._resetTopRange();
  21780. if (scrollTop !== 0 && this.virtualScrollTimeStamp && currentTimeStamp - this.virtualScrollTimeStamp <= this.virtualScrollDisTimeStamp) {
  21781. return;
  21782. }
  21783. this.virtualScrollTimeStamp = currentTimeStamp;
  21784. let scrollIndex = 0;
  21785. const cellHeightMode = this.cellHeightMode;
  21786. if (cellHeightMode === Enum.CellHeightMode.Fixed) {
  21787. scrollIndex = parseInt(scrollTop / this.virtualCellHeight) || 0;
  21788. this._updateFixedTopRangeIndex(scrollIndex);
  21789. this._updateFixedBottomRangeIndex(scrollIndex);
  21790. } else if (cellHeightMode === Enum.CellHeightMode.Dynamic) {
  21791. const scrollDirection = scrollDiff > 0 ? "top" : "bottom";
  21792. const rangePageHeight = this.virtualRangePageHeight;
  21793. const topRangePageOffset = scrollTop - rangePageHeight;
  21794. const bottomRangePageOffset = scrollTop + this.finalVirtualPageHeight + rangePageHeight;
  21795. let virtualBottomRangeIndex = 0;
  21796. let virtualPlaceholderBottomHeight = 0;
  21797. let reachedLimitBottom = false;
  21798. const heightCacheList = this.virtualHeightCacheList;
  21799. const lastHeightCache = !!heightCacheList ? heightCacheList.slice(-1)[0] : null;
  21800. let startTopRangeIndex = this.virtualTopRangeIndex;
  21801. if (scrollDirection === "bottom") {
  21802. for (let i = startTopRangeIndex; i < heightCacheList.length; i++) {
  21803. const heightCacheItem = heightCacheList[i];
  21804. if (heightCacheItem && heightCacheItem.totalHeight > topRangePageOffset) {
  21805. this.virtualTopRangeIndex = i;
  21806. this.virtualPlaceholderTopHeight = heightCacheItem.lastTotalHeight;
  21807. break;
  21808. }
  21809. }
  21810. } else {
  21811. let topRangeMatched = false;
  21812. for (let i = startTopRangeIndex; i >= 0; i--) {
  21813. const heightCacheItem = heightCacheList[i];
  21814. if (heightCacheItem && heightCacheItem.totalHeight < topRangePageOffset) {
  21815. this.virtualTopRangeIndex = i;
  21816. this.virtualPlaceholderTopHeight = heightCacheItem.lastTotalHeight;
  21817. topRangeMatched = true;
  21818. break;
  21819. }
  21820. }
  21821. !topRangeMatched && this._resetTopRange();
  21822. }
  21823. for (let i = this.virtualTopRangeIndex; i < heightCacheList.length; i++) {
  21824. const heightCacheItem = heightCacheList[i];
  21825. if (heightCacheItem && heightCacheItem.totalHeight > bottomRangePageOffset) {
  21826. virtualBottomRangeIndex = i;
  21827. virtualPlaceholderBottomHeight = lastHeightCache.totalHeight - heightCacheItem.totalHeight;
  21828. reachedLimitBottom = true;
  21829. break;
  21830. }
  21831. }
  21832. if (!reachedLimitBottom || this.virtualBottomRangeIndex === 0) {
  21833. this.virtualBottomRangeIndex = this.realTotalData.length ? this.realTotalData.length - 1 : this.pageSize;
  21834. this.virtualPlaceholderBottomHeight = 0;
  21835. } else {
  21836. this.virtualBottomRangeIndex = virtualBottomRangeIndex;
  21837. this.virtualPlaceholderBottomHeight = virtualPlaceholderBottomHeight;
  21838. }
  21839. this._updateVirtualList();
  21840. }
  21841. },
  21842. // 更新fixedCell模式下topRangeIndex&placeholderTopHeight
  21843. _updateFixedTopRangeIndex(scrollIndex) {
  21844. let virtualTopRangeIndex = this.virtualCellHeight === 0 ? 0 : scrollIndex - (parseInt(this.finalVirtualPageHeight / this.virtualCellHeight) || 1) * this.preloadPage;
  21845. virtualTopRangeIndex *= this.virtualListCol;
  21846. virtualTopRangeIndex = Math.max(0, virtualTopRangeIndex);
  21847. this.virtualTopRangeIndex = virtualTopRangeIndex;
  21848. this.virtualPlaceholderTopHeight = virtualTopRangeIndex / this.virtualListCol * this.virtualCellHeight;
  21849. },
  21850. // 更新fixedCell模式下bottomRangeIndex&placeholderBottomHeight
  21851. _updateFixedBottomRangeIndex(scrollIndex) {
  21852. let virtualBottomRangeIndex = this.virtualCellHeight === 0 ? this.pageSize : scrollIndex + (parseInt(this.finalVirtualPageHeight / this.virtualCellHeight) || 1) * (this.preloadPage + 1);
  21853. virtualBottomRangeIndex *= this.virtualListCol;
  21854. virtualBottomRangeIndex = Math.min(this.realTotalData.length, virtualBottomRangeIndex);
  21855. this.virtualBottomRangeIndex = virtualBottomRangeIndex;
  21856. this.virtualPlaceholderBottomHeight = (this.realTotalData.length - virtualBottomRangeIndex) * this.virtualCellHeight / this.virtualListCol;
  21857. this._updateVirtualList();
  21858. },
  21859. // 更新virtualList
  21860. _updateVirtualList() {
  21861. const shouldUpdateList = this.updateVirtualListFromDataChange || (this.lastVirtualTopRangeIndex !== this.virtualTopRangeIndex || this.lastVirtualBottomRangeIndex !== this.virtualBottomRangeIndex);
  21862. if (shouldUpdateList) {
  21863. this.updateVirtualListFromDataChange = false;
  21864. this.lastVirtualTopRangeIndex = this.virtualTopRangeIndex;
  21865. this.lastVirtualBottomRangeIndex = this.virtualBottomRangeIndex;
  21866. this.virtualList = this.realTotalData.slice(this.virtualTopRangeIndex, this.virtualBottomRangeIndex + 1);
  21867. }
  21868. },
  21869. // 重置动态cell模式下的高度缓存数据、虚拟列表和滚动状态
  21870. _resetDynamicListState(resetVirtualList = false) {
  21871. this.virtualHeightCacheList = [];
  21872. if (resetVirtualList) {
  21873. this.virtualList = [];
  21874. }
  21875. this.virtualTopRangeIndex = 0;
  21876. this.virtualPlaceholderTopHeight = 0;
  21877. },
  21878. // 重置topRangeIndex和placeholderTopHeight
  21879. _resetTopRange() {
  21880. this.virtualTopRangeIndex = 0;
  21881. this.virtualPlaceholderTopHeight = 0;
  21882. this._updateVirtualList();
  21883. },
  21884. // 检测虚拟列表当前滚动位置,如发现滚动位置不正确则重新计算虚拟列表相关参数(为解决在App中可能出现的长时间进入后台后打开App白屏的问题)
  21885. _checkVirtualListScroll() {
  21886. if (this.finalUseVirtualList) {
  21887. this.$nextTick(() => {
  21888. this._getNodeClientRect(".zp-paging-touch-view").then((node2) => {
  21889. const currentTop = node2 ? node2[0].top : 0;
  21890. if (!node2 || currentTop === this.pagingOrgTop && this.virtualPlaceholderTopHeight !== 0) {
  21891. this._updateVirtualScroll(0);
  21892. }
  21893. });
  21894. });
  21895. }
  21896. },
  21897. // 获取对应index的虚拟列表cell节点信息
  21898. _getVirtualCellNodeByIndex(index) {
  21899. let inDom = this.finalUseInnerList;
  21900. return this._getNodeClientRect(`#${this.fianlVirtualCellIdPrefix}-${index}`, inDom);
  21901. },
  21902. // 处理使用内置列表时点击了cell事件
  21903. _innerCellClick(item, index) {
  21904. this.$emit("innerCellClick", item, index);
  21905. }
  21906. }
  21907. };
  21908. const systemInfo = u.getSystemInfoSync();
  21909. const _sfc_main$16 = {
  21910. name: "z-paging",
  21911. components: {
  21912. zPagingRefresh,
  21913. zPagingLoadMore,
  21914. zPagingEmptyView: __easycom_0$2
  21915. },
  21916. mixins: [
  21917. commonLayoutModule,
  21918. dataHandleModule,
  21919. i18nModule,
  21920. nvueModule,
  21921. emptyModule,
  21922. refresherModule,
  21923. loadMoreModule,
  21924. loadingModule,
  21925. chatRecordModerModule,
  21926. scrollerModule,
  21927. backToTopModule,
  21928. virtualListModule
  21929. ],
  21930. data() {
  21931. return {
  21932. // --------------静态资源---------------
  21933. base64BackToTop: zStatic.base64BackToTop,
  21934. // -------------全局数据相关--------------
  21935. // 当前加载类型
  21936. loadingType: Enum.LoadingType.Refresher,
  21937. requestTimeStamp: 0,
  21938. wxsPropType: "",
  21939. renderPropScrollTop: -1,
  21940. checkScrolledToBottomTimeOut: null,
  21941. cacheTopHeight: -1,
  21942. statusBarHeight: systemInfo.statusBarHeight,
  21943. // --------------状态&判断---------------
  21944. insideOfPaging: -1,
  21945. isLoadFailed: false,
  21946. isIos: systemInfo.platform === "ios",
  21947. disabledBounce: false,
  21948. fromCompleteEmit: false,
  21949. disabledCompleteEmit: false,
  21950. pageLaunched: false,
  21951. active: false,
  21952. // ---------------wxs相关---------------
  21953. wxsIsScrollTopInTopRange: true,
  21954. wxsScrollTop: 0,
  21955. wxsPageScrollTop: 0,
  21956. wxsOnPullingDown: false
  21957. };
  21958. },
  21959. props: {
  21960. // 调用complete后延迟处理的时间,单位为毫秒,默认0毫秒,优先级高于minDelay
  21961. delay: {
  21962. type: [Number, String],
  21963. default: u.gc("delay", 0)
  21964. },
  21965. // 触发@query后最小延迟处理的时间,单位为毫秒,默认0毫秒,优先级低于delay(假设设置为300毫秒,若分页请求时间小于300毫秒,则在调用complete后延迟[300毫秒-请求时长];若请求时长大于300毫秒,则不延迟),当show-refresher-when-reload为true或reload(true)时,其最小值为400
  21966. minDelay: {
  21967. type: [Number, String],
  21968. default: u.gc("minDelay", 0)
  21969. },
  21970. // 设置z-paging的style,部分平台(如微信小程序)无法直接修改组件的style,可使用此属性代替
  21971. pagingStyle: {
  21972. type: Object,
  21973. default: u.gc("pagingStyle", {})
  21974. },
  21975. // z-paging的高度,优先级低于pagingStyle中设置的height;传字符串,如100px、100rpx、100%
  21976. height: {
  21977. type: String,
  21978. default: u.gc("height", "")
  21979. },
  21980. // z-paging的宽度,优先级低于pagingStyle中设置的width;传字符串,如100px、100rpx、100%
  21981. width: {
  21982. type: String,
  21983. default: u.gc("width", "")
  21984. },
  21985. // z-paging的最大宽度,优先级低于pagingStyle中设置的max-width;传字符串,如100px、100rpx、100%。默认为空,也就是铺满窗口宽度,若设置了特定值则会自动添加margin: 0 auto
  21986. maxWidth: {
  21987. type: String,
  21988. default: u.gc("maxWidth", "")
  21989. },
  21990. // z-paging的背景色,优先级低于pagingStyle中设置的background。传字符串,如"#ffffff"
  21991. bgColor: {
  21992. type: String,
  21993. default: u.gc("bgColor", "")
  21994. },
  21995. // 设置z-paging的容器(插槽的父view)的style
  21996. pagingContentStyle: {
  21997. type: Object,
  21998. default: u.gc("pagingContentStyle", {})
  21999. },
  22000. // z-paging是否自动高度,若自动高度则会自动铺满屏幕
  22001. autoHeight: {
  22002. type: Boolean,
  22003. default: u.gc("autoHeight", false)
  22004. },
  22005. // z-paging是否自动高度时,附加的高度,注意添加单位px或rpx,若需要减少高度,则传负数
  22006. autoHeightAddition: {
  22007. type: [Number, String],
  22008. default: u.gc("autoHeightAddition", "0px")
  22009. },
  22010. // loading(下拉刷新、上拉加载更多)的主题样式,支持black,white,默认black
  22011. defaultThemeStyle: {
  22012. type: String,
  22013. default: u.gc("defaultThemeStyle", "black")
  22014. },
  22015. // z-paging是否使用fixed布局,若使用fixed布局,则z-paging的父view无需固定高度,z-paging高度默认为100%,默认为是(当使用内置scroll-view滚动时有效)
  22016. fixed: {
  22017. type: Boolean,
  22018. default: u.gc("fixed", true)
  22019. },
  22020. // 是否开启底部安全区域适配
  22021. safeAreaInsetBottom: {
  22022. type: Boolean,
  22023. default: u.gc("safeAreaInsetBottom", false)
  22024. },
  22025. // 开启底部安全区域适配后,是否使用placeholder形式实现,默认为否。为否时滚动区域会自动避开底部安全区域,也就是所有滚动内容都不会挡住底部安全区域,若设置为是,则滚动时滚动内容会挡住底部安全区域,但是当滚动到底部时才会避开底部安全区域
  22026. useSafeAreaPlaceholder: {
  22027. type: Boolean,
  22028. default: u.gc("useSafeAreaPlaceholder", false)
  22029. },
  22030. // z-paging bottom的背景色,默认透明,传字符串,如"#ffffff"
  22031. bottomBgColor: {
  22032. type: String,
  22033. default: u.gc("bottomBgColor", "")
  22034. },
  22035. // slot="top"的view的z-index,默认为99,仅使用页面滚动时有效
  22036. topZIndex: {
  22037. type: Number,
  22038. default: u.gc("topZIndex", 99)
  22039. },
  22040. // z-paging内容容器父view的z-index,默认为1
  22041. superContentZIndex: {
  22042. type: Number,
  22043. default: u.gc("superContentZIndex", 1)
  22044. },
  22045. // z-paging内容容器部分的z-index,默认为1
  22046. contentZIndex: {
  22047. type: Number,
  22048. default: u.gc("contentZIndex", 1)
  22049. },
  22050. // z-paging二楼的z-index,默认为100
  22051. f2ZIndex: {
  22052. type: Number,
  22053. default: u.gc("f2ZIndex", 100)
  22054. },
  22055. // 使用页面滚动时,是否在不满屏时自动填充满屏幕,默认为是
  22056. autoFullHeight: {
  22057. type: Boolean,
  22058. default: u.gc("autoFullHeight", true)
  22059. },
  22060. // 是否监听列表触摸方向改变,默认为否
  22061. watchTouchDirectionChange: {
  22062. type: Boolean,
  22063. default: u.gc("watchTouchDirectionChange", false)
  22064. },
  22065. // z-paging中布局的单位,默认为rpx
  22066. unit: {
  22067. type: String,
  22068. default: u.gc("unit", "rpx")
  22069. }
  22070. },
  22071. created() {
  22072. if (this.createdReload && !this.refresherOnly && this.auto) {
  22073. this._startLoading();
  22074. this.$nextTick(this._preReload);
  22075. }
  22076. },
  22077. mounted() {
  22078. this.active = true;
  22079. this.wxsPropType = u.getTime().toString();
  22080. this.renderJsIgnore;
  22081. if (!this.createdReload && !this.refresherOnly && this.auto) {
  22082. u.delay(() => this.$nextTick(this._preReload), 0);
  22083. }
  22084. this.finalUseCache && this._setListByLocalCache();
  22085. this.$nextTick(() => {
  22086. this.systemInfo = u.getSystemInfoSync();
  22087. !this.usePageScroll && this.autoHeight && this._setAutoHeight();
  22088. this.loaded = true;
  22089. u.delay(() => {
  22090. this.updateFixedLayout();
  22091. this._updateCachedSuperContentHeight();
  22092. });
  22093. });
  22094. this.updatePageScrollTopHeight();
  22095. this.updatePageScrollBottomHeight();
  22096. this.updateLeftAndRightWidth();
  22097. if (this.finalRefresherEnabled && this.useCustomRefresher) {
  22098. this.$nextTick(() => {
  22099. this.isTouchmoving = true;
  22100. });
  22101. }
  22102. this._onEmit();
  22103. this.finalUseVirtualList && this._virtualListInit();
  22104. },
  22105. destroyed() {
  22106. this._handleUnmounted();
  22107. },
  22108. unmounted() {
  22109. this._handleUnmounted();
  22110. },
  22111. watch: {
  22112. defaultThemeStyle: {
  22113. handler(newVal) {
  22114. if (newVal.length) {
  22115. this.finalRefresherDefaultStyle = newVal;
  22116. }
  22117. },
  22118. immediate: true
  22119. },
  22120. autoHeight(newVal) {
  22121. this.loaded && !this.usePageScroll && this._setAutoHeight(newVal);
  22122. },
  22123. autoHeightAddition(newVal) {
  22124. this.loaded && !this.usePageScroll && this.autoHeight && this._setAutoHeight(newVal);
  22125. }
  22126. },
  22127. computed: {
  22128. // 当前z-paging的内置样式
  22129. finalPagingStyle() {
  22130. const pagingStyle = { ...this.pagingStyle };
  22131. if (!this.systemInfo)
  22132. return pagingStyle;
  22133. const { windowTop, windowBottom } = this;
  22134. if (!this.usePageScroll && this.fixed) {
  22135. if (windowTop && !pagingStyle.top) {
  22136. pagingStyle.top = windowTop + "px";
  22137. }
  22138. if (windowBottom && !pagingStyle.bottom) {
  22139. pagingStyle.bottom = windowBottom + "px";
  22140. }
  22141. }
  22142. if (this.bgColor.length && !pagingStyle["background"]) {
  22143. pagingStyle["background"] = this.bgColor;
  22144. }
  22145. if (this.height.length && !pagingStyle["height"]) {
  22146. pagingStyle["height"] = this.height;
  22147. }
  22148. if (this.width.length && !pagingStyle["width"]) {
  22149. pagingStyle["width"] = this.width;
  22150. }
  22151. if (this.maxWidth.length && !pagingStyle["max-width"]) {
  22152. pagingStyle["max-width"] = this.maxWidth;
  22153. pagingStyle["margin"] = "0 auto";
  22154. }
  22155. return pagingStyle;
  22156. },
  22157. // 当前z-paging内容的样式
  22158. finalPagingContentStyle() {
  22159. if (this.contentZIndex != 1) {
  22160. this.pagingContentStyle["z-index"] = this.contentZIndex;
  22161. this.pagingContentStyle["position"] = "relative";
  22162. }
  22163. return this.pagingContentStyle;
  22164. },
  22165. renderJsIgnore() {
  22166. if (this.usePageScroll && this.useChatRecordMode || !this.refresherEnabled && this.scrollable || !this.useCustomRefresher) {
  22167. this.$nextTick(() => {
  22168. this.renderPropScrollTop = 10;
  22169. });
  22170. }
  22171. return 0;
  22172. },
  22173. windowHeight() {
  22174. if (!this.systemInfo)
  22175. return 0;
  22176. return this.systemInfo.windowHeight || 0;
  22177. },
  22178. windowBottom() {
  22179. if (!this.systemInfo)
  22180. return 0;
  22181. let windowBottom = this.systemInfo.windowBottom || 0;
  22182. if (this.safeAreaInsetBottom && !this.useSafeAreaPlaceholder && !this.useChatRecordMode) {
  22183. windowBottom += this.safeAreaBottom;
  22184. }
  22185. return windowBottom;
  22186. },
  22187. isIosAndH5() {
  22188. return false;
  22189. }
  22190. },
  22191. methods: {
  22192. // 当前版本号
  22193. getVersion() {
  22194. return `z-paging v${c.version}`;
  22195. },
  22196. // 设置nvue List的specialEffects
  22197. setSpecialEffects(args) {
  22198. this.setListSpecialEffects(args);
  22199. },
  22200. // 与setSpecialEffects等效,兼容旧版本
  22201. setListSpecialEffects(args) {
  22202. this.nFixFreezing = args && Object.keys(args).length;
  22203. if (this.isIos) {
  22204. this.privateRefresherEnabled = 0;
  22205. }
  22206. !this.usePageScroll && this.$refs["zp-n-list"].setSpecialEffects(args);
  22207. },
  22208. // 当app长时间进入后台后进入前台,因系统内存管理导致app重新加载时,进行一些适配处理
  22209. _handlePageLaunch() {
  22210. if (this.pageLaunched) {
  22211. this.refresherThresholdUpdateTag = 1;
  22212. this.$nextTick(() => {
  22213. this.refresherThresholdUpdateTag = 0;
  22214. });
  22215. this._checkVirtualListScroll();
  22216. }
  22217. this.pageLaunched = true;
  22218. },
  22219. // 使手机发生较短时间的振动(15ms)
  22220. _doVibrateShort() {
  22221. if (this.isIos) {
  22222. const UISelectionFeedbackGenerator = plus.ios.importClass("UISelectionFeedbackGenerator");
  22223. const feedbackGenerator = new UISelectionFeedbackGenerator();
  22224. feedbackGenerator.init();
  22225. setTimeout(() => {
  22226. feedbackGenerator.selectionChanged();
  22227. }, 0);
  22228. } else {
  22229. plus.device.vibrate(15);
  22230. }
  22231. },
  22232. // 设置z-paging高度
  22233. async _setAutoHeight(shouldFullHeight = true, scrollViewNode = null) {
  22234. const heightKey = "min-height";
  22235. try {
  22236. if (shouldFullHeight) {
  22237. let finalScrollViewNode = scrollViewNode || await this._getNodeClientRect(".zp-scroll-view");
  22238. let finalScrollBottomNode = await this._getNodeClientRect(".zp-page-bottom");
  22239. if (finalScrollViewNode) {
  22240. const scrollViewTop = finalScrollViewNode[0].top;
  22241. let scrollViewHeight = this.windowHeight - scrollViewTop;
  22242. scrollViewHeight -= finalScrollBottomNode ? finalScrollBottomNode[0].height : 0;
  22243. const additionHeight = u.convertToPx(this.autoHeightAddition);
  22244. let importantSuffix = " !important";
  22245. const finalHeight = scrollViewHeight + additionHeight - (this.insideMore ? 1 : 0) + "px" + importantSuffix;
  22246. this.$set(this.scrollViewStyle, heightKey, finalHeight);
  22247. this.$set(this.scrollViewInStyle, heightKey, finalHeight);
  22248. }
  22249. } else {
  22250. this.$delete(this.scrollViewStyle, heightKey);
  22251. this.$delete(this.scrollViewInStyle, heightKey);
  22252. }
  22253. } catch (e) {
  22254. }
  22255. },
  22256. // 组件销毁后续处理
  22257. _handleUnmounted() {
  22258. this.active = false;
  22259. this._offEmit();
  22260. this.useChatRecordMode && uni.offKeyboardHeightChange(this._handleKeyboardHeightChange);
  22261. },
  22262. // 触发更新是否超出页面状态
  22263. _updateInsideOfPaging() {
  22264. this.insideMore && this.insideOfPaging === true && setTimeout(this.doLoadMore, 200);
  22265. },
  22266. // 清除timeout
  22267. _cleanTimeout(timeout2) {
  22268. if (timeout2) {
  22269. clearTimeout(timeout2);
  22270. timeout2 = null;
  22271. }
  22272. return timeout2;
  22273. },
  22274. // 添加全局emit监听
  22275. _onEmit() {
  22276. uni.$on(c.errorUpdateKey, (errorMsg) => {
  22277. if (this.loading) {
  22278. if (!!errorMsg) {
  22279. this.customerEmptyViewErrorText = errorMsg;
  22280. }
  22281. this.complete(false).catch(() => {
  22282. });
  22283. }
  22284. });
  22285. uni.$on(c.completeUpdateKey, (data) => {
  22286. setTimeout(() => {
  22287. if (this.loading) {
  22288. if (!this.disabledCompleteEmit) {
  22289. const type2 = data.type || "normal";
  22290. const list2 = data.list || data;
  22291. const rule = data.rule;
  22292. this.fromCompleteEmit = true;
  22293. switch (type2) {
  22294. case "normal":
  22295. this.complete(list2);
  22296. break;
  22297. case "total":
  22298. this.completeByTotal(list2, rule);
  22299. break;
  22300. case "nomore":
  22301. this.completeByNoMore(list2, rule);
  22302. break;
  22303. case "key":
  22304. this.completeByKey(list2, rule);
  22305. break;
  22306. }
  22307. } else {
  22308. this.disabledCompleteEmit = false;
  22309. }
  22310. }
  22311. }, 1);
  22312. });
  22313. },
  22314. // 销毁全局emit和listener监听
  22315. _offEmit() {
  22316. uni.$off(c.errorUpdateKey);
  22317. uni.$off(c.completeUpdateKey);
  22318. }
  22319. }
  22320. };
  22321. const block0$2 = (Comp) => {
  22322. (Comp.$renderjs || (Comp.$renderjs = [])).push("pagingRenderjs");
  22323. (Comp.$renderjsModules || (Comp.$renderjsModules = {}))["pagingRenderjs"] = "68423204";
  22324. };
  22325. const block1 = (Comp) => {
  22326. (Comp.$wxs || (Comp.$wxs = [])).push("pagingWxs");
  22327. (Comp.$wxsModules || (Comp.$wxsModules = {}))["pagingWxs"] = "e0a9e146";
  22328. };
  22329. function _sfc_render$15(_ctx, _cache, $props, $setup, $data, $options) {
  22330. const _component_z_paging_refresh = vue.resolveComponent("z-paging-refresh");
  22331. const _component_z_paging_load_more = vue.resolveComponent("z-paging-load-more");
  22332. const _component_z_paging_empty_view = resolveEasycom(vue.resolveDynamicComponent("z-paging-empty-view"), __easycom_0$2);
  22333. return vue.openBlock(), vue.createElementBlock(
  22334. "view",
  22335. {
  22336. class: vue.normalizeClass({ "z-paging-content": true, "z-paging-content-full": !_ctx.usePageScroll, "z-paging-content-fixed": !_ctx.usePageScroll && _ctx.fixed, "z-paging-content-page": _ctx.usePageScroll, "z-paging-reached-top": _ctx.renderPropScrollTop < 1, "z-paging-use-chat-record-mode": _ctx.useChatRecordMode }),
  22337. style: vue.normalizeStyle([_ctx.finalPagingStyle])
  22338. },
  22339. [
  22340. vue.createCommentVNode(" 二楼view "),
  22341. _ctx.showF2 && _ctx.showRefresherF2 ? (vue.openBlock(), vue.createElementBlock(
  22342. "view",
  22343. {
  22344. key: 0,
  22345. onTouchmove: _cache[0] || (_cache[0] = vue.withModifiers(() => {
  22346. }, ["stop", "prevent"])),
  22347. class: "zp-f2-content",
  22348. style: vue.normalizeStyle([{ "transform": _ctx.f2Transform, "transition": `transform .2s linear`, "height": _ctx.superContentHeight + "px", "z-index": _ctx.f2ZIndex }])
  22349. },
  22350. [
  22351. vue.renderSlot(_ctx.$slots, "f2", {}, void 0, true)
  22352. ],
  22353. 36
  22354. /* STYLE, NEED_HYDRATION */
  22355. )) : vue.createCommentVNode("v-if", true),
  22356. vue.createCommentVNode(" 顶部固定的slot "),
  22357. !_ctx.usePageScroll && _ctx.zSlots.top ? vue.renderSlot(_ctx.$slots, "top", { key: 1 }, void 0, true) : _ctx.usePageScroll && _ctx.zSlots.top ? (vue.openBlock(), vue.createElementBlock(
  22358. "view",
  22359. {
  22360. key: 2,
  22361. class: "zp-page-top",
  22362. onTouchmove: _cache[1] || (_cache[1] = vue.withModifiers(() => {
  22363. }, ["stop", "prevent"])),
  22364. style: vue.normalizeStyle([{ "top": `${_ctx.windowTop}px`, "z-index": _ctx.topZIndex }])
  22365. },
  22366. [
  22367. vue.renderSlot(_ctx.$slots, "top", {}, void 0, true)
  22368. ],
  22369. 36
  22370. /* STYLE, NEED_HYDRATION */
  22371. )) : vue.createCommentVNode("v-if", true),
  22372. vue.createElementVNode(
  22373. "view",
  22374. {
  22375. class: vue.normalizeClass({ "zp-view-super": true, "zp-scroll-view-super": !_ctx.usePageScroll }),
  22376. style: vue.normalizeStyle([_ctx.finalScrollViewStyle])
  22377. },
  22378. [
  22379. _ctx.zSlots.left ? (vue.openBlock(), vue.createElementBlock(
  22380. "view",
  22381. {
  22382. key: 0,
  22383. class: vue.normalizeClass({ "zp-page-left": true, "zp-absoulte": _ctx.finalIsOldWebView })
  22384. },
  22385. [
  22386. vue.renderSlot(_ctx.$slots, "left", {}, void 0, true)
  22387. ],
  22388. 2
  22389. /* CLASS */
  22390. )) : vue.createCommentVNode("v-if", true),
  22391. vue.createElementVNode(
  22392. "view",
  22393. {
  22394. class: vue.normalizeClass({ "zp-scroll-view-container": true, "zp-absoulte": _ctx.finalIsOldWebView }),
  22395. style: vue.normalizeStyle([_ctx.scrollViewContainerStyle])
  22396. },
  22397. [
  22398. vue.createElementVNode("scroll-view", {
  22399. ref: "zp-scroll-view",
  22400. class: vue.normalizeClass({ "zp-scroll-view": true, "zp-scroll-view-absolute": !_ctx.usePageScroll, "zp-scroll-view-hide-scrollbar": !_ctx.showScrollbar }),
  22401. style: vue.normalizeStyle([_ctx.chatRecordRotateStyle]),
  22402. "scroll-top": _ctx.scrollTop,
  22403. "scroll-left": _ctx.scrollLeft,
  22404. "scroll-x": _ctx.scrollX,
  22405. "scroll-y": _ctx.finalScrollable,
  22406. "enable-back-to-top": _ctx.finalEnableBackToTop,
  22407. "show-scrollbar": _ctx.showScrollbar,
  22408. "scroll-with-animation": _ctx.finalScrollWithAnimation,
  22409. "scroll-into-view": _ctx.scrollIntoView,
  22410. "lower-threshold": _ctx.finalLowerThreshold,
  22411. "upper-threshold": 5,
  22412. "refresher-enabled": _ctx.finalRefresherEnabled && !_ctx.useCustomRefresher,
  22413. "refresher-threshold": _ctx.finalRefresherThreshold,
  22414. "refresher-default-style": _ctx.finalRefresherDefaultStyle,
  22415. "refresher-background": _ctx.refresherBackground,
  22416. "refresher-triggered": _ctx.finalRefresherTriggered,
  22417. onScroll: _cache[12] || (_cache[12] = (...args) => _ctx._scroll && _ctx._scroll(...args)),
  22418. onScrolltolower: _cache[13] || (_cache[13] = (...args) => _ctx._onScrollToLower && _ctx._onScrollToLower(...args)),
  22419. onScrolltoupper: _cache[14] || (_cache[14] = (...args) => _ctx._onScrollToUpper && _ctx._onScrollToUpper(...args)),
  22420. onRefresherrestore: _cache[15] || (_cache[15] = (...args) => _ctx._onRestore && _ctx._onRestore(...args)),
  22421. onRefresherrefresh: _cache[16] || (_cache[16] = ($event) => _ctx._onRefresh(true))
  22422. }, [
  22423. vue.createElementVNode(
  22424. "view",
  22425. {
  22426. class: "zp-paging-touch-view",
  22427. onTouchstart: _cache[4] || (_cache[4] = (...args) => _ctx.pagingWxs.touchstart && _ctx.pagingWxs.touchstart(...args)),
  22428. onTouchmove: _cache[5] || (_cache[5] = (...args) => _ctx.pagingWxs.touchmove && _ctx.pagingWxs.touchmove(...args)),
  22429. onTouchend: _cache[6] || (_cache[6] = (...args) => _ctx.pagingWxs.touchend && _ctx.pagingWxs.touchend(...args)),
  22430. onTouchcancel: _cache[7] || (_cache[7] = (...args) => _ctx.pagingWxs.touchend && _ctx.pagingWxs.touchend(...args)),
  22431. onMousedown: _cache[8] || (_cache[8] = (...args) => _ctx.pagingWxs.mousedown && _ctx.pagingWxs.mousedown(...args)),
  22432. onMousemove: _cache[9] || (_cache[9] = (...args) => _ctx.pagingWxs.mousemove && _ctx.pagingWxs.mousemove(...args)),
  22433. onMouseup: _cache[10] || (_cache[10] = (...args) => _ctx.pagingWxs.mouseup && _ctx.pagingWxs.mouseup(...args)),
  22434. onMouseleave: _cache[11] || (_cache[11] = (...args) => _ctx.pagingWxs.mouseleave && _ctx.pagingWxs.mouseleave(...args))
  22435. },
  22436. [
  22437. _ctx.finalRefresherFixedBacHeight > 0 ? (vue.openBlock(), vue.createElementBlock(
  22438. "view",
  22439. {
  22440. key: 0,
  22441. class: "zp-fixed-bac-view",
  22442. style: vue.normalizeStyle([{ "background": _ctx.refresherFixedBackground, "height": `${_ctx.finalRefresherFixedBacHeight}px` }])
  22443. },
  22444. null,
  22445. 4
  22446. /* STYLE */
  22447. )) : vue.createCommentVNode("v-if", true),
  22448. vue.createElementVNode("view", {
  22449. class: "zp-paging-main",
  22450. style: vue.normalizeStyle([_ctx.scrollViewInStyle, { "transform": _ctx.finalRefresherTransform, "transition": _ctx.refresherTransition }]),
  22451. "change:prop": _ctx.pagingWxs.propObserver,
  22452. prop: vue.wp(_ctx.wxsPropType),
  22453. "data-refresherThreshold": _ctx.finalRefresherThreshold,
  22454. "data-refresherF2Enabled": _ctx.refresherF2Enabled,
  22455. "data-refresherF2Threshold": _ctx.finalRefresherF2Threshold,
  22456. "data-isIos": _ctx.isIos,
  22457. "data-loading": _ctx.loading || _ctx.isRefresherInComplete,
  22458. "data-useChatRecordMode": _ctx.useChatRecordMode,
  22459. "data-refresherEnabled": _ctx.refresherEnabled,
  22460. "data-useCustomRefresher": _ctx.useCustomRefresher,
  22461. "data-pageScrollTop": _ctx.wxsPageScrollTop,
  22462. "data-scrollTop": _ctx.wxsScrollTop,
  22463. "data-refresherMaxAngle": _ctx.refresherMaxAngle,
  22464. "data-refresherNoTransform": _ctx.refresherNoTransform,
  22465. "data-refresherAecc": _ctx.refresherAngleEnableChangeContinued,
  22466. "data-usePageScroll": _ctx.usePageScroll,
  22467. "data-watchTouchDirectionChange": _ctx.watchTouchDirectionChange,
  22468. "data-oldIsTouchmoving": _ctx.isTouchmoving,
  22469. "data-refresherOutRate": _ctx.finalRefresherOutRate,
  22470. "data-refresherPullRate": _ctx.finalRefresherPullRate,
  22471. "data-hasTouchmove": _ctx.hasTouchmove,
  22472. "change:renderPropIsIosAndH5": _ctx.pagingRenderjs.renderPropIsIosAndH5Change,
  22473. renderPropIsIosAndH5: vue.wp(_ctx.isIosAndH5)
  22474. }, [
  22475. _ctx.showRefresher ? (vue.openBlock(), vue.createElementBlock(
  22476. "view",
  22477. {
  22478. key: 0,
  22479. class: "zp-custom-refresher-view",
  22480. style: vue.normalizeStyle([{ "margin-top": `-${_ctx.finalRefresherThreshold + _ctx.refresherThresholdUpdateTag}px`, "background": _ctx.refresherBackground, "opacity": _ctx.isTouchmoving ? 1 : 0 }])
  22481. },
  22482. [
  22483. vue.createElementVNode(
  22484. "view",
  22485. {
  22486. class: "zp-custom-refresher-container",
  22487. style: vue.normalizeStyle([{ "height": `${_ctx.finalRefresherThreshold}px`, "background": _ctx.refresherBackground }])
  22488. },
  22489. [
  22490. _ctx.useRefresherStatusBarPlaceholder ? (vue.openBlock(), vue.createElementBlock(
  22491. "view",
  22492. {
  22493. key: 0,
  22494. class: "zp-custom-refresher-status-bar-placeholder",
  22495. style: vue.normalizeStyle([{ "height": `${_ctx.statusBarHeight}px` }])
  22496. },
  22497. null,
  22498. 4
  22499. /* STYLE */
  22500. )) : vue.createCommentVNode("v-if", true),
  22501. vue.createCommentVNode(" 下拉刷新view "),
  22502. vue.createElementVNode("view", { class: "zp-custom-refresher-slot-view" }, [
  22503. !(_ctx.zSlots.refresherComplete && _ctx.refresherStatus === _ctx.R.Complete) && !(_ctx.zSlots.refresherF2 && _ctx.refresherStatus === _ctx.R.GoF2) ? vue.renderSlot(_ctx.$slots, "refresher", {
  22504. key: 0,
  22505. refresherStatus: _ctx.refresherStatus
  22506. }, void 0, true) : vue.createCommentVNode("v-if", true)
  22507. ]),
  22508. _ctx.zSlots.refresherComplete && _ctx.refresherStatus === _ctx.R.Complete ? vue.renderSlot(_ctx.$slots, "refresherComplete", { key: 1 }, void 0, true) : _ctx.zSlots.refresherF2 && _ctx.refresherStatus === _ctx.R.GoF2 ? vue.renderSlot(_ctx.$slots, "refresherF2", { key: 2 }, void 0, true) : !_ctx.showCustomRefresher ? (vue.openBlock(), vue.createBlock(_component_z_paging_refresh, {
  22509. key: 3,
  22510. ref: "refresh",
  22511. class: "zp-custom-refresher-refresh",
  22512. style: vue.normalizeStyle([{ "height": `${_ctx.finalRefresherThreshold - _ctx.finalRefresherThresholdPlaceholder}px` }]),
  22513. status: _ctx.refresherStatus,
  22514. defaultThemeStyle: _ctx.finalRefresherThemeStyle,
  22515. defaultText: _ctx.finalRefresherDefaultText,
  22516. isIos: _ctx.isIos,
  22517. pullingText: _ctx.finalRefresherPullingText,
  22518. refreshingText: _ctx.finalRefresherRefreshingText,
  22519. completeText: _ctx.finalRefresherCompleteText,
  22520. goF2Text: _ctx.finalRefresherGoF2Text,
  22521. defaultImg: _ctx.refresherDefaultImg,
  22522. pullingImg: _ctx.refresherPullingImg,
  22523. refreshingImg: _ctx.refresherRefreshingImg,
  22524. completeImg: _ctx.refresherCompleteImg,
  22525. refreshingAnimated: _ctx.refresherRefreshingAnimated,
  22526. showUpdateTime: _ctx.showRefresherUpdateTime,
  22527. updateTimeKey: _ctx.refresherUpdateTimeKey,
  22528. updateTimeTextMap: _ctx.finalRefresherUpdateTimeTextMap,
  22529. imgStyle: _ctx.refresherImgStyle,
  22530. titleStyle: _ctx.refresherTitleStyle,
  22531. updateTimeStyle: _ctx.refresherUpdateTimeStyle,
  22532. unit: _ctx.unit
  22533. }, null, 8, ["style", "status", "defaultThemeStyle", "defaultText", "isIos", "pullingText", "refreshingText", "completeText", "goF2Text", "defaultImg", "pullingImg", "refreshingImg", "completeImg", "refreshingAnimated", "showUpdateTime", "updateTimeKey", "updateTimeTextMap", "imgStyle", "titleStyle", "updateTimeStyle", "unit"])) : vue.createCommentVNode("v-if", true)
  22534. ],
  22535. 4
  22536. /* STYLE */
  22537. )
  22538. ],
  22539. 4
  22540. /* STYLE */
  22541. )) : vue.createCommentVNode("v-if", true),
  22542. vue.createElementVNode(
  22543. "view",
  22544. {
  22545. class: "zp-paging-container",
  22546. style: vue.normalizeStyle([{ justifyContent: _ctx.useChatRecordMode ? "flex-end" : "flex-start" }])
  22547. },
  22548. [
  22549. vue.createCommentVNode(" 全屏Loading "),
  22550. _ctx.showLoading && _ctx.zSlots.loading && !_ctx.loadingFullFixed ? vue.renderSlot(_ctx.$slots, "loading", { key: 0 }, void 0, true) : vue.createCommentVNode("v-if", true),
  22551. vue.createCommentVNode(" 主体内容 "),
  22552. vue.createElementVNode(
  22553. "view",
  22554. {
  22555. class: "zp-paging-container-content",
  22556. style: vue.normalizeStyle([_ctx.finalPlaceholderTopHeightStyle, _ctx.finalPagingContentStyle])
  22557. },
  22558. [
  22559. vue.createCommentVNode(" 虚拟列表顶部占位view "),
  22560. _ctx.useVirtualList ? (vue.openBlock(), vue.createElementBlock(
  22561. "view",
  22562. {
  22563. key: 0,
  22564. class: "zp-virtual-placeholder",
  22565. style: vue.normalizeStyle([{ height: _ctx.virtualPlaceholderTopHeight + "px" }])
  22566. },
  22567. null,
  22568. 4
  22569. /* STYLE */
  22570. )) : vue.createCommentVNode("v-if", true),
  22571. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
  22572. vue.createCommentVNode(" 内置列表&虚拟列表 "),
  22573. _ctx.finalUseInnerList ? (vue.openBlock(), vue.createElementBlock(
  22574. vue.Fragment,
  22575. { key: 1 },
  22576. [
  22577. vue.renderSlot(_ctx.$slots, "header", {}, void 0, true),
  22578. vue.createElementVNode(
  22579. "view",
  22580. {
  22581. class: "zp-list-container",
  22582. style: vue.normalizeStyle([_ctx.innerListStyle])
  22583. },
  22584. [
  22585. _ctx.finalUseVirtualList ? (vue.openBlock(true), vue.createElementBlock(
  22586. vue.Fragment,
  22587. { key: 0 },
  22588. vue.renderList(_ctx.virtualList, (item, index) => {
  22589. return vue.openBlock(), vue.createElementBlock("view", {
  22590. class: "zp-list-cell",
  22591. style: vue.normalizeStyle([_ctx.innerCellStyle]),
  22592. id: `${_ctx.fianlVirtualCellIdPrefix}-${item[_ctx.virtualCellIndexKey]}`,
  22593. key: item["zp_unique_index"],
  22594. onClick: ($event) => _ctx._innerCellClick(item, _ctx.virtualTopRangeIndex + index)
  22595. }, [
  22596. _ctx.useCompatibilityMode ? (vue.openBlock(), vue.createElementBlock("view", { key: 0 }, "使用兼容模式请在组件源码z-paging.vue第103行中注释这一行,并打开下面一行注释")) : (vue.openBlock(), vue.createElementBlock(
  22597. vue.Fragment,
  22598. { key: 1 },
  22599. [
  22600. vue.createCommentVNode(' <zp-public-virtual-cell v-if="useCompatibilityMode" :extraData="extraData" :item="item" :index="virtualTopRangeIndex+index" /> '),
  22601. vue.renderSlot(_ctx.$slots, "cell", {
  22602. item,
  22603. index: _ctx.virtualTopRangeIndex + index
  22604. }, void 0, true)
  22605. ],
  22606. 2112
  22607. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  22608. ))
  22609. ], 12, ["id", "onClick"]);
  22610. }),
  22611. 128
  22612. /* KEYED_FRAGMENT */
  22613. )) : (vue.openBlock(true), vue.createElementBlock(
  22614. vue.Fragment,
  22615. { key: 1 },
  22616. vue.renderList(_ctx.realTotalData, (item, index) => {
  22617. return vue.openBlock(), vue.createElementBlock("view", {
  22618. class: "zp-list-cell",
  22619. key: index,
  22620. onClick: ($event) => _ctx._innerCellClick(item, index)
  22621. }, [
  22622. vue.renderSlot(_ctx.$slots, "cell", {
  22623. item,
  22624. index
  22625. }, void 0, true)
  22626. ], 8, ["onClick"]);
  22627. }),
  22628. 128
  22629. /* KEYED_FRAGMENT */
  22630. ))
  22631. ],
  22632. 4
  22633. /* STYLE */
  22634. ),
  22635. vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
  22636. ],
  22637. 64
  22638. /* STABLE_FRAGMENT */
  22639. )) : vue.createCommentVNode("v-if", true),
  22640. vue.createCommentVNode(" 聊天记录模式加载更多loading "),
  22641. _ctx.useChatRecordMode && _ctx.realTotalData.length >= _ctx.defaultPageSize && (_ctx.loadingStatus !== _ctx.M.NoMore || _ctx.zSlots.chatNoMore) && (_ctx.realTotalData.length || _ctx.showChatLoadingWhenReload && _ctx.showLoading) && !_ctx.isFirstPageAndNoMore ? (vue.openBlock(), vue.createElementBlock(
  22642. "view",
  22643. {
  22644. key: 2,
  22645. style: vue.normalizeStyle([_ctx.chatRecordRotateStyle])
  22646. },
  22647. [
  22648. _ctx.loadingStatus === _ctx.M.NoMore && _ctx.zSlots.chatNoMore ? vue.renderSlot(_ctx.$slots, "chatNoMore", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createElementBlock(
  22649. vue.Fragment,
  22650. { key: 1 },
  22651. [
  22652. _ctx.zSlots.chatLoading ? vue.renderSlot(_ctx.$slots, "chatLoading", {
  22653. key: 0,
  22654. loadingMoreStatus: _ctx.loadingStatus
  22655. }, void 0, true) : (vue.openBlock(), vue.createBlock(_component_z_paging_load_more, {
  22656. key: 1,
  22657. onDoClick: _cache[2] || (_cache[2] = ($event) => _ctx._onLoadingMore("click")),
  22658. zConfig: _ctx.zLoadMoreConfig
  22659. }, null, 8, ["zConfig"]))
  22660. ],
  22661. 64
  22662. /* STABLE_FRAGMENT */
  22663. ))
  22664. ],
  22665. 4
  22666. /* STYLE */
  22667. )) : vue.createCommentVNode("v-if", true),
  22668. vue.createCommentVNode(" 虚拟列表底部占位view "),
  22669. _ctx.useVirtualList ? (vue.openBlock(), vue.createElementBlock(
  22670. "view",
  22671. {
  22672. key: 3,
  22673. class: "zp-virtual-placeholder",
  22674. style: vue.normalizeStyle([{ height: _ctx.virtualPlaceholderBottomHeight + "px" }])
  22675. },
  22676. null,
  22677. 4
  22678. /* STYLE */
  22679. )) : vue.createCommentVNode("v-if", true),
  22680. vue.createCommentVNode(" 上拉加载更多view "),
  22681. _ctx.showLoadingMoreDefault ? vue.renderSlot(_ctx.$slots, "loadingMoreDefault", { key: 4 }, void 0, true) : _ctx.showLoadingMoreLoading ? vue.renderSlot(_ctx.$slots, "loadingMoreLoading", { key: 5 }, void 0, true) : _ctx.showLoadingMoreNoMore ? vue.renderSlot(_ctx.$slots, "loadingMoreNoMore", { key: 6 }, void 0, true) : _ctx.showLoadingMoreFail ? vue.renderSlot(_ctx.$slots, "loadingMoreFail", { key: 7 }, void 0, true) : _ctx.showLoadingMoreCustom ? (vue.openBlock(), vue.createBlock(_component_z_paging_load_more, {
  22682. key: 8,
  22683. onDoClick: _cache[3] || (_cache[3] = ($event) => _ctx._onLoadingMore("click")),
  22684. zConfig: _ctx.zLoadMoreConfig
  22685. }, null, 8, ["zConfig"])) : vue.createCommentVNode("v-if", true),
  22686. _ctx.safeAreaInsetBottom && _ctx.useSafeAreaPlaceholder && !_ctx.useChatRecordMode ? (vue.openBlock(), vue.createElementBlock(
  22687. "view",
  22688. {
  22689. key: 9,
  22690. class: "zp-safe-area-placeholder",
  22691. style: vue.normalizeStyle([{ height: _ctx.safeAreaBottom + "px" }])
  22692. },
  22693. null,
  22694. 4
  22695. /* STYLE */
  22696. )) : vue.createCommentVNode("v-if", true)
  22697. ],
  22698. 4
  22699. /* STYLE */
  22700. ),
  22701. vue.createCommentVNode(" 空数据图 "),
  22702. _ctx.showEmpty ? (vue.openBlock(), vue.createElementBlock(
  22703. "view",
  22704. {
  22705. key: 1,
  22706. class: vue.normalizeClass({ "zp-empty-view": true, "zp-empty-view-center": _ctx.emptyViewCenter }),
  22707. style: vue.normalizeStyle([_ctx.emptyViewSuperStyle, _ctx.chatRecordRotateStyle])
  22708. },
  22709. [
  22710. _ctx.zSlots.empty ? vue.renderSlot(_ctx.$slots, "empty", {
  22711. key: 0,
  22712. isLoadFailed: _ctx.isLoadFailed
  22713. }, void 0, true) : (vue.openBlock(), vue.createBlock(_component_z_paging_empty_view, {
  22714. key: 1,
  22715. emptyViewImg: _ctx.finalEmptyViewImg,
  22716. emptyViewText: _ctx.finalEmptyViewText,
  22717. showEmptyViewReload: _ctx.finalShowEmptyViewReload,
  22718. emptyViewReloadText: _ctx.finalEmptyViewReloadText,
  22719. isLoadFailed: _ctx.isLoadFailed,
  22720. emptyViewStyle: _ctx.emptyViewStyle,
  22721. emptyViewTitleStyle: _ctx.emptyViewTitleStyle,
  22722. emptyViewImgStyle: _ctx.emptyViewImgStyle,
  22723. emptyViewReloadStyle: _ctx.emptyViewReloadStyle,
  22724. emptyViewZIndex: _ctx.emptyViewZIndex,
  22725. emptyViewFixed: _ctx.emptyViewFixed,
  22726. unit: _ctx.unit,
  22727. onReload: _ctx._emptyViewReload,
  22728. onViewClick: _ctx._emptyViewClick
  22729. }, null, 8, ["emptyViewImg", "emptyViewText", "showEmptyViewReload", "emptyViewReloadText", "isLoadFailed", "emptyViewStyle", "emptyViewTitleStyle", "emptyViewImgStyle", "emptyViewReloadStyle", "emptyViewZIndex", "emptyViewFixed", "unit", "onReload", "onViewClick"]))
  22730. ],
  22731. 6
  22732. /* CLASS, STYLE */
  22733. )) : vue.createCommentVNode("v-if", true)
  22734. ],
  22735. 4
  22736. /* STYLE */
  22737. )
  22738. ], 12, ["change:prop", "prop", "data-refresherThreshold", "data-refresherF2Enabled", "data-refresherF2Threshold", "data-isIos", "data-loading", "data-useChatRecordMode", "data-refresherEnabled", "data-useCustomRefresher", "data-pageScrollTop", "data-scrollTop", "data-refresherMaxAngle", "data-refresherNoTransform", "data-refresherAecc", "data-usePageScroll", "data-watchTouchDirectionChange", "data-oldIsTouchmoving", "data-refresherOutRate", "data-refresherPullRate", "data-hasTouchmove", "change:renderPropIsIosAndH5", "renderPropIsIosAndH5"])
  22739. ],
  22740. 32
  22741. /* NEED_HYDRATION */
  22742. )
  22743. ], 46, ["scroll-top", "scroll-left", "scroll-x", "scroll-y", "enable-back-to-top", "show-scrollbar", "scroll-with-animation", "scroll-into-view", "lower-threshold", "refresher-enabled", "refresher-threshold", "refresher-default-style", "refresher-background", "refresher-triggered"])
  22744. ],
  22745. 6
  22746. /* CLASS, STYLE */
  22747. ),
  22748. _ctx.zSlots.right ? (vue.openBlock(), vue.createElementBlock(
  22749. "view",
  22750. {
  22751. key: 1,
  22752. class: vue.normalizeClass({ "zp-page-right": true, "zp-absoulte zp-right": _ctx.finalIsOldWebView })
  22753. },
  22754. [
  22755. vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
  22756. ],
  22757. 2
  22758. /* CLASS */
  22759. )) : vue.createCommentVNode("v-if", true)
  22760. ],
  22761. 6
  22762. /* CLASS, STYLE */
  22763. ),
  22764. vue.createCommentVNode(" 底部固定的slot "),
  22765. vue.createElementVNode(
  22766. "view",
  22767. {
  22768. class: "zp-page-bottom-container",
  22769. style: vue.normalizeStyle({ "background": _ctx.bottomBgColor })
  22770. },
  22771. [
  22772. !_ctx.usePageScroll && _ctx.zSlots.bottom ? vue.renderSlot(_ctx.$slots, "bottom", { key: 0 }, void 0, true) : _ctx.usePageScroll && _ctx.zSlots.bottom ? (vue.openBlock(), vue.createElementBlock(
  22773. "view",
  22774. {
  22775. key: 1,
  22776. class: "zp-page-bottom",
  22777. onTouchmove: _cache[17] || (_cache[17] = vue.withModifiers(() => {
  22778. }, ["stop", "prevent"])),
  22779. style: vue.normalizeStyle([{ "bottom": `${_ctx.windowBottom}px` }])
  22780. },
  22781. [
  22782. vue.renderSlot(_ctx.$slots, "bottom", {}, void 0, true)
  22783. ],
  22784. 36
  22785. /* STYLE, NEED_HYDRATION */
  22786. )) : vue.createCommentVNode("v-if", true),
  22787. vue.createCommentVNode(" 聊天记录模式底部占位 "),
  22788. _ctx.useChatRecordMode && _ctx.autoAdjustPositionWhenChat ? (vue.openBlock(), vue.createElementBlock(
  22789. vue.Fragment,
  22790. { key: 2 },
  22791. [
  22792. vue.createElementVNode(
  22793. "view",
  22794. {
  22795. style: vue.normalizeStyle([{ height: _ctx.chatRecordModeSafeAreaBottom + "px" }])
  22796. },
  22797. null,
  22798. 4
  22799. /* STYLE */
  22800. ),
  22801. vue.createElementVNode(
  22802. "view",
  22803. {
  22804. class: "zp-page-bottom-keyboard-placeholder-animate",
  22805. style: vue.normalizeStyle([{ height: _ctx.keyboardHeight + "px" }])
  22806. },
  22807. null,
  22808. 4
  22809. /* STYLE */
  22810. )
  22811. ],
  22812. 64
  22813. /* STABLE_FRAGMENT */
  22814. )) : vue.createCommentVNode("v-if", true)
  22815. ],
  22816. 4
  22817. /* STYLE */
  22818. ),
  22819. vue.createCommentVNode(" 点击返回顶部view "),
  22820. _ctx.showBackToTopClass ? (vue.openBlock(), vue.createElementBlock(
  22821. "view",
  22822. {
  22823. key: 3,
  22824. class: vue.normalizeClass(_ctx.finalBackToTopClass),
  22825. style: vue.normalizeStyle([_ctx.finalBackToTopStyle]),
  22826. onClick: _cache[18] || (_cache[18] = vue.withModifiers((...args) => _ctx._backToTopClick && _ctx._backToTopClick(...args), ["stop"]))
  22827. },
  22828. [
  22829. _ctx.zSlots.backToTop ? vue.renderSlot(_ctx.$slots, "backToTop", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createElementBlock("image", {
  22830. key: 1,
  22831. class: vue.normalizeClass(["zp-back-to-top-img", { "zp-back-to-top-img-inversion": _ctx.useChatRecordMode && !_ctx.backToTopImg.length }]),
  22832. src: _ctx.backToTopImg.length ? _ctx.backToTopImg : _ctx.base64BackToTop
  22833. }, null, 10, ["src"]))
  22834. ],
  22835. 6
  22836. /* CLASS, STYLE */
  22837. )) : vue.createCommentVNode("v-if", true),
  22838. vue.createCommentVNode(" 全屏Loading(铺满z-paging并固定) "),
  22839. _ctx.showLoading && _ctx.zSlots.loading && _ctx.loadingFullFixed ? (vue.openBlock(), vue.createElementBlock("view", {
  22840. key: 4,
  22841. class: "zp-loading-fixed"
  22842. }, [
  22843. vue.renderSlot(_ctx.$slots, "loading", {}, void 0, true)
  22844. ])) : vue.createCommentVNode("v-if", true)
  22845. ],
  22846. 6
  22847. /* CLASS, STYLE */
  22848. );
  22849. }
  22850. if (typeof block0$2 === "function")
  22851. block0$2(_sfc_main$16);
  22852. if (typeof block1 === "function")
  22853. block1(_sfc_main$16);
  22854. const __easycom_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["render", _sfc_render$15], ["__scopeId", "data-v-fb5441fe"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/z-paging/components/z-paging/z-paging.vue"]]);
  22855. function sleep(time = 500) {
  22856. return new Promise((resolve2) => {
  22857. setTimeout(() => resolve2(true), time);
  22858. });
  22859. }
  22860. function utf8ArrayToString(array2) {
  22861. let out, i, len, c2;
  22862. let char2, char3;
  22863. out = "";
  22864. len = array2.length;
  22865. i = 0;
  22866. while (i < len) {
  22867. c2 = array2[i++];
  22868. switch (c2 >> 4) {
  22869. case 0:
  22870. case 1:
  22871. case 2:
  22872. case 3:
  22873. case 4:
  22874. case 5:
  22875. case 6:
  22876. case 7:
  22877. out += String.fromCharCode(c2);
  22878. break;
  22879. case 12:
  22880. case 13:
  22881. char2 = array2[i++];
  22882. out += String.fromCharCode((c2 & 31) << 6 | char2 & 63);
  22883. break;
  22884. case 14:
  22885. char2 = array2[i++];
  22886. char3 = array2[i++];
  22887. out += String.fromCharCode((c2 & 15) << 12 | (char2 & 63) << 6 | (char3 & 63) << 0);
  22888. break;
  22889. }
  22890. }
  22891. return out;
  22892. }
  22893. function formatRange(input) {
  22894. const str = String(input);
  22895. return str.replace(/(\d+)(\.25|\.75)/g, (match, integer2, decimal) => {
  22896. const num = parseInt(integer2);
  22897. if (decimal === ".25") {
  22898. return `${num}/${num + 0.5}`;
  22899. } else if (decimal === ".75") {
  22900. return `${num + 0.5}/${num + 1}`;
  22901. }
  22902. return match;
  22903. });
  22904. }
  22905. const GameRulesHTML = `<div class="editor-container"><p><br></p><p style="line-height:1.38;margin-top:12pt;margin-bottom:12pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:21pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">足球</span></strong></p><p style="line-height:1.9871999999999999;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最后更新日期: 10/02/2026</span></strong></p><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般规则</span></strong></p><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">除非另有注明,所有足球投注的结算皆以球赛所规定的完场时间90分钟为准。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">完场时间90分钟包括球员伤停补时。加时赛、淘汰赛、点球,以及赛事后如果裁判或相关管理机构更改任何赛果则不计算在内。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">除非在个别玩法规则另有注明,所有滚球投注的结算将以90分钟的赛果为准。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">当该规则与友谊赛相关的时候会有例外。在这种情况下,无论是否进行了整整 90 分钟,所有赛事盘口都根据赛事结束时的实际结果(不包括任何加时赛)进行结算。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">完场时间45分钟是指赛事上半场,其中包含伤停补时。加时赛、淘汰赛、点球,以及赛事后如果裁判或相关管理机构更改任何赛果则不计算在内。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">部分足球赛事可能有不同的赛程。 在这种情况下,以下内容适用于:</span></strong></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预定赛事时间 90 分钟(3 x 30 分钟)。全场投注仍被视为有效。半场投注被视为无效。</span></strong></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预定赛事时间 80 分钟(2 x 40 分钟)。所有投注仍被视为有效。</span></strong></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事时间与上述不同,则所有投注均无效。</span></strong></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断或延迟,并且没有在5小时内重新开始,所有该场赛事的全场投注即被视为无效且取消,如遇已有确认赛果之注单仍会进行结算,除非在个别投注类型规则里另有指定注明。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事确认取消,所有该场赛事的全场投注即被视为无效且取消,如遇已有确认赛果之注单仍会进行结算,除非在个别投注类型规则里另有指定注明。如果赛事是在上半场中断,所有上半场的注单将被取消。如果赛事是在下半场中断所有上半场的投注保持有效,但所有下半场的注单将被取消,除非在个别玩法规则另有注明。</span></strong></p></li></ul><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">除非在个别玩法规则另有注明,乌龙球将予以计算在内。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛场地有变更(主客队调换),所有此注单将被取消。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">对于国际赛事,只要变更的场地仍在同一个国家内,所有注单将保持有效。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">对于国际赛事,只要变更的场地仍在联赛原定举办的国家内,所有注单将保持有效。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">本公司保留权利取消任何因更换场地而可能对赛事结果有影响的注单。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事的确切开赛时间不明(比如,由于电视直播时间安排的问题),要是在原本开赛时间的72小时之内,本平台保留调整该开赛时间的权利。</span></strong></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主要市场</span></strong></p><h3 style="line-height:1.9871999999999999;margin-top:16pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:13.999999999999998pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球盘</span></strong></h3><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般规则</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队在盘口指定的让球数在全场/半场/赛事某个时节赢得比赛。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">“让球盘”则定义为在比赛正式开始前,一方球队已得到另一方让的虚拟分数,以领先的情况下开始比赛。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按盘口开出的让球数在玩法的时节结束后结算。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球队(优势球队)将给出让球,让球数将显示在赔率的左侧,让球队在盘面上也会以粗型字体显示</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球盘的玩法分为以下几种:</span></strong></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">整数让球也或称为让‘一球’(如:-1,-2,-3,等)</span></strong></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">非整数让球也或称为‘半球’(如:-0.5,-1.5,-2.5,等)</span></strong></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">混合以上让‘半球/一球’的方式(如:-0/0.5,-0.5/1,-1/1.5,等)</span></strong></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口让球信息预测最终获得胜利的球队。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算皆以球赛所规定的完场时间90分钟为准。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在90分钟结束前取消或中断,所有注单将会被视为无效。</span></strong></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球 - 上半场</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有上半场的投注将以上半场45分钟其中包含伤停补时后的赛果结算。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场时节因任何理由取消或中断,所有上半场注单将被取消。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场或加时赛因任何理由取消或中断,所有上半场注单保持有效。</span></strong></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">欧洲让分盘</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">透过给定的让分盘,预测最终比分。让分盘适用于最终比分,而非针对滚球或赛前赛事投注时的比分。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算皆以球赛所规定的完场时间90分钟为准。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在90分钟结束前取消或中断,所有注单将会被视为无效。</span></strong></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">滚球让球</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按照盘口开出让球信息,在相应投注类型结束后结算。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算是以投注时到比赛/时节结束后的赛果做裁决。即是以赛事完场比分减去投注当时的比分。上半场的滚球让球投注将以上半场结束后的赛果结算。</span></strong></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 让球</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按照盘口开出让球信息,在30分钟加时赛结束后计算,包含补时。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时赛结束前取消或中断,所有注单将会被视为无效。</span></strong></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 让球-上半场</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按照盘口开出让球信息,在15分钟加时赛结束后计算,包含补时。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛中如果赛事在上半场取消或中断,所有上半场注单将会被视为无效。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛中如果赛事在下半场或补时阶段取消或中断,所有上半场注单将会被视为有效。</span></strong></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15 分钟进球数 (含伤停补时)(让球)</span></strong></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口让球信息预测最终获得15分钟内比赛胜利的球队。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在每个15分钟开始,所有球队在开始此时段比赛都是0-0,之前的得分点是没有影响的</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注将以开始下个时节前的赛果结算。</span></strong></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有当前15分钟时段的投注以及将要进行的下一个15分钟时段投注将视为无效,任何15分钟时段投注,如果该时段完整结束,注单将被视为有效。</span></strong></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="239"><col width="351"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><br><br><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">首个X分钟 - 让球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口让球信息预测赛事開始到指定分钟内比赛胜利的球队。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">时段如下:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-04分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-19分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-24分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-29分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-34分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-39分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-49分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-54分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-59分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-64分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-69分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-74分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-79分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-84分59秒</span></p></li></ul></ul><br><h3 style="line-height:1.9871999999999999;margin-top:16pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:13.999999999999998pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">大小盘</span></h3><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事的总入球数多于盘口的大/小盘球数,则为大盘。如果少于盘口的大/小盘球数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按盘口开出的大/小盘球数在玩法的时节结束后结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">大/小盘的玩法分为以下几种:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">大/小于‘一球’(如:2,3,4,等)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">大/小于‘半球’(如:1.5,2.5,3.5,等)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">混合以上‘半球/一球’的方式(如:1.5/2,2.5/3,3.5/4,等)</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后没有任何显着会影响赛事结果的情况,大/小盘注单才会被结算。若遇到任何其他情况,注单将一律被取消。请参考以上范例:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例1:会员投注大于2.5球:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="3" style="list-style-type:square;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赛事在比分2-1时中断。</span></p></li><li aria-level="3" style="list-style-type:square;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">尽管赛事中断,但因结果已经明确并且若之后有任何潜在进球将对盘口结算裁决没有影响,所有此会员注单结算为赢。</span></p></li></ul><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例2:会员投注小于2.5球:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="3" style="list-style-type:square;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赛事在比分2-1时中断。</span></p></li><li aria-level="3" style="list-style-type:square;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">尽管赛事中断,但因结果已经明确并且若之后有任何潜在进球将对盘口结算裁决没有影响,所有此会员注单结算为输。</span></p></li></ul><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例3:会员投注大于3.5球:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="3" style="list-style-type:square;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赛事在比分2-1时中断。</span></p></li><li aria-level="3" style="list-style-type:square;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">由于赛事在未有明确的结果能裁决会员的注单前中断,此会员的注单将被取消。</span></p></li></ul></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球: 大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注将以全场90分钟的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球: 大 / 小 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有上半场的投注将以上半场45分钟的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场时节因任何理由取消或中断,所有上半场注单将被取消。除非在赛事取消或中断前,结果已经明确。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场或加时时段因任何理由取消或中断,所有上半场注单保持有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">欧洲大小盘</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍于赛事常规时间内(包括伤停补时)的总进球得分数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若该赛事作废,除非该投注的结果已经确定,否则所有投注无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">欧洲大小盘-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍于赛事上半场(包括伤停补时)的总进球得分数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若该赛事作废,除非该投注的结果已经确定,否则所有投注无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">滚球大小盘</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算是以双方球队在90分钟内的总进球数为依据。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 进球: 大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两支球队开始加时赛的比分为0-0,之前赛果属于常规时间内入球不会计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注将以30分钟加时赛后结果结算,包括补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在加时赛结束前如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 进球: 大 / 小 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将会按照15分钟赛事结束后赛果为准,包含补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛在上半场停止,取消或者中断,所有上半场注单将被视为无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛在下半场或补时期间停止,取消或者中断,所有上半场注单将被视为有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:欧洲大小盘</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两支球队开始加时赛的比分为0-0,之前赛果属于常规时间内入球不会计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍于赛事30分钟加时赛內(包括伤停补时)的总进球得分数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若该赛事作废,除非该投注的结果已经确定,否则所有投注无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球: 大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在特定的比赛有关期间内,其中一支球队的总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事的总入球数多于盘口的大/小盘球数,则为大盘。如果少于盘口的大/小盘球数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后没有任何显着会影响赛事结果的情况,注单才会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 : 球队进球: 大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在特定的比赛加时赛期间内,其中一支球队的总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事的总入球数多于盘口的大/小盘球数,则为大盘。如果少于盘口的大/小盘球数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后没有任何显着会影响赛事结果的情况,注单才会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15 分钟进球数 (含伤停补时)(大 / 小)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果总进球数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在每个15分钟时开始,所有球队在开始此时节比赛都是0-0,之前的得分是没有影响的。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛被中断,所有将要进行的15分钟时段投注将被视为无效。任何15分钟时段投注,如果该时段中赛事进行完整,此注单将被视为有效。在15分钟时段中,如果赛事已有明确结果并且之后对赛事没有任何影响,总进球数大/小盘注单才会被结算。任何其他的情况,投注将被视为无效。</span></p></li></ul></strong><div align="left" style="margin-left:0pt;" dir="ltr"><strong id="docs-internal-guid-b9853da3-7fff-bb8d-ffe3-f3f527537671" style="font-weight:normal;"><table style="border:none;border-collapse:collapse;"><colgroup><col width="239"><col width="351"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10 分钟进球数 (含伤停补时)(大 / 小)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果总进球数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在每个10分钟时开始,所有球队在开始此时节比赛都是0-0,之前的得分是没有影响的。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛被中断,所有将要进行的10分钟时段投注将被视为无效。任何10分钟时段投注,如果该时段中赛事进行完整,此注单将被视为有效。在10分钟时段中,如果赛事已有明确结果并且之后对赛事没有任何影响,总进球数大/小盘注单才会被结算。任何其他的情况,投注将被视为无效。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="239"><col width="351"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-49分59秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-79分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5 分钟进球数 (含伤停补时)(大 / 小)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果总进球数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在每个5分钟时开始,所有球队在开始此时节比赛都是0-0,之前的得分是没有影响的。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛被中断,所有将要进行的5分钟时段投注将被视为无效。任何5分钟时段投注,如果该时段中赛事进行完整,此注单将被视为有效。在5分钟时段中,如果赛事已有明确结果并且之后对赛事没有任何影响,总进球数大/小盘注单才会被结算。任何其他的情况,投注将被视为无效。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="239"><col width="351"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-04分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">05分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-24分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">25分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-34分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">35分00秒-39分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段10</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-49分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段11</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-54分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段12</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">55分00秒-59分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段13</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-64分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段14</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">65分00秒-69分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段15</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-74分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段16</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-79分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段17</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-84分59秒</span></p></td></tr><tr style="height:64.19662109375001pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段18</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">85分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">首个X分钟 - 大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事開始到指定分钟内总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果总进球数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">时段如下:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-04分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-19分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-24分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-29分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-34分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-39分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-49分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-54分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-59分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-64分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-69分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-74分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-79分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-84分59秒</span></p></li></ul></ul><br><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 5 分钟进球数 (大 / 小)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果总进球数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在每个5分钟时开始,所有球队在开始此时节比赛都是0-0,之前的得分是没有影响的。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛被中断,所有将要进行的5分钟时段投注将被视为无效。任何5分钟时段投注,如果该时段中赛事进行完整,此注单将被视为有效。在5分钟时段中,如果赛事已有明确结果并且之后对赛事没有任何影响,总进球数大/小盘注单才会被结算。任何其他的情况,投注将被视为无效。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="229"><col width="361"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#898989;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场开始-04分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">05分钟-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-半场</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场开始-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分钟-24分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">25分钟-全场</span></p></td></tr></tbody></table></div><br><h3 style="line-height:1.9871999999999999;margin-top:16pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:13.999999999999998pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1 X 2(独赢盘)</span></h3><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在比赛胜出。盘口提供两支球队和平局为投注选项。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注将以0-0的比分作为计算基础(让球并不计算在内)。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在90分钟比赛胜出或赛事和局。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有上半场的投注将以上半场45分钟赛果结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">滚球独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测滚球时,哪一支球队胜出。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算将以90分钟完场赛果为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">以下为滚球独赢盘范例。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="153"><col width="153"><col width="155"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><br></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">目前得分</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赔率</span></p></td></tr><tr style="height:79.5pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">阿森纳(主)</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1.61</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">曼联</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">0</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">6.0</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&nbsp;</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3.8</span></p></td></tr></tbody></table></div><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 34.86614173228347pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例1:在赛事比分为阿森纳1-0曼联时,会员投注滚球独赢盘 – 阿森纳赢:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:square;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 26.462598425196845pt;padding-left: 0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">完场赛果为阿森纳2-1曼联。</span></p></li><li aria-level="2" style="list-style-type:square;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 26.462598425196845pt;padding-left: 0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">因阿森纳在完场时胜出,所有投注阿森纳的注单结算为赢。</span></p></li><li aria-level="2" style="list-style-type:square;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 26.462598425196845pt;padding-left: 0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有在比分1-0时投注曼联或平局的注单将结算为输。</span></p></li></ul><li aria-level="1" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 34.86614173228347pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例2:在赛事比分为阿森纳1-0曼联时,会员投注滚球独赢盘 –曼联赢:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:square;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 26.462598425196845pt;padding-left: 0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">完场赛果为阿森纳1-1曼联。</span></p></li><li aria-level="2" style="list-style-type:square;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 26.462598425196845pt;padding-left: 0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">因完场赛果为平局,所有投注曼联以及阿森纳的注单将结算为输。</span></p></li><li aria-level="2" style="list-style-type:square;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 26.462598425196845pt;padding-left: 0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注平局的注单将结算为赢。</span></p></li></ul></ul><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛则视为一场新的赛事并且会开出加时赛盘口。投注将按加时赛时节的结果做结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;text-indent: -42.51968503937009pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 42.51968503937009pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将会在30分钟内胜出,或赛事平局,包含补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛在加时赛结束前暂停,取消或中止,所有投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;text-indent: -42.51968503937009pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 42.51968503937009pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 独赢 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将会在15分钟内胜出,或赛事平局,包含补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时赛上半场取消或中断,所有上半场注单将会被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时赛下半场取消或中断,所有上半场注单将被会视为有效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;text-indent: -42.51968503937009pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 42.51968503937009pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15 分钟进球数 (含伤停补时)(独赢)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时段内哪一支球队将会获胜,赛事盘口将会提供两支球队,以及和局。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有两支球队在每时段开始时比分将按照0-0计算,之前比分不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有当前15分钟时段的投注以及将要进行的下一个15分钟时段投注将视为无效,任何15分钟时段投注,如果该时段完整结束,注单将被视为有效。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10 分钟进球数 (含伤停补时)(独赢)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时段内哪一支球队将会获胜,赛事盘口将会提供两支球队,以及和局。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有两支球队在每时段开始时比分将按照0-0计算,之前比分不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有当前10分钟时段的投注以及将要进行的下一个10分钟时段投注将视为无效,任何10分钟时段投注,如果该时段完整结束,注单将被视为有效。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-49分59秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-79分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5 分钟进球数 (含伤停补时)(独赢)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时段内哪一支球队将会获胜,赛事盘口将会提供两支球队,以及和局。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有两支球队在每时段开始时比分将按照0-0计算,之前比分不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有当前5分钟时段的投注以及将要进行的下一个5分钟时段投注将视为无效,任何5分钟时段投注,如果该时段完整结束,注单将被视为有效。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-04分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">05分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-24分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">25分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-34分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">35分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段10</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-49分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段11</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-54分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段12</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">55分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段13</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-64分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段14</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">65分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段15</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段16</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-79分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段17</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-84分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段18</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">85分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">首个X分钟 - 独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时段内哪一支球队将会获胜,赛事盘口将会提供两支球队,以及和局。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">时段如下:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-04分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-19分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-24分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-29分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-34分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-39分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-49分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-54分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-59分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-64分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-69分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-74分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-79分59秒</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-84分59秒</span></p></li></ul></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分钟进球数: 00:00-29:59 分钟-独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将根据第 30 分钟结束时 (29:59) 的分数结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事在第 30 分钟之前作废,除了已经确定的大小盘投注外,其他投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事在第 30 分钟后作废,则所有投注均有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分钟进球数: 00:00-69:59 分钟-独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将根据第 70 分钟结束时(69:59) 的分数结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事在第 70 分钟之前作废,除了已经确定的大小盘投注外,其他投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事在第 70 分钟后作废,则所有投注均有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球数: 单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测90分钟内,赛事总入球对单或双。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若最终比分为:0-0,将会按照“双”来计算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球数: 单 / 双 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测45分钟赛事的总入球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若最终比分为:0-0,将会按照“双”来计算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球数: 单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测90分钟内,赛事的下注队伍入球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若最终比分为0,将会按照“双”来计算。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球数: 单 / 双 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场45分钟赛事的下注队伍入球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若最终比分为0,将会按照“双”来计算。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球数: 单 / 双 - 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测下半场45分钟赛事的下注队伍入球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若最终比分为0,将会按照“双”来计算。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 进球数: 单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测加时30分钟赛事的总入球数是单数或双数,包含补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若最终比分为:0-0,将会按照“双”来计算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 进球数: 单 / 双 -上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测加时赛15分钟内的总进球数是单数或双数,包括补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若最终比分为:0-0,将会按照“双”来计算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15 分钟进球数 (单 / 双)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时间内进球数是单或双。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有两支球队在每时段开始时比分将按照0-0计算,之前比分不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有当前15分钟时段的投注以及将要进行的下一个15分钟时段投注将视为无效,任何15分钟时段投注,如果该时段完整结束,注单将被视为有效。</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="235"><col width="293"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场开始-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分钟-半场</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场开始-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分钟-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分钟-全场</span></p></td></tr></tbody></table></div><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">波胆</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场特定赛事中相关时间段的准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"任何其他比分"是指任何的比分,而不是一个市场选项列表类型。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: -14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">波胆</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场特定赛事的全场准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场波胆投注的结算根据90分钟完场比分做出裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事取消,全场波胆投注在“其它比分”为仅有可能获胜的选项,投注将被视为有效;所有其他的投注则被视为无效,此是由于赛事无条件决定后面的进球不会影响赛事的结果。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: -14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">波胆 - 上半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场特定赛事半场的准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据上半场“45分钟”结束后的比分做出裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场取消,所有半场波胆投注在“其它比分”为仅有可能获胜的选项,投注将被视为有效;所有其他的投注则被视为无效,此是由于赛事无条件决定后面的进球不会影响赛事的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:10.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场取消,所有半场波胆的投注被视为有效</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: -14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">波胆 - 下半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场特定赛事下半场的准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据下半场“45分钟”结束后的比分做出裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场取消,投注在“其它比分”为仅有可能获胜的选项,投注将被视为有效;所有其他的投注则被视为无效,此是由于赛事无条件决定后面的进球不会影响赛事的结果。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: -14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">半场/全场波胆</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场特定赛事上半场與全场的准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据上半场45分钟结束与90分钟完场比分做出裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事取消,所有投注被视为无效。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: -14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 : 波胆</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场特定赛事的全场准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据加时赛30分钟完场比分做出裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事取消,投注在“其它比分”为仅有可能获胜的选项,投注将被视为有效;所有其他的投注则被视为无效,此是由于赛事无条件决定后面的进球不会影响赛事的结果。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: -14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:波胆-上半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场特定赛事半场的准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据加时赛上半场“15分钟”结束后的比分做出裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时赛上半场取消,投注在“其它比分”为仅有可能获胜的选项,投注将被视为有效;所有其他的投注则被视为无效,此是由于赛事无条件决定后面的进球不会影响赛事的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 13.606299212598422pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时赛下半场取消,投注被视为有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">半场/全场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事的半/全场结果。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">净胜球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测完场比赛结束后的净胜球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据90分钟完场赛事比分的差别做裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛结束为平局将根据比分战平结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">净胜球数 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场比赛结束后的净胜球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据45分钟完场赛事比分的差别做裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场比赛结束为平局将根据比分战平结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">净胜球数 (含无进球)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测完场比赛结束后的净胜球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据90分钟完场赛事比分的差别做裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若双方球队皆无进球,则投注「无进球」判赢,「进球和局」判输;若双方球队有进球且比分相同,则投注「无进球」判输,「进球和局」判赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">净胜球数 - 上半场 (含无进球)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场比赛结束后的净胜球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据45分钟完场赛事比分的差别做裁决。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若双方球队皆无进球,则投注「无进球」判赢,「进球和局」判输;若双方球队有进球且比分相同,则投注「无进球」判输,「进球和局」判赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛 - 净胜球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测加时赛结束后的净胜球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注将以30分钟加时赛后结果结算,包括补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛结束为平局将根据比分战平结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双重机会</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以全场90分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在三种可能出现的赛果中选择两种进行投注; 主场赢或打平(1和X), 客场赢或打平(2和X)或主场或客场赢(1和2)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共有三种选择: 1 X, X 2, 1 2:</span></p></li><ol style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"1" 代表: 主场赢。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"X" 代表: 平手。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"2" 代表: 客场赢。</span></p></li></ol></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双重机会-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以上半场45分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在三种可能出现的赛果中选择两种进行投注; 主场赢或打平(1和X), 客场赢或打平(2和X)或主场或客场赢(1和2)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共有三种选择: 1 X, X 2, 1 2:</span></p></li><ol style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"1" 代表: 主场赢。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"X" 代表: 平手。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"2" 代表: 客场赢。</span></p></li></ol></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双重机会-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以下半场45分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在三种可能出现的赛果中选择两种进行投注; 主场赢或打平(1和X), 客场赢或打平(2和X)或主场或客场赢(1和2)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共有三种选择: 1 X, X 2, 1 2:</span></p></li><ol style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"1" 代表: 主场赢。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"X" 代表: 平手。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"2" 代表: 客场赢。</span></p></li></ol></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:双重机会</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以加时赛30分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在三种可能出现的赛果中选择两种进行投注; 主场赢或打平(1和X), 客场赢或打平(2和X)或主场或客场赢(1和2)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共有三种选择: 1 X, X 2, 1 2:</span></p></li><ol style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"1" 代表: 主场赢。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"X" 代表: 平手。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"2" 代表: 客场赢。</span></p></li></ol></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:双重机会-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以加时赛上半场15分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在三种可能出现的赛果中选择两种进行投注; 主场赢或打平(1和X), 客场赢或打平(2和X)或主场或客场赢(1和2)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共有三种选择: 1 X, X 2, 1 2:</span></p></li><ol style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"1" 代表: 主场赢。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"X" 代表: 平手。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"2" 代表: 客场赢。</span></p></li></ol></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球+独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口开出信息预测全场90分钟的最终获胜球队,包括和局以及第三个可能出现的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算将会根据选择的球队包括和局,并最终在比赛中获得有利的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分将依据最终比分计算,而非投注当下比分进行计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局将会显示的主场让球盘, 用于区分作用。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">以下范例:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主[-1]=如果你所投注的队伍以2个或更多的进球于赛事中获胜,你将获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和[-1]=如果你所投注的队伍以确切1球的分差于赛事中获胜,你将获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客[+1]=如果你所投注的队伍获胜或和局,你将获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主[+2]=如果你所投注的队伍以1个进球差落败,和局或获胜,你将获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和[+2]=如果你所投注的队伍以确切2球的分差于赛事中落败,你将获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客[-2]=如果你所投注的队伍以3个或更多的进球于赛事中获胜,你将获胜。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球+独赢-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口开出信息预测上半场45分钟的最终获胜球队,包括和局以及第三个可能出现的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算将会根据选择的球队包括和局,并最终在比赛中获得有利的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分将依据最终比分计算,而非投注当下比分进行计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局将会显示的主场让球盘, 用于区分作用</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球+独赢-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口开出信息预测下半场45分钟的最终获胜球队,包括和局以及第三个可能出现的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算将会根据选择的球队包括和局,并最终在比赛中获得有利的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分将依据最终比分计算,而非投注当下比分进行计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局将会显示的主场让球盘, 用于区分作用</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:让球+独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口开出信息预测加时赛30分钟的最终获胜球队,包括和局以及第三个可能出现的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算将会根据选择的球队包括和局,并最终在比赛中获得有利的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分将依据最终比分计算,而非投注当下比分进行计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局将会显示的主场让球盘, 用于区分作用</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:让球+独赢-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口开出信息预测加时赛上半场15分钟的最终获胜球队,包括和局以及第三个可能出现的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算将会根据选择的球队包括和局,并最终在比赛中获得有利的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分将依据最终比分计算,而非投注当下比分进行计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局将会显示的主场让球盘, 用于区分作用</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">落后反超获胜</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队在比赛的任何时间里都为输,然而却在最后“90分钟”反超为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选择的球队必须在比赛的任何时间里都为输,但是在接下来的最后“90分钟”却获胜为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛被中断,所有的投注均视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">平局退款</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟后哪一支球队将在比赛胜出。但若比赛结果为平局,所有投注将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">平局退款-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场45分钟后哪一支球队将在比赛胜出。但若比赛结果为平局,所有投注将被取消。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">平局退款-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测下半场45分钟后哪一支球队将在比赛胜出。但若比赛结果为平局,所有投注将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:平局退款</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测加时赛30分钟后哪一支球队将在比赛胜出。但若比赛结果为平局,所有投注将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:平局退款-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测加时赛上半场15分钟后哪一支球队将在比赛胜出。但若比赛结果为平局,所有投注将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜退款</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟是客队获胜或者平局。但若比赛结果为主队获胜,所有投注将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜退款</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.75pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟是主队获胜或者平局。但若比赛结果为客队获胜,所有投注将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任一队胜出</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟是否主队或客队其中一队胜出。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队正规赛获胜</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟指定队伍是否獲勝</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若全场90分钟结束仍未分出胜负,投注「否」获胜</span></p></li></ul><p style="line-height:1.9871999999999999;text-indent: -46pt;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 58pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球集锦</span></p><h4 style="line-height:1.9871999999999999;text-indent: -46pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 46pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总进球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一个特定赛事相关时间段两队的总入球数。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总进球数</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场两队的总入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场总入球数注单结算是根据全场“90分钟”为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,总入球数投注将仅结算当赛事进球”X个或更多”,这是由于任何后面的进球不会影响赛事结果。任何其他的情况,投注将被视为无效。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总进球数 - 上半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测半场两队的总入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">半场总入球数注单仅限于上半场。注单结算是根据上半场“45分钟”为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,总入球数投注将仅结算当赛事进球”X个或更多”,这是由于任何后面的进球不会影响赛事结果。任何其他的情况,投注将被视为无效。</span></p></li></ul><br><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总进球数 - 下半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测下半场两队的总入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">注单仅限于下半场。注单结算是根据下半场“45分钟”为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,总入球数投注将仅结算当赛事进球”X个或更多”,这是由于任何后面的进球不会影响赛事结果。任何其他的情况,投注将被视为无效。</span></p></li></ul><br><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">精准进球数</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍在赛事全场90分钟的准确进球数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场时节因任何理由取消或中断,所有注单将被取消。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">精准进球数-上半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍在赛事上半场45分钟的准确进球数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场时节因任何理由取消或中断,所有上半场注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场或加时赛因任何理由取消或中断,所有上半场注单保持有效。</span></p></li></ul><br><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">精准进球数-下半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍在赛事下半场45分钟的准确进球数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场时节因任何理由取消或中断,所有下半场注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时赛因任何理由取消或中断,所有下半场注单保持有效。</span></p></li></ul><br><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:精准进球数</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍在赛事加时赛30分钟的准确进球数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场时节因任何理由取消或中断,所有注单将被取消。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:精准进球数-上半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍在赛事加时赛上半场15分钟的准确进球数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场时节因任何理由取消或中断,所有上半场注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场或加时赛因任何理由取消或中断,所有上半场注单保持有效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一个特定赛事相关时间段指定队伍的精准入球数。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球数</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场指定队伍的精准入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场队伍入球数注单结算是根据全场“90分钟”为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将计算在得分队伍中。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场完成后才作废,投注将被视为无效。</span></p></li></ul><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球数 - 上半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场指定队伍的精准入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场队伍入球数注单结算是根根据上半场“45分钟”为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将计算在得分队伍中</span><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:#1d7afc;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场完成后才作废,投注仍被视为有效。</span></p></li></ul><br><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球数 - 下半场</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测下半场指定队伍的精准入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场队伍入球数注单结算是根根据下半场“45分钟”为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将计算在得分队伍中。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场完成后才作废,投注将被视为无效。</span></p></li></ul><br><h5 style="line-height:1.9871999999999999;margin-left: 14.173228346456689pt;text-indent: 36pt;margin-top:12pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:球队进球数</span></h5><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测加时赛指定队伍的入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场队伍入球数注单结算是根据加时“30分钟”为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: 49.03937007874016pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将计算在得分队伍中。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最先/最后进球球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在法定比赛90分钟内,预测最先或最后进球的球队。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。比如: A队VS B队,B 队踢进一个乌龙球造成比分1-0,此球计为A队先进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在有进球后中断,所有最先进球球队注单保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有最后进球球队注单将被取消。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">滚球-下一支进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛进行时,哪一支球队会进下一个球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛则视为一场新的赛事并且会开出加时赛盘口。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">请注意,乌龙球也属于进球范围内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事断,那么所有投注此注单将被视为有效,除非赛事已有明确结果并且之后对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个进球/第2个进球/第3个进球/第4个进球……/最后一个进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪支队伍将于全场90分钟获得第 1 /第 2 /第 3 /第 4/…… /最后一球的进球。乌龙球计算在得分队伍的进球中。如果赛事作废,则投注无效,除非这些投注结果已经确定。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1 - 主队</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2 - 客队</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">X - 没有队伍进球</span></p></li></ul></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个进球-上半场/第2个进球-上半场/……/第10个进球-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪支队伍将在上半场45分钟获得第 1 /第 2 /第 3 /第 4/…… /第 10的进球。乌龙球计算在得分队伍的进球中。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1 - 主队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2 - 客队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">X - 上半场中没有队伍进球</span></p></li></ul></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个进球-下半场/第2个进球-下半场/……/第10个进球-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪支队伍将在下半场45分钟获得第 1 /第 2 /第 3 /第 4/…… /第 10的进球。乌龙球计算在得分队伍的进球中。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1 - 主队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2 - 客队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">X - 下半场中没有队伍进球</span></p></li></ul></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">分钟阶段进球数 (含伤停补时)(第X个进球)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪支队伍将在指定的时间阶段內获得第 1 /第 2 /第 3 /第 4/…… /第 X的进球。乌龙球计算在得分队伍的进球中。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1 - 主队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2 - 客队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">X - 指定的时间阶段內沒有队伍进球</span></p></li></ul></ul><br><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟時段可参考如下表:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟时段可参考下表:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-49分59秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-79分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟时段可参考下表:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-04分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">05分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-24分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">25分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-34分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">35分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段10</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-49分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段11</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-54分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段12</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">55分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段13</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-64分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段14</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">65分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段15</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段16</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-79分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段17</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-84分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段18</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">85分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:第1个进球/加时赛:第2个进球/……/加时赛:第10个进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪支队伍将在加时赛30分钟获得第 1 /第 2 /第 3 /第 4/…… /第 10的进球。乌龙球计算在得分队伍的进球中。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1 - 主队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2 - 客队进球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">X - 加时赛中没有队伍进球</span></p></li></ul></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:最后进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪支队伍将于加时赛期间获得最后一球的进球。乌龙球计算在进球队伍的进球中。如果赛事作废,则投注无效,除非这些投注结果已经确定。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">1 - 主队</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">2 - 客队</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">X - 没有队伍进球</span></p></li></ul></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个罚球进球/第2个罚球进球……/第10个罚球进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟第 1 /第 2 /…… /第 10 的罚球最后是否进球。如果赛事作废,则投注无效,除非这些投注结果已经确定。</span></p></li></ul><br><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测双方球队在90分钟完场时间内是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在常规时间内双方球队都有进球后中断,所有注单保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在常规时间内双方球队没有进球前中断或延迟,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双方球队进球- 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测双方球队在第一个45分钟时间内是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场双方球队都有进球后中断,所有注单保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场双方球队没有进球前中断或延迟,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双方球队进球- 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测双方球队在第二个45分钟时间内是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场双方球队都有进球后中断,所有注单保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场双方球队没有进球前中断或延迟,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测双方球队在加时30分钟内是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时时间内双方球队都有进球后中断,所有注单保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时时间内双方球队没有进球前中断或延迟,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:双方球队进球- 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测双方球队在加时上半场15分钟内是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时时间内双方球队都有进球后中断,所有注单保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在加时时间内双方球队没有进球前中断或延迟,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜或双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内,主队是否获胜或双方球队是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">兩队皆有入球得分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其中一队没有入球</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局或双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内,双方球队是否进球或者和局。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">兩队皆有入球得分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任意一队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其中一队没有入球</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜或双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内,客队是否获胜或双方球队是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">兩队皆有入球得分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其中一队没有入球</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">零失球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测某个球队在90分钟的比赛中,没有任何失球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选择投注球队不需要赢得比赛,例如:赛果 0-0,注单为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">零失球-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测某个球队在上半场45分钟完场时间内,没有任何失球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选择投注球队不需要赢得比赛,例如:赛果 0-0,注单为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">零失球-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测某个球队在下半场45分钟完场时间内,没有任何失球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选择投注球队不需要赢得比赛,例如:赛果 0-0,注单为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">零失球获胜</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测您投注的球队在90分钟完场时间内没让敌方攻入任何一球且取得胜利。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*零*失球是指球队在赛事中没让敌方攻入任何一球,争取完美防守。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队零失球获胜</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定球队在90分钟完场时间内,是否没让敌方攻入任何一球且取得胜利。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*零*失球是指球队在赛事中没让敌方攻入任何一球,争取完美防守。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队零失球获胜-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定球队在上半场45分钟完场时间内,是否没让敌方攻入任何一球且取得胜利。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*零*失球是指球队在赛事中没让敌方攻入任何一球,争取完美防守。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜或任何一方零失球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内,主队是否获胜或任何一支球队零失球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*零*失球是指球队在赛事中没让敌方攻入任何一球,争取完美防守。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其中一队没有入球</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">兩队皆有入球得分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局或任何一方零失球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内,最终是否和局或任何一支球队零失球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*零*失球是指球队在赛事中没让敌方攻入任何一球,争取完美防守。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其中一队没有入球</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任意一队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">兩队皆有入球得分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜或任何一方零失球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内,客队是否获胜或任何一支球队零失球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">*零*失球是指球队在赛事中没让敌方攻入任何一球,争取完美防守。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其中一队没有入球</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">兩队皆有入球得分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算为得分那方入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">先进2球/3球的一方</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个球队先进2/3球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在一方球队已经进2/3球后中断,所有注单将保持有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最多进球的半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在赛事90分钟结束后,猜测哪个“45分钟”半场入球最多。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">盘口提供两种投注选择,如上下半场入球数一样,注单将被视为无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最多进球的半场 - 独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个半场将会进最多球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">盘口提供三种投注选择,如上下半场入球数一样,投注“和”将会为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">平局</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;text-indent: -46pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 46pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队进球最多的半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内,指定隊伍哪个半场将会进最多球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">盘口提供三种投注选择,如上下半场入球数一样,投注“和局”将会为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">平局</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;text-indent: -46pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 46pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双半场进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测主队/客队在90分钟完场时间内是否在上下半场都至少进一球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注球队只有在一个半场有入球,或未入球,注单为输。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将只会被计算在得分球队一方。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在所投注的球队已在两个半场都进球后中断,所有投注此球队的注单将结算为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场中断,并且所投注的球队并未在上半场进球,所有投注此球队的注单将结算为输。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果上半场进球球队已经确认,而赛事在下半场中断,那么所有投注该球队注单将被视为有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;text-indent: -46pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 46pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个进球方式/第2个进球方式……/第10个进球方式</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定比分的进球方式。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在指定进球后中断,除非下注的结果已获确定,否则所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">自由球:球必须是直接踢进的方式。间接行的任意球如果最后是罚球者本人踢进则计算在内。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球:球必须是由罚球者本人直接踢进的方式。若遇到补射的情况,即使是罚球者本人踢进也将不计算在内。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球:球必须授予为乌龙球。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">头球:进球者必须明确的用头进球。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">射门:所有其他的进球方式。除了以上所列出的方式,所有其他进球的方式都包含在此方式。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无:赛事没有进球。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;text-indent: -46pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 46pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个进球时间 (30分钟)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定进球会于全场90分钟内的哪个时段踢进。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在指定进球后中断,除非下注的结果已获确定,否则所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果指定时间内无进球,则投注无效,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">时段以30分钟作为区间,选项如下:</span></p></li></ul><br><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="168"><col width="361"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00:00-29:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30:00-59:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60:00-90:00 (含伤停补时)</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><h4 style="line-height:1.9871999999999999;text-indent: -46pt;margin-top:14pt;margin-bottom:4pt;padding:0pt 0pt 0pt 46pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个进球时间/第2个进球时间……/第10个进球时间 (15分钟)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定进球会于全场90分钟内的哪个时段踢进。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在指定进球后中断,除非下注的结果已获确定,否则所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">时段以15分钟作为区间,选项如下:</span></p></li></ul><br><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="168"><col width="361"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00:00-14:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15:00-29:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30:00-45:00</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45:00-59:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60:00-74:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75:00-90:00</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-90分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无进球</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">指定时间内没有进球</span></p></td></tr></tbody></table></div><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个进球时间/第2个进球时间……/第10个进球时间 (10分钟)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定进球会于全场90分钟内的哪个时段踢进。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在指定进球后中断,除非下注的结果已获确定,否则所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">时段以10分钟作为区间,选项如下:</span></p></li></ul><br><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="170"><col width="365"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00:00-09:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10:00-19:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20:00-29:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30:00-39:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40:00-49:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-49分59秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50:00-59:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60:00-69:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70:00-79:59</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-79分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80:00-90:00</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-90分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无进球</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">指定时间内没有进球</span></p></td></tr></tbody></table></div><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">首个进球时间-3项</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内首个进球时间,盘口提供无进球投注选项。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="168"><col width="361"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">小于等于26分钟</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项 2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">大于或等于27分钟</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项 3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">没有进球</span></p></td></tr></tbody></table></div><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">出于结算的用意,赛事的第一分钟是从1秒计算到59秒。第二分钟则是从1分钟计算到1分59秒,以此类推。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例:如果投注首个进球时间的选项是‘赛事的第26分钟或之前’,而确实进球的时间为26分钟49秒,进球的范围属于‘第27分钟后’,因此投注将结算为输。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在首个进球后中断,所有首个进球时间的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有进球前中断,所有首个进球时间的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算在内。裁判判定无效的进球是将不予以计算在内。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">首个进球时间</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内首个进球时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场开始-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分钟-半场</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场开始-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分钟-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分钟-全场</span></p></td></tr></tbody></table></div><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">出于结算的用意,赛事的第一分钟是从1秒计算到59秒。第二分钟则是从1分钟计算到1分59秒,以此类推。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在首个进球后中断,所有首个进球时间的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有进球前中断,所有首个进球时间的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将予以计算在内。裁判判定无效的进球是将不予以计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场比赛中是否会有乌龙球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据双方球队上场球员是否踢进乌龙球,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛在有乌龙球之前中断,所有该盘口的投注将被视为无效</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">剩余时间哪一队获胜</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在投注当下开始计算,到全场90分钟赛事结束的比分为止,哪一支球队能够获得较多的进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事作废,所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">以下皆以投注当下为1:0作范例:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场结束时比分为1:0,则投注主队输;投注和局赢;投注客队输。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场结束时比分为1:1,则投注主队输;投注和局输;投注客队赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场结束时比分为2:0,则投注主队赢;投注和局输;投注客队输。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">剩余时间哪一队获胜-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在投注当下开始计算,到上半场45分钟赛事结束的比分为止,哪一支球队能够获得较多的进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事作废,所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">以下皆以投注当下为1:0作范例:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场结束时比分为1:0,则投注主队输;投注和局赢;投注客队输。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场结束时比分为1:1,则投注主队输;投注和局输;投注客队赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场结束时比分为2:0,则投注主队赢;投注和局输;投注客队输。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛:剩余时间哪一队获胜</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在投注当下开始计算,到加时赛30分钟赛事结束的比分为止,哪一支球队能够获得较多的进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事作废,所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">以下皆以投注当下加时赛比分为1:0作范例:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛结束时加时赛比分为1:0,则投注主队输;投注和局赢;投注客队输。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛结束时加时赛比分为1:1,则投注主队输;投注和局输;投注客队赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛结束时加时赛比分为2:0,则投注主队赢;投注和局输;投注客队输。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以全场90分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">有2种选择:主, 客,选择说明如下:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主:主队进球得分,投注此选项便获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客:客队进球得分,投注此选项便获胜。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">没有进球球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以全场90分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">有2种选择:主, 客,选择说明如下:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主:主队未进球得分,投注此选项便获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客:客队未进球得分,投注此选项便获胜。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队是否进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以全场90分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定队伍是否入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队是否进球-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以上半场45分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定队伍在上半场是否入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队是否进球-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以下半场45分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定队伍在下半场是否入球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上下半场都大于 / 上下半场都小于</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场与下半场(皆含伤停补时),是否都大于或小于指定比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜或总进球大于</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测主队在90分钟完场时间内是否获胜,或两队的总进球数大于指定比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数大于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数没有大于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜或总进球小于</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测主队在90分钟完场时间内是否获胜,或两队的总进球数是否小于指定比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数小于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数没有小于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局或总进球大于</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内是否和局,或两队的总进球数是否大于指定比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数大于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任意一队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数没有大于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局或总进球小于</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内是否和局,或两队的总进球数是否小于指定比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数小于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任意一队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数没有小于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜或总进球大于</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测客队在90分钟完场时间内是否获胜,或两队的总进球数是否大于指定比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数大于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数没有大于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜或总进球小于</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测客队在90分钟完场时间内是否获胜,或两队的总进球数是否小于指定比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「是」的状况下,仅需达成下列任一条件即判为赢,若都没有达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数小于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注「不是」的状况下,需下列条件皆达成才判为赢,若任一项未达成则判定为输。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队没有获胜</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队的总进球数没有小于指定比分</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -7.653543307086622pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛停止,取消或中断,所有投注将被视为无效,除非在赛事取消或中断前,结果已经明确。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球员</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般规则(第一/最后/任何时间进球得分)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">“其他”选项是指在官方“90分钟”比赛内没有标注的进球数(不包括乌龙球)</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">'没有进球'的选项是指两队在官方“90分钟”内(即全场0-0)打入0球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最先进球球员</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按盘口提供的球员出场名单中,预测在90分钟完场时间内最先入球的球员。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球不计于最先进的球。如果出现乌龙球,下一个或之前的进球才被视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的最先进球球员没有参与该场赛事或在第一个进球后才进场,注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的最先进球球员在没有射入第一个球就被罚下场或被其他球员替代,注单将结算为输。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在射入第一个球后中断,所有投注最先进球球员的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有进球前中断,所有投注最先进球球员的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球、加时赛进球和点球大战进球都不计于此玩法。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果整场比赛在 90 分钟完场时间内无任何球员(不含乌龙球)进球,则投注最先进球球员的注单将结算为输,「无进球」选项者视为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最后进球球员</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按盘口提供的球员出场名单中,预测在90分钟完场时间内最后入球的球员。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将不会被视为最后进球。如果出现乌龙球,下一个或之前的进球才被视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的最后进球球员在没有射入最后一个进球就被罚下场或被其他球员替代,注单将结算为输</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任何参赛并且上场的球员都可能是最后进球球员。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有进球前中断,所有投注最后进球球员的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球、加时赛进球和点球大战进球都不计于此玩法。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果整场比赛在 90 分钟完场时间内无任何球员(不含乌龙球)进球,则投注最后进球球员的注单将结算为输,「无进球」选项者视为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任何时间进球球员</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按盘口提供的球员出场名单中,预测在90分钟完场时间内哪位球员会进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的球员没有参与该场赛事,注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">只要球员在比赛的90分钟完场时间内有上场参与比赛,注单则视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在已有球员进球后中断,所有投注进球球员的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛被取消,所有投注在提名的球员的进球均视作无效。然而,如果提名的球员在比赛取消前被红卡罚下,那么所有与该球员相关的投注注单将视作输来结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球,加时赛进球和点球大战进球都不计于此玩法。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果整场比赛在 90 分钟完场时间内无任何球员(不含乌龙球)进球,则投注任何时间进球球员的注单将结算为输,「无进球」选项者视为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球员是否有得分(含加时)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按盘口提供的球员出场名单中,预测在90分钟完场时间及加时赛30分钟内,指定球员是否进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的球员没有参与该场赛事,注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">只要球员在比赛的90分钟完场时间及加时赛30分钟内有上场参与比赛,注单则视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有进球前中断,所有投注的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球和点球大战进球都不计于此玩法。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">得分2分以上(含)球员 / 得分3分以上(含)球员</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按盘口提供的球员出场名单中,预测在90分钟完场时间内哪位球员会踢进2球/3球以上。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的球员没有参与该场赛事,注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">只要球员在比赛的90分钟完场时间内有上场参与比赛,注单则视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在已有球员进球后中断,所有投注进球球员的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球,加时赛进球和点球大战进球都不计于此玩法。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队第1位进球球员 / 主队第2位进球球员 / … / 主队第10位进球球员</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按盘口提供的球员出场名单中,预测在90分钟完场时间内哪位球员会踢进主队的第1/第2/…/第10个进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的球员没有参与该场赛事,注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">只要球员在比赛的90分钟完场时间内有上场参与比赛,注单则视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在已有球员进球后中断,所有投注进球球员的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若有乌龙球发生,不会计算在主队或客队的进球数量内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队第1位进球球员 / 客队第2位进球球员 / … / 客队第10位进球球员</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按盘口提供的球员出场名单中,预测在90分钟完场时间内哪位球员会踢进客队的第1/第2/…/第10个进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果投注的球员没有参与该场赛事,注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">只要球员在比赛的90分钟完场时间内有上场参与比赛,注单则视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在已有球员进球后中断,所有投注进球球员的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若有乌龙球发生,不会计算在主队或客队的进球数量内。</span></p></li></ul><h3 style="line-height:1.9871999999999999;margin-top:16pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:13.999999999999998pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球员特殊投注(进球数)</span></h3><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场投注在45分钟进行。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场投注在90分钟结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双方球员都必须是比赛先发的11名球员当中注单才视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">提供的盘口仅限于球员将参与的指定比赛以及比赛日期。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将不计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口开出信息预测哪一个球员入球最多。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断或推迟,所有注单将会被取消,除非赛事已有明确结果并且之后入球对赛事没有任何影响。除非赛事已有明确结果并且之后入球对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事中不同球员总进球数将大于或小于在盘口指定的大/小盘数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断或推迟,所有注单将会被取消,除非赛事已有明确结果并且之后入球对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一个球员将在比赛中入球最多,盘口同样提供选择“平局/和”。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断或推迟,所有注单将会被取消,除非赛事已有明确结果并且之后入球对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事中球员的总进球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断或推迟,所有注单将会被取消,除非赛事已有明确结果并且之后入球对赛事没有任何影响。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若比赛没有球员进球,赛果为0,投注‘双’注单为赢。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">特别</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">开球球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛先开球的球队。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在开踢后中断,所有投注先开球球队的注单将保持有效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球队伍</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有投注将以全场90分钟其中包含伤停补时后的赛果结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">有4种选择:无进球, 主, 客, 两队皆进球,选择说明如下:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无进球:主客两队皆无进球得分。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主:只有主队进球得分。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客:只有客队进球得分。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">两队皆进球:主客两队皆有进球得分。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">获胜方式</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队能在球赛中指定的时段内赢得比赛。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据指定的球队能否在指定的时段内赢得比赛,来进行结算。时段可分为:正规时间,加时赛或点球PK。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事为两回合赛制,则以最终哪个时段判断出哪一支队伍晋级。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">晋级方法</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队能在球赛中指定的时段内赢得比赛,从而晋级到联赛的下一阶段。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据指定的球队能否在指定的时段内赢得比赛,来进行结算。时段可以选择:“90分钟”,加时赛或点球大战。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一场比赛的两个回合的总比分(包括客场进球规则)将计入“90分钟”结束的结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赢得所有半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测选择的球队在90分钟完场时间内(不包括加时赛及点球赛)是否在上半场和下半场的进球数多于对手。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果任何一个半场或上/下半场的结果是平局或没有进球,所有注单将结算为输。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赢得任一半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测选择的球队在90分钟完场时间内(不包括加时赛及点球赛)是否在上/下半场的其中一个半场进球数多于对手。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场中断,但在上半场其中一方球队已经获胜,注单将保持有效。如果两支球队在上半场平局,注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事出现平局或上下半场均无进球,所有注单将视为输。如双方球队各赢半场,则投注两个球队注单为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">射正次数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内两个球队标射正次数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">注单的结算将根据官方赛果或赛事权威机构判定的结果为准。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场–第一个行动</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在45分钟完场时间内完成一系列的第一个行动。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项有分为:任意球,球门球,界外球,越位,进球,罚牌和等等。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场中断,所有注单将被视为无效,除了第一个行动注单已有结果。如果赛事在下半场中断,所有上半场投注将会被视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全部的单子会依据赛事的官方数据结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场–第一个行动</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在第二段的45分钟完场时间内完成一系列的第一个行动。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项有分为:任意球,球门球,界外球,越位,进球,罚牌和等等。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场中断,所有注单将被视为无效,除了第一个行动注单已有结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全部的单子会依据赛事的官方数据结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">半场伤停补时时间预测</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测半场结束伤停补时具体时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单结算将会按照半场结束后第四裁判举牌补时的时间为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测伤停补时时间,只计算在官方正常90分钟赛事内的补时,加时赛将不包含在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场伤停补时大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场官方时间45分钟后的伤停补时时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果补时总时间,多于盘口的大/小盘时间,则为大盘。如果少于盘口的大/小盘时间,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单结算将会按照第四裁判举牌补时时间为准,在赛事正常45分钟结束后确定的补时时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在官方时间45分钟之内中断,所有投注上半场伤停补时注单将会取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事是在上半场比赛确认结束后中断,所有投注上半场伤停补时将会被视为有效的。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下半场伤停补时大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测下半场的伤停补时时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果补时总时间,多于盘口的大/小盘时间,则为大盘。如果少于盘口的大/小盘时间,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单结算将会按照第四裁判举牌补时时间为准,在赛事正常90分钟结束后确定的补时时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在官方时间90分钟之内中断,所有投注下半场伤停补时注单将会取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双半场总伤停补时—大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场和下半场的伤停补时时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一旦赛事在官方时间90分钟完成,总伤停补时将会以上半场和下半场伤停补时之和为结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果伤停补时时间多于盘口的大/小盘时间,则为大盘;如果少于盘口的大/小盘时间,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在官方时间90分钟之内中断,所有投注双半场总伤停补时的注单将会取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">多重波胆</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内赛事的最终比分,若选项内有任一比分与最终比分相符则获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">举例:若投注选项为1-2, 1-3, 1-4。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最终比分为1:3,符合选项中的1-3,故判定赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最终比分为1:0,不符合选项中的任一项比分,故判定输。</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比分以外的其他选项:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其他主队胜出:若最终比分为选项外的比分,并且主队胜出,投注此选项者赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其他客队胜出:若最终比分为选项外的比分,并且客队胜出,投注此选项者赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局:最终比分主客队得分相同,投注此选项者赢。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总进球数范围</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内赛事的总进球数,若数量符合选项内的进球范围即获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若两队皆未进球,则投注「无进球」选项者判定为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">举例:若投注选项为1-3。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最终比分为2:1,总进球数量为3球,符合选项内的数量,故判定赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最终比分为2:2,总进球数量为4球,不符合选项内的数量,故判定输。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总进球数范围-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场45分钟完场时间内赛事的总进球数,若数量符合选项内的进球范围即获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若两队皆未进球,则投注「无进球」选项者判定为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总进球数范围-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测下半场45分钟完场时间内赛事的总进球数,若数量符合选项内的进球范围即获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若两队皆未进球,则投注「无进球」选项者判定为赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队总进球数范围</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内赛事指定队伍的总进球数,若数量符合选项内的进球范围即获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若指定队伍未进球,则投注「无进球」选项者判定为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">举例:若投注选项为1-3。</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">指定队伍最终总进球数量为3球,符合选项内的数量,故判定赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">指定队伍最终总进球数量为4球,不符合选项内的数量,故判定输。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">上半场获胜者或全场获胜者</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内,赛事的上半场或全场,是否有任一方获胜</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">有3种选择:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主:若主队在上半场或全场的比分领先于客队,则投注此选项者赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客:若客队在上半场或全场的比分领先于主队,则投注此选项者赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和:若两队在上半场或全场的比分相同,则投注此选项者赢。</span></p></li></ul></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球:一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">被裁定但并未实际执行的角球将不予以计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">注单的结算将根据官方赛果或赛事权威机构判定的结果为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果角球需重新进行(例如,在禁区内犯规),重新进行的角球仍计为同一个角球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 让球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在全场90分钟完场时间内哪一支球队在盘口指定的让球数获得最多角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按盘口开出的让球数在玩法的时节结束后结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 让球 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在上半场45分钟完场时间内哪一支球队在盘口指定的让球数获得最多角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按盘口开出的让球数在玩法的时节结束后结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 让球 - 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在下半场45分钟完场时间内哪一支球队在盘口指定的让球数获得最多角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按盘口开出的让球数在玩法的时节结束后结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球:让球+独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在全场90分钟完场时间内哪一支球队在盘口指定的让球数获得最多或是数量相等的角球</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算将会根据选择的球队包括和局,并最终在比赛中获得有利的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分将依据最终角球数计算,而非投注当下角球数进行计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局将会显示的主场让球盘, 用于区分作用</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球:让球+独赢 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在上半场45分钟完场时间内哪一支球队在盘口指定的让球数获得最多或是数量相等的角球</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算将会根据选择的球队包括和局,并最终在比赛中获得有利的结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分将依据最终角球数计算,而非投注当下角球数进行计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和局将会显示的主场让球盘, 用于区分作用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在全场90分钟后完场时间内总获得的角球将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事获得的总角球数多于盘口的大/小盘球数,则为大盘。如果少于盘口的大/小盘球数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后没有任何显着会影响投注结果的情况,角球的大/小盘注单才会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 大 / 小 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在上半场45分钟后完场时间内总获得的角球将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事获得的总角球数多于盘口的大/小盘球数,则为大盘。如果少于盘口的大/小盘球数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 大 / 小 - 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在下半场45分钟后完场时间内总获得的角球将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事获得的总角球数多于盘口的大/小盘球数,则为大盘。如果少于盘口的大/小盘球数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球:大/正/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在全场90分钟后完场时间内(包括伤停补时)总获得的角球将大于、正好或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在全场90分钟比赛内获得更多角球数,盘口提供两支球队和平局为投注选项。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,总角球数独赢盘注单将会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 独赢 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在上半场45分钟比赛内获得更多角球数,盘口提供两支球队和平局为投注选项。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 独赢 - 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在下半场45分钟比赛内获得更多角球数,盘口提供两支球队和平局为投注选项。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内赛事的总角球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若比赛没有角球,结果为0,投注‘双’注单将会盈利。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场中断,所有注单将被视为无效,除非赛事已有明确结果并且之后角球对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 单 / 双 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测上半场45分钟内赛事的总角球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球: 单 / 双 - 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测下半场45分钟内赛事的总角球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队角球: 单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内赛事的下注队伍角球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后角球对赛事没有任何影响,注单仍会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第 1 个角球/第 2 个角球/第 3 个角球/第 4 个角球....../第 40 个角球(三項)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪个队伍将在全场90分钟开出指定的角球,或赛事中是否不会出现该指定的角球(无角球)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">获判但未开出的角球(获判角球但在开出前裁判判定上半场或全场比赛结束)不列入结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事中没有该指定的角球(如指定的第 3 个角球从未开出),则「无角球」选项为正确结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事作废,除非下注的结果已获确定,否则所有投注无效。例如,在第 8 个角球后赛事作废,所有在第 8 个角球后的投注无效(第 9 个、第 10 个…等)。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第一个角球/第 2 个角球/第 3 个角球/第 4 个角球....../最后一个角球(兩項)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪个队伍将在全场90分钟开出指定的角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">获判但未开出的角球(获判角球但在开出前裁判判定上半场或全场比赛结束)不列入结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事中没有该指定的角球,则投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事作废,除非下注的结果已获确定,否则所有投注无效。例如,在第 8 个角球后赛事作废,所有在第 8 个角球后的投注无效(第 9 个、第 10 个…等)。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最后角球队伍</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪个队伍将在全场90分钟内开出最后一个角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">获判但未开出的角球(获判角球但在开出前裁判判定上半场或全场比赛结束)不列入结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若某个角球以任何理由需要重新开出,会被算作 1 个角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事作废,除非下注的结果已获确定,否则所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主:代表主场开出最后一个角球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和:代表盘口开启后到比赛结束未有角球事件发生</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客:代表客场开出最后一个角球</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最后角球队伍 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪个队伍将在上半场45分钟内开出最后一个角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">获判但未开出的角球(获判角球但在开出前裁判判定上半场或全场比赛结束)不列入结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若某个角球以任何理由需要重新开出,会被算作 1 个角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事作废,除非下注的结果已获确定,否则所有投注无效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主:代表主场开出最后一个角球</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">和:代表盘口开启后到上半场结束未有角球事件发生</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客:代表客场开出最后一个角球</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">先到1个角球的一方/先到2个角球的一方……/先到40个角球的一方</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪个队伍将在全场90分钟达到指定的角球数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">没有队伍能在时间内达到指定的角球数量,则投注「无角球」选项者判定为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事作废,除非下注的结果已获确定,否则所有投注无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最多角球的半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个半场将会获得最多角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后没有任何显着会影响赛事结果的情况,注单才会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球:欧洲大小盘</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测赛事在90分钟后完成时间内(包括伤停补时)中(两支队伍)获得的总角球数是否大于或小于给定的数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">获判但未开出的角球(获判角球但在开出前裁判判定上半场或全场比赛结束)不列入结算。同时,若某个角球以任何理由需要重新开出,会被算作 1 个角球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事作废,除非所下注的投注结果已经被确定,否则所有投注均无效。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球:波胆/角球:波胆-上半场/角球:波胆-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">通过选择给定的结果预测赛事中或盤口中提及的特定时间內(上半場或下半場)角球的波胆。倘若在给定的时间内未完赛,投注皆无效。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">总角球数/总角球数-上半场/总角球数-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注根据两支队伍在赛事中进的角球总数来确定。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">玩家须从给定的范围内预测赛事中或盤口中提及的特定时间內(上半場或下半場)总角球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">倘若在给定的时间内未完赛,则该盘口的投注无效。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队总角球数/球队总角球数-上半场/球队总角球数-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注根据指定队伍在赛事中进的角球总数来确定。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">玩家须从给定的范围内预测赛事中或盤口中提及的特定时间內(上半場或下半場)总角球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">倘若在给定的时间内未完赛,则该盘口的投注无效。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队角球数/球队角球数-上半场/球队角球数-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注根据指定队伍在赛事中进的角球总数来确定。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">玩家须从给定的選項内预测赛事中或盤口中提及的特定时间內(全场、上半場或下半場)指定角球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">倘若在给定的时间内未完赛,则该盘口的投注无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">首个角球时间</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测获得首个角球的时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赛事的第8分钟或之前。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第9分钟后。</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">出于结算的用意,赛事的第一分钟是从1秒计算到59秒。第二分钟则是从1分钟计算到1分59秒,以此类推。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例:如果投注首个角球时间的选项是‘赛事的第8分钟或之前’,而确实踢角球的时间为8分钟49秒,踢角球时间的范围属于‘第9分钟后’,因此投注将结算为输。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在获得第一个角球后中断,所有首个角球时间的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有获得角球前中断,所有首个角球时间的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在90分钟完场时间内并未获得角球,所有首个角球时间的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果首个角球需重新进行,那首个角球时间将以重新进行的角球时间为准。+</span></p></li></ul><br><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="602"></colgroup><tbody><tr style="height:149.5pt"><td style="vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><h3 style="line-height:1.38;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:13pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">指定分钟角球数 (含伤停补时)</span></h3><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般規則</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有两支球队在每时段开始时比分将按照0-0计算,之前比分不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有当前时段的投注以及将要进行的下一个时段投注将视为无效,任何时段投注,如果该时段完整结束,注单将被视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟時段可参考如下表:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div></td></tr></tbody></table></div><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟时段可参考下表:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-49分59秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-79分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟时段可参考下表:</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="214"><col width="314"></colgroup><tbody><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">00分00秒-04分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">05分00秒-09分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">10分00秒-14分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分00秒-19分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">20分00秒-24分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段6</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">25分00秒-29分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段7</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">30分00秒-34分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段8</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">35分00秒-39分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">40分00秒-45分00秒 (含伤停补时)</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段10</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">45分00秒-49分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段11</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">50分00秒-54分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段12</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">55分00秒-59分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段13</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">60分00秒-64分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段14</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">65分00秒-69分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段15</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">70分00秒-74分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段16</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">75分00秒-79分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段17</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">80分00秒-84分59秒</span></p></td></tr><tr style="height:60.75pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5分钟-时段18</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:11pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">85分00秒-90分00秒 (含伤停补时)</span></p></td></tr></tbody></table></div><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据盘口让球信息预测最终获得15分钟内较多角球数的球队。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注将以开始下个时节前的赛果结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时段内的总角球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果总角球数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时段内哪一支球队将会踢出较多角球数,赛事盘口将会提供两支球队,以及和局。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在规定时间内角球数是单或双。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第 1 个角球/第 2 个角球/第 3 个角球....../第 Χ 个角球(三項)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪个队伍将在规定时段內开出指定的角球,或是否不会出现该指定的角球(无角球)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">获判但未开出的角球(获判角球但在开出前裁判判定规定时段结束)不列入结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">若赛事中没有该指定的角球(如指定的第 3 个角球从未开出),则「无角球」选项为正确结果。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">角球 - 双重机会</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在三种可能出现的赛果中选择两种进行投注; 主场赢或打平(1和X),客场赢或打平(2和X)或主场或客场赢(1和2)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共有三种选择: 1 X, X 2, 1 2:</span></p></li><ol style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:decimal;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"1" 代表: 主场赢。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"X" 代表: 平手。</span></p></li><li aria-level="2" style="list-style-type:decimal;font-size:11.5pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:italic;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"2" 代表: 客场赢。</span></p></li></ol></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">牌/卡</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌:一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">针对非球员(例如:教练,没有比赛中替补出场的替补球员,管理人员等等)出示的任何罚牌将不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">黄卡将占1分,红卡占2分。如果球员获发两张黄卡,此球员所获发的总罚牌数将计算为黄卡占1分以及红卡占2分,总分三分。(单场赛事每个球员最高可计3分)</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">注单的结算将根据官方赛果或赛事权威机构判定的结果为准。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 让球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪一支球队根据盘口让牌信息获发最多罚牌。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按盘口开出让牌信息,在相应投注类型结束后结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 让球 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在45分钟完场时间内哪一支球队在盘口指定的让球数获发最多罚牌。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有注单将按盘口开出的让球数在玩法的时节结束后结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟比赛结束后总出示的罚牌数将大于或小于在盘口指定的大/小盘牌数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果出示的总罚牌数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断前已有明确结果并且之后没有任何显着会影响投注结果的情况,总罚牌的大/小盘注单才会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 大 / 小 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在半场“45分钟”比赛结束后总出示的罚牌将大于或小于在盘口指定的大/小盘牌数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果出示的总罚牌数多于盘口的大/小盘牌数,则为大盘。如果少于盘口的大/小盘牌数,则为小盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场中断,那么所有投注上半场注单均视为有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在90分钟比赛内获得最多罚牌,盘口提供两支球队和平局为投注选项。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 独赢 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在45分钟比赛内获得最多罚牌,盘口提供两支球队和平局为投注选项。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场中断,那么所有投注上半场注单均视为有效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 单 / 双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测90分钟内赛事的总罚牌数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如无红、黄牌出现,即“0”,此局可视为偶数赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数: 单 / 双 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测45分钟内赛事的总罚牌数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在上半场中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在下半场中断,那么所有投注上半场注单均视为有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如无红、黄牌出现,即“0”,此局可视为偶数赢。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍在赛事全场90分钟的准确罚牌数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌数 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测两支队伍在赛事上半场45分钟的准确罚牌数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队罚牌数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定队伍在赛事全场90分钟的准确罚牌数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队罚牌数 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测指定队伍在赛事上半场45分钟的准确罚牌数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,所有注单将会被取消,除非赛事已有明确结果并且之后罚牌对赛事没有任何影响。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个罚牌/第2个罚牌/第3个罚牌/第4个罚牌……/第10个罚牌</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪支球队将被判罚指定的罚牌。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无论黄卡或红卡皆被视为一个独立罚牌。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果时间内并未出示指定罚牌,則投注「无」选项者判定为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在指定的罚牌被记录之前比赛中断,该张罚牌的投注将被视为无效。所有比赛中断之前记录的罚牌将视为有效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1个罚牌-上半场/第2个罚牌-上半场/第3个罚牌-上半场……/第10个罚牌-上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在45分钟完场时间内哪支球队将被判罚指定的罚牌。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无论黄卡或红卡皆被视为一个独立罚牌。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果时间内并未出示指定罚牌,則投注「无」选项者判定为赢。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在指定的罚牌被记录之前比赛中断,该张罚牌的投注将被视为无效。所有比赛中断之前记录的罚牌将视为有效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌最多的球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将由获收的罚牌累积最多分数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">注单将按照90分钟完场赛事时间内所获收的黄卡和红卡累积最高分数的球队做结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队A</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队B</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">平局</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第一张罚牌时间</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测出示首个罚牌的时间。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">选项可列为:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赛事的第8分钟或之前。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第9分钟后。</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">出于结算的用意,赛事的第一分钟是从1秒计算到59秒。第二分钟则是从1分钟计算到1分59秒,以此类推。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">范例:如果投注第一张罚牌时间的选项是‘赛事的第8分钟或之前’,而确实出示罚牌的时间为8分钟49秒,罚牌出示时间的范围属于‘第9分钟后’,因此投注将结算为输。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">针对非球员(例如:教练,没有比赛中替补出场的替补球员,管理人员等等)出示的任何罚牌将不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在出示首个罚牌后中断,所有第一张罚牌时间的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有出示任何罚牌前中断,所有第一张罚牌时间的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在90分钟完场时间内并未出示任何罚牌,所有第一张罚牌时间的注单将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">红卡(球员)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内是否会出示红卡。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">针对非球员(例如:教练,没有比赛中替补出场的替补球员,管理人员等等)出示的任何罚牌将不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在出示一个红卡后中断, 所有是否出示红卡的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有红卡出示前中断, 所有是否出示红卡的注单将被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15分钟罚牌数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">依照以上主要市场陈列的15分钟规则,预测哪队将在让球,独赢,大小或单双盘口取得胜利。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">罚牌 - 双重机会</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在三种可能出现的赛果中选择两种进行投注; 主场赢或打平(1和X), 客场赢或打平(2和X)或主场或客场赢(1和2)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共有三种选择: 1 X, X 2, 1 2:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"1" 代表: 主场赢。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"X" 代表: 平手。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">"2" 代表: 客场赢。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球员判罚下场/球员判罚下场-上半场/球员判罚下场-下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在指定时间(全場、上半場或下半場)内,是否有任何在场上的「球员」被罚下场。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">经理、教练或替补球员被罚下或终场哨响后的事件不计入此结果。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任意球</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最先/最后任意球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个球队会发出第一或最后一个任意球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在发出第一个任意球后中断,所有第一个任意球的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在发出第一个任意球后中断,所有最后一个任意球的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有发出任何任意球前中断,所有第一个和最后一个任意球的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在90分钟完场时间内并未发出任何任意球,所有第一个和最后一个任意球的注单将被取消。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">射门</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最先/最后球门球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个球队会发出第一或最后一个球门球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在发出第一个球门球后中断,所有第一个球门球的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在发出第一个球门球后中断,所有最后一个球门球的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有发出任何球门球前中断,所有第一个和最后一个球门球的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在90分钟完场时间内并未发出任何球门球,所有第一个和最后一个球门球的注单将被取消。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">界外球</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最先/最后界外球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个球队会发出第一或最后一个界外球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在发出第一个界外球后中断,所有第一个界外球的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在发出第一个界外球后中断,所有最后一个界外球的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有发出任何界外球前中断,所有第一个和最后一个界外球的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在90分钟完场时间内并未发出任何界外球,所有第一个和最后一个界外球的注单将被取消。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">替补</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最先/最后替补</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个球队会最先或最后替补球员。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果两位或以上球员同时被替补,首先被裁判员出示替补的球员,将被视为"优胜者"为注单进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在替补第一个球员后中断,所有第一个替补的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在替补第一个球员后中断,所有最后一个替补的注单将被取消,除非在赛事中断前,结果已经明确并且若之后有任何潜在替补将对盘口结算裁决没有影响。此情况只有当双方球队都将已分配好的替补机会用完。若遇到任何其他情况,注单将一律被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有任何替补前中断,所有第一个和最后一个替补的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在90分钟完场时间内并未任何替补,所有第一个和最后一个替补的注单将被取消。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">越位</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最先/最后越位</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪个球队的球员会最先或最后越位。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在第一个球员越位后中断,所有第一个越位的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在第一个球员越位后中断,所有最后一个越位的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在没有任何球员越位前中断,所有第一个和最后一个越位的注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在90分钟完场时间内并未有任何球员越位,所有第一个和最后一个越位的注单将被取消。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球大战将根据胜出回合(和已踢进的点球)来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛规则注明必须完成全部点球,任何在已有明确胜出结果后的点球将不计于结算成绩内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球荣获</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内是否会罚点球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球大战 - 让球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队根据盘口指定的让球数在点球赛里获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛得分也包括在点球让球盘。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事并未进行点球,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在90分钟完场时间内以及加时赛踢进的点球将不计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK:大 / 小(所有点球数)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球赛总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球大小盘包含骤死赛得分</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事并未进行点球,所有注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在90分钟完场时间内以及加时赛踢进的点球将不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在点球赛时中断,而在赛事中断前已有明确结果并且之后没有任何显着会影响投注结果的情况,大/小盘注单才会被结算。若遇到任何其他情况,注单将一律被取消。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK: 球队进球:大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球赛主队/客队入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛比分计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK: 净胜球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球赛结束后的净胜球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注的结算根据点球赛与骤死赛比分的差别做裁决。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK: 波胆</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球赛的准确比分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛比分计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK: 总进球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球赛两队的总入球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛比分计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK-进球: 单/双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球赛总入球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛比分计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK: 球队进球: 单/双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球赛主队/客队入球数是单数或双数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛比分计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球大战 - 独赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在点球大战胜出或和局。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛(第6回合起) 将不计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球独赢盘只计算球队在前5回合的进球。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK:第X球是否进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测特定的球队是否会踢进指定的点球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据点球是否进球来进行结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">会有点球PK吗</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场比赛是否会有点球大战</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无论此前是否有进行加时赛, 将根据比赛是否有点球大战来进行结算。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK:获胜者</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队将在点球大战胜出。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛比分计算在内。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK:独赢+进球:大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测点球大战的比赛结果,以及总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选球队的输、赢,以及点球大战的总进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">骤死赛比分计算在内。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK:是否进入骤死赛</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球大战是否会进入骤死赛。</span></p></li></ul><h4 style="line-height:2.38464;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球PK:最后一次点球结果</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测点球大战最后一个点球的结果是进球或是未进球。</span></p></li></ul><br><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛:一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赛果确认完成后将进行派彩。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛的派彩将以官方来源或相关体育权威机构判定的结果为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有联赛的积分扣除都予以计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军比赛规则适用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">小组赛</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测整个赛季中排名最高的球队。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">排名前4、6、10等</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测整个赛季中排名在前4、6、10等的球队。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">没有球队X的联赛冠军</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测整个赛季中,当所列出的球队或某球队从联赛表中移除后,哪一支球队将获得冠军。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛:赛季让分盘</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据每一队让分盘口的差点预测哪支球队将会获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">各球队的让分数将会添加到该队赛季的最终积分里。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">拥有最高综合总分(让分数和赛季最终积分)的球队为赢家。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">此盘口将采用并列名次规则。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队让分数将不会在赛季中变更,然而赔率将会有所调整。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队(赛季前)让分数将显示在各别球队名旁。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">下列为5队联赛例子</span></p></li></ul><div align="left" style="margin-left:0pt;" dir="ltr"><table style="border:none;border-collapse:collapse;"><colgroup><col width="106"><col width="106"><col width="106"><col width="106"><col width="106"></colgroup><tbody><tr style="height:168pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赛季最终积分</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">让分数</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">综合总分</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最终排名</span></p></td></tr><tr style="height:113.25pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队1</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">90</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">93</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第2</span></p></td></tr><tr style="height:113.25pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队2</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">85</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">0</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">85</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第5</span></p></td></tr><tr style="height:113.25pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队3</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">82</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">87</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第4</span></p></td></tr><tr style="height:113.25pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队4</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">79</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">15</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">94</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第1</span></p></td></tr><tr style="height:113.25pt"><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">球队5</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">79</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">9</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">88</span></p></td><td style="border-left:solid #3c78d8 0.75pt;border-right:solid #3c78d8 0.75pt;border-bottom:solid #3c78d8 0.75pt;border-top:solid #3c78d8 0.75pt;vertical-align:top;padding:8pt 8pt 8pt 8pt;overflow:hidden;overflow-wrap:break-word;"><p style="line-height:1.9871999999999999;margin-left: 46pt;text-align: center;margin-top:15pt;margin-bottom:17pt;padding:0pt 0pt 10pt 0pt;" dir="ltr"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第3</span></p></td></tr></tbody></table></div><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛:最后一名球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测整个赛季中哪一支球队会成为最后一名。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">此类投注也被称为最低分。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛:被降级的球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中哪一支球队会被降级。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有被降级球队将以全赢作为计算标准,比如:并列名次规则不适用。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果一支球队从联赛中被移除或清除,投注在此球队的注单将被视为无效。如果在赛季开始之前出现此情况,所有的投注都无效,将会另外开设盘口。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛:球队保持原位</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测比赛中哪一支球队不会被降级。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有没有被降级的球队将以全赢作为计算标准,比如:并列名次规则不适用。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果一支球队从联赛中被移除或清除,投注在此球队的注单将被视为无效。如果在赛季开始之前出现此情况,所有的投注都无效,将会另外开设盘口。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛:球队晋级</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测比赛中哪一支球队会晋级。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注包括自动晋级以及在特定比赛中通过加赛后的晋级。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有晋级的球队将以全赢作为计算标准,比如:并列名次规则不适用。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果一支球队从联赛中被移除或清除,投注在此球队的注单将被视为无效。如果在赛季开始之前出现此情况,所有的投注都无效,将会另外开设盘口。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">联赛:最佳新秀</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支最新晋级的球队将在赛季中获得最高排名。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 - 进球最多的球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中哪一个球队进球最多。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方90分钟为完场时间,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球数不包括点球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 - 失球最多的球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中哪一个球队失球最多。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方90分钟为完场时间,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在点球中的失球不予计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 – 总进球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中进球的数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方90分钟为完场时间,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在比赛中点球的进球不予计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 - 帽子戏法</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中任何一位球员进3个或以上的球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方90分钟为完场时间,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">帽子戏法不包含点球中的进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在一场比赛中如果一个球员进球3个或更多,即为帽子戏法。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的得分。如果帽子戏法是在赛事中断前,且赛事在0-0的情况下或者其它官方单位分配的比分下重新开始,将不予计算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 - 总帽子戏法</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中获得了多少帽子戏法。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方90分钟为完场时间,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">帽子戏法不包含点球中的进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在一场比赛中如果一个球员进球3个或更多,即为帽子戏法。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。如果帽子戏法是在赛事中断前,且赛事在0-0的情况下或者其它官方单位分配的比分下重新开始,将不予计算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 – 总红卡数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中红卡的数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方90分钟为完场时间,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任何非球员的红卡(例如.经理、教练或替补)不予计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球中的红卡不予计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事在出现红卡之后中断,红卡仍然计算在总红卡数中。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 – 总黄卡数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中黄卡的数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方90分钟为完场时间,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">任何非球员的黄卡(例如.经理、教练或替补)不予计算</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球中的黄卡不予计算</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果同个球员被出示第二张黄卡,第二张黄卡会被计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 – 进球最多的城市</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中哪一个城市将会进球最多。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以官方时间90分钟为准,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">点球中的进球不予计算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 – 获胜小组</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中哪一个小组将会获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军比赛规则适用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">赢得最终胜利</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中哪一个隊伍获得最终胜利。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注包括全场、加时、伤停补时、点球大战。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">锦标赛 – 小组最后一名球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一个球队为最后一名。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军比赛规则适用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军所属地</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测比赛的冠军来自哪里。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">来源地可以是冠军球队的所属地区、国家或洲。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军比赛规则使用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛-晋级</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测那支队伍会晋级去下一轮赛事。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注包括自动晋级以及在加时赛与点球大战后的晋级。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">符合冠军规则。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 - 阶段淘汰</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测比赛中该球队会在哪一个阶段被淘汰。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军比赛规则使用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 - 提名入围</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪一支球队会进入决赛。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军比赛规则适用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛 – 最终裁判员</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测决赛中的裁判员是哪一位。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无论此前是否有任何公告,将根据决赛开始后的裁判为派彩依据。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">冠军比赛规则适用。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">直接预测排名(联赛、比赛)</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛或联赛中哪两个球队获得第1名和第2名的顺序排名。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以官方时间90分钟为准,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双预测排名</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛或联赛中哪两个球队为前两名的排名。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以官方时间90分钟为准,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最佳射手</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在一场特定比赛中进球最多的球员。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果产生超过一个冠军数量, 请以并列名次规则参考结算方式。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注在被列出的该球队球员将被视为有效,无论他们是否受伤、暂停、不参与比赛或其它任何原因。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果联赛中途有球员转到同一个联赛的另一个球队, 球员在转到另一个球队前所进得球数将继续计算在内。如果球员是转到不同联赛的球队,在转之前进得球数将不会继续带到新联赛去。两种情况下,投注此球员的注单将保持有效。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">乌龙球将不予计算在内。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">按照单纯的联赛比赛玩法,只有在联赛中进得球才计算在内。在季后赛进得球将不予计算在内。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最佳射手球队</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测比赛中哪一个球员在所属球队中进球最多。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以官方时间90分钟为准,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球数不包括点球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注适用于所有比赛的球队。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">并列名次规则适用;任何用于决定和局的方法不可作为结算依据,比如:计数协助。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">最佳射手/比赛双赢</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测比赛中哪一个球员进球最多和哪一支球队获胜。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以官方时间90分钟为准,包括加时、伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球数不包括点球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果多于一个球员和最佳射手打平,并列名次规则适用;任何用于决定和局的方法不可作为结算依据,比如:计数协助。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球最多的小组</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在比赛中哪一组进球最多。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">只计算在小组阶段的进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">所有的投注以赛事官方单位90分钟为完场时间,包括球员伤停补时。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中断,将以官方单位公布的最后赛果为准,其中包括赛事重新开始或指定的分数。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">加时赛</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测一场比赛是否会有加时赛。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据比赛是否在正常的“90分钟”结束,还是进行了加时赛结束,来进行结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛-季军</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测哪支队伍会在季军战胜出。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">投注包括自动晋级以及在加时赛与点球大战后的晋级。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">符合冠军规则。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛-分组赛冠军</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">从指定的两个球队预测选出谁将荣登小组榜首。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">结算以整个小组所有赛事结束后并且官方宣布的结果为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果出现两个球队比分相同的情况,结果将以官方宣布的获胜者将为准(球分差异,净胜球等等)。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果官方没有宣布获胜者,所有投注将会被取消。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">综合市场</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 进球 大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测“90分钟”后的比赛结果,以及赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选球队的输、赢或和局,以及全场比赛的总进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 进球 大/小 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测上半场“45分钟”后的比赛结果,以及上半场赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选球队的输、赢或和局,以及上半场比赛的总进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 进球 大/小 - 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测下半场“45分钟”后的比赛结果,以及下半场赛事总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选球队的输、赢或和局,以及下半场比赛的总进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测“90分钟”后的比赛结果,以及双方球队是否都有进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选特定球队的输、赢或和局,以及每支球队的进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 双方球队进球 - 上半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测上半场“45分钟”后的比赛结果,以及双方球队是否都有进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选特定球队的输、赢或和局,以及每支球队的进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 双方球队进球 - 下半场</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测下半场“45分钟”后的比赛结果,以及双方球队是否都有进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选特定球队的输、赢或和局,以及每支球队的进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 最先进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测“90分钟”后的比赛结果,以及哪支球队将最先进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选球队的输、赢或和局,以及是否正确的选择了最先进球球队,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中没有首个进球,所有投注将会以输结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">独赢 + 进球 单/双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测“90分钟”后的比赛结果,以及双方球队总进球数的奇偶。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据所选球队的输、赢或和局,以及双方球队总进球数的奇偶,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球 大/小 + 双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测赛事总入球数将大于或小于在盘口指定的大/小盘球数,以及双方球队是否都有进球。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据90分钟后的总进球数,以及两队是否都有进球,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,将根据以下规则进行处理:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在比赛中断那一刻,双方球队都已经进1球或以上,并且总进球数大于盘口指定的大/小盘球数,投注将被视为有效。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在比赛中断那一刻,双方球队没有都进1球或以上,投注将被视为无效。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球 大/小 + 进球 单/双</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测赛事总入球数将大于或小于在盘口指定的大/小盘球数,以及总进球数的奇偶。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据90分钟后的总进球数,以及总进球数的奇偶,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">进球 大/小 + 最先进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">同时预测赛事总入球数将大于或小于在盘口指定的大/小盘球数,以及哪只球队将成为首先进球球队。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据90分钟后的总进球数,以及是否正确的选择了最先进球球队,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,将根据以下规则进行处理:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在比赛中断那一刻的总进球数大于指定的大/小盘球数,投注将被视为有效。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在比赛中断那一刻的总进球数小于指定的大/小盘球数,投注将被视为无效。</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果赛事中没有首个进球,所有投注将会以输结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双重机会 + 进球 大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">从可选的结果中预测正确的结果,以及总进球数对比指定数值的大小。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据是否正确的选择了可能的结果,以及“90分钟”后的总进球数,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3种可能的结果是:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或和局(1 &amp; X)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队胜出或和局(2 &amp; X)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或客队胜出(1 &amp; 2)</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双重机会 + 双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">从可选的结果中预测全场90分钟内赛事正确的结果以及两队是否都会得分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据是否在可能的结果中做出了正确的选择以及两队是否都有进球,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3种可能的结果是:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或和局(1 &amp; X)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队胜出或和局(X &amp; 2)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或客队胜出(1 &amp; 2)</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双重机会 + 双方球队进球 - 上半場</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">从可选的结果中预测上半场45分钟内赛事正确的结果以及两队是否都会得分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据是否在可能的结果中做出了正确的选择以及两队是否都有进球,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3种可能的结果是:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或和局(1 &amp; X)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队胜出或和局(X &amp; 2)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或客队胜出(1 &amp; 2)</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">双重机会 + 双方球队进球 - 下半場</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">从可选的结果中预测下半场45分钟内赛事正确的结果以及两队是否都会得分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据是否在可能的结果中做出了正确的选择以及两队是否都有进球,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3种可能的结果是:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或和局(1 &amp; X)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队胜出或和局(X &amp; 2)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或客队胜出(1 &amp; 2)</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场双重机会+上半场双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">从可选的结果中预测全90分钟内赛事正确的结果以及上半场45分钟内两队是否都会得分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据是否在可能的结果中做出了正确的选择以及两队是否都有进球,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3种可能的结果是:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或和局(1 &amp; X)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队胜出或和局(X &amp; 2)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或客队胜出(1 &amp; 2)</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">全场双重机会+下半场双方球队进球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">从可选的结果中预测全90分钟内赛事正确的结果以及下半场45分钟内两队是否都会得分。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据是否在可能的结果中做出了正确的选择以及两队是否都有进球,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">3种可能的结果是:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或和局(1 &amp; X)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队胜出或和局(X &amp; 2)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队胜出或客队胜出(1 &amp; 2)</span></p></li></ul><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果在赛果公布之前比赛中断,所有该盘口的投注将被视为无效。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">第 X 个进球 + 1x2</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内赛事哪支队伍获得指定的进球,以及比赛结果。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据指定的进球为主、客、无进球,以及全场比赛中的主赢、客赢、或和局,来进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">共7种选项:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主&amp;主:主队获得指定的进球且最终主队获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主&amp;和:主队获得指定的进球且最终比赛和局。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主&amp;客:主队获得指定的进球且最终客队获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客&amp;主:客队获得指定的进球且最终主队获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客&amp;和:客队获得指定的进球且最终比赛和局。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客&amp;客:客队获得指定的进球且最终客队获胜。</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">无进球:双方皆未获得指定进球。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">半场/全场 + 进球 大/小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内,赛事上半场45分钟/全场90分钟的获胜队伍,以及总入球数将大于或小于在盘口指定的大/小盘球数。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据上半场/全场的获胜队伍,以及全场比赛的总进球数,来进行结算。</span></p></li></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">半场/全场 + 进球数</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测全场90分钟内,赛事上半场45分钟/全场90分钟的获胜队伍,以及两支队伍的准确进球数量。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据上半场/全场的获胜队伍,以及全场比赛的总进球数,来进行结算。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">其他</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">特定联赛里主客队的总进球数</span></h4><p style="line-height:1.9871999999999999;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">本公司在某些联赛里会提供某种结合性赛事结果的投注。盘口的玩法将结合主场与客场球队在整个联赛里的赛果之后分出胜负。中立场的比赛,第一个球队被视为这一场赛事的主队。以下列出所提供的个别替补玩法规则。</span></p><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">在特定联赛中的主队和客队进球数:独赢和双重机会</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">根据得分的进球数预测所有主队对阵所有客队的结果。 例如,如果主队目标是6颗进球,客队目标是8颗进球,那么获胜的选择将是:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">‘客队’ (独赢)</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">‘客队 / 平局’ 和 ‘主队 / 客队’ (双重机会)。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">特定联赛里主客队的总进球数:一般规则</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果联赛中有一场赛事中断或取消,所有特定联赛里主客队的总进球数注单将被取消。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛日程以及赛事场次将会明确的在盘口显示。例如:</span></p></li><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主队-周五-3场赛事</span></p></li><li aria-level="2" style="list-style-type:circle;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -1.1338582677165334pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">客队-周五-3场赛事。</span></p></li></ul></ul><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">特定联赛里主客队的进球数:让球</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测在90分钟完场时间内哪一支球队在结合整个联赛里的赛果后在盘口指定的让球数胜出。</span></p></li></ul><br><h4 style="line-height:1.9871999999999999;margin-top:14pt;margin-bottom:4pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">特定联赛里主客队的进球数:进球: 大 / 小</span></h4><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">预测主客队的总进球数将大于或小于在盘口指定的大/小盘牌数。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">奇幻赛事</span></p><p style="line-height:1.9871999999999999;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">奇幻赛事是以2个不同赛事的2场比赛为组合进行结果预测的竞猜游戏。</span></p><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">奇幻赛事的竞猜结果以选定的2场赛事的实际比赛结果为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如两场赛事中的任意一场(或两场)被取消、终止或延长后的5个小时内无最终结果,奇幻赛事对应竞猜游戏的结果将以无效处理。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如两场赛事中的任意一场(或两场)进行加时赛或点球大战时,此次竞猜将以正式比赛中的90分钟赛事结果为准。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主客场因素将不作为影响奇幻赛事的影响因素。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">奇幻赛事所有内容将遵守以上赛事规则。</span></p></li></ul><p style="line-height:1.9871999999999999;border-left:solid #bbbbb5 0.75pt;border-right:solid #bbbbb5 0.75pt;border-top:solid #bbbbb5 0.75pt;border-bottom:solid #bbbbb5 0.75pt;background-color:#e1e1e1;margin-top:15pt;margin-bottom:15pt;background-clip:padding-box;padding:7.5pt 0pt 11pt 12pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#6e6e6e;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">电竞足球赛事</span></p><ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;"><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛将以虚拟或真实玩家对决(PVP)模式开打.</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">盘口的比赛名称将注明比赛时间(例如:12分钟), 且作为最终结算根据</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">比赛时间若无注明时,结算将以官方或相关体育权威机构数据结果为准</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">如果比赛因突发情况重制且分隔时间不超过12小时,投注将根据官方结果进行结算。</span></p></li><li aria-level="1" style="list-style-type:disc;font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;margin-left: -0.5669291338582667pt;" dir="ltr"><p role="presentation" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" dir="ltr"><span style="font-size:12pt;font-family:Arial,sans-serif;color:#7b7b7b;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">主/客场排序将不影响结算。例:赛事注明一队对垒二队,但官方显示二队对垒一队,投注仍视为有效。</span></p></li></ul></strong><p><br></p></div></div></div>`;
  22906. const RulesAndTermsHTML = `<div data-testid="content-layout-container" class="z-normal grow" style="position: relative; display: flex; flex-direction: column; margin-top: 0px;">
  22907. <div style="display: flex; width: 100%; flex-direction: column; border-radius: 12px; background-color: #ffffff; padding: 12px 24px;">
  22908. <div style="text-align: justify; line-height: 24px;">
  22909. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">1. 引言</div>
  22910. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  22911. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">本条款及条件(以下统称「条款」)以及下文提及的文件,皆适用于本网站(以下统称「网站」)及相关联的服务(以下统称「服务」)。</div>
  22912. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">请您仔细阅读本条款,它包含了您使用网站时的权利和义务,并构成您(以下统称「客户」)与我们之间的法律协议。使用本网站或访问相关服务,无论您是访客还是注册用户(以下统称「账户」),都表示您同意接受本条款及其不定时更新的内容。如果您不同意本条款,请立即停止使用本网站及相关服务。</div>
  22913. </div>
  22914. </div>
  22915. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  22916. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">2. 一般条款</div>
  22917. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  22918. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">我们保留随时修订和更新条款(包括下文提及的任何文件及其链接)的权利。您应定期访问本页面以查看最新的条款与条件。修订内容将在本网站发布后立即生效,并具有法律约束力。如果您对任何变更有异议,必须立即停止使用服务。若您在修订发布后继续使用本网站,即表示您同意接受修订后的条款。所有在条款变更生效前尚未结算的投注,将依据变更前的条款进行处理。</div>
  22919. </div>
  22920. </div>
  22921. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  22922. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">3. 您的义务</div>
  22923. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  22924. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">您在访问网站和使用服务时,须遵守以下义务:</div>
  22925. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.1. 您已年满18岁,或已达到您所在地法律或司法管辖区所规定的合法赌博年龄。我们保留随时要求您提供年龄证明的权利。</div>
  22926. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.2. 您需具备法律行为能力,并能够与我们订立具有法律约束力的协议。如果您不具备该法律行为能力,则不得访问本网站或使用服务。</div>
  22927. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.3. 您的居住地需允许合法进行赌博活动,且您并非居住在任何禁止在线赌博的国家或地区。确保使用服务的行为符合当地法律是您的个人责任。</div>
  22928. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.4. 您不得使用VPN、代理服务器或其他工具来隐藏或篡改您的真实位置。</div>
  22929. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.5. 您必须是您所使用支付方式的合法持有人。</div>
  22930. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.6. 您必须诚信地进行所有支付,不得尝试取消已完成的付款或采取任何可能导致第三方取消付款的行为。</div>
  22931. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.7. 在下注时,您可能会损失部分或全部已存入的资金,您将对此损失负全部责任。</div>
  22932. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.8. 在下注时,您不得使用任何违反所在国家/地区现行法律从而获取的信息。</div>
  22933. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.9. 您仅以个人身份进行操作,而非代表他人或出于商业目的。</div>
  22934. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.10. 您不得恶意操控服务中的任何盘口或元素,或任何可能损害服务或我们诚信的行为。</div>
  22935. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.11. 您在使用服务和进行所有投注时,应始终保持诚信。</div>
  22936. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">3.12. 您或您的员工、雇主、代理人或家庭成员(如适用)不得在我们的合作伙伴计划中注册为合作伙伴。</div>
  22937. </div>
  22938. </div>
  22939. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  22940. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">4. 限制使用</div>
  22941. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  22942. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1. 您不得在以下情况下使用本服务:</div>
  22943. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.1. 如果您未满18岁(或未达到您所在司法辖区的法定成年年龄),或者您无法依法与我们订立具有法律效力的协议,或者您代表或代理18岁以下(或未达法定成年年龄)的人行事;</div>
  22944. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.2. 居住在禁止居民或该国境内任何人访问在线赌博的国家;</div>
  22945. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.3. 如果您是以下国家的居民,或从以下国家访问我们的网站:</div>
  22946. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">奥地利</div>
  22947. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">法国及其领土</div>
  22948. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">德国</div>
  22949. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">荷兰及其领土</div>
  22950. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">西班牙</div>
  22951. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">科摩罗联盟</div>
  22952. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">英国</div>
  22953. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">美国及其领土</div>
  22954. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">中国</div>
  22955. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">新加坡</div>
  22956. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">阿联酋</div>
  22957. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">所有FATF黑名单国家</div>
  22958. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">安茹安离岸金融管理局认定的任何其他禁止区域</div>
  22959. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.4 通过任何方式收集其他客户的昵称、电子邮件地址或其他信息(例如,发送垃圾邮件、其他未经请求的电子邮件或未经授权的嵌入链接);</div>
  22960. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.5 扰乱或不当影响其他客户的活动或本服务的运行;</div>
  22961. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.6 推广未经请求的商业广告、推广链接及其他形式的营销,这些内容可能会在未经通知的情况下从服务中删除;</div>
  22962. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.7 以任何方式从事我们合理认为可被视为以下行为的活动:(i) 欺骗本公司或其他客户 (ii) 与其他客户串通以获得不正当优势;</div>
  22963. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.8 抓取我们的赔率或侵犯我们的知识产权;</div>
  22964. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.1.9 从事任何非法活动。</div>
  22965. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.2 您不得将账户出售或转让给第三方,也不得从第三方获取账户。</div>
  22966. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.3 您不得以任何方式在玩家账户之间转移资金。</div>
  22967. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.4 如果您将本服务用于未经授权的其他目的,我们会在书面通知后立即终止您的账户。同时,我们也可能会采取法律行动。</div>
  22968. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">4.5 未经本公司董事或首席执行官事先同意,公司员工、其授权商、分销商、批发商、子公司、广告、促销或其他机构、媒体合作伙伴、承包商、零售商及其直系亲属,皆不得使用本服务进行真钱交易。如果发现这种行为,账户将被立即终止,所有奖金和赢利将被没收。</div>
  22969. </div>
  22970. </div>
  22971. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  22972. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">5. 注册</div>
  22973. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  22974. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">您同意在使用服务时始终遵守以下规定:</div>
  22975. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.1 我们保留拒绝任何申请的权利,且无需说明具体原因。</div>
  22976. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.2 在使用服务之前,您必须亲自填写注册表格,并阅读和接受本条款。在本服务上投注或提取奖金时,我们可能要求您完成身份验证,包括通过特定的检验。您可能需要提供有效的身份证明和其他我们认为必要的文件。这可能包括带有照片的身份证明(护照、驾照或身份证复本)以及列有姓名和地址的近期公共事业账单作为住所之证明。在收到所需文件之前,我们保留暂停投注或限制账户功能的权利。此程序是为了符合适用的法规和反洗钱法之要求。此外,您需要使用我们网站上列出的支付方式为账户进行充值。</div>
  22977. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.3 您必须提供正确的联系方式,包括有效的电子邮件(「注册的电子邮件地址」),并持续更新相关信息。保持联系信息的正确是您的责任。如果未能及时更新,您可能会错过我们发送的重要账户通知和信息,这包括条款的变更项目。我们通过您注册时的电子邮件与您联系,您需维护一个有效的电子邮件账户,并在更改电子邮件时,及时通知我们。每位客户都必须确保其电子邮件的安全,防止第三方未经授权使用。本公司不对因与您电子邮件进行的联系,而造成的任何损害或损失负责。如果您没有提供有效的电子邮件地址,您的账户将被暂停,直到您提供有效的电子邮件地址。如果您故意提供虚假或不正确的个人信息,我们将在书面通知后立即暂停您的账户。在某些情况下,我们也可能对您采取法律行动,或者联系相关部门处理。</div>
  22978. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.4 您只能注册一个账户。如果发现您注册了多个账户,我们将立即关闭这些账户,这包括通过代表、亲属、关联方、合作伙伴、相关方或第三方操作的账户。</div>
  22979. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.5 为了确保您的财务状况和确认您的身份,我们可能会要求您提供额外的个人信息,例如您的姓名,或者使用我们认为必要的第三方所提供的信息。如果通过第三方而获取了任何额外的个人信息,我们将告知您所获得的相关信息。</div>
  22980. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.6 您必须保密您的密码。只要账户信息皆正确,我们有权假设投注、存款和提款皆是由您操作的。我们建议您定期更改密码,并且不要将密码透露给任何第三人。保护密码是您的责任,未能做到这一点将由您自行承担风险和损失。您可以在每次会话结束时登出。如果您认为您的账户信息被第三方滥用、账户被黑客入侵,或密码被第三方发现,您必须立即通知我们。如果您的注册电子邮件被黑客入侵,我们也可能要求您提供额外的信息或文件以验证身份。一旦我们发现这种情况,将立即暂停您的账户。在此期间,您需要对账户上的所有活动负责,包括第三方的访问,无论这些访问是否经过您的授权。</div>
  22981. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.7 您不得通过屏幕截图或其他类似方式将服务上的任何内容或信息传输给其他客户或任何其他方,也不得以浏览器中输入网址的方式展示这些信息。</div>
  22982. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.8 注册时,您可以使用网站上所有可用的货币。这些货币将用于您的存款、提款和投注。某些支付方式可能不支持所有货币。在这种情况下,页面上会显示可用货币,并提供转换计算器。</div>
  22983. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.9 我们没有义务为您开设账户,我们的网站注册页面仅为邀请。是否为您开设账户完全由我们决定。如果我们决定拒绝您的开户申请,我们不需要说明理由。</div>
  22984. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">5.10 在收到您的申请后,我们可能会联系您,要求提供进一步的信息或文件,以便我们遵守相关的监管和法律义务。</div>
  22985. </div>
  22986. </div>
  22987. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  22988. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">6. 您的账户</div>
  22989. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  22990. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.1 账户可以使用多种货币,所有账户余额和交易过程,将以先前交易时所使用的货币显示。</div>
  22991. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.2 我们不提供信用额度。</div>
  22992. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.3 如果您未能遵守本条款,或我们合理地认为您没有遵守本条款,或为了确保服务的完整性或公平性,或有其他合理原因,我们可能在不提前通知您的情況下,关闭或暂停您的账户。如果因未遵守条款而关闭或暂停您的账户,我们有权取消或作废您的任何投注,并扣留账户中的所有资金(包括存款)。</div>
  22993. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.4 我们保留在没有提前通知的情况下,关闭或暂停任何账户的权利,并退还账户中的所有资金。然而,已到期的义务仍需履行。</div>
  22994. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.5 我们保留随时拒绝、限制、取消任何投注的权利,无论出于何种原因,包括任何被认为是以欺诈方式进行的投注,以及为规避我们的投注限制或系统规定的相关投注。</div>
  22995. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.6 如果您的账户中错误地记入了金额,该金额为我们的财产。一旦发现此类错误,我们将通知您,并从您的账户中扣回该金额。</div>
  22996. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.7 如果您的账户因任何原因透支,您必须对透支的金额负责偿还。</div>
  22997. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.8 一旦发现账户存在任何错误,您必须立即通知我们。</div>
  22998. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.9 请时常记住,投注应仅为娱乐和乐趣,若不再感到有趣,请立即停止。切勿投注超出您所能承受范围的金额。如果您觉得自己可能失去了对投注的控制,我们提供自我排除服务。只需使用您的电子邮件向我们的客户服务部门发送请求,将在收到请求后的24小时内生效。在此期间,您的账户将被禁用,您将无法登录。</div>
  22999. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.10 您不能将账户转让、出售或质押给他人。此包括所有形式的资产转让,如账户所有权、奖金、存款、投注以及与这些资产相关的权利或索赔,无论是法律、商业还是其他方面的。此还包括但不限于质押、转让、赋予使用权、交易、经纪、抵押以及与任何受托人或其他第三方、公司、自然人或法人、基金会或协会以任何形式的合作。</div>
  23000. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">6.11 如果您希望关闭账户,请通过我们网站上的链接,从您的注册电子邮件地址向我们的客户服务部门发送电子邮件。</div>
  23001. </div>
  23002. </div>
  23003. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23004. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">7. 存款</div>
  23005. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23006. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.1 所有存款都应通过以您本人名义注册的账户、支付系统或信用卡进行。任何以其他货币进行的存款,将使用oanda.com提供的每日汇率,或我们银行及支付处理方的汇率进行兑换,相应金额会存入您的账户。请注意,某些支付系统可能会收取额外的货币兑换费用,这些费用将从您的存款中扣除。</div>
  23007. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.2 客户存款和提款可能会收取费用和手续费,详情可在网站上查看。在大多数情况下,我们会承担您向F1bet.cc账户存款时的交易费用。然而您需自行承担因存款所产生的银行费用。</div>
  23008. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.3 本公司不是金融机构,我们使用第三方电子支付来处理信用卡和借记卡存款;这些存款不由我们直接处理。如果您使用信用卡或借记卡存款,您的账户只有在我们从发卡机构收到批准和授权后才会入账。如果发卡机构未提供授权,您的账户将不能存款。</div>
  23009. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.4 您同意全额支付因使用服务,而产生的任何费用,无论是支付给我们还是给提供商。您也同意不进行任何退款、撤销或其他方式的存款退款。如果发生这些情况,您将补偿我们未支付的存款金额,包括我们在处理存款过程中产生的费用,并且您也同意任何使用这些退款资金进行的投注中奖将被取消。您同意您的玩家账户不是银行账户,因此不受任何存款或银行保险系统或其他类似保险系统的保障,包括但不限于您所在司法管辖区。此外,玩家账户中的资金不会产生利息。</div>
  23010. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.5 如果您决定接受我们提供的任何促销或奖金优惠,并在存款时输入代码,即表示您同意相关的奖金条款和每个特定的条款。</div>
  23011. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.6 您的资金来源必须合法,不得来自犯罪、非法或未经授权的活动。</div>
  23012. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.7 如果您使用信用卡进行存款,建议保留交易记录的副本和本条款的副本。</div>
  23013. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">7.8 在线赌博可能在您所在的司法管辖区是非法的;如果是非法的,您无权使用您的支付卡在本站进行存款。请确保了解您所在国家/地区有关在线赌博的法律。</div>
  23014. </div>
  23015. </div>
  23016. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23017. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">8. 提款</div>
  23018. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23019. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">8.1 您可以通过提交提款申请,来提取账户中未使用且已结算的资金,前提是符合我们的提款条件。每次交易的最低提款金额为10欧元(或等值其他货币),若账户关闭时,您可以提取全部余额。</div>
  23020. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">8.2 如果您的存款已进行投注至少1次,则不会被收取提款手续费。否则,我们有权收取8%的手续费,最低为4欧元(或等值的其他货币),以防止洗钱行为。</div>
  23021. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">8.3 在批准提款之前,我们可能会要求您提供身份证明照片、地址确认,或进行其他验证程序(如请求自拍、安排电话验证等)。我们也保留在您与我们合作期间随时进行身份验证的权利。</div>
  23022. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">8.4 所有提款必须退回到最初用于存款的借记卡、信用卡、银行账户或支付方式。我们可能会根据情况允许您将提款退回到其他支付方式,但这会进行额外的安全检查。</div>
  23023. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">8.5 如果您希望提款,但账户无法访问、处于闲置状态、被锁定或已关闭,请联系客户服务部门。</div>
  23024. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">8.6 如果您的余额是总存款的10倍以上,每月的提款上限为5000欧元(或等值的其他货币)。在其他情况下,每月的最大提款金额为10000欧元。</div>
  23025. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">8.7 请注意,如果您违反了第3.3条和第4条中的限制使用政策,我们无法保证能成功提款或退款。</div>
  23026. </div>
  23027. </div>
  23028. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23029. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">9. 付款交易</div>
  23030. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23031. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">9.1 您对所有应付金额负全责。您必须诚信地支付,不得尝试撤销已支付款项或采取任何措施使第三方撤销该款项,以规避合法的债务。您需赔偿因退单、拒付或付款撤销给我们带来的任何损失。我们有权对每笔退单、拒付或付款撤销收取50欧元(或等值货币)的费用。</div>
  23032. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">9.2 我们保留使用第三方电子支付处理器或商户银行处理您的付款的权利。您同意遵守这些第三方的条款和条件,但前提是本条款已通知您且不与本条款冲突。</div>
  23033. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">9.3 我们网站上的所有交易将可能会被检查,以防止洗钱或恐怖主义融资活动。可疑交易将会报告给相关部门。</div>
  23034. </div>
  23035. </div>
  23036. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23037. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">10. 错误</div>
  23038. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23039. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">10.1 如果我们的系统或流程出现错误或故障,所有相关投注将被作废。您有责任在发现服务出现任何错误时立即通知我们。如果服务或与服务相关的付款过程中发生通信错误、系统故障或病毒,我们不对由此产生的任何直接或间接费用、损失或索赔负责,并保留取消所有相关游戏或投注的权利,以纠正错误。</div>
  23040. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">10.2 我们会尽力确保盘口信息准确无误。然而,如果因人为错误或系统问题,投注赔率与当时市场上的赔率存在明显差异,或赔率与赛事发生的概率不符,我们有权取消该投注或撤销赛事开始后的投注。</div>
  23041. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">10.3 我们有权追回任何超额支付的金额,并调整您的账户以纠正错误。例如,如果价格不正确或我们错误地输入了赛事结果,我们可能会采取行动。如果您的账户余额不足,我们可以要求您支付与任何错误投注相关的未支付金额。因此,我们保留取消、减少或删除任何待处理投注的权利,无论这些投注是否使用了因错误而产生的资金。</div>
  23042. </div>
  23043. </div>
  23044. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23045. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">11. 游戏规则、退款和取消</div>
  23046. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23047. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.1 赛事的赢家将于赛事结算当天确定,我们不接受针对投注结果的抗议或更改请求。</div>
  23048. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.2 所有公布的结果在72小时后将被视为最终结果,过后不再受理任何查询。在结果公布后的72小时内,我们仅会因人为错误、系统故障或引用错误而进行重置或更正。</div>
  23049. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.3 如果在支付期间内,赛事结果因任何原因被赛事管理机构推翻,我们将全额退还所有资金。</div>
  23050. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.4 如果比赛有平局选项,所有关于球队胜负的投注将作废。如果没有平局选项,则在比赛平局的情况下,所有投注将全额退款。如果比赛没有平局选项,加时赛结果将计入最终结果。</div>
  23051. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.5 如果我们无法验证结果,例如赛事的直播源中断(且无法通过其他来源确认),则相关投注将被我们视为无效,并予以退款。</div>
  23052. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.6 我们将设定每场赛事的最低和最高投注金额,并可随时调整,无需提前书面通知。我们也保留调整账户投注限额的权利。</div>
  23053. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.7 客户对其账户交易负全责。一旦交易完成,无法更改。我们不对客户遗漏或重复的投注负责,也不会处理因投注遗漏或重复而提出的差异请求。客户可以在每次会话后查看「我的账户」部分的交易记录,以确保所有请求的投注已被接受。</div>
  23054. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.8 比赛的有效性以参赛队伍为准,与网站上显示的联赛标题无关。</div>
  23055. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.9 网站上显示的电子竞技赛事开始日期和时间仅供参考,不保证准确。如果赛事被暂停或推迟,且在实际安排的开始时间后的72小时内未恢复,则该赛事将视为无效,投注将退款。唯一例外是关于球队/玩家是否晋级或赢得锦标赛的投注,将继续有效,无论赛事是否暂停或推迟。</div>
  23056. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.10 如果我们发布的赛事日期不正确,则所有投注将以赛事管理机构宣布的日期为准。</div>
  23057. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.11 如果球队使用了替补队员,结果仍然有效,因为这是球队的选择。</div>
  23058. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.12 我们保留从网站上删除赛事、市场和其他产品的权利。</div>
  23059. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">11.13 关于我们体育博彩规则的详细说明,请参阅单独的页面:体育博彩规则。</div>
  23060. </div>
  23061. </div>
  23062. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23063. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">12. 通讯和通知</div>
  23064. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23065. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">12.1 您向我们发送的所有通讯和通知应通过网站上的客户支持表单提交。</div>
  23066. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">12.2 我们向您发送的所有通讯和通知,除非另有说明,将通过网站发布或发送至我们系统中记录的注册邮箱地址。我们将决定使用哪种方式进行通讯。</div>
  23067. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">12.3 您或我们在本条款下进行的所有通讯和通知均应以书面形式、英语发送,并且必须使用您账户中的注册邮箱地址。</div>
  23068. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">12.4 我们可能会不时通过电子邮件联系您,提供有关博彩、特别促销优惠以及其他来自F1bet.cc的信息。您在注册网站时同意本条款时即表示同意接收此类电子邮件。您可以随时通过提交请求给客户服务部门选择退订此类促销信息。</div>
  23069. </div>
  23070. </div>
  23071. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23072. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">13. 超出我们控制范围的事项</div>
  23073. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23074. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">对于因不可抗力事件导致的服务失败或延迟,我们不会承担责任,即使我们采取了合理的预防措施,如:自然灾害、贸易或劳工纠纷、停电、政府或权威机构的行为、通讯服务的中断或故障,或其他由第三方造成的延迟或故障。在这些情况下,我们不对您可能遭受的任何损失或损害负责。我们保留取消或暂停服务的权利,而不承担任何责任。</div>
  23075. </div>
  23076. </div>
  23077. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23078. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">14. 责任</div>
  23079. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23080. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">14.1 在法律允许的范围内,我们不对因未能履行本条款而导致的任何可预见的损失或损害(包括直接或间接损失)承担责任,除非我们违反法律规定的义务(如因疏忽导致死亡或人身伤害)。我们不对以下情况造成的损失承担责任:(I) 您自身的过错;(II) 与我们履行本条款无关的第三方因素(如通讯网络问题、拥堵、连接问题或您设备的性能问题);或 (III) 我们或我们的供应商无法预见或防范的其他事件,即使我们或他们采取了合理的预防措施。由于本服务仅供个人使用,我们不承担任何商业损失的责任。</div>
  23081. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">14.2 如果我们需要对某个事件负责,我们的总赔偿金额不会超过以下两者中的较低者:(A) 您通过账户对该投注或产品的投入金额,或 (B) 总计 €500。</div>
  23082. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">14.3 我们强烈建议您 (I) 在使用服务前检查其与您计算机设备的适用性和兼容性;以及 (II) 采取合理的措施保护自己免受有害程序或设备的影响,包括安装防病毒软件。</div>
  23083. </div>
  23084. </div>
  23085. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23086. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">15. 未成年赌博</div>
  23087. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23088. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">15.1. 如果我们怀疑您目前未满18岁,或收到通知您在进行任何投注时未满18岁(或未达到适用法律规定的成年年龄),我们将暂停(锁定)您的账户,防止您继续投注或提取资金。我们将对此进行调查,包括是否有人未满18岁(或未达到适用法律规定的成年年龄)而通过您进行投注。如果我们发现您:(a)目前;(b)在相关时点未满18岁或未达到适用的成年年龄;或(c)作为未满18岁的人进行投注,则:</div>
  23089. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">
  23090. <ul style="margin: 21px 0 14px 0; padding: 0 0 0 42px; list-style-type: disc;">
  23091. <li style="margin-top: 12px; text-align: justify;">您账户中当前或应当记入的所有奖金将被保留;</li>
  23092. <li style="margin-top: 12px; text-align: justify;">您在未成年人时通过服务获得的奖金必须按要求支付给我们(如果您未遵守此规定,我们将追讨所有相关费用);</li>
  23093. <li style="margin-top: 12px; text-align: justify;">账户中未中奖的任何存款将退还给您,或根据我们的决定保留至您年满18岁为止。我们有权从退还金额中扣除交易费用,包括存款的手续费。</li>
  23094. </ul>
  23095. </div>
  23096. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">15.2. 如果您年满18岁,但在法律规定的合法投注年龄高于18岁的管辖区内进行投注,并且您的年龄低于该法律规定的最低年龄,本条款同样适用。</div>
  23097. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">15.3. 如果我们怀疑您违反了本条款的规定或试图利用本条款进行欺诈目的,我们保留采取必要行动调查此事的权利,包括通知相关执法机关。</div>
  23098. </div>
  23099. </div>
  23100. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23101. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">16. 欺诈行为</div>
  23102. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23103. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">我们将对任何涉及欺诈、不诚实行为或犯罪行为的客户采取法律和合同制裁措施。如果我们怀疑存在上述行为,我们将暂停该客户的付款。客户需赔偿并在要求时支付我们因客户的欺诈、不诚实或犯罪行为所产生的所有费用和损失(包括直接、间接或后果性损失、利润损失、业务损失以及声誉损失)。</div>
  23104. </div>
  23105. </div>
  23106. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23107. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">17. 知识产权</div>
  23108. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23109. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">17.1. 未经授权使用我们的名称和标志可能会导致法律诉讼。</div>
  23110. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">17.2. 我们拥有服务、技术、软件和业务系统(以下统称「系统」)以及赔率的所有权。您不得将个人资料用于商业盈利(例如,将您的状态更新出售给广告商);我们也保留在必要时删除或回收账户昵称的权利。</div>
  23111. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">17.3. 您不得在与我们无关的产品或服务中使用我们的网址、商标、商业名称或商业外观、标志(以下统称「标志」),也不能使用我们的赔率,这可能会导致客户或公众混淆,或以任何方式贬低我们。</div>
  23112. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">17.4. 除非本条款中明确规定,否则我们及我们的许可方不授予您任何明示或隐含的权利、许可、所有权或对系统或标志的利益,所有这些权利、许可、所有权和利益均由我们及我们的许可方保留。您同意不使用任何自动或手动设备监控或复制服务中的网页或内容。任何未经授权的使用或复制可能会导致法律诉讼。</div>
  23113. </div>
  23114. </div>
  23115. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23116. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">18. 您的许可</div>
  23117. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23118. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">18.1. 根据本条款以及您的遵守情况,我们授予您一个非独占的、有限的、不可转让和不可再许可的许可,仅用于个人非商业用途访问和使用服务。如果我们与您之间的协议终止,您的许可也将终止。</div>
  23119. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">18.2. 除了您自己的内容外,您不得在任何情况下修改、发布、传输、转让、销售、复制、上传、发布、分发、演示、展示、创作衍生作品或以其他任何方式利用服务或其上的任何内容或其中的软件,除非我们在本条款中或网站上明确允许。服务中的信息或内容,或与服务相关的信息或内容,不能被修改、改变、与其他数据合并或以任何形式发布,例如屏幕抓取、数据库抓取或其他旨在收集、存储、重组或操作这些信息或内容的活动。</div>
  23120. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">18.3. 如果您违反本条款,可能会侵犯我们或第三方的知识产权和其他专有权利,您可能因此面临民事责任或刑事起诉。</div>
  23121. </div>
  23122. </div>
  23123. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23124. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">19. 您的行为与安全</div>
  23125. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23126. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">19.1. 为了保护您和所有客户的安全,我们禁止在服务中发布任何违法、不当或令人不悦的内容,以及与此相关的任何行为(以下统称「禁止行为」)。</div>
  23127. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">19.2. 如果我们发现您从事了禁止行为,或有理由认为您可能在进行禁止行为,我们可以在不提前通知您的情況下,立即终止您的账户或服务访问权。此外,其他客户、第三方、执法机构或我们可能会对您采取法律行动。</div>
  23128. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">19.3. 禁止行为包括但不限于:</div>
  23129. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">传播您明知是虚假、误导性或非法的信息;</div>
  23130. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">从事任何违法活动,例如推动犯罪活动,侵犯其他客户或第三方的隐私或权利,或创建和传播计算机病毒;</div>
  23131. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">以任何方式伤害未成年人;</div>
  23132. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">传输或提供任何非法、有害、威胁、辱骂、诽谤、粗俗、猥亵、暴力、仇恨、种族歧视或其他令人反感的内容;</div>
  23133. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">传输或提供您没有法律或合同权利分享的内容,例如侵犯他人版权、商标或其他知识产权的内容;</div>
  23134. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">传输或提供含有软件病毒或其他恶意代码的内容,旨在破坏服务、其他网站、软件或硬件的正常功能;</div>
  23135. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">以任何方式干扰、破坏或逆向工程服务,包括但不限于拦截、模拟或重定向我们使用的通信协议,创建或使用作弊工具、修改工具或黑客软件,或使用任何拦截或收集服务信息的软件;</div>
  23136. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">使用机器人、爬虫或其他自动化机制从服务中检索或索引信息;</div>
  23137. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">参与任何可能导致其他客户被骗或受害的活动;</div>
  23138. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">传输或提供任何未经请求或未经授权的广告或群发邮件,例如垃圾邮件(「spam」)、即时消息(「spim」)、连锁信、金字塔计划或其他形式的招揽;</div>
  23139. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">通过自动化手段或虚假或欺诈性借口在网站上创建账户;</div>
  23140. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">冒充其他客户或任何其他第三方;</div>
  23141. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">或任何我们合理认为违反商业原则的行为。</div>
  23142. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">上述禁止行为的列表并不全面,可能会随时更新。我们保留采取任何我们认为合适或必要的措施的权利,包括删除客户的帖子或终止账户。对于直接或间接涉及禁止行为的客户或第三方,我们会采取必要的行动,是否通知相关客户或第三方,由我们自行决定。</div>
  23143. </div>
  23144. </div>
  23145. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23146. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">20. 链接到其他网站</div>
  23147. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23148. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">我们的服务可能会包含指向第三方网站的链接,这些网站不由我们维护,也与我们无关。提供这些链接仅为方便客户,我们不会对这些网站的准确性或完整性进行审查、监控或检查。链接的提供并不意味着我们对这些网站、其内容或其所有者的认可或关联。我们对这些网站的可用性、准确性、完整性、可访问性和实用性不承担任何责任。因此,在访问这些网站时,建议您采取必要的预防措施,比如查看它们的隐私政策和使用条款。</div>
  23149. </div>
  23150. </div>
  23151. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23152. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">21. 投诉</div>
  23153. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23154. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">21.1. 如果您对本条款有任何疑问或问题,请通过网站上的链接联系客户服务,并使用您注册的邮箱进行沟通。</div>
  23155. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">21.2. 尽管有上述规定,我们对收到的任何投诉或相关行动不承担任何责任。</div>
  23156. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">21.3. 如果客户对投注结果处理不满意,请向客户服务部门提供详细的投诉信息。我们会尽可能在几天内回应您的查询,最迟在28天内作出回复。</div>
  23157. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">21.4. 所有争议必须在相关投注决定日期后的三(3)天内提出。期将不再受理任何索赔。客户对其账户交易负有全部责任。</div>
  23158. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">21.5. 如果您与我们之间发生争议,我们的客户服务部门将尝试协商解决。若无法达成一致,我们将把问题提交给管理层处理。</div>
  23159. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">21.6. 如果所有解决争议的尝试仍未能让客户满意,客户有权通过仲裁解决争议。</div>
  23160. </div>
  23161. </div>
  23162. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23163. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">22. 转让</div>
  23164. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23165. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">未经我们事先书面同意,您不得转让本条款或其下的任何权利或义务。我们可在无需您同意的情况下,将本条款下的全部或部分权利和义务,转让给任何第三方,只要该第三方能够提供与服务质量基本相同的服务,并在服务上发布相关书面通知。</div>
  23166. </div>
  23167. </div>
  23168. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23169. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">23. 可分割性</div>
  23170. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23171. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">如果本条款的任何规定被有权机构认定为不可执行或无效,该条款应根据适用法律在最大可能范围内进行修改,以尽可能反映其原始意图。其余条款的有效性和可执行性将不受影响。</div>
  23172. </div>
  23173. </div>
  23174. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23175. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">24. 违反条款</div>
  23176. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23177. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">在不影响我们采取其他补救措施的情况下,如果我们合理地判断您违反了本条款的任何重要规定,我们可以在不提前通知您的情況下,暂停或终止您的账户,并拒绝继续为您提供服务。不过,我们会在措施采取后及时通知您。</div>
  23178. </div>
  23179. </div>
  23180. <div style="margin-top: 20px; text-align: justify; line-height: 24px;">
  23181. <div style="border-radius: 10px; background-color: #f3f4f6; padding: 15px; font-size: 12px; font-weight: bold; line-height: 20px;">25. 一般条款</div>
  23182. <div style="padding-left: 16px; padding-right: 16px; font-size: 12px; color: #4b5563;">
  23183. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">25.1. 协议期限。 在您访问或使用服务,或作为网站客户或访客期间,本条款将始终有效。即使您的账户因任何原因被终止,本条款仍然适用。</div>
  23184. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">25.2. 性别。 单数词包括复数形式,反之亦然;男性词包括女性和中性词,反之亦然;而涉及「人」的词语包括个人、合伙企业、协会、信托、非法人组织和公司。</div>
  23185. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">25.3. 权利放弃。 我们对您违反或威胁违反本条款的宽容,只有在书面形式且由我们正式签署的情况下才有效,否则不对我们产生约束力,并且仅限于具体的违约行为。即使我们未能在某一时间时候执行本条款中的权利,也不应被视为对该条款的放弃,也不影响我们在其他时间执行该条款的权利。</div>
  23186. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">25.4. 确认。 使用本服务即表示您已阅读、理解并同意本条款的所有内容。因此,您无法对本条款提出任何异议或要求,也无法在未来的诉讼或主张反对本条款。</div>
  23187. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">25.5. 语言。 若本条款的英文版与其他语言版本存在不一致,以英文版本为准。</div>
  23188. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">25.6. 适用法律。 本条款由科摩罗联盟安茹安州的现行法律专属管辖。</div>
  23189. <div style="margin-top: 12px; text-align: justify; line-height: 18px;">25.7. 完整协议。 本条款构成您与我们之间关于访问和使用服务的完整协议,并取代此前任何口头或书面的协议。</div>
  23190. </div>
  23191. </div>
  23192. </div>
  23193. </div>`;
  23194. const AboutHTML = `<div data-testid="content-layout-container" class="relative z-normal flex grow flex-col" style="margin-top: 0px; display: flex; flex-direction: column;">
  23195. <div class="mb-2" style="margin-bottom: 8px;">
  23196. <div class="">
  23197. <div class="w-auto space-y-5 rounded-12 p-4 bg-layer-13" style="border-radius: 12px; padding: 24px; background-color: #ffffff;">
  23198. <div class="flex flex-col" style="display: flex; flex-direction: column;">
  23199. <p class="flex h-11 items-center rounded-10 mb-5 pl-3 shadow-[2px_4px_8px_0_rgba(0,0,0,0.04)] font-semibold not-italic text-xs leading-4 text-button-8 bg-layer-12" style="display: flex; height: 44px; align-items: center; border-radius: 8px; margin-bottom: 16px; padding-left: 16px; box-shadow: none; font-weight: bold; font-size: 14px; color: #4b5563; background-color: #f3f4f6;">关于我们</p>
  23200. <div class="flex items-start font-normal not-italic text-sm leading-4_5 text-button-8" style="display: flex; align-items: flex-start; font-size: 14px; line-height: 1.8; color: #4b5563;">
  23201. <p class="_itemContent_fh2gb_1 font-normal not-italic text-sm leading-4_5 text-button-8" style="font-size: 14px; line-height: 1.8; color: #4b5563;">
  23202. <div class="" data-testid="licenseContent">F1bet 是亚洲值得信赖的在线赌博网站,自从正式投入服务至今最完整和最新的在线赌博游戏。 F1bet有一个简单的使命和愿景是提供诚实和信任的服务。</div>
  23203. </p>
  23204. </div>
  23205. </div>
  23206. <div class="flex flex-col" style="display: flex; flex-direction: column; margin-top: 24px;">
  23207. <p class="flex h-11 items-center rounded-10 mb-5 pl-3 shadow-[2px_4px_8px_0_rgba(0,0,0,0.04)] font-semibold not-italic text-xs leading-4 text-button-8 bg-layer-12" style="display: flex; height: 44px; align-items: center; border-radius: 8px; margin-bottom: 16px; padding-left: 16px; box-shadow: none; font-weight: bold; font-size: 14px; color: #4b5563; background-color: #f3f4f6;">为什么选择F1bet</p>
  23208. <div class="flex items-start font-normal not-italic text-sm leading-4_5 text-button-8" style="display: flex; align-items: flex-start; font-size: 14px; line-height: 1.8; color: #4b5563;">
  23209. <p class="_itemContent_fh2gb_1 font-normal not-italic text-sm leading-4_5 text-button-8" style="font-size: 14px; line-height: 1.8; color: #4b5563;">
  23210. <div class="" data-testid="licenseContent">
  23211. <div style="margin-bottom: 8px;">作为初学者,您肯定会问,为什么要加入F1bet在线赌博?</div>
  23212. <div style="margin-bottom: 8px;">你应该知道,技术的发展得非常迅速。 与其它竞争对手相比,F1bet 一直是拥有最新和最先进软件的网站之一,所展示的所有游戏都非常适合所有类型的小工具、台式机和 PC。 您只需要连接互联网即可享受游戏。</div>
  23213. </div>
  23214. </p>
  23215. </div>
  23216. </div>
  23217. <div class="flex flex-col" style="display: flex; flex-direction: column; margin-top: 24px;">
  23218. <p class="flex h-11 items-center rounded-10 mb-5 pl-3 shadow-[2px_4px_8px_0_rgba(0,0,0,0.04)] font-semibold not-italic text-xs leading-4 text-button-8 bg-layer-12" style="display: flex; height: 44px; align-items: center; border-radius: 8px; margin-bottom: 16px; padding-left: 16px; box-shadow: none; font-weight: bold; font-size: 14px; color: #4b5563; background-color: #f3f4f6;">最佳市场</p>
  23219. <div class="flex items-start font-normal not-italic text-sm leading-4_5 text-button-8" style="display: flex; align-items: flex-start; font-size: 14px; line-height: 1.8; color: #4b5563;">
  23220. <p class="_itemContent_fh2gb_1 font-normal not-italic text-sm leading-4_5 text-button-8" style="font-size: 14px; line-height: 1.8; color: #4b5563;">
  23221. <div class="" data-testid="licenseContent">
  23222. <div style="margin-bottom: 8px;">我们致力于为您提供最佳的市场赔率,并为您提供最新的市场信息和准确的比赛结果。</div>
  23223. <div style="margin-bottom: 8px;">F1bet 拥有亚洲最高赔率的足球市场,每月平均提供超过 10,000 场滚球投注的现场比赛。</div>
  23224. </div>
  23225. </p>
  23226. </div>
  23227. </div>
  23228. <div class="flex flex-col" style="display: flex; flex-direction: column; margin-top: 24px;">
  23229. <p class="flex h-11 items-center rounded-10 mb-5 pl-3 shadow-[2px_4px_8px_0_rgba(0,0,0,0.04)] font-semibold not-italic text-xs leading-4 text-button-8 bg-layer-12" style="display: flex; height: 44px; align-items: center; border-radius: 8px; margin-bottom: 16px; padding-left: 16px; box-shadow: none; font-weight: bold; font-size: 14px; color: #4b5563; background-color: #f3f4f6;">游戏产品</p>
  23230. <div class="flex items-start font-normal not-italic text-sm leading-4_5 text-button-8" style="display: flex; align-items: flex-start; font-size: 14px; line-height: 1.8; color: #4b5563;">
  23231. <p class="_itemContent_fh2gb_1 font-normal not-italic text-sm leading-4_5 text-button-8" style="font-size: 14px; line-height: 1.8; color: #4b5563;">
  23232. <div class="" data-testid="licenseContent">
  23233. <div style="margin-bottom: 8px;">我们为您提供各种游戏产品。 除了街头足球投注和固定投注市场,我们还提供真人娱乐场、老虎机游戏,这些游戏同样有趣。 同时,我们也不断改进和添加更优质的产品,为您提供最佳的在线赌博娱乐体验。</div>
  23234. <div style="margin-bottom: 8px;">我们通过提供令人兴奋的新增功能不断提高我们产品的质量,以确保我们只为您提供最好的在线娱乐。</div>
  23235. </div>
  23236. </p>
  23237. </div>
  23238. </div>
  23239. <div class="flex flex-col" style="display: flex; flex-direction: column; margin-top: 24px;">
  23240. <p class="flex h-11 items-center rounded-10 mb-5 pl-3 shadow-[2px_4px_8px_0_rgba(0,0,0,0.04)] font-semibold not-italic text-xs leading-4 text-button-8 bg-layer-12" style="display: flex; height: 44px; align-items: center; border-radius: 8px; margin-bottom: 16px; padding-left: 16px; box-shadow: none; font-weight: bold; font-size: 14px; color: #4b5563; background-color: #f3f4f6;">交易方式安全多样化</p>
  23241. <div class="flex items-start font-normal not-italic text-sm leading-4_5 text-button-8" style="display: flex; align-items: flex-start; font-size: 14px; line-height: 1.8; color: #4b5563;">
  23242. <p class="_itemContent_fh2gb_1 font-normal not-italic text-sm leading-4_5 text-button-8" style="font-size: 14px; line-height: 1.8; color: #4b5563;">
  23243. <div class="" data-testid="licenseContent">
  23244. <div style="margin-bottom: 8px;">我们拥有最便捷可靠的支付系统,确保您资金的安全和舒心,我们根据您的需求提供快速、简单、安全的各种类型的存取款,根据您的需求提供安全的存取款。</div>
  23245. <div style="margin-bottom: 8px;">请访问我们的银行帮助页面,了解有关存款和取款方法的更多信息。</div>
  23246. </div>
  23247. </p>
  23248. </div>
  23249. </div>
  23250. <div class="flex flex-col" style="display: flex; flex-direction: column; margin-top: 24px;">
  23251. <p class="flex h-11 items-center rounded-10 mb-5 pl-3 shadow-[2px_4px_8px_0_rgba(0,0,0,0.04)] font-semibold not-italic text-xs leading-4 text-button-8 bg-layer-12" style="display: flex; height: 44px; align-items: center; border-radius: 8px; margin-bottom: 16px; padding-left: 16px; box-shadow: none; font-weight: bold; font-size: 14px; color: #4b5563; background-color: #f3f4f6;">客户服务</p>
  23252. <div class="flex items-start font-normal not-italic text-sm leading-4_5 text-button-8" style="display: flex; align-items: flex-start; font-size: 14px; line-height: 1.8; color: #4b5563;">
  23253. <p class="_itemContent_fh2gb_1 font-normal not-italic text-sm leading-4_5 text-button-8" style="font-size: 14px; line-height: 1.8; color: #4b5563;">
  23254. <div class="" data-testid="licenseContent">
  23255. <span>• 客户永远是第一位的</span><br>
  23256. <span>• 我们将收集您的所有批评和建议</span><br>
  23257. <span>• 您的满意是我们的目标</span><br>
  23258. <div style="margin-top: 8px; margin-bottom: 8px;">24小时客服:访问“在线聊天”联系我们的客服。</div>
  23259. </div>
  23260. </p>
  23261. </div>
  23262. </div>
  23263. <div class="flex flex-col" style="display: flex; flex-direction: column; margin-top: 24px;"></div>
  23264. </div>
  23265. </div>
  23266. </div>
  23267. </div>`;
  23268. function omit(obj, keys) {
  23269. const result = { ...obj };
  23270. for (let i = 0; i < keys.length; i++) {
  23271. const key = keys[i];
  23272. delete result[key];
  23273. }
  23274. return result;
  23275. }
  23276. const useRichViewStore = defineStore(
  23277. "rich-view",
  23278. () => {
  23279. const content = vue.ref("");
  23280. return {
  23281. content
  23282. };
  23283. },
  23284. {
  23285. persist: true
  23286. }
  23287. );
  23288. function useRichView() {
  23289. const router2 = useRouter();
  23290. const richViewStore = useRichViewStore();
  23291. function open2(props) {
  23292. richViewStore.content = props.content;
  23293. router2.push({
  23294. path: "/rich-view",
  23295. query: omit(props, ["content"])
  23296. });
  23297. }
  23298. return {
  23299. open: open2
  23300. };
  23301. }
  23302. const _imports_0$4 = "/static/images/qianm.png";
  23303. const _imports_1$1 = "/static/images/footer/avatar.png";
  23304. const _imports_2$1 = "/static/images/footer/h2.png";
  23305. const _imports_3$1 = "/static/images/footer/saiche.png";
  23306. const _imports_4$2 = "/static/images/footer/pt/Subtract-1.png";
  23307. const _imports_5$1 = "/static/images/footer/pt/Social Icons.png";
  23308. const _imports_6$1 = "/static/images/footer/pt/Subtract-2.png";
  23309. const _imports_7 = "/static/images/footer/pt/Subtract.png";
  23310. const _imports_8 = "/static/images/footer/a.png";
  23311. const _imports_9 = "/static/images/footer/b.png";
  23312. const _imports_10 = "/static/images/footer/c.png";
  23313. const _imports_11 = "/static/images/footer/d.png";
  23314. const _imports_12 = "/static/images/layout/logo.png";
  23315. const _sfc_main$15 = {
  23316. __name: "index",
  23317. props: ["notBg"],
  23318. setup(__props, { expose: __expose }) {
  23319. __expose();
  23320. const router2 = useRouter();
  23321. const richView = useRichView();
  23322. const { t: t2 } = useI18n();
  23323. function GameRules() {
  23324. richView.open({
  23325. title: uni.$t("玩法规则"),
  23326. content: GameRulesHTML
  23327. });
  23328. }
  23329. function RulesAndTerms() {
  23330. richView.open({
  23331. title: uni.$t("规则条款"),
  23332. content: RulesAndTermsHTML
  23333. });
  23334. }
  23335. function About() {
  23336. richView.open({
  23337. title: uni.$t("关于我们"),
  23338. content: AboutHTML
  23339. });
  23340. }
  23341. function goService() {
  23342. if (uni.getStorageSync("token")) {
  23343. uni.navigateTo({
  23344. url: "/pages/common/customerService/index"
  23345. });
  23346. } else {
  23347. if (!uni.getStorageSync("youke_token")) {
  23348. userGuestRegister().then((res) => {
  23349. uni.setStorageSync("youke_token", res.data.token);
  23350. router2.push({
  23351. name: "customerService",
  23352. query: { GuestMode: 1 }
  23353. });
  23354. });
  23355. } else {
  23356. router2.push({
  23357. name: "customerService",
  23358. query: { GuestMode: 1 }
  23359. });
  23360. }
  23361. }
  23362. }
  23363. const __returned__ = { router: router2, richView, t: t2, GameRules, RulesAndTerms, About, goService, get useI18n() {
  23364. return useI18n;
  23365. }, get GameRulesHTML() {
  23366. return GameRulesHTML;
  23367. }, get RulesAndTermsHTML() {
  23368. return RulesAndTermsHTML;
  23369. }, get AboutHTML() {
  23370. return AboutHTML;
  23371. }, get userGuestRegister() {
  23372. return userGuestRegister;
  23373. } };
  23374. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  23375. return __returned__;
  23376. }
  23377. };
  23378. function _sfc_render$14(_ctx, _cache, $props, $setup, $data, $options) {
  23379. return vue.openBlock(), vue.createElementBlock(
  23380. "view",
  23381. {
  23382. class: vue.normalizeClass(["site-footer", [!$props.notBg ? "notbg-site-footer" : ""]])
  23383. },
  23384. [
  23385. vue.createElementVNode("view", { class: "footer-partners" }, [
  23386. vue.createCommentVNode(" 品牌大使 "),
  23387. vue.createElementVNode("view", { class: "partner-group ambassador-group" }, [
  23388. vue.createElementVNode(
  23389. "view",
  23390. { class: "footer-title" },
  23391. vue.toDisplayString($setup.t("品牌大使")),
  23392. 1
  23393. /* TEXT */
  23394. ),
  23395. vue.createElementVNode("view", { class: "ambassador-content" }, [
  23396. vue.createElementVNode("view", { class: "ambassador-item" }, [
  23397. vue.createElementVNode("view", { class: "ambassador-info" }, [
  23398. vue.createElementVNode(
  23399. "text",
  23400. { class: "name" },
  23401. vue.toDisplayString($setup.t("塞巴斯蒂安·维特尔")),
  23402. 1
  23403. /* TEXT */
  23404. ),
  23405. vue.createCommentVNode(' 增加 mode="widthFix" 防止高度拉伸 '),
  23406. vue.createElementVNode("image", {
  23407. src: _imports_0$4,
  23408. alt: "Signature",
  23409. class: "signature",
  23410. mode: "widthFix"
  23411. })
  23412. ]),
  23413. vue.createElementVNode("image", {
  23414. src: _imports_1$1,
  23415. style: { "width": "80px", "height": "80px" }
  23416. })
  23417. ])
  23418. ])
  23419. ]),
  23420. vue.createCommentVNode(" 官方合作伙伴 "),
  23421. vue.createElementVNode("view", { class: "partner-group" }, [
  23422. vue.createElementVNode(
  23423. "view",
  23424. { class: "footer-title" },
  23425. vue.toDisplayString($setup.t("官方合作伙伴")),
  23426. 1
  23427. /* TEXT */
  23428. ),
  23429. vue.createElementVNode("view", {
  23430. class: "partner-logos",
  23431. style: { "display": "flex", "justify-content": "space-between", "align-items": "center" }
  23432. }, [
  23433. vue.createElementVNode("view", { class: "nav-links" }, [
  23434. vue.createElementVNode("view", null, [
  23435. vue.createElementVNode("image", {
  23436. src: _imports_2$1,
  23437. class: "partner-logo",
  23438. alt: "Mclaren"
  23439. }),
  23440. vue.createElementVNode(
  23441. "text",
  23442. null,
  23443. vue.toDisplayString($setup.t("迈凯伦")),
  23444. 1
  23445. /* TEXT */
  23446. )
  23447. ])
  23448. ]),
  23449. vue.createElementVNode("image", {
  23450. src: _imports_3$1,
  23451. style: { "width": "80px", "height": "80px" }
  23452. })
  23453. ])
  23454. ]),
  23455. vue.createCommentVNode(" 帮助中心 "),
  23456. vue.createElementVNode("view", { class: "partner-group" }, [
  23457. vue.createElementVNode(
  23458. "view",
  23459. { class: "footer-title" },
  23460. vue.toDisplayString($setup.t("帮助")),
  23461. 1
  23462. /* TEXT */
  23463. ),
  23464. vue.createElementVNode("view", { class: "nav-links" }, [
  23465. vue.createElementVNode(
  23466. "view",
  23467. { onClick: $setup.goService },
  23468. "7x24" + vue.toDisplayString($setup.t("客服")),
  23469. 1
  23470. /* TEXT */
  23471. ),
  23472. vue.createElementVNode(
  23473. "view",
  23474. { onClick: $setup.GameRules },
  23475. vue.toDisplayString($setup.t("玩法规则")),
  23476. 1
  23477. /* TEXT */
  23478. ),
  23479. vue.createElementVNode(
  23480. "view",
  23481. { onClick: $setup.RulesAndTerms },
  23482. vue.toDisplayString($setup.t("规则条款")),
  23483. 1
  23484. /* TEXT */
  23485. ),
  23486. vue.createElementVNode(
  23487. "view",
  23488. { onClick: $setup.About },
  23489. vue.toDisplayString($setup.t("关于我们")),
  23490. 1
  23491. /* TEXT */
  23492. )
  23493. ])
  23494. ]),
  23495. vue.createCommentVNode(" 快速链接 "),
  23496. vue.createCommentVNode(` <view class="partner-group">\r
  23497. <view class="footer-title">{{ t('快速链接') }}</view>\r
  23498. <view class="nav-links">\r
  23499. <view>{{ t('体育赛事') }}</view>\r
  23500. <view>{{ t('滚球投注') }}</view>\r
  23501. <view>{{ t('彩票娱乐') }}</view>\r
  23502. </view>\r
  23503. </view> `),
  23504. vue.createCommentVNode(" 社交平台 "),
  23505. vue.createElementVNode("view", { class: "partner-group" }, [
  23506. vue.createElementVNode(
  23507. "view",
  23508. { class: "footer-title" },
  23509. vue.toDisplayString($setup.t("社交平台")),
  23510. 1
  23511. /* TEXT */
  23512. ),
  23513. vue.createElementVNode("view", { class: "nav-links social-links" }, [
  23514. vue.createElementVNode("view", { class: "nav-links-pt" }, [
  23515. vue.createCommentVNode(' 增加 mode="widthFix" 或在下方 css 中限制 height '),
  23516. vue.createElementVNode("image", {
  23517. src: _imports_4$2,
  23518. alt: "Social",
  23519. mode: "widthFix"
  23520. }),
  23521. vue.createElementVNode("image", {
  23522. src: _imports_5$1,
  23523. alt: "Social",
  23524. mode: "widthFix"
  23525. }),
  23526. vue.createElementVNode("image", {
  23527. src: _imports_6$1,
  23528. alt: "Social",
  23529. mode: "widthFix"
  23530. }),
  23531. vue.createElementVNode("image", {
  23532. src: _imports_7,
  23533. alt: "Social",
  23534. mode: "widthFix"
  23535. })
  23536. ]),
  23537. vue.createCommentVNode(' <view class="nav-links-pt">\r\n\r\n </view> ')
  23538. ])
  23539. ]),
  23540. vue.createElementVNode("view", { class: "partner-group" }, [
  23541. vue.createElementVNode(
  23542. "view",
  23543. { class: "footer-title" },
  23544. vue.toDisplayString($setup.t("责任与权誉")),
  23545. 1
  23546. /* TEXT */
  23547. ),
  23548. vue.createElementVNode("view", { class: "compliance-logos partner-group-imgs" }, [
  23549. vue.createCommentVNode(' 增加 mode="widthFix" '),
  23550. vue.createElementVNode("image", {
  23551. src: _imports_8,
  23552. alt: "Compliance",
  23553. mode: "widthFix"
  23554. }),
  23555. vue.createElementVNode("image", {
  23556. src: _imports_9,
  23557. alt: "Compliance",
  23558. mode: "widthFix"
  23559. }),
  23560. vue.createElementVNode("image", {
  23561. src: _imports_10,
  23562. alt: "Compliance",
  23563. mode: "widthFix"
  23564. }),
  23565. vue.createElementVNode("image", {
  23566. src: _imports_11,
  23567. alt: "Compliance",
  23568. mode: "widthFix"
  23569. })
  23570. ])
  23571. ]),
  23572. vue.createCommentVNode(" 下载APP "),
  23573. vue.createCommentVNode(` <view class="partner-group app-group">\r
  23574. <view class="footer-title">{{ t('下载APP') }}</view>\r
  23575. <view class="app-qr-box">\r
  23576. <view class="app-buttons">\r
  23577. <view style="display: flex;">\r
  23578. <image src="@/static/images/footer/ios.png" alt="Social" style="width: 30px;height: 30px;cursor: pointer;" />\r
  23579. <image src="@/static/images/footer/android.png" alt="Social" style="width: 30px;height: 30px;margin-left: 15px;cursor: pointer;" />\r
  23580. </view>\r
  23581. </view>\r
  23582. </view>\r
  23583. </view> `)
  23584. ]),
  23585. vue.createCommentVNode(" 关于我们 "),
  23586. vue.createElementVNode(
  23587. "view",
  23588. { class: "footer-title" },
  23589. vue.toDisplayString($setup.t("关于我们")),
  23590. 1
  23591. /* TEXT */
  23592. ),
  23593. vue.createCommentVNode(' 增加 mode="widthFix" '),
  23594. vue.createElementVNode("image", {
  23595. src: _imports_12,
  23596. alt: "Logo",
  23597. class: "footer-logo",
  23598. mode: "widthFix"
  23599. }),
  23600. vue.createElementVNode("view", { class: "footer-about" }, [
  23601. vue.createElementVNode(
  23602. "view",
  23603. null,
  23604. vue.toDisplayString($setup.t("F1bet 是亚洲值得信赖的在线赌博网站,自从正式投入服务至今最完整和最新的在线赌博游戏。 F1bet有一个简单的使命和愿景是提供诚实和信任的服务。在近期与Mclaren、塞巴斯蒂安·维特尔 达成赞助伙伴协议,进一步加深了“F1bet”的国际知名度,让平台的名声遍布全球。")),
  23605. 1
  23606. /* TEXT */
  23607. ),
  23608. vue.createElementVNode(
  23609. "view",
  23610. null,
  23611. vue.toDisplayString($setup.t("为了提升用户体验,使用本网站后,我们可能使用Cookies技术从服务器中收集客户信息。如果您在F1bet注册或者继续使用网站,则您将被视为同意我们使用Cookies。")),
  23612. 1
  23613. /* TEXT */
  23614. ),
  23615. vue.createElementVNode(
  23616. "view",
  23617. null,
  23618. vue.toDisplayString($setup.t("如果删除我们的Cookies或禁用我们之后的Cookies,将导致您无法使用平台的某些区域或特色功能。")),
  23619. 1
  23620. /* TEXT */
  23621. )
  23622. ]),
  23623. vue.createCommentVNode(" 合规与版权 "),
  23624. vue.createElementVNode("view", { class: "footer-compliance" }, [
  23625. vue.createElementVNode("view", { class: "copyright-text" }, [
  23626. vue.createElementVNode(
  23627. "view",
  23628. null,
  23629. vue.toDisplayString($setup.t("© 2015 - 2026 版权所有并受法律保护。")),
  23630. 1
  23631. /* TEXT */
  23632. ),
  23633. vue.createElementVNode(
  23634. "view",
  23635. { class: "disclaimer" },
  23636. vue.toDisplayString($setup.t("本平台仅向18岁以上成人提供娱乐服务,请理性投注,谨防沉迷。")),
  23637. 1
  23638. /* TEXT */
  23639. )
  23640. ])
  23641. ])
  23642. ],
  23643. 2
  23644. /* CLASS */
  23645. );
  23646. }
  23647. const appFooter = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$14], ["__scopeId", "data-v-e83d1d1b"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/components/appFooter/index.vue"]]);
  23648. const _sfc_main$14 = {
  23649. __name: "list",
  23650. setup(__props, { expose: __expose }) {
  23651. __expose();
  23652. const { t: t2 } = useI18n();
  23653. const router2 = useRouter();
  23654. const locale = getLocale();
  23655. const gameList = [
  23656. { name: "PC28", imgName: "pc28", route: { name: "PC28" } },
  23657. { name: "极速28", imgName: "ExtremeSpeed28", route: { name: "ExtremeSpeed28" } },
  23658. { name: "澳门六合彩", imgName: "MacauMarkSix", route: { name: "Digital" } },
  23659. { name: "新澳门六合彩", imgName: "NewMacauMarkSix", route: { name: "NewDigital" } },
  23660. { name: "极速六合彩", imgName: "ExtremeSpeedMarkSix", route: { name: "SpeedDigital" } },
  23661. { name: "香港六合彩", imgName: "HongKongMarkSix", route: { name: "HKDigital" } }
  23662. ];
  23663. const getImagePath = (baseName) => {
  23664. let suffix = "";
  23665. if (locale === "en") {
  23666. suffix = "_en";
  23667. } else if (locale === "vi") {
  23668. suffix = "_vi";
  23669. }
  23670. return `/static/images/${baseName}${suffix}.png`;
  23671. };
  23672. const goToGame = (routeObj) => {
  23673. if (routeObj) {
  23674. router2.push(routeObj);
  23675. }
  23676. };
  23677. const __returned__ = { t: t2, router: router2, locale, gameList, getImagePath, goToGame, get useI18n() {
  23678. return useI18n;
  23679. }, get getLocale() {
  23680. return getLocale;
  23681. } };
  23682. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  23683. return __returned__;
  23684. }
  23685. };
  23686. function _sfc_render$13(_ctx, _cache, $props, $setup, $data, $options) {
  23687. const _component_u_icon = __unplugin_components_0$5;
  23688. return vue.openBlock(), vue.createElementBlock("view", { class: "entertainment-list" }, [
  23689. vue.createElementVNode("view", { class: "game-grid" }, [
  23690. (vue.openBlock(), vue.createElementBlock(
  23691. vue.Fragment,
  23692. null,
  23693. vue.renderList($setup.gameList, (game, index) => {
  23694. return vue.createElementVNode("view", {
  23695. class: "game-card",
  23696. key: index,
  23697. onClick: ($event) => $setup.goToGame(game.route)
  23698. }, [
  23699. vue.createElementVNode("view", { class: "image-wrapper" }, [
  23700. vue.createElementVNode("image", {
  23701. src: $setup.getImagePath(game.imgName),
  23702. class: "game-cover"
  23703. }, null, 8, ["src"]),
  23704. vue.createElementVNode("view", { class: "hover-overlay" }, [
  23705. vue.createElementVNode("view", { class: "play-btn" }, [
  23706. vue.createVNode(_component_u_icon, {
  23707. name: "play-right-fill",
  23708. size: "28",
  23709. color: "#000",
  23710. class: "mr-1"
  23711. }),
  23712. vue.createElementVNode(
  23713. "text",
  23714. null,
  23715. vue.toDisplayString($setup.t("立即进入")),
  23716. 1
  23717. /* TEXT */
  23718. )
  23719. ])
  23720. ])
  23721. ])
  23722. ], 8, ["onClick"]);
  23723. }),
  23724. 64
  23725. /* STABLE_FRAGMENT */
  23726. ))
  23727. ])
  23728. ]);
  23729. }
  23730. const list = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$13], ["__scopeId", "data-v-db20a734"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/components/list.vue"]]);
  23731. const block0$1 = (Comp) => {
  23732. (Comp.$renderjs || (Comp.$renderjs = [])).push("h5Video");
  23733. (Comp.$renderjsModules || (Comp.$renderjsModules = {}))["h5Video"] = "2d61c7cf";
  23734. };
  23735. const _sfc_main$13 = {
  23736. __name: "index",
  23737. setup(__props, { expose: __expose }) {
  23738. const { t: t2, locale } = useI18n();
  23739. const router2 = useRouter();
  23740. const route2 = useRoute();
  23741. const orderStore = useOrderStore();
  23742. const WebsocketData = useWebsocketDataStore();
  23743. const pagingRef = vue.ref(null);
  23744. const PermanentURL = vue.ref("F1bet.cc");
  23745. const videoSrc = vue.ref("");
  23746. const playTrigger = vue.ref(0);
  23747. const isPaused = vue.ref(false);
  23748. const videoLoaded = vue.ref(false);
  23749. const onVideoLoaded = () => {
  23750. videoLoaded.value = true;
  23751. };
  23752. __expose({ onVideoLoaded });
  23753. vue.onMounted(() => {
  23754. videoSrc.value = plus.io.convertLocalFileSystemURL("_www/static/video/home.mp4");
  23755. });
  23756. const toggleVideo = () => {
  23757. isPaused.value = !isPaused.value;
  23758. };
  23759. const banners1 = vue.ref([]);
  23760. const banners2 = vue.ref([]);
  23761. const sportList = vue.ref([]);
  23762. const sportCount = vue.ref(0);
  23763. const gamblingList = vue.ref([]);
  23764. const gamblingCount = vue.ref(0);
  23765. const limit = vue.ref(10);
  23766. const selectedMap = vue.ref({});
  23767. const skeletonLoading = vue.ref(true);
  23768. function handleSwiper(item) {
  23769. router2.push({ name: "promotionDetail", query: { id: banners2.value[item].link } });
  23770. }
  23771. const oddsChangeMap = vue.ref(/* @__PURE__ */ new Map());
  23772. const getOddsKey = (matchId, marketId, selection) => {
  23773. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  23774. return `${matchId}_${marketId}_${selection.value}_${selection.handicap}`;
  23775. }
  23776. return `${matchId}_${marketId}_${selection.value}`;
  23777. };
  23778. const isOddsUp = (key) => {
  23779. const change = oddsChangeMap.value.get(key);
  23780. return (change == null ? void 0 : change.direction) === "up" && Date.now() - change.timestamp < 3e3;
  23781. };
  23782. const isOddsDown = (key) => {
  23783. const change = oddsChangeMap.value.get(key);
  23784. return (change == null ? void 0 : change.direction) === "down" && Date.now() - change.timestamp < 3e3;
  23785. };
  23786. const getVisibleValues = (values) => {
  23787. if (!values)
  23788. return [];
  23789. if (values.length <= 3)
  23790. return values;
  23791. return values.slice(0, 2);
  23792. };
  23793. const hasMore = (values) => {
  23794. if (!values)
  23795. return false;
  23796. return values.length > 3;
  23797. };
  23798. const getRemainCount = (values) => {
  23799. if (!values)
  23800. return 0;
  23801. return values.length - 2;
  23802. };
  23803. const getUniqueKey = (matchId, marketId, selection) => {
  23804. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  23805. return `${matchId}_${marketId}_${selection.value}_${selection.handicap}`;
  23806. }
  23807. return `${matchId}_${marketId}_${selection.value}`;
  23808. };
  23809. const checkIsLocked = (item) => {
  23810. if (!item)
  23811. return true;
  23812. if (Number(item.is_locked) === 1)
  23813. return true;
  23814. if (item.status !== void 0 && Number(item.status) !== 1)
  23815. return true;
  23816. if (item.state !== void 0) {
  23817. const state = Number(item.state);
  23818. if (state !== 0 && state !== 1)
  23819. return true;
  23820. }
  23821. return false;
  23822. };
  23823. const isOptionLocked = (item, opt) => {
  23824. if (checkIsLocked(item))
  23825. return true;
  23826. if (!opt)
  23827. return true;
  23828. if (!opt.odd || opt.odd === "-" || Number(opt.odd) === 0)
  23829. return true;
  23830. if (opt.suspended === true || String(opt.suspended).toLowerCase() === "true")
  23831. return true;
  23832. if (item.odds && item.odds[0] && item.odds[0].is_findLocked)
  23833. return true;
  23834. return false;
  23835. };
  23836. const syncFromStore = () => {
  23837. const map = {};
  23838. if (orderStore.selectOrders && orderStore.selectOrders.length) {
  23839. orderStore.selectOrders.forEach((order) => {
  23840. if (order.uniqueKey)
  23841. map[order.uniqueKey] = true;
  23842. });
  23843. }
  23844. selectedMap.value = map;
  23845. };
  23846. vue.watch(() => orderStore.selectOrders, () => {
  23847. syncFromStore();
  23848. }, { deep: true, immediate: true });
  23849. vue.watch(() => WebsocketData.data, handleWebsocketData);
  23850. function handleWebsocketData(data) {
  23851. try {
  23852. const res = typeof data === "string" ? JSON.parse(data) : data;
  23853. if (res.type === "sport_list" && Array.isArray(res.message)) {
  23854. res.message.forEach((newMatch) => {
  23855. var _a2;
  23856. let idx = gamblingList.value.findIndex((item) => item.data_id === newMatch.data_id);
  23857. if (idx !== -1) {
  23858. const oldMatch = gamblingList.value[idx];
  23859. let parsedNewOdds = newMatch.odds;
  23860. if (typeof parsedNewOdds === "string") {
  23861. try {
  23862. parsedNewOdds = JSON.parse(parsedNewOdds);
  23863. } catch (e) {
  23864. parsedNewOdds = [];
  23865. }
  23866. }
  23867. if (((_a2 = oldMatch.odds) == null ? void 0 : _a2[0]) && (parsedNewOdds == null ? void 0 : parsedNewOdds[0])) {
  23868. const oldMarket = oldMatch.odds[0];
  23869. const newMarket = parsedNewOdds[0];
  23870. if (oldMarket.values && newMarket.values) {
  23871. newMarket.values.forEach((newOpt) => {
  23872. const oldOpt = oldMarket.values.find(
  23873. (o) => o.value === newOpt.value && (o.handicap == newOpt.handicap || !o.handicap && !newOpt.handicap)
  23874. );
  23875. if ((oldOpt == null ? void 0 : oldOpt.odd) && (newOpt == null ? void 0 : newOpt.odd)) {
  23876. const oldNum = parseFloat(oldOpt.odd);
  23877. const newNum = parseFloat(newOpt.odd);
  23878. if (!isNaN(oldNum) && !isNaN(newNum) && oldNum !== newNum) {
  23879. const key = getOddsKey(oldMatch.id, newMarket.id, newOpt);
  23880. const direction = newNum > oldNum ? "up" : "down";
  23881. oddsChangeMap.value.set(key, { direction, timestamp: Date.now() });
  23882. setTimeout(() => oddsChangeMap.value.delete(key), 3100);
  23883. }
  23884. }
  23885. });
  23886. }
  23887. }
  23888. let parsedOdds = newMatch.odds;
  23889. if (typeof parsedOdds === "string") {
  23890. try {
  23891. parsedOdds = JSON.parse(parsedOdds);
  23892. } catch (e) {
  23893. parsedOdds = [];
  23894. }
  23895. } else if (!parsedOdds) {
  23896. parsedOdds = gamblingList.value[idx].odds;
  23897. }
  23898. gamblingList.value[idx] = { ...gamblingList.value[idx], ...newMatch, odds: parsedOdds };
  23899. orderStore.updateMatchStatus(newMatch.data_id, gamblingList.value[idx]);
  23900. }
  23901. });
  23902. }
  23903. } catch (error) {
  23904. }
  23905. }
  23906. const goDetail = (item) => {
  23907. router2.push({ name: "sportDetail", query: { data_id: item.data_id } });
  23908. };
  23909. const toMoreRollBall = (name) => {
  23910. router2.pushTab({ name });
  23911. };
  23912. const getStatusText = (state) => {
  23913. const states = { 0: t2("未开始"), 1: t2("进行中"), 2: t2("已完场"), 3: t2("延期"), 4: t2("取消") };
  23914. return states[state] || "";
  23915. };
  23916. const translateSelection = (valStr) => {
  23917. if (valStr === void 0 || valStr === null)
  23918. return "";
  23919. return String(valStr);
  23920. };
  23921. const isSelected = (matchId, marketId, selection) => {
  23922. if (!selection)
  23923. return false;
  23924. const uniqueKey = getUniqueKey(matchId, marketId, selection);
  23925. return !!selectedMap.value[uniqueKey];
  23926. };
  23927. const handleOddsClick = (item, selection) => {
  23928. if (isOptionLocked(item, selection))
  23929. return;
  23930. if (!item.odds || item.odds.length === 0)
  23931. return;
  23932. const market = item.odds[0];
  23933. const uniqueKey = getUniqueKey(item.id, market.id, selection);
  23934. if (selectedMap.value[uniqueKey]) {
  23935. orderStore.removeOrderItemByKey(uniqueKey);
  23936. } else {
  23937. if (market.values) {
  23938. market.values.forEach((wsItem) => {
  23939. const otherKey = getUniqueKey(item.id, market.id, wsItem);
  23940. if (selectedMap.value[otherKey]) {
  23941. orderStore.removeOrderItemByKey(otherKey);
  23942. }
  23943. });
  23944. }
  23945. const betItem = {
  23946. matchId: item.id,
  23947. data_id: item.data_id,
  23948. league: item.league,
  23949. league_en: item.league_en,
  23950. homeTeam: item.home_team,
  23951. home_team_en: item.home_team_en,
  23952. guestTeam: item.guest_team,
  23953. guest_team_en: item.guest_team_en,
  23954. betType: market.name,
  23955. betTypeEn: market.name_en,
  23956. betTypeName: selection.value_text,
  23957. betTypeNameEn: selection.value,
  23958. handicap: selection.handicap,
  23959. handicap_text: selection.handicap_text,
  23960. odds: selection.odd,
  23961. score: item.score,
  23962. state: item.state,
  23963. status: item.status,
  23964. is_roll: item.is_roll,
  23965. is_locked: item.is_locked,
  23966. uniqueKey,
  23967. optionValue: selection.value,
  23968. submit_value: selection.submit_value,
  23969. marketId: market.id,
  23970. mininum: market.mininum,
  23971. maxinum: market.maxinum,
  23972. selection: {
  23973. ...selection
  23974. }
  23975. };
  23976. orderStore.addOrderItem(betItem);
  23977. uni.vibrateShort();
  23978. }
  23979. };
  23980. const fetchGamblingDataWithFallback = async () => {
  23981. let res = await getSportSchedule({ page: 1, limit: limit.value, state: 1, is_rec: 1 });
  23982. if (res.code === 1 && (!res.data || !res.data.list || res.data.list.length === 0)) {
  23983. res = await getSportSchedule({ page: 1, limit: limit.value, state: 0, is_rec: 1 });
  23984. }
  23985. return res;
  23986. };
  23987. async function onQuery() {
  23988. var _a2, _b2;
  23989. try {
  23990. skeletonLoading.value = true;
  23991. const [resB1, resB2, resGambling] = await Promise.all([
  23992. getActivity({ type: 2 }),
  23993. getBanner({ type: "app" }),
  23994. fetchGamblingDataWithFallback()
  23995. ]);
  23996. banners1.value = resB1.data.list;
  23997. banners2.value = resB2.data.list;
  23998. const formatData = (list2) => {
  23999. return (list2 || []).map((item) => {
  24000. if (typeof item.odds === "string") {
  24001. try {
  24002. item.odds = JSON.parse(item.odds);
  24003. } catch (e) {
  24004. item.odds = [];
  24005. }
  24006. }
  24007. return item;
  24008. });
  24009. };
  24010. gamblingList.value = formatData(((_a2 = resGambling == null ? void 0 : resGambling.data) == null ? void 0 : _a2.list) || []);
  24011. gamblingList.value = gamblingList.value.map((item) => {
  24012. if (item.odds) {
  24013. item.odds.forEach((jtem) => {
  24014. if (item.odd_ids_locked && item.odd_ids_locked.find((trim2) => jtem.id === trim2)) {
  24015. jtem.is_findLocked = true;
  24016. }
  24017. });
  24018. }
  24019. return item;
  24020. });
  24021. gamblingCount.value = ((_b2 = resGambling == null ? void 0 : resGambling.data) == null ? void 0 : _b2.count) || 0;
  24022. pagingRef.value.complete(true);
  24023. skeletonLoading.value = false;
  24024. } catch (error) {
  24025. pagingRef.value.complete(false);
  24026. skeletonLoading.value = false;
  24027. }
  24028. }
  24029. onShow(() => {
  24030. syncFromStore();
  24031. if (!isPaused.value) {
  24032. playTrigger.value++;
  24033. }
  24034. });
  24035. if (route2.query.token) {
  24036. uni.setStorageSync("token", route2.query.token);
  24037. }
  24038. if (route2.query.token && (!route2.query.is_bind || route2.query.is_bind == 0)) {
  24039. getUserInfo().then((res) => {
  24040. if (!res.data.account) {
  24041. uni.showModal({
  24042. title: "温馨提示",
  24043. content: "您的账号信息尚未完善,为保证功能的正常使用,请前往补充填写。",
  24044. confirmText: "去填写",
  24045. success: (res2) => {
  24046. if (res2.confirm) {
  24047. uni.navigateTo({
  24048. url: "/pages/setAccount/index"
  24049. });
  24050. }
  24051. }
  24052. });
  24053. }
  24054. });
  24055. }
  24056. onQuery();
  24057. const __returned__ = { t: t2, locale, router: router2, route: route2, orderStore, WebsocketData, pagingRef, PermanentURL, videoSrc, playTrigger, isPaused, videoLoaded, onVideoLoaded, toggleVideo, banners1, banners2, sportList, sportCount, gamblingList, gamblingCount, limit, selectedMap, skeletonLoading, handleSwiper, oddsChangeMap, getOddsKey, isOddsUp, isOddsDown, getVisibleValues, hasMore, getRemainCount, getUniqueKey, checkIsLocked, isOptionLocked, syncFromStore, handleWebsocketData, goDetail, toMoreRollBall, getStatusText, translateSelection, isSelected, handleOddsClick, fetchGamblingDataWithFallback, onQuery, ref: vue.ref, watch: vue.watch, onMounted: vue.onMounted, get onShow() {
  24058. return onShow;
  24059. }, get useI18n() {
  24060. return useI18n;
  24061. }, get getActivity() {
  24062. return getActivity;
  24063. }, get getBanner() {
  24064. return getBanner;
  24065. }, get getSportSchedule() {
  24066. return getSportSchedule;
  24067. }, get getUserInfo() {
  24068. return getUserInfo;
  24069. }, get useOrderStore() {
  24070. return useOrderStore;
  24071. }, get useWebsocketDataStore() {
  24072. return useWebsocketDataStore;
  24073. }, get formatRange() {
  24074. return formatRange;
  24075. }, appFooter, AddDesktopGuide, list };
  24076. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  24077. return __returned__;
  24078. }
  24079. };
  24080. function _sfc_render$12(_ctx, _cache, $props, $setup, $data, $options) {
  24081. const _component_u_skeleton = __unplugin_components_0$3;
  24082. const _component_u_image = __unplugin_components_1$1;
  24083. const _component_u_icon = __unplugin_components_0$5;
  24084. const _component_u_tag = __unplugin_components_2$2;
  24085. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  24086. const _component_PageContainer = PageContainer;
  24087. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  24088. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  24089. default: vue.withCtx(() => [
  24090. vue.createVNode(_component_PageContainer, null, {
  24091. default: vue.withCtx(() => [
  24092. vue.createVNode(
  24093. _component_z_paging,
  24094. {
  24095. ref: "pagingRef",
  24096. onQuery: $setup.onQuery,
  24097. "refresher-only": true,
  24098. "loading-more-enabled": false,
  24099. fixed: false,
  24100. onTouchmove: _cache[1] || (_cache[1] = vue.withModifiers(() => {
  24101. }, ["stop", "prevent"]))
  24102. },
  24103. {
  24104. refresher: vue.withCtx(() => [
  24105. vue.createElementVNode("view", { class: "flex flex-col items-center justify-center py-6" }, [
  24106. vue.createElementVNode("view", { class: "refresh-spinner mb-2" }),
  24107. vue.createElementVNode(
  24108. "text",
  24109. { class: "text-xs tmc" },
  24110. vue.toDisplayString($setup.t("正在更新内容...")),
  24111. 1
  24112. /* TEXT */
  24113. )
  24114. ])
  24115. ]),
  24116. default: vue.withCtx(() => [
  24117. vue.createElementVNode("view", { style: { "padding": "10px 20px", "box-sizing": "border-box" } }, [
  24118. vue.createElementVNode("scroll-view", {
  24119. "scroll-x": "",
  24120. class: "banner1-scroll",
  24121. "show-scrollbar": false
  24122. }, [
  24123. vue.createElementVNode("view", { class: "banner1-flex" }, [
  24124. $setup.skeletonLoading ? (vue.openBlock(), vue.createElementBlock(
  24125. vue.Fragment,
  24126. { key: 0 },
  24127. vue.renderList(3, (i) => {
  24128. return vue.createElementVNode("view", {
  24129. class: "banner1-item",
  24130. key: "skeleton-banner-" + i
  24131. }, [
  24132. vue.createElementVNode("view", {
  24133. class: "square-wrapper",
  24134. style: { "display": "flex", "align-items": "center", "justify-content": "center", "background-color": "#fff" }
  24135. }, [
  24136. vue.createVNode(_component_u_skeleton, {
  24137. loading: true,
  24138. animate: true,
  24139. rows: "0",
  24140. title: ""
  24141. })
  24142. ])
  24143. ]);
  24144. }),
  24145. 64
  24146. /* STABLE_FRAGMENT */
  24147. )) : (vue.openBlock(true), vue.createElementBlock(
  24148. vue.Fragment,
  24149. { key: 1 },
  24150. vue.renderList($setup.banners2, (item, i) => {
  24151. return vue.openBlock(), vue.createElementBlock("view", {
  24152. class: "banner1-item",
  24153. key: i,
  24154. onClick: ($event) => $setup.handleSwiper(i)
  24155. }, [
  24156. vue.createElementVNode("view", { class: "square-wrapper" }, [
  24157. vue.createVNode(_component_u_image, {
  24158. src: item.image,
  24159. width: "100%",
  24160. height: "100%",
  24161. mode: "aspectFill"
  24162. }, null, 8, ["src"])
  24163. ])
  24164. ], 8, ["onClick"]);
  24165. }),
  24166. 128
  24167. /* KEYED_FRAGMENT */
  24168. ))
  24169. ])
  24170. ]),
  24171. vue.createElementVNode("view", { class: "url-header-bar" }, [
  24172. vue.createElementVNode("view", { class: "brand-left" }, [
  24173. vue.createVNode(_component_u_icon, {
  24174. name: "star-fill",
  24175. color: "#f8b932",
  24176. size: "28"
  24177. }),
  24178. vue.createElementVNode("view", { class: "brand-text-box" }, [
  24179. vue.createElementVNode("text", { class: "brand-title" }, "F1BET"),
  24180. vue.createElementVNode(
  24181. "text",
  24182. { class: "brand-subtitle" },
  24183. vue.toDisplayString($setup.PermanentURL),
  24184. 1
  24185. /* TEXT */
  24186. )
  24187. ])
  24188. ]),
  24189. vue.createElementVNode("view", { class: "url-right-badge" }, [
  24190. vue.createVNode(_component_u_icon, {
  24191. name: "chrome-circle-fill",
  24192. color: "#f8b932",
  24193. size: "16"
  24194. }),
  24195. vue.createElementVNode(
  24196. "text",
  24197. { class: "url-text" },
  24198. vue.toDisplayString($setup.t("永久网址")) + ": " + vue.toDisplayString($setup.PermanentURL),
  24199. 1
  24200. /* TEXT */
  24201. )
  24202. ])
  24203. ]),
  24204. vue.createElementVNode("view", { class: "video-container" }, [
  24205. vue.createCommentVNode(" 修复点:移除了原本依赖 videoLoaded 变量导致 opacity 为 0 的隐藏逻辑,让视频直接显示 "),
  24206. vue.createElementVNode("view", {
  24207. id: "homeVideo",
  24208. videoPath: vue.wp($setup.videoSrc),
  24209. videoPaused: vue.wp($setup.isPaused),
  24210. playTrigger: vue.wp($setup.playTrigger),
  24211. "change:videoPath": _ctx.h5Video.createVideo,
  24212. "change:videoPaused": _ctx.h5Video.updatePlayState,
  24213. "change:playTrigger": _ctx.h5Video.forcePlay,
  24214. style: { "width": "100%", "height": "110px", "position": "absolute", "top": "-10px", "left": "0", "pointer-events": "none" }
  24215. }, null, 8, ["videoPath", "videoPaused", "playTrigger", "change:videoPath", "change:videoPaused", "change:playTrigger"]),
  24216. vue.createCommentVNode(' 修复点:移除了 v-show="videoLoaded" 防止播放按钮一起消失 '),
  24217. vue.createElementVNode("view", {
  24218. class: "video-control-btn",
  24219. onClick: $setup.toggleVideo
  24220. }, [
  24221. vue.createVNode(_component_u_icon, {
  24222. name: $setup.isPaused ? "play-circle-fill" : "pause-circle-fill",
  24223. color: "rgba(255,255,255,0.8)",
  24224. size: "30"
  24225. }, null, 8, ["name"])
  24226. ])
  24227. ]),
  24228. vue.createElementVNode("view", { class: "roll-ball-section" }, [
  24229. vue.createElementVNode("view", { class: "roll-ball-header" }, [
  24230. vue.createElementVNode(
  24231. "text",
  24232. { class: "roll-ball-title" },
  24233. vue.toDisplayString($setup.t("热门")),
  24234. 1
  24235. /* TEXT */
  24236. ),
  24237. vue.createElementVNode("view", {
  24238. class: "more-roll-btn",
  24239. onClick: _cache[0] || (_cache[0] = ($event) => $setup.toMoreRollBall("SportsBetting"))
  24240. }, [
  24241. vue.createElementVNode(
  24242. "text",
  24243. { style: { "color": "#f8b932", "font-size": "14px" } },
  24244. vue.toDisplayString($setup.t("更多体育博彩")) + " »",
  24245. 1
  24246. /* TEXT */
  24247. )
  24248. ])
  24249. ]),
  24250. vue.createElementVNode("scroll-view", {
  24251. "scroll-x": "",
  24252. class: "roll-ball-scroll",
  24253. "show-scrollbar": false
  24254. }, [
  24255. vue.createElementVNode("view", { class: "roll-ball-flex" }, [
  24256. $setup.skeletonLoading ? (vue.openBlock(), vue.createElementBlock(
  24257. vue.Fragment,
  24258. { key: 0 },
  24259. vue.renderList(3, (i) => {
  24260. return vue.createElementVNode("view", {
  24261. class: "roll-ball-item",
  24262. key: i
  24263. }, [
  24264. vue.createVNode(_component_u_skeleton, {
  24265. loading: true,
  24266. animate: true,
  24267. rows: "3",
  24268. title: "",
  24269. avatar: "",
  24270. "avatar-size": 28
  24271. })
  24272. ]);
  24273. }),
  24274. 64
  24275. /* STABLE_FRAGMENT */
  24276. )) : (vue.openBlock(true), vue.createElementBlock(
  24277. vue.Fragment,
  24278. { key: 1 },
  24279. vue.renderList($setup.gamblingList, (item, i) => {
  24280. var _a2, _b2, _c;
  24281. return vue.openBlock(), vue.createElementBlock("view", {
  24282. class: "roll-ball-item",
  24283. key: item.id,
  24284. onClick: ($event) => $setup.goDetail(item)
  24285. }, [
  24286. vue.createElementVNode("view", { class: "league-info" }, [
  24287. vue.createElementVNode("view", { class: "league-left" }, [
  24288. vue.createVNode(_component_u_image, {
  24289. src: item.league_logo,
  24290. width: "22px",
  24291. height: "22px",
  24292. shape: "circle"
  24293. }, null, 8, ["src"]),
  24294. vue.createElementVNode(
  24295. "text",
  24296. { class: "league-name" },
  24297. vue.toDisplayString($setup.locale === "zh" ? item.league : item.league_en),
  24298. 1
  24299. /* TEXT */
  24300. )
  24301. ]),
  24302. item.state === 1 && item.fixture_status ? (vue.openBlock(), vue.createElementBlock("view", { key: 0 }, [
  24303. vue.createVNode(_component_u_tag, {
  24304. text: $setup.t((_a2 = item.fixture_status) == null ? void 0 : _a2.long),
  24305. mode: "plain",
  24306. type: "primary",
  24307. size: "mini"
  24308. }, null, 8, ["text"]),
  24309. item.is_roll === 1 ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  24310. key: 0,
  24311. text: $setup.t("滚球"),
  24312. mode: "plain",
  24313. type: "primary",
  24314. size: "mini",
  24315. style: { "margin-left": "6px" }
  24316. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true)
  24317. ])) : (vue.openBlock(), vue.createBlock(_component_u_tag, {
  24318. key: 1,
  24319. text: $setup.getStatusText(item.state),
  24320. mode: "plain",
  24321. type: "info",
  24322. size: "mini"
  24323. }, null, 8, ["text"]))
  24324. ]),
  24325. vue.createElementVNode("view", { class: "match-time-status" }, [
  24326. item.fixture_status ? (vue.openBlock(), vue.createElementBlock("text", { key: 0 }, [
  24327. ((_b2 = item.fixture_status) == null ? void 0 : _b2.seconds) ? (vue.openBlock(), vue.createElementBlock(
  24328. "span",
  24329. { key: 0 },
  24330. vue.toDisplayString((_c = item.fixture_status) == null ? void 0 : _c.seconds),
  24331. 1
  24332. /* TEXT */
  24333. )) : vue.createCommentVNode("v-if", true)
  24334. ])) : vue.createCommentVNode("v-if", true),
  24335. vue.createElementVNode(
  24336. "text",
  24337. { class: "match-time" },
  24338. vue.toDisplayString(item.game_time || "--:--"),
  24339. 1
  24340. /* TEXT */
  24341. )
  24342. ]),
  24343. vue.createElementVNode("view", { class: "team-item" }, [
  24344. vue.createVNode(_component_u_image, {
  24345. src: item.home_team_logo,
  24346. width: "28px",
  24347. height: "28px",
  24348. shape: "circle"
  24349. }, null, 8, ["src"]),
  24350. vue.createElementVNode("view", {
  24351. class: "team-name",
  24352. style: { "display": "flex", "align-items": "center" }
  24353. }, [
  24354. vue.createTextVNode(
  24355. vue.toDisplayString($setup.locale === "zh" ? item.home_team : item.home_team_en) + " ",
  24356. 1
  24357. /* TEXT */
  24358. ),
  24359. vue.createVNode(_component_u_tag, {
  24360. size: "mini",
  24361. type: "success",
  24362. style: { "margin-left": "4px" }
  24363. }, {
  24364. default: vue.withCtx(() => [
  24365. vue.createTextVNode(
  24366. vue.toDisplayString($setup.t("主")),
  24367. 1
  24368. /* TEXT */
  24369. )
  24370. ]),
  24371. _: 1
  24372. /* STABLE */
  24373. })
  24374. ]),
  24375. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  24376. "text",
  24377. {
  24378. key: 0,
  24379. class: "team-score"
  24380. },
  24381. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[0] : "0"),
  24382. 1
  24383. /* TEXT */
  24384. )) : vue.createCommentVNode("v-if", true)
  24385. ]),
  24386. vue.createElementVNode("view", { class: "team-item" }, [
  24387. vue.createVNode(_component_u_image, {
  24388. src: item.guest_team_logo,
  24389. width: "28px",
  24390. height: "28px",
  24391. shape: "circle"
  24392. }, null, 8, ["src"]),
  24393. vue.createElementVNode("view", {
  24394. class: "team-name",
  24395. style: { "display": "flex", "align-items": "center" }
  24396. }, [
  24397. vue.createTextVNode(
  24398. vue.toDisplayString($setup.locale === "zh" ? item.guest_team : item.guest_team_en) + " ",
  24399. 1
  24400. /* TEXT */
  24401. ),
  24402. vue.createVNode(_component_u_tag, {
  24403. size: "mini",
  24404. type: "error",
  24405. style: { "margin-left": "4px" }
  24406. }, {
  24407. default: vue.withCtx(() => [
  24408. vue.createTextVNode(
  24409. vue.toDisplayString($setup.t("客")),
  24410. 1
  24411. /* TEXT */
  24412. )
  24413. ]),
  24414. _: 1
  24415. /* STABLE */
  24416. })
  24417. ]),
  24418. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  24419. "text",
  24420. {
  24421. key: 0,
  24422. class: "team-score"
  24423. },
  24424. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[1] : "0"),
  24425. 1
  24426. /* TEXT */
  24427. )) : vue.createCommentVNode("v-if", true)
  24428. ]),
  24429. [0, 1].includes(item.state) ? (vue.openBlock(), vue.createElementBlock("view", {
  24430. key: 0,
  24431. class: "odds-group"
  24432. }, [
  24433. item.odds && item.odds.length > 0 && item.odds[0].values ? (vue.openBlock(), vue.createElementBlock("view", {
  24434. key: 0,
  24435. class: "odds-grid"
  24436. }, [
  24437. (vue.openBlock(true), vue.createElementBlock(
  24438. vue.Fragment,
  24439. null,
  24440. vue.renderList($setup.getVisibleValues(item.odds[0].values), (opt, optIndex) => {
  24441. return vue.openBlock(), vue.createElementBlock("view", {
  24442. class: vue.normalizeClass(["odds-btn", {
  24443. "is-locked": $setup.isOptionLocked(item, opt),
  24444. "is-active": $setup.isSelected(item.id, item.odds[0].id, opt),
  24445. "odds-up": $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt),
  24446. "odds-down": $setup.isOddsDown($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt)
  24447. }]),
  24448. key: optIndex,
  24449. onClick: vue.withModifiers(($event) => $setup.handleOddsClick(item, opt), ["stop"])
  24450. }, [
  24451. $setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createElementBlock("view", {
  24452. key: 0,
  24453. class: "locked-overlay"
  24454. }, [
  24455. vue.createVNode(_component_u_icon, {
  24456. name: "lock",
  24457. color: "#fff",
  24458. size: "32"
  24459. })
  24460. ])) : vue.createCommentVNode("v-if", true),
  24461. vue.createElementVNode("view", { class: "btn-top" }, [
  24462. vue.createElementVNode(
  24463. "text",
  24464. { class: "selection-name" },
  24465. vue.toDisplayString($setup.locale === "zh" ? opt.value_text : $setup.translateSelection(opt.value)),
  24466. 1
  24467. /* TEXT */
  24468. ),
  24469. opt.handicap_text ? (vue.openBlock(), vue.createElementBlock(
  24470. "text",
  24471. {
  24472. key: 0,
  24473. class: "selection-handicap"
  24474. },
  24475. vue.toDisplayString(opt.handicap_text),
  24476. 1
  24477. /* TEXT */
  24478. )) : vue.createCommentVNode("v-if", true)
  24479. ]),
  24480. vue.createElementVNode("view", { class: "btn-bottom" }, [
  24481. vue.createElementVNode(
  24482. "text",
  24483. { class: "odds-val" },
  24484. vue.toDisplayString(opt.odd || "-"),
  24485. 1
  24486. /* TEXT */
  24487. ),
  24488. $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  24489. key: 0,
  24490. name: "arrow-up-fill",
  24491. color: "#4caf50",
  24492. size: "18",
  24493. style: { "margin-left": "4px" }
  24494. })) : $setup.isOddsDown($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  24495. key: 1,
  24496. name: "arrow-down-fill",
  24497. color: "#f56c6c",
  24498. size: "18",
  24499. style: { "margin-left": "4px" }
  24500. })) : vue.createCommentVNode("v-if", true)
  24501. ])
  24502. ], 10, ["onClick"]);
  24503. }),
  24504. 128
  24505. /* KEYED_FRAGMENT */
  24506. )),
  24507. $setup.hasMore(item.odds[0].values) ? (vue.openBlock(), vue.createElementBlock("view", {
  24508. key: 0,
  24509. class: "odds-btn expand-btn",
  24510. onClick: vue.withModifiers(($event) => $setup.goDetail(item), ["stop"])
  24511. }, [
  24512. vue.createElementVNode("text", { class: "plus-icon" }, "+"),
  24513. vue.createElementVNode(
  24514. "text",
  24515. { class: "remain-count" },
  24516. vue.toDisplayString($setup.getRemainCount(item.odds[0].values)),
  24517. 1
  24518. /* TEXT */
  24519. )
  24520. ], 8, ["onClick"])) : vue.createCommentVNode("v-if", true)
  24521. ])) : vue.createCommentVNode("v-if", true)
  24522. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  24523. key: 1,
  24524. class: "match-footer-tip"
  24525. }, [
  24526. vue.createElementVNode(
  24527. "text",
  24528. null,
  24529. vue.toDisplayString($setup.getStatusText(item.state)),
  24530. 1
  24531. /* TEXT */
  24532. )
  24533. ]))
  24534. ], 8, ["onClick"]);
  24535. }),
  24536. 128
  24537. /* KEYED_FRAGMENT */
  24538. ))
  24539. ])
  24540. ])
  24541. ]),
  24542. vue.createElementVNode(
  24543. "text",
  24544. { class: "roll-ball-title" },
  24545. vue.toDisplayString($setup.t("彩票")),
  24546. 1
  24547. /* TEXT */
  24548. ),
  24549. $setup.skeletonLoading ? (vue.openBlock(), vue.createElementBlock("view", {
  24550. key: 0,
  24551. style: { "margin-top": "18rpx", "padding": "12px", "background": "#fff", "border-radius": "8px", "box-shadow": "0 2px 8px rgba(0, 0, 0, 0.06)" }
  24552. }, [
  24553. vue.createVNode(_component_u_skeleton, {
  24554. loading: true,
  24555. animate: true,
  24556. rows: "3",
  24557. title: ""
  24558. })
  24559. ])) : (vue.openBlock(), vue.createBlock($setup["list"], {
  24560. key: 1,
  24561. style: { "margin-top": "18rpx" }
  24562. }))
  24563. ]),
  24564. vue.createElementVNode("view", { style: { "height": "20px" } }),
  24565. vue.createVNode($setup["appFooter"]),
  24566. vue.createElementVNode("view", { class: "safe-hb" }),
  24567. vue.createElementVNode("view", { class: "safe-ht" }),
  24568. vue.createElementVNode("view", { class: "home-hb" })
  24569. ]),
  24570. _: 1
  24571. /* STABLE */
  24572. },
  24573. 512
  24574. /* NEED_PATCH */
  24575. )
  24576. ]),
  24577. _: 1
  24578. /* STABLE */
  24579. })
  24580. ]),
  24581. _: 1
  24582. /* STABLE */
  24583. });
  24584. }
  24585. if (typeof block0$1 === "function")
  24586. block0$1(_sfc_main$13);
  24587. const PagesTabbarHomeIndex = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$12], ["__scopeId", "data-v-1dfc2095"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Home/index.vue"]]);
  24588. const EmptyProps = {
  24589. ...baseProps,
  24590. /** 图标路径 */
  24591. src: { type: String, default: "" },
  24592. /** 提示文字 */
  24593. text: { type: String, default: "" },
  24594. /** 文字颜色 */
  24595. color: { type: String, default: "var(--u-light-color)" },
  24596. /** 图标的颜色 */
  24597. iconColor: { type: String, default: "var(--u-light-color)" },
  24598. /** 图标的大小 */
  24599. iconSize: { type: [String, Number], default: 120 },
  24600. /** 文字大小,单位rpx */
  24601. fontSize: { type: [String, Number], default: 26 },
  24602. /** 选择预置的图标类型 */
  24603. mode: { type: String, default: "data" },
  24604. /** 图标宽度,单位rpx */
  24605. imgWidth: { type: [String, Number], default: 120 },
  24606. /** 图标高度,单位rpx */
  24607. imgHeight: { type: [String, Number], default: "auto" },
  24608. /** 是否显示组件 */
  24609. show: { type: Boolean, default: true },
  24610. /** 组件距离上一个元素之间的距离 */
  24611. marginTop: { type: [String, Number], default: 0 },
  24612. /** 图标自定义样式 */
  24613. iconStyle: { type: Object, default: () => ({}) }
  24614. };
  24615. const __default__$a = {
  24616. name: "u-empty",
  24617. options: {
  24618. addGlobalClass: true,
  24619. virtualHost: true,
  24620. styleIsolation: "shared"
  24621. }
  24622. };
  24623. const _sfc_main$12 = /* @__PURE__ */ vue.defineComponent({
  24624. ...__default__$a,
  24625. props: EmptyProps,
  24626. setup(__props, { expose: __expose }) {
  24627. __expose();
  24628. const { t: t2 } = useLocale();
  24629. const props = __props;
  24630. const icons = vue.computed(() => {
  24631. return {
  24632. car: t2("uEmpty.car"),
  24633. page: t2("uEmpty.page"),
  24634. search: t2("uEmpty.search"),
  24635. address: t2("uEmpty.address"),
  24636. wifi: t2("uEmpty.wifi"),
  24637. order: t2("uEmpty.order"),
  24638. coupon: t2("uEmpty.coupon"),
  24639. favor: t2("uEmpty.favor"),
  24640. permission: t2("uEmpty.permission"),
  24641. history: t2("uEmpty.history"),
  24642. news: t2("uEmpty.news"),
  24643. message: t2("uEmpty.message"),
  24644. list: t2("uEmpty.list"),
  24645. data: t2("uEmpty.data")
  24646. };
  24647. });
  24648. const __returned__ = { t: t2, props, icons, get $u() {
  24649. return $u;
  24650. } };
  24651. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  24652. return __returned__;
  24653. }
  24654. });
  24655. function _sfc_render$11(_ctx, _cache, $props, $setup, $data, $options) {
  24656. const _component_u_icon = __unplugin_components_0$5;
  24657. return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
  24658. "view",
  24659. {
  24660. key: 0,
  24661. class: vue.normalizeClass(["u-empty", _ctx.customClass]),
  24662. style: vue.normalizeStyle($setup.$u.toStyle({ marginTop: _ctx.marginTop + "rpx" }, _ctx.customStyle))
  24663. },
  24664. [
  24665. vue.createVNode(_component_u_icon, {
  24666. name: _ctx.src ? _ctx.src : "empty-" + _ctx.mode,
  24667. "custom-style": _ctx.iconStyle,
  24668. label: _ctx.text ? _ctx.text : $setup.icons[_ctx.mode],
  24669. "label-pos": "bottom",
  24670. "label-color": _ctx.color,
  24671. "label-size": _ctx.fontSize,
  24672. size: _ctx.iconSize,
  24673. color: _ctx.iconColor,
  24674. "margin-top": "14"
  24675. }, null, 8, ["name", "custom-style", "label", "label-color", "label-size", "size", "color"]),
  24676. vue.createElementVNode("view", { class: "u-slot-wrap" }, [
  24677. vue.renderSlot(_ctx.$slots, "bottom", {}, void 0, true)
  24678. ])
  24679. ],
  24680. 6
  24681. /* CLASS, STYLE */
  24682. )) : vue.createCommentVNode("v-if", true);
  24683. }
  24684. const __unplugin_components_4$2 = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["render", _sfc_render$11], ["__scopeId", "data-v-f11ecba3"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-empty/u-empty.vue"]]);
  24685. const TabsProps = {
  24686. ...baseProps,
  24687. /** tabs是否可以左右拖动 */
  24688. isScroll: { type: Boolean, default: true },
  24689. /** 标签数组 */
  24690. list: { type: Array, default: () => [] },
  24691. /** 当前活动tab的索引 */
  24692. current: { type: [Number, String], default: 0 },
  24693. /** 导航栏的高度和行高 */
  24694. height: { type: [String, Number], default: 80 },
  24695. /** 字体大小 */
  24696. fontSize: { type: [String, Number], default: 30 },
  24697. /** 过渡动画时长, 单位s */
  24698. duration: { type: [String, Number], default: 0.5 },
  24699. /** 选中项的主题颜色 */
  24700. activeColor: { type: String, default: () => getColor("primary") },
  24701. /** 未选中项的颜色 */
  24702. inactiveColor: { type: String, default: () => getColor("mainColor") },
  24703. /** 菜单底部移动的bar的宽度,单位rpx */
  24704. barWidth: { type: [String, Number], default: 40 },
  24705. /** 移动bar的高度 */
  24706. barHeight: { type: [String, Number], default: 6 },
  24707. /** 单个tab的左右内边距之和,单位rpx */
  24708. gutter: { type: [String, Number], default: 30 },
  24709. /** 导航栏的背景颜色 */
  24710. bgColor: { type: String, default: "var(--u-bg-white)" },
  24711. /** 读取传入的数组对象的属性(tab名称) */
  24712. name: { type: String, default: "name" },
  24713. /** 读取传入的数组对象的属性(徽标数) */
  24714. count: { type: String, default: "count" },
  24715. /** 徽标数位置偏移 */
  24716. offset: { type: Array, default: () => [5, 20] },
  24717. /** 活动tab字体是否加粗 */
  24718. bold: { type: Boolean, default: true },
  24719. /** 当前活动tab item的样式 */
  24720. activeItemStyle: { type: Object, default: () => ({}) },
  24721. /** 是否显示底部的滑块 */
  24722. showBar: { type: Boolean, default: true },
  24723. /** 底部滑块的自定义样式 */
  24724. barStyle: { type: Object, default: () => ({}) },
  24725. /** 标签的宽度 */
  24726. itemWidth: { type: [String, Number], default: "auto" }
  24727. };
  24728. const __default__$9 = {
  24729. name: "u-tabs",
  24730. options: {
  24731. addGlobalClass: true,
  24732. virtualHost: true,
  24733. styleIsolation: "shared"
  24734. }
  24735. };
  24736. const _sfc_main$11 = /* @__PURE__ */ vue.defineComponent({
  24737. ...__default__$9,
  24738. props: TabsProps,
  24739. emits: ["change"],
  24740. setup(__props, { expose: __expose, emit: __emit }) {
  24741. const props = __props;
  24742. const emit = __emit;
  24743. const instance = vue.getCurrentInstance();
  24744. const scrollLeft = vue.ref(0);
  24745. const tabQueryInfo = vue.ref([]);
  24746. const componentWidth = vue.ref(0);
  24747. const scrollBarLeft = vue.ref(0);
  24748. const parentLeft = vue.ref(0);
  24749. const id = vue.ref($u.guid());
  24750. const currentIndex = vue.ref(props.current);
  24751. const barFirstTimeMove = vue.ref(true);
  24752. vue.watch(
  24753. () => props.list,
  24754. (n, o) => {
  24755. if (n.length !== o.length)
  24756. currentIndex.value = 0;
  24757. vue.nextTick(() => {
  24758. init();
  24759. });
  24760. }
  24761. );
  24762. vue.watch(
  24763. () => props.current,
  24764. (nVal) => {
  24765. vue.nextTick(() => {
  24766. currentIndex.value = nVal;
  24767. scrollByIndex();
  24768. });
  24769. },
  24770. { immediate: true }
  24771. );
  24772. const tabBarStyle = vue.computed(() => {
  24773. const style = {
  24774. width: props.barWidth + "rpx",
  24775. transform: `translate(${scrollBarLeft.value}px, -100%)`,
  24776. // 滑块在页面渲染后第一次滑动时,无需动画效果
  24777. "transition-duration": `${barFirstTimeMove.value ? 0 : props.duration}s`,
  24778. "background-color": props.activeColor,
  24779. height: props.barHeight + "rpx",
  24780. opacity: barFirstTimeMove.value ? 0 : 1,
  24781. // 设置一个很大的值,它会自动取能用的最大值,不用高度的一半,是因为高度可能是单数,会有小数出现
  24782. "border-radius": `${Number(props.barHeight) / 2}px`
  24783. };
  24784. Object.assign(style, props.barStyle);
  24785. return style;
  24786. });
  24787. function tabItemStyle(index) {
  24788. let style = {
  24789. height: props.height + "rpx",
  24790. "line-height": props.height + "rpx",
  24791. "font-size": props.fontSize + "rpx",
  24792. "transition-duration": `${props.duration}s`,
  24793. padding: props.isScroll ? `0 ${props.gutter}rpx` : "",
  24794. flex: props.isScroll ? "auto" : "1",
  24795. width: $u.addUnit(props.itemWidth)
  24796. };
  24797. if (index == Number(currentIndex.value) && props.bold)
  24798. style.fontWeight = "bold";
  24799. if (index == Number(currentIndex.value)) {
  24800. style.color = props.activeColor;
  24801. style = Object.assign(style, props.activeItemStyle);
  24802. } else {
  24803. style.color = props.inactiveColor;
  24804. }
  24805. return style;
  24806. }
  24807. async function init() {
  24808. const tabRect = await $u.getRect("#" + id.value, instance);
  24809. parentLeft.value = tabRect.left;
  24810. componentWidth.value = tabRect.width;
  24811. getTabRect();
  24812. }
  24813. function clickTab(index) {
  24814. if (index == currentIndex.value)
  24815. return;
  24816. emit("change", index);
  24817. }
  24818. function getTabRect() {
  24819. const query = uni.createSelectorQuery().in(instance == null ? void 0 : instance.proxy);
  24820. for (let i = 0; i < props.list.length; i++) {
  24821. query.select(`#u-tab-item-${i}`).fields({ size: true, rect: true }, () => {
  24822. });
  24823. }
  24824. query.exec((res) => {
  24825. tabQueryInfo.value = res;
  24826. scrollByIndex();
  24827. });
  24828. }
  24829. function scrollByIndex() {
  24830. const tabInfo = tabQueryInfo.value[Number(currentIndex.value)];
  24831. if (!tabInfo)
  24832. return;
  24833. const tabWidth = tabInfo.width;
  24834. const offsetLeft = tabInfo.left - parentLeft.value;
  24835. const scrollL = offsetLeft - (componentWidth.value - tabWidth) / 2;
  24836. scrollLeft.value = scrollL < 0 ? 0 : scrollL;
  24837. const left = tabInfo.left + tabInfo.width / 2 - parentLeft.value;
  24838. scrollBarLeft.value = left - uni.upx2px(Number(props.barWidth)) / 2;
  24839. if (barFirstTimeMove.value) {
  24840. setTimeout(() => {
  24841. barFirstTimeMove.value = false;
  24842. }, 100);
  24843. }
  24844. }
  24845. vue.onMounted(() => {
  24846. init();
  24847. });
  24848. __expose({ init, clickTab, scrollByIndex });
  24849. const __returned__ = { props, emit, instance, scrollLeft, tabQueryInfo, componentWidth, scrollBarLeft, parentLeft, id, currentIndex, barFirstTimeMove, tabBarStyle, tabItemStyle, init, clickTab, getTabRect, scrollByIndex, get $u() {
  24850. return $u;
  24851. } };
  24852. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  24853. return __returned__;
  24854. }
  24855. });
  24856. function _sfc_render$10(_ctx, _cache, $props, $setup, $data, $options) {
  24857. const _component_u_badge = __unplugin_components_0$6;
  24858. return vue.openBlock(), vue.createElementBlock(
  24859. "view",
  24860. {
  24861. class: vue.normalizeClass(["u-tabs", _ctx.customClass]),
  24862. style: vue.normalizeStyle($setup.$u.toStyle({ background: _ctx.bgColor }, _ctx.customStyle))
  24863. },
  24864. [
  24865. vue.createCommentVNode(" $u.getRect()对组件根节点无效,因为写了.in(this),故这里获取内层接点尺寸 "),
  24866. vue.createElementVNode("view", null, [
  24867. vue.createElementVNode("scroll-view", {
  24868. "scroll-x": "",
  24869. class: "u-scroll-view",
  24870. "scroll-left": $setup.scrollLeft,
  24871. "show-scrollbar": false,
  24872. "scroll-with-animation": ""
  24873. }, [
  24874. vue.createElementVNode("view", {
  24875. class: vue.normalizeClass(["u-scroll-box", { "u-tabs-scroll-flex": !_ctx.isScroll }]),
  24876. id: $setup.id
  24877. }, [
  24878. (vue.openBlock(true), vue.createElementBlock(
  24879. vue.Fragment,
  24880. null,
  24881. vue.renderList(_ctx.list, (item, index) => {
  24882. return vue.openBlock(), vue.createElementBlock("view", {
  24883. class: vue.normalizeClass(["u-tab-item u-line-1", [item.hidden ? "u-tab-item-hidden" : ""]]),
  24884. id: "u-tab-item-" + index,
  24885. key: index,
  24886. onClick: ($event) => $setup.clickTab(index),
  24887. style: vue.normalizeStyle($setup.tabItemStyle(index))
  24888. }, [
  24889. vue.createVNode(_component_u_badge, {
  24890. count: item[_ctx.count] || item["count"] || 0,
  24891. offset: _ctx.offset,
  24892. size: "mini"
  24893. }, null, 8, ["count", "offset"]),
  24894. vue.createTextVNode(
  24895. " " + vue.toDisplayString(item[_ctx.name] || item["name"]),
  24896. 1
  24897. /* TEXT */
  24898. )
  24899. ], 14, ["id", "onClick"]);
  24900. }),
  24901. 128
  24902. /* KEYED_FRAGMENT */
  24903. )),
  24904. _ctx.showBar ? (vue.openBlock(), vue.createElementBlock(
  24905. "view",
  24906. {
  24907. key: 0,
  24908. class: "u-tab-bar",
  24909. style: vue.normalizeStyle($setup.tabBarStyle)
  24910. },
  24911. null,
  24912. 4
  24913. /* STYLE */
  24914. )) : vue.createCommentVNode("v-if", true)
  24915. ], 10, ["id"])
  24916. ], 8, ["scroll-left"])
  24917. ])
  24918. ],
  24919. 6
  24920. /* CLASS, STYLE */
  24921. );
  24922. }
  24923. const __unplugin_components_0$2 = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["render", _sfc_render$10], ["__scopeId", "data-v-ec79678d"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-tabs/u-tabs.vue"]]);
  24924. const _sfc_main$10 = {
  24925. __name: "index",
  24926. setup(__props, { expose: __expose }) {
  24927. __expose();
  24928. const { t: t2 } = useI18n();
  24929. const orderStore = useOrderStore();
  24930. const pagingRef = vue.ref(null);
  24931. const sportList = vue.ref([]);
  24932. const router2 = useRouter();
  24933. const goDetail = (item) => {
  24934. router2.push({ name: "sportDetail", query: { data_id: item.data_id } });
  24935. };
  24936. const tabList = vue.computed(() => [
  24937. { name: t2("进行中"), value: 1 },
  24938. { name: t2("未开始"), value: 0 },
  24939. { name: t2("已完场"), value: 2 },
  24940. { name: t2("其他"), value: 4 }
  24941. ]);
  24942. const currentTabIndex = vue.ref(0);
  24943. const currentState = vue.ref(1);
  24944. const selectedMap = vue.ref({});
  24945. const syncFromStore = () => {
  24946. const map = {};
  24947. if (orderStore.selectOrders && orderStore.selectOrders.length) {
  24948. orderStore.selectOrders.forEach((order) => {
  24949. if (order.wsi) {
  24950. map[order.wsi] = true;
  24951. }
  24952. });
  24953. }
  24954. selectedMap.value = map;
  24955. };
  24956. vue.watch(() => orderStore.selectOrders, () => {
  24957. syncFromStore();
  24958. }, { deep: true, immediate: true });
  24959. onShow(() => {
  24960. syncFromStore();
  24961. });
  24962. async function onQuery(pageNo, pageSize) {
  24963. try {
  24964. const params = {
  24965. page: pageNo,
  24966. limit: pageSize,
  24967. state: currentState.value,
  24968. // 进行中时传 is_roll=1,其他状态传 0 (或根据你的后端需求调整)
  24969. // is_roll: currentState.value === 1 ? 1 : 0
  24970. is_roll: 1
  24971. };
  24972. formatAppLog("log", "at pages/Tabbar/RollingBall/index.vue:187", "Query Params:", params);
  24973. const res = await getSportSchedule(params);
  24974. if (res.code === 1) {
  24975. pagingRef.value.complete(res.data.list || []);
  24976. } else {
  24977. pagingRef.value.complete(false);
  24978. }
  24979. } catch (error) {
  24980. formatAppLog("error", "at pages/Tabbar/RollingBall/index.vue:197", "加载失败", error);
  24981. pagingRef.value.complete(false);
  24982. }
  24983. }
  24984. const onTabChange = (index) => {
  24985. currentTabIndex.value = index;
  24986. const selectedTab = tabList.value[index];
  24987. if (selectedTab) {
  24988. currentState.value = selectedTab.value;
  24989. pagingRef.value.reload();
  24990. }
  24991. };
  24992. const getStatusText = (state) => {
  24993. const states = { 0: t2("未开始"), 1: t2("进行中"), 2: t2("已完场"), 3: t2("延期"), 4: t2("取消") };
  24994. return states[state] || "";
  24995. };
  24996. const getOddsVal = (item, index) => {
  24997. var _a2, _b2;
  24998. if (!item.odds || item.odds.length === 0)
  24999. return "-";
  25000. const market = item.odds[0];
  25001. return ((_b2 = (_a2 = market == null ? void 0 : market.ws) == null ? void 0 : _a2[index]) == null ? void 0 : _b2.o) || "-";
  25002. };
  25003. const isSelected = (item, index) => {
  25004. var _a2;
  25005. if (!item.odds || item.odds.length === 0)
  25006. return false;
  25007. const market = item.odds[0];
  25008. const selection = (_a2 = market == null ? void 0 : market.ws) == null ? void 0 : _a2[index];
  25009. if (!selection)
  25010. return false;
  25011. return !!selectedMap.value[selection.wsi];
  25012. };
  25013. const handleOddsClick = (item, index) => {
  25014. var _a2;
  25015. if (item.state !== 0 && item.state !== 1)
  25016. return;
  25017. if (item.is_locked)
  25018. return;
  25019. if (!item.odds || item.odds.length === 0)
  25020. return;
  25021. const market = item.odds[0];
  25022. const selection = (_a2 = market == null ? void 0 : market.ws) == null ? void 0 : _a2[index];
  25023. if (!selection || !selection.o || selection.o === "-")
  25024. return;
  25025. const wsi = selection.wsi;
  25026. if (selectedMap.value[wsi]) {
  25027. orderStore.removeOrderItem(wsi);
  25028. } else {
  25029. if (market.ws) {
  25030. market.ws.forEach((wsItem) => {
  25031. if (selectedMap.value[wsItem.wsi]) {
  25032. orderStore.removeOrderItem(wsItem.wsi);
  25033. }
  25034. });
  25035. }
  25036. const typeNameMap = [t2("主队赢"), t2("平局"), t2("客队赢")];
  25037. const betItem = {
  25038. matchId: item.id,
  25039. data_id: item.data_id,
  25040. league: item.league,
  25041. homeTeam: item.home_team,
  25042. guestTeam: item.guest_team,
  25043. betType: market.btn,
  25044. betTypeName: typeNameMap[index] || market.btn,
  25045. odds: selection.o,
  25046. score: item.score,
  25047. state: item.state,
  25048. wsi: selection.wsi,
  25049. si: selection.si || market.si
  25050. };
  25051. orderStore.addOrderItem(betItem);
  25052. }
  25053. };
  25054. const __returned__ = { t: t2, orderStore, pagingRef, sportList, router: router2, goDetail, tabList, currentTabIndex, currentState, selectedMap, syncFromStore, onQuery, onTabChange, getStatusText, getOddsVal, isSelected, handleOddsClick, ref: vue.ref, watch: vue.watch, computed: vue.computed, get useI18n() {
  25055. return useI18n;
  25056. }, get onShow() {
  25057. return onShow;
  25058. }, get getSportSchedule() {
  25059. return getSportSchedule;
  25060. }, get useOrderStore() {
  25061. return useOrderStore;
  25062. } };
  25063. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  25064. return __returned__;
  25065. }
  25066. };
  25067. function _sfc_render$$(_ctx, _cache, $props, $setup, $data, $options) {
  25068. const _component_u_tabs = __unplugin_components_0$2;
  25069. const _component_u_icon = __unplugin_components_0$5;
  25070. const _component_u_tag = __unplugin_components_2$2;
  25071. const _component_u_image = __unplugin_components_1$1;
  25072. const _component_u_empty = __unplugin_components_4$2;
  25073. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  25074. const _component_PageContainer = PageContainer;
  25075. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  25076. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  25077. default: vue.withCtx(() => [
  25078. vue.createVNode(_component_PageContainer, {
  25079. "nav-title": $setup.t("赛事列表")
  25080. }, {
  25081. default: vue.withCtx(() => [
  25082. vue.createElementVNode("view", { class: "page-content" }, [
  25083. vue.createVNode(_component_z_paging, {
  25084. ref: "pagingRef",
  25085. modelValue: $setup.sportList,
  25086. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.sportList = $event),
  25087. onQuery: $setup.onQuery,
  25088. fixed: false,
  25089. "refresher-enabled": true,
  25090. "loading-more-enabled": true,
  25091. "auto-show-back-to-top": true,
  25092. "back-to-top-threshold": 300
  25093. }, {
  25094. top: vue.withCtx(() => [
  25095. vue.createElementVNode("view", { class: "sticky-tabs" }, [
  25096. vue.createVNode(_component_u_tabs, {
  25097. list: $setup.tabList,
  25098. current: $setup.currentTabIndex,
  25099. onChange: $setup.onTabChange,
  25100. "active-color": "#f8b932",
  25101. "inactive-color": "#666",
  25102. "line-color": "#f8b932",
  25103. "is-scroll": false
  25104. }, null, 8, ["list", "current"])
  25105. ])
  25106. ]),
  25107. refresher: vue.withCtx(() => [
  25108. vue.createElementVNode("view", { class: "flex flex-col items-center justify-center py-6" }, [
  25109. vue.createElementVNode("view", { class: "refresh-spinner mb-2" }),
  25110. vue.createElementVNode(
  25111. "text",
  25112. { class: "text-xs tmc" },
  25113. vue.toDisplayString($setup.t("正在更新内容...")),
  25114. 1
  25115. /* TEXT */
  25116. )
  25117. ])
  25118. ]),
  25119. empty: vue.withCtx(() => [
  25120. vue.createElementVNode("view", { class: "empty-box" }, [
  25121. vue.createVNode(_component_u_empty, {
  25122. text: $setup.t("暂无赛事数据"),
  25123. mode: "data",
  25124. "icon-size": "100"
  25125. }, null, 8, ["text"])
  25126. ])
  25127. ]),
  25128. default: vue.withCtx(() => [
  25129. vue.createElementVNode("view", { class: "match-list" }, [
  25130. (vue.openBlock(true), vue.createElementBlock(
  25131. vue.Fragment,
  25132. null,
  25133. vue.renderList($setup.sportList, (item, index) => {
  25134. return vue.openBlock(), vue.createElementBlock("view", {
  25135. class: "match-card",
  25136. key: item.id || index,
  25137. onClick: ($event) => $setup.goDetail(item)
  25138. }, [
  25139. vue.createElementVNode("view", { class: "league-info" }, [
  25140. vue.createElementVNode("view", { class: "league-left" }, [
  25141. vue.createVNode(_component_u_icon, {
  25142. name: "grid-fill",
  25143. color: "#f8b932",
  25144. size: "16"
  25145. }),
  25146. vue.createElementVNode(
  25147. "text",
  25148. { class: "league-name" },
  25149. vue.toDisplayString(item.league),
  25150. 1
  25151. /* TEXT */
  25152. )
  25153. ]),
  25154. item.state === 1 ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  25155. key: 0,
  25156. text: $setup.t("滚球"),
  25157. mode: "plain",
  25158. type: "primary",
  25159. size: "mini"
  25160. }, null, 8, ["text"])) : (vue.openBlock(), vue.createBlock(_component_u_tag, {
  25161. key: 1,
  25162. text: $setup.getStatusText(item.state),
  25163. mode: "plain",
  25164. type: "info",
  25165. size: "mini"
  25166. }, null, 8, ["text"]))
  25167. ]),
  25168. vue.createElementVNode("view", { class: "match-time-status" }, [
  25169. item.state === 1 || item.state === 2 ? (vue.openBlock(), vue.createElementBlock(
  25170. "text",
  25171. {
  25172. key: 0,
  25173. class: "match-score"
  25174. },
  25175. vue.toDisplayString(item.score || "0-0"),
  25176. 1
  25177. /* TEXT */
  25178. )) : (vue.openBlock(), vue.createElementBlock(
  25179. "text",
  25180. {
  25181. key: 1,
  25182. class: "match-time"
  25183. },
  25184. vue.toDisplayString(item.match_time || "--:--"),
  25185. 1
  25186. /* TEXT */
  25187. )),
  25188. item.timer ? (vue.openBlock(), vue.createElementBlock(
  25189. "text",
  25190. {
  25191. key: 2,
  25192. class: "match-status"
  25193. },
  25194. "/ " + vue.toDisplayString(item.timer),
  25195. 1
  25196. /* TEXT */
  25197. )) : vue.createCommentVNode("v-if", true)
  25198. ]),
  25199. vue.createElementVNode("view", { class: "team-item" }, [
  25200. vue.createVNode(_component_u_image, {
  25201. src: item.home_team_logo,
  25202. width: "28px",
  25203. height: "28px",
  25204. shape: "circle",
  25205. errorIcon: "photo"
  25206. }, null, 8, ["src"]),
  25207. vue.createElementVNode(
  25208. "text",
  25209. { class: "team-name" },
  25210. vue.toDisplayString(item.home_team),
  25211. 1
  25212. /* TEXT */
  25213. ),
  25214. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  25215. "text",
  25216. {
  25217. key: 0,
  25218. class: "team-score"
  25219. },
  25220. vue.toDisplayString(item.score ? item.score.split("-")[0] : "0"),
  25221. 1
  25222. /* TEXT */
  25223. )) : vue.createCommentVNode("v-if", true)
  25224. ]),
  25225. vue.createElementVNode("view", { class: "team-item" }, [
  25226. vue.createVNode(_component_u_image, {
  25227. src: item.guest_team_logo,
  25228. width: "28px",
  25229. height: "28px",
  25230. shape: "circle",
  25231. errorIcon: "photo"
  25232. }, null, 8, ["src"]),
  25233. vue.createElementVNode(
  25234. "text",
  25235. { class: "team-name" },
  25236. vue.toDisplayString(item.guest_team),
  25237. 1
  25238. /* TEXT */
  25239. ),
  25240. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  25241. "text",
  25242. {
  25243. key: 0,
  25244. class: "team-score"
  25245. },
  25246. vue.toDisplayString(item.score ? item.score.split("-")[1] : "0"),
  25247. 1
  25248. /* TEXT */
  25249. )) : vue.createCommentVNode("v-if", true)
  25250. ]),
  25251. [0, 1].includes(item.state) ? (vue.openBlock(), vue.createElementBlock("view", {
  25252. key: 0,
  25253. class: "odds-group"
  25254. }, [
  25255. vue.createElementVNode("view", {
  25256. class: vue.normalizeClass(["odds-item", { "is-locked": item.is_locked, "is-active": $setup.isSelected(item, 0) }]),
  25257. onClick: vue.withModifiers(($event) => $setup.handleOddsClick(item, 0), ["stop"])
  25258. }, [
  25259. vue.createElementVNode(
  25260. "text",
  25261. { class: "odds-label" },
  25262. vue.toDisplayString($setup.t("主队赢")),
  25263. 1
  25264. /* TEXT */
  25265. ),
  25266. vue.createElementVNode(
  25267. "text",
  25268. { class: "odds-value" },
  25269. vue.toDisplayString($setup.getOddsVal(item, 0)),
  25270. 1
  25271. /* TEXT */
  25272. )
  25273. ], 10, ["onClick"]),
  25274. vue.createElementVNode("view", {
  25275. class: vue.normalizeClass(["odds-item", { "is-locked": item.is_locked, "is-active": $setup.isSelected(item, 1) }]),
  25276. onClick: vue.withModifiers(($event) => $setup.handleOddsClick(item, 1), ["stop"])
  25277. }, [
  25278. vue.createElementVNode(
  25279. "text",
  25280. { class: "odds-label" },
  25281. vue.toDisplayString($setup.t("平局")),
  25282. 1
  25283. /* TEXT */
  25284. ),
  25285. vue.createElementVNode(
  25286. "text",
  25287. { class: "odds-value" },
  25288. vue.toDisplayString($setup.getOddsVal(item, 1)),
  25289. 1
  25290. /* TEXT */
  25291. )
  25292. ], 10, ["onClick"]),
  25293. vue.createElementVNode("view", {
  25294. class: vue.normalizeClass(["odds-item", { "is-locked": item.is_locked, "is-active": $setup.isSelected(item, 2) }]),
  25295. onClick: vue.withModifiers(($event) => $setup.handleOddsClick(item, 2), ["stop"])
  25296. }, [
  25297. vue.createElementVNode(
  25298. "text",
  25299. { class: "odds-label" },
  25300. vue.toDisplayString($setup.t("客队赢")),
  25301. 1
  25302. /* TEXT */
  25303. ),
  25304. vue.createElementVNode(
  25305. "text",
  25306. { class: "odds-value" },
  25307. vue.toDisplayString($setup.getOddsVal(item, 2)),
  25308. 1
  25309. /* TEXT */
  25310. )
  25311. ], 10, ["onClick"]),
  25312. vue.createElementVNode("view", { class: "odds-item handicap" }, [
  25313. item.odds_count ? (vue.openBlock(), vue.createElementBlock(
  25314. "text",
  25315. {
  25316. key: 0,
  25317. style: { "font-weight": "500" }
  25318. },
  25319. "+ " + vue.toDisplayString(item.odds_count),
  25320. 1
  25321. /* TEXT */
  25322. )) : (vue.openBlock(), vue.createElementBlock("text", { key: 1 }, "--"))
  25323. ])
  25324. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  25325. key: 1,
  25326. class: "match-footer-tip"
  25327. }, [
  25328. vue.createElementVNode(
  25329. "text",
  25330. null,
  25331. vue.toDisplayString($setup.getStatusText(item.state)),
  25332. 1
  25333. /* TEXT */
  25334. )
  25335. ]))
  25336. ], 8, ["onClick"]);
  25337. }),
  25338. 128
  25339. /* KEYED_FRAGMENT */
  25340. ))
  25341. ])
  25342. ]),
  25343. _: 1
  25344. /* STABLE */
  25345. }, 8, ["modelValue"])
  25346. ])
  25347. ]),
  25348. _: 1
  25349. /* STABLE */
  25350. }, 8, ["nav-title"])
  25351. ]),
  25352. _: 1
  25353. /* STABLE */
  25354. });
  25355. }
  25356. const PagesTabbarRollingBallIndex = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$$], ["__scopeId", "data-v-d9b17a81"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/RollingBall/index.vue"]]);
  25357. const { t: t$1 } = useLocale();
  25358. const SearchProps = {
  25359. ...baseProps,
  25360. /** 搜索框形状,round-圆形,square-方形 */
  25361. shape: { type: String, default: "round" },
  25362. /** 搜索框背景色,默认值var(--u-bg-gray-light) */
  25363. bgColor: { type: String, default: "var(--u-bg-gray-light)" },
  25364. /** 占位提示文字 */
  25365. placeholder: { type: String, default: () => t$1("uSearch.placeholder") },
  25366. /** 是否启用清除控件 */
  25367. clearabled: { type: Boolean, default: true },
  25368. /** 是否自动聚焦 */
  25369. focus: { type: Boolean, default: false },
  25370. /** 是否在搜索框右侧显示取消按钮 */
  25371. showAction: { type: Boolean, default: true },
  25372. /** 右边控件的样式 */
  25373. actionStyle: { type: Object, default: () => ({}) },
  25374. /** 取消按钮文字 */
  25375. actionText: { type: String, default: () => t$1("uSearch.actionText") },
  25376. /** 输入框内容对齐方式,可选值为 left|center|right */
  25377. inputAlign: { type: String, default: "left" },
  25378. /** 是否启用输入框 */
  25379. disabled: { type: Boolean, default: false },
  25380. /** 开启showAction时,是否在input获取焦点时才显示 */
  25381. animation: { type: Boolean, default: false },
  25382. /** 边框颜色,只要配置了颜色,才会有边框 */
  25383. borderColor: { type: String, default: "none" },
  25384. /** 输入框的初始化内容 */
  25385. modelValue: { type: String, default: "" },
  25386. /** 搜索框高度,单位rpx */
  25387. height: { type: [Number, String], default: 64 },
  25388. /** input输入框的样式,可以定义文字颜色,大小等,对象形式 */
  25389. inputStyle: { type: Object, default: () => ({}) },
  25390. /** 输入框最大能输入的长度,-1为不限制长度(来自uniapp文档) */
  25391. maxlength: { type: [Number, String], default: "-1" },
  25392. /** 搜索图标的颜色,默认同输入框字体颜色 */
  25393. searchIconColor: { type: String, default: "" },
  25394. /** 输入框字体颜色 */
  25395. color: { type: String, default: "var(--u-content-color)" },
  25396. /** placeholder的颜色 */
  25397. placeholderColor: { type: String, default: "var(--u-tips-color)" },
  25398. /** 组件与其他上下左右元素之间的距离,带单位的字符串形式,如"30rpx"、"30rpx 20rpx"等写法 */
  25399. margin: { type: String, default: "0" },
  25400. /** 左边输入框的图标,可以为uView图标名称或图片路径 */
  25401. searchIcon: { type: String, default: "search" },
  25402. /** 弹出键盘时是否自动调节高度,uni-app默认值是true */
  25403. adjustPosition: { type: Boolean, default: true }
  25404. };
  25405. const __default__$8 = {
  25406. name: "u-search",
  25407. options: {
  25408. addGlobalClass: true,
  25409. virtualHost: true,
  25410. styleIsolation: "shared"
  25411. }
  25412. };
  25413. const _sfc_main$$ = /* @__PURE__ */ vue.defineComponent({
  25414. ...__default__$8,
  25415. props: SearchProps,
  25416. emits: [
  25417. "update:modelValue",
  25418. "input",
  25419. "change",
  25420. "search",
  25421. "custom",
  25422. "clear",
  25423. "focus",
  25424. "blur",
  25425. "click"
  25426. ],
  25427. setup(__props, { expose: __expose, emit: __emit }) {
  25428. __expose();
  25429. const props = __props;
  25430. const emit = __emit;
  25431. const keyword = vue.ref(props.modelValue);
  25432. const showClear = vue.ref(false);
  25433. const show = vue.ref(false);
  25434. const focused = vue.ref(props.focus);
  25435. vue.watch(
  25436. () => props.modelValue,
  25437. (nVal) => {
  25438. keyword.value = nVal;
  25439. }
  25440. );
  25441. vue.watch(keyword, (nVal) => {
  25442. emit("update:modelValue", nVal);
  25443. emit("input", nVal);
  25444. emit("change", nVal);
  25445. });
  25446. const showActionBtn = vue.computed(() => {
  25447. if (!props.animation && props.showAction)
  25448. return true;
  25449. else
  25450. return false;
  25451. });
  25452. const borderStyle = vue.computed(() => {
  25453. if (props.borderColor)
  25454. return `1px solid ${props.borderColor}`;
  25455. else
  25456. return "none";
  25457. });
  25458. function inputChange(e) {
  25459. keyword.value = e.detail.value;
  25460. }
  25461. function clear() {
  25462. keyword.value = "";
  25463. vue.nextTick(() => {
  25464. emit("clear");
  25465. });
  25466. }
  25467. function search(e) {
  25468. emit("search", e.detail.value);
  25469. }
  25470. function custom() {
  25471. emit("custom", keyword.value);
  25472. }
  25473. function getFocus() {
  25474. focused.value = true;
  25475. if (props.animation && props.showAction)
  25476. show.value = true;
  25477. emit("focus", keyword.value);
  25478. }
  25479. function blur() {
  25480. setTimeout(() => {
  25481. focused.value = false;
  25482. }, 100);
  25483. show.value = false;
  25484. emit("blur", keyword.value);
  25485. }
  25486. function clickHandler() {
  25487. if (props.disabled)
  25488. emit("click");
  25489. }
  25490. const __returned__ = { props, emit, keyword, showClear, show, focused, showActionBtn, borderStyle, inputChange, clear, search, custom, getFocus, blur, clickHandler, get $u() {
  25491. return $u;
  25492. } };
  25493. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  25494. return __returned__;
  25495. }
  25496. });
  25497. function _sfc_render$_(_ctx, _cache, $props, $setup, $data, $options) {
  25498. const _component_u_icon = __unplugin_components_0$5;
  25499. return vue.openBlock(), vue.createElementBlock(
  25500. "view",
  25501. {
  25502. class: vue.normalizeClass(["u-search", _ctx.customClass]),
  25503. onClick: $setup.clickHandler,
  25504. style: vue.normalizeStyle($setup.$u.toStyle({ margin: _ctx.margin }, _ctx.customStyle))
  25505. },
  25506. [
  25507. vue.createElementVNode(
  25508. "view",
  25509. {
  25510. class: "u-content",
  25511. style: vue.normalizeStyle({
  25512. backgroundColor: _ctx.bgColor,
  25513. borderRadius: _ctx.shape == "round" ? "100rpx" : "10rpx",
  25514. border: $setup.borderStyle,
  25515. height: _ctx.height + "rpx"
  25516. })
  25517. },
  25518. [
  25519. vue.createElementVNode("view", { class: "u-icon-wrap" }, [
  25520. vue.createVNode(_component_u_icon, {
  25521. class: "u-clear-icon",
  25522. size: 30,
  25523. name: _ctx.searchIcon,
  25524. color: _ctx.searchIconColor ? _ctx.searchIconColor : _ctx.color
  25525. }, null, 8, ["name", "color"])
  25526. ]),
  25527. vue.createElementVNode("input", {
  25528. "confirm-type": "search",
  25529. onBlur: $setup.blur,
  25530. value: _ctx.modelValue,
  25531. onConfirm: $setup.search,
  25532. onInput: $setup.inputChange,
  25533. onFocus: $setup.getFocus,
  25534. focus: _ctx.focus,
  25535. maxlength: Number(_ctx.maxlength),
  25536. "placeholder-class": "u-placeholder-class",
  25537. placeholder: _ctx.placeholder,
  25538. "placeholder-style": `color: ${_ctx.placeholderColor}`,
  25539. "adjust-position": _ctx.adjustPosition,
  25540. class: "u-input",
  25541. type: "text",
  25542. style: vue.normalizeStyle([
  25543. {
  25544. textAlign: _ctx.inputAlign,
  25545. color: _ctx.color,
  25546. backgroundColor: _ctx.bgColor,
  25547. pointerEvents: _ctx.disabled ? "none" : "auto"
  25548. },
  25549. _ctx.inputStyle
  25550. ])
  25551. }, null, 44, ["value", "focus", "maxlength", "placeholder", "placeholder-style", "adjust-position"]),
  25552. $setup.keyword && _ctx.clearabled && $setup.focused ? (vue.openBlock(), vue.createElementBlock("view", {
  25553. key: 0,
  25554. class: "u-close-wrap",
  25555. onClick: $setup.clear
  25556. }, [
  25557. vue.createVNode(_component_u_icon, {
  25558. class: "u-clear-icon",
  25559. name: "close-circle-fill",
  25560. size: "34",
  25561. color: "var(--u-light-color)"
  25562. })
  25563. ])) : vue.createCommentVNode("v-if", true)
  25564. ],
  25565. 4
  25566. /* STYLE */
  25567. ),
  25568. vue.createElementVNode(
  25569. "view",
  25570. {
  25571. style: vue.normalizeStyle([_ctx.actionStyle]),
  25572. class: vue.normalizeClass(["u-action", [$setup.showActionBtn || $setup.show ? "u-action-active" : ""]]),
  25573. onClick: vue.withModifiers($setup.custom, ["stop", "prevent"])
  25574. },
  25575. vue.toDisplayString(_ctx.actionText),
  25576. 7
  25577. /* TEXT, CLASS, STYLE */
  25578. )
  25579. ],
  25580. 6
  25581. /* CLASS, STYLE */
  25582. );
  25583. }
  25584. const __unplugin_components_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$_], ["__scopeId", "data-v-6375befa"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-search/u-search.vue"]]);
  25585. const { t } = useLocale();
  25586. const CalendarProps = {
  25587. ...baseProps,
  25588. /** 是否开启底部安全区适配 */
  25589. safeAreaInsetBottom: { type: Boolean, default: false },
  25590. /** 是否允许通过点击遮罩关闭Picker */
  25591. maskCloseAble: { type: Boolean, default: true },
  25592. /** 通过双向绑定控制组件的弹出与收起 */
  25593. modelValue: { type: Boolean, default: false },
  25594. /** 弹出的z-index值 */
  25595. zIndex: { type: [String, Number], default: 0 },
  25596. /** 是否允许切换年份 */
  25597. changeYear: { type: Boolean, default: true },
  25598. /** 是否允许切换月份 */
  25599. changeMonth: { type: Boolean, default: true },
  25600. /** date-单个日期选择,range-开始日期+结束日期选择 */
  25601. mode: { type: String, default: "date" },
  25602. /** 可切换的最大年份 */
  25603. maxYear: { type: [Number, String], default: 2050 },
  25604. /** 可切换的最小年份 */
  25605. minYear: { type: [Number, String], default: 1950 },
  25606. /** 最小可选日期(不在范围内日期禁用不可选) */
  25607. minDate: { type: [Number, String], default: "1950-01-01" },
  25608. /** 最大可选日期,默认最大值为今天,之后的日期不可选 */
  25609. maxDate: { type: [Number, String], default: "" },
  25610. /** 弹窗顶部左右两边的圆角值 */
  25611. borderRadius: { type: [String, Number], default: 20 },
  25612. /** 月份切换按钮箭头颜色 */
  25613. monthArrowColor: { type: String, default: "var(--u-content-color)" },
  25614. /** 年份切换按钮箭头颜色 */
  25615. yearArrowColor: { type: String, default: "var(--u-tips-color)" },
  25616. /** 默认日期字体颜色 */
  25617. color: { type: String, default: "var(--u-main-color)" },
  25618. /** 选中|起始结束日期背景色 */
  25619. activeBgColor: { type: String, default: () => getColor("primary") },
  25620. /** 选中|起始结束日期字体颜色 */
  25621. activeColor: { type: String, default: "var(--u-white-color)" },
  25622. /** 范围内日期背景色 */
  25623. rangeBgColor: { type: String, default: "rgba(41,121,255,0.13)" },
  25624. /** 范围内日期字体颜色 */
  25625. rangeColor: { type: String, default: () => getColor("primary") },
  25626. /** mode=range时生效,起始日期自定义文案 */
  25627. startText: { type: String, default: () => t("uCalendar.startText") },
  25628. /** mode=range时生效,结束日期自定义文案 */
  25629. endText: { type: String, default: () => t("uCalendar.endText") },
  25630. /** 按钮样式类型 */
  25631. btnType: { type: String, default: "primary" },
  25632. /** 当前选中日期带选中效果 */
  25633. isActiveCurrent: { type: Boolean, default: true },
  25634. /** 切换年月是否触发事件 mode=date时生效 */
  25635. isChange: { type: Boolean, default: false },
  25636. /** 是否显示右上角的关闭图标 */
  25637. closeable: { type: Boolean, default: true },
  25638. /** 顶部的提示文字 */
  25639. toolTip: { type: String, default: () => t("uCalendar.toolTip") },
  25640. /** 是否显示农历 */
  25641. showLunar: { type: Boolean, default: false },
  25642. /** 是否在页面中显示 */
  25643. isPage: { type: Boolean, default: false }
  25644. };
  25645. const Calendar = { lunarInfo: [19416, 19168, 42352, 21717, 53856, 55632, 91476, 22176, 39632, 21970, 19168, 42422, 42192, 53840, 119381, 46400, 54944, 44450, 38320, 84343, 18800, 42160, 46261, 27216, 27968, 109396, 11104, 38256, 21234, 18800, 25958, 54432, 59984, 28309, 23248, 11104, 100067, 37600, 116951, 51536, 54432, 120998, 46416, 22176, 107956, 9680, 37584, 53938, 43344, 46423, 27808, 46416, 86869, 19872, 42416, 83315, 21168, 43432, 59728, 27296, 44710, 43856, 19296, 43748, 42352, 21088, 62051, 55632, 23383, 22176, 38608, 19925, 19152, 42192, 54484, 53840, 54616, 46400, 46752, 103846, 38320, 18864, 43380, 42160, 45690, 27216, 27968, 44870, 43872, 38256, 19189, 18800, 25776, 29859, 59984, 27480, 23232, 43872, 38613, 37600, 51552, 55636, 54432, 55888, 30034, 22176, 43959, 9680, 37584, 51893, 43344, 46240, 47780, 44368, 21977, 19360, 42416, 86390, 21168, 43312, 31060, 27296, 44368, 23378, 19296, 42726, 42208, 53856, 60005, 54576, 23200, 30371, 38608, 19195, 19152, 42192, 118966, 53840, 54560, 56645, 46496, 22224, 21938, 18864, 42359, 42160, 43600, 111189, 27936, 44448, 84835, 37744, 18936, 18800, 25776, 92326, 59984, 27424, 108228, 43744, 41696, 53987, 51552, 54615, 54432, 55888, 23893, 22176, 42704, 21972, 21200, 43448, 43344, 46240, 46758, 44368, 21920, 43940, 42416, 21168, 45683, 26928, 29495, 27296, 44368, 84821, 19296, 42352, 21732, 53600, 59752, 54560, 55968, 92838, 22224, 19168, 43476, 41680, 53584, 62034, 54560], solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Gan: ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"], Zhi: ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"], Animals: ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"], solarTerm: ["小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至"], sTermInfo: ["9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c3598082c95f8c965cc920f", "97bd0b06bdb0722c965ce1cfcc920f", "b027097bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c359801ec95f8c965cc920f", "97bd0b06bdb0722c965ce1cfcc920f", "b027097bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c359801ec95f8c965cc920f", "97bd0b06bdb0722c965ce1cfcc920f", "b027097bd097c36b0b6fc9274c91aa", "9778397bd19801ec9210c965cc920e", "97b6b97bd19801ec95f8c965cc920f", "97bd09801d98082c95f8e1cfcc920f", "97bd097bd097c36b0b6fc9210c8dc2", "9778397bd197c36c9210c9274c91aa", "97b6b97bd19801ec95f8c965cc920e", "97bd09801d98082c95f8e1cfcc920f", "97bd097bd097c36b0b6fc9210c8dc2", "9778397bd097c36c9210c9274c91aa", "97b6b97bd19801ec95f8c965cc920e", "97bcf97c3598082c95f8e1cfcc920f", "97bd097bd097c36b0b6fc9210c8dc2", "9778397bd097c36c9210c9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c3598082c95f8c965cc920f", "97bd097bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c3598082c95f8c965cc920f", "97bd097bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c359801ec95f8c965cc920f", "97bd097bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c359801ec95f8c965cc920f", "97bd097bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf97c359801ec95f8c965cc920f", "97bd097bd07f595b0b6fc920fb0722", "9778397bd097c36b0b6fc9210c8dc2", "9778397bd19801ec9210c9274c920e", "97b6b97bd19801ec95f8c965cc920f", "97bd07f5307f595b0b0bc920fb0722", "7f0e397bd097c36b0b6fc9210c8dc2", "9778397bd097c36c9210c9274c920e", "97b6b97bd19801ec95f8c965cc920f", "97bd07f5307f595b0b0bc920fb0722", "7f0e397bd097c36b0b6fc9210c8dc2", "9778397bd097c36c9210c9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bd07f1487f595b0b0bc920fb0722", "7f0e397bd097c36b0b6fc9210c8dc2", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf7f1487f595b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf7f1487f595b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf7f1487f531b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c965cc920e", "97bcf7f1487f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b97bd19801ec9210c9274c920e", "97bcf7f0e47f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "9778397bd097c36b0b6fc9210c91aa", "97b6b97bd197c36c9210c9274c920e", "97bcf7f0e47f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "9778397bd097c36b0b6fc9210c8dc2", "9778397bd097c36c9210c9274c920e", "97b6b7f0e47f531b0723b0b6fb0722", "7f0e37f5307f595b0b0bc920fb0722", "7f0e397bd097c36b0b6fc9210c8dc2", "9778397bd097c36b0b70c9274c91aa", "97b6b7f0e47f531b0723b0b6fb0721", "7f0e37f1487f595b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc9210c8dc2", "9778397bd097c36b0b6fc9274c91aa", "97b6b7f0e47f531b0723b0b6fb0721", "7f0e27f1487f595b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "9778397bd097c36b0b6fc9274c91aa", "97b6b7f0e47f531b0723b0787b0721", "7f0e27f0e47f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "9778397bd097c36b0b6fc9210c91aa", "97b6b7f0e47f149b0723b0787b0721", "7f0e27f0e47f531b0723b0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "9778397bd097c36b0b6fc9210c8dc2", "977837f0e37f149b0723b0787b0721", "7f07e7f0e47f531b0723b0b6fb0722", "7f0e37f5307f595b0b0bc920fb0722", "7f0e397bd097c35b0b6fc9210c8dc2", "977837f0e37f14998082b0787b0721", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e37f1487f595b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc9210c8dc2", "977837f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "977837f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e397bd097c35b0b6fc920fb0722", "977837f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "977837f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "977837f0e37f14998082b0787b06bd", "7f07e7f0e47f149b0723b0787b0721", "7f0e27f0e47f531b0b0bb0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "977837f0e37f14998082b0723b06bd", "7f07e7f0e37f149b0723b0787b0721", "7f0e27f0e47f531b0723b0b6fb0722", "7f0e397bd07f595b0b0bc920fb0722", "977837f0e37f14898082b0723b02d5", "7ec967f0e37f14998082b0787b0721", "7f07e7f0e47f531b0723b0b6fb0722", "7f0e37f1487f595b0b0bb0b6fb0722", "7f0e37f0e37f14898082b0723b02d5", "7ec967f0e37f14998082b0787b0721", "7f07e7f0e47f531b0723b0b6fb0722", "7f0e37f1487f531b0b0bb0b6fb0722", "7f0e37f0e37f14898082b0723b02d5", "7ec967f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e37f1487f531b0b0bb0b6fb0722", "7f0e37f0e37f14898082b072297c35", "7ec967f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e37f0e37f14898082b072297c35", "7ec967f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e37f0e366aa89801eb072297c35", "7ec967f0e37f14998082b0787b06bd", "7f07e7f0e47f149b0723b0787b0721", "7f0e27f1487f531b0b0bb0b6fb0722", "7f0e37f0e366aa89801eb072297c35", "7ec967f0e37f14998082b0723b06bd", "7f07e7f0e47f149b0723b0787b0721", "7f0e27f0e47f531b0723b0b6fb0722", "7f0e37f0e366aa89801eb072297c35", "7ec967f0e37f14998082b0723b06bd", "7f07e7f0e37f14998083b0787b0721", "7f0e27f0e47f531b0723b0b6fb0722", "7f0e37f0e366aa89801eb072297c35", "7ec967f0e37f14898082b0723b02d5", "7f07e7f0e37f14998082b0787b0721", "7f07e7f0e47f531b0723b0b6fb0722", "7f0e36665b66aa89801e9808297c35", "665f67f0e37f14898082b0723b02d5", "7ec967f0e37f14998082b0787b0721", "7f07e7f0e47f531b0723b0b6fb0722", "7f0e36665b66a449801e9808297c35", "665f67f0e37f14898082b0723b02d5", "7ec967f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e36665b66a449801e9808297c35", "665f67f0e37f14898082b072297c35", "7ec967f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e26665b66a449801e9808297c35", "665f67f0e37f1489801eb072297c35", "7ec967f0e37f14998082b0787b06bd", "7f07e7f0e47f531b0723b0b6fb0721", "7f0e27f1487f531b0b0bb0b6fb0722"], nStr1: ["日", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"], nStr2: ["初", "十", "廿", "卅"], nStr3: ["正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"], lYearDays: function(b) {
  25646. for (var f = 348, c2 = 32768; 8 < c2; c2 >>= 1)
  25647. f += this.lunarInfo[b - 1900] & c2 ? 1 : 0;
  25648. return f + this.leapDays(b);
  25649. }, leapMonth: function(b) {
  25650. return 15 & this.lunarInfo[b - 1900];
  25651. }, leapDays: function(b) {
  25652. return this.leapMonth(b) ? 65536 & this.lunarInfo[b - 1900] ? 30 : 29 : 0;
  25653. }, monthDays: function(b, f) {
  25654. return 12 < f || f < 1 ? -1 : this.lunarInfo[b - 1900] & 65536 >> f ? 30 : 29;
  25655. }, solarDays: function(b, f) {
  25656. if (12 < f || f < 1)
  25657. return -1;
  25658. --f;
  25659. return 1 == f ? b % 4 == 0 && b % 100 != 0 || b % 400 == 0 ? 29 : 28 : this.solarMonth[f];
  25660. }, toGanZhiYear: function(b) {
  25661. var f = (b - 3) % 10, b = (b - 3) % 12;
  25662. return 0 == f && (f = 10), 0 == b && (b = 12), this.Gan[f - 1] + this.Zhi[b - 1];
  25663. }, toAstro: function(b, f) {
  25664. return "魔羯水瓶双鱼白羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯".substr(2 * b - (f < [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22][b - 1] ? 2 : 0), 2) + "座";
  25665. }, toGanZhi: function(b) {
  25666. return this.Gan[b % 10] + this.Zhi[b % 12];
  25667. }, getTerm: function(b, f) {
  25668. if (b < 1900 || 2100 < b)
  25669. return -1;
  25670. if (f < 1 || 24 < f)
  25671. return -1;
  25672. b = this.sTermInfo[b - 1900], b = [parseInt("0x" + b.substr(0, 5)).toString(), parseInt("0x" + b.substr(5, 5)).toString(), parseInt("0x" + b.substr(10, 5)).toString(), parseInt("0x" + b.substr(15, 5)).toString(), parseInt("0x" + b.substr(20, 5)).toString(), parseInt("0x" + b.substr(25, 5)).toString()], b = [b[0].substr(0, 1), b[0].substr(1, 2), b[0].substr(3, 1), b[0].substr(4, 2), b[1].substr(0, 1), b[1].substr(1, 2), b[1].substr(3, 1), b[1].substr(4, 2), b[2].substr(0, 1), b[2].substr(1, 2), b[2].substr(3, 1), b[2].substr(4, 2), b[3].substr(0, 1), b[3].substr(1, 2), b[3].substr(3, 1), b[3].substr(4, 2), b[4].substr(0, 1), b[4].substr(1, 2), b[4].substr(3, 1), b[4].substr(4, 2), b[5].substr(0, 1), b[5].substr(1, 2), b[5].substr(3, 1), b[5].substr(4, 2)];
  25673. return parseInt(b[f - 1]);
  25674. }, toChinaMonth: function(b) {
  25675. if (12 < b || b < 1)
  25676. return -1;
  25677. b = this.nStr3[b - 1];
  25678. return b += "月";
  25679. }, toChinaDay: function(b) {
  25680. var f;
  25681. switch (b) {
  25682. case 10:
  25683. f = "初十";
  25684. break;
  25685. case 20:
  25686. f = "二十";
  25687. break;
  25688. case 30:
  25689. f = "三十";
  25690. break;
  25691. default:
  25692. f = this.nStr2[Math.floor(b / 10)], f += this.nStr1[b % 10];
  25693. }
  25694. return f;
  25695. }, getAnimal: function(b) {
  25696. return this.Animals[(b - 4) % 12];
  25697. }, solar2lunar: function(b, f, c2) {
  25698. if (b < 1900 || 2100 < b)
  25699. return -1;
  25700. if (1900 == b && 1 == f && c2 < 31)
  25701. return -1;
  25702. for (var e = 0, b = (M = b ? new Date(b, parseInt(f) - 1, c2) : /* @__PURE__ */ new Date()).getFullYear(), f = M.getMonth() + 1, c2 = M.getDate(), t2 = (Date.UTC(M.getFullYear(), M.getMonth(), M.getDate()) - Date.UTC(1900, 0, 31)) / 864e5, a = 1900; a < 2101 && 0 < t2; a++)
  25703. t2 -= e = this.lYearDays(a);
  25704. t2 < 0 && (t2 += e, a--);
  25705. var r = /* @__PURE__ */ new Date(), s = false;
  25706. r.getFullYear() == b && r.getMonth() + 1 == f && r.getDate() == c2 && (s = true);
  25707. var d = M.getDay(), n = this.nStr1[d];
  25708. 0 == d && (d = 7);
  25709. var i = a, u2 = this.leapMonth(a), o = false;
  25710. for (a = 1; a < 13 && 0 < t2; a++)
  25711. e = 0 < u2 && a == u2 + 1 && 0 == o ? (--a, o = true, this.leapDays(i)) : this.monthDays(i, a), 1 == o && a == u2 + 1 && (o = false), t2 -= e;
  25712. 0 == t2 && 0 < u2 && a == u2 + 1 && (o ? o = false : (o = true, --a)), t2 < 0 && (t2 += e, --a);
  25713. var h = a, l = t2 + 1, D = f - 1, g = this.toGanZhiYear(i), y = this.getTerm(b, 2 * f - 1), p = this.getTerm(b, 2 * f), m = this.toGanZhi(12 * (b - 1900) + f + 11);
  25714. y <= c2 && (m = this.toGanZhi(12 * (b - 1900) + f + 12));
  25715. var r = false, M = null;
  25716. y == c2 && (r = true, M = this.solarTerm[2 * f - 2]), p == c2 && (r = true, M = this.solarTerm[2 * f - 1]);
  25717. p = Date.UTC(b, D, 1, 0, 0, 0, 0) / 864e5 + 25567 + 10, D = this.toGanZhi(p + c2 - 1), p = this.toAstro(f, c2);
  25718. return { lYear: i, lMonth: h, lDay: l, Animal: this.getAnimal(i), IMonthCn: (o ? "闰" : "") + this.toChinaMonth(h), IDayCn: this.toChinaDay(l), cYear: b, cMonth: f, cDay: c2, gzYear: g, gzMonth: m, gzDay: D, isToday: s, isLeap: o, nWeek: d, ncWeek: "星期" + n, isTerm: r, Term: M, astro: p };
  25719. }, lunar2solar: function(b, f, c2, e) {
  25720. var e = !!e, t2 = this.leapMonth(b);
  25721. this.leapDays(b);
  25722. if (e && t2 != f)
  25723. return -1;
  25724. if (2100 == b && 12 == f && 1 < c2 || 1900 == b && 1 == f && c2 < 31)
  25725. return -1;
  25726. var a = this.monthDays(b, f), t2 = a;
  25727. if (e && (t2 = this.leapDays(b, f)), b < 1900 || 2100 < b || t2 < c2)
  25728. return -1;
  25729. for (var r = 0, s = 1900; s < b; s++)
  25730. r += this.lYearDays(s);
  25731. for (var d, n = false, s = 1; s < f; s++)
  25732. d = this.leapMonth(b), n || d <= s && 0 < d && (r += this.leapDays(b), n = true), r += this.monthDays(b, s);
  25733. e && (r += a);
  25734. e = Date.UTC(1900, 1, 30, 0, 0, 0), a = new Date(864e5 * (r + c2 - 31) + e), c2 = a.getUTCFullYear(), e = a.getUTCMonth() + 1, a = a.getUTCDate();
  25735. return this.solar2lunar(c2, e, a);
  25736. } };
  25737. const __default__$7 = {
  25738. name: "u-calendar",
  25739. options: {
  25740. addGlobalClass: true,
  25741. virtualHost: true,
  25742. styleIsolation: "shared"
  25743. }
  25744. };
  25745. const _sfc_main$_ = /* @__PURE__ */ vue.defineComponent({
  25746. ...__default__$7,
  25747. props: CalendarProps,
  25748. emits: ["update:modelValue", "input", "change"],
  25749. setup(__props, { expose: __expose, emit: __emit }) {
  25750. __expose();
  25751. const props = __props;
  25752. const emit = __emit;
  25753. const slots = vue.useSlots();
  25754. const { t: t2 } = useLocale();
  25755. const weekday = vue.ref(1);
  25756. const weekdayArr = vue.ref([]);
  25757. const days = vue.ref(0);
  25758. const daysArr = vue.ref([]);
  25759. const lunarArr = vue.ref([]);
  25760. const showTitle = vue.ref("");
  25761. const year = vue.ref(2020);
  25762. const month = vue.ref(0);
  25763. const day = vue.ref(0);
  25764. const startYear = vue.ref(0);
  25765. const startMonth = vue.ref(0);
  25766. const startDay = vue.ref(0);
  25767. const endYear = vue.ref(0);
  25768. const endMonth = vue.ref(0);
  25769. const endDay = vue.ref(0);
  25770. const today = vue.ref("");
  25771. const activeDate = vue.ref("");
  25772. const startDate = vue.ref("");
  25773. const endDate = vue.ref("");
  25774. const isStart = vue.ref(true);
  25775. const min = vue.ref(null);
  25776. const max = vue.ref(null);
  25777. const weekDayZh = vue.ref([
  25778. t2("uCalendar.sun"),
  25779. t2("uCalendar.mon"),
  25780. t2("uCalendar.tue"),
  25781. t2("uCalendar.wed"),
  25782. t2("uCalendar.thu"),
  25783. t2("uCalendar.fri"),
  25784. t2("uCalendar.sat")
  25785. ]);
  25786. const dataChange = vue.computed(() => `${props.mode}-${props.minDate}-${props.maxDate}`);
  25787. const lunarChange = vue.computed(() => props.showLunar);
  25788. const uZIndex = vue.computed(() => props.zIndex ? props.zIndex : $u.zIndex.popup);
  25789. const popupValue = vue.computed({
  25790. get: () => props.modelValue,
  25791. set: (val) => emit("update:modelValue", val)
  25792. });
  25793. vue.watch([dataChange, lunarChange], () => {
  25794. init();
  25795. });
  25796. vue.onMounted(() => {
  25797. init();
  25798. });
  25799. function getColor2(index, type2) {
  25800. let color2 = type2 == 1 ? "" : props.color;
  25801. let dayNum = index + 1;
  25802. let date2 = `${year.value}-${month.value}-${dayNum}`;
  25803. let timestamp = new Date(date2.replace(/\-/g, "/")).getTime();
  25804. let start = startDate.value.replace(/\-/g, "/");
  25805. let end = endDate.value.replace(/\-/g, "/");
  25806. if (props.isActiveCurrent && activeDate.value == date2 || startDate.value == date2 || endDate.value == date2) {
  25807. color2 = type2 == 1 ? props.activeBgColor : props.activeColor;
  25808. } else if (endDate.value && timestamp > new Date(start).getTime() && timestamp < new Date(end).getTime()) {
  25809. color2 = type2 == 1 ? props.rangeBgColor : props.rangeColor;
  25810. }
  25811. return color2;
  25812. }
  25813. function init() {
  25814. let now2 = /* @__PURE__ */ new Date();
  25815. let minDateObj = new Date(String(props.minDate));
  25816. let maxDateObj = new Date(String(props.maxDate || ""));
  25817. if (isNaN(maxDateObj.getTime()))
  25818. maxDateObj = /* @__PURE__ */ new Date();
  25819. if (now2 < minDateObj)
  25820. now2 = minDateObj;
  25821. if (now2 > maxDateObj)
  25822. now2 = maxDateObj;
  25823. year.value = now2.getFullYear();
  25824. month.value = now2.getMonth() + 1;
  25825. day.value = now2.getDate();
  25826. today.value = `${now2.getFullYear()}-${month.value}-${day.value}`;
  25827. activeDate.value = today.value;
  25828. min.value = initDate(String(props.minDate));
  25829. max.value = initDate(String(props.maxDate) || today.value);
  25830. startDate.value = "";
  25831. startYear.value = 0;
  25832. startMonth.value = 0;
  25833. startDay.value = 0;
  25834. endYear.value = 0;
  25835. endMonth.value = 0;
  25836. endDay.value = 0;
  25837. endDate.value = "";
  25838. isStart.value = true;
  25839. changeData();
  25840. }
  25841. function initDate(date2) {
  25842. let fdate = date2.split("-");
  25843. return {
  25844. year: Number(fdate[0] || 1920),
  25845. month: Number(fdate[1] || 1),
  25846. day: Number(fdate[2] || 1)
  25847. };
  25848. }
  25849. function openDisAbled(yearNum, monthNum, dayNum) {
  25850. let bool = true;
  25851. let date2 = `${yearNum}/${monthNum}/${dayNum}`;
  25852. let minStr = min.value ? `${min.value.year}/${min.value.month}/${min.value.day}` : "";
  25853. let maxStr = max.value ? `${max.value.year}/${max.value.month}/${max.value.day}` : "";
  25854. let timestamp = new Date(date2).getTime();
  25855. if (min.value && max.value && timestamp >= new Date(minStr).getTime() && timestamp <= new Date(maxStr).getTime()) {
  25856. bool = false;
  25857. }
  25858. return bool;
  25859. }
  25860. function generateArray(start, end) {
  25861. return Array.from(new Array(end + 1).keys()).slice(start);
  25862. }
  25863. function formatNum(num) {
  25864. return num < 10 ? "0" + num : num + "";
  25865. }
  25866. function getMonthDay(yearNum, monthNum) {
  25867. return new Date(yearNum, monthNum, 0).getDate();
  25868. }
  25869. function getWeekday(yearNum, monthNum) {
  25870. let date2 = /* @__PURE__ */ new Date(`${yearNum}/${monthNum}/01 00:00:00`);
  25871. return date2.getDay();
  25872. }
  25873. function checkRange(yearNum) {
  25874. let overstep = false;
  25875. if (yearNum < Number(props.minYear) || yearNum > Number(props.maxYear)) {
  25876. uni.showToast({ title: t2("uCalendar.outOfRange"), icon: "none" });
  25877. overstep = true;
  25878. }
  25879. return overstep;
  25880. }
  25881. function changeMonthHandler(isAdd) {
  25882. if (isAdd) {
  25883. let m = month.value + 1;
  25884. let y = m > 12 ? year.value + 1 : year.value;
  25885. if (!checkRange(y)) {
  25886. month.value = m > 12 ? 1 : m;
  25887. year.value = y;
  25888. changeData();
  25889. }
  25890. } else {
  25891. let m = month.value - 1;
  25892. let y = m < 1 ? year.value - 1 : year.value;
  25893. if (!checkRange(y)) {
  25894. month.value = m < 1 ? 12 : m;
  25895. year.value = y;
  25896. changeData();
  25897. }
  25898. }
  25899. }
  25900. function changeYearHandler(isAdd) {
  25901. let y = isAdd ? year.value + 1 : year.value - 1;
  25902. if (!checkRange(y)) {
  25903. year.value = y;
  25904. changeData();
  25905. }
  25906. }
  25907. function changeData() {
  25908. days.value = getMonthDay(year.value, month.value);
  25909. daysArr.value = generateArray(1, days.value);
  25910. weekday.value = getWeekday(year.value, month.value);
  25911. weekdayArr.value = generateArray(1, weekday.value);
  25912. showTitle.value = `${year.value}${t2("uCalendar.year")}${month.value}${t2("uCalendar.month")}`;
  25913. if (props.showLunar) {
  25914. lunarArr.value = [];
  25915. daysArr.value.forEach((d) => {
  25916. lunarArr.value.push(getLunar(year.value, month.value, d));
  25917. });
  25918. }
  25919. if (props.isChange && props.mode == "date") {
  25920. btnFix(true);
  25921. }
  25922. }
  25923. function getLunar(year2, month2, day2) {
  25924. const val = Calendar.solar2lunar(year2, month2, day2);
  25925. return {
  25926. dayCn: val.IDayCn,
  25927. weekCn: val.ncWeek,
  25928. monthCn: val.IMonthCn,
  25929. day: val.lDay,
  25930. week: val.nWeek,
  25931. month: val.lMonth,
  25932. year: val.lYear
  25933. };
  25934. }
  25935. function dateClick(dayIdx) {
  25936. if (props.isPage) {
  25937. return;
  25938. }
  25939. const d = dayIdx + 1;
  25940. if (!openDisAbled(year.value, month.value, d)) {
  25941. day.value = d;
  25942. let date2 = `${year.value}-${month.value}-${d}`;
  25943. if (props.mode == "date") {
  25944. activeDate.value = date2;
  25945. } else {
  25946. let compare = new Date(date2.replace(/\-/g, "/")).getTime() < new Date(startDate.value.replace(/\-/g, "/")).getTime();
  25947. if (isStart.value || compare) {
  25948. startDate.value = date2;
  25949. startYear.value = year.value;
  25950. startMonth.value = month.value;
  25951. startDay.value = day.value;
  25952. endYear.value = 0;
  25953. endMonth.value = 0;
  25954. endDay.value = 0;
  25955. endDate.value = "";
  25956. activeDate.value = "";
  25957. isStart.value = false;
  25958. } else {
  25959. endDate.value = date2;
  25960. endYear.value = year.value;
  25961. endMonth.value = month.value;
  25962. endDay.value = day.value;
  25963. isStart.value = true;
  25964. }
  25965. }
  25966. }
  25967. }
  25968. function close() {
  25969. emit("input", false);
  25970. emit("update:modelValue", false);
  25971. }
  25972. function getWeekText(date2) {
  25973. const d = /* @__PURE__ */ new Date(`${date2.replace(/\-/g, "/")} 00:00:00`);
  25974. let week = d.getDay();
  25975. return "星期" + ["日", "一", "二", "三", "四", "五", "六"][week];
  25976. }
  25977. function btnFix(show) {
  25978. if (!show) {
  25979. close();
  25980. }
  25981. if (props.mode == "date") {
  25982. let arr = activeDate.value.split("-");
  25983. let y = props.isChange ? year.value : Number(arr[0]);
  25984. let m = props.isChange ? month.value : Number(arr[1]);
  25985. let d = props.isChange ? day.value : Number(arr[2]);
  25986. let daysNum = getMonthDay(y, m);
  25987. let result = `${y}-${formatNum(m)}-${formatNum(d)}`;
  25988. let weekText = getWeekText(result);
  25989. let isToday = false;
  25990. if (`${y}-${m}-${d}` == today.value) {
  25991. isToday = true;
  25992. }
  25993. const lunar = props.showLunar ? getLunar(y, m, d) : null;
  25994. emit("change", {
  25995. year: y,
  25996. month: m,
  25997. day: d,
  25998. days: daysNum,
  25999. result,
  26000. week: weekText,
  26001. isToday,
  26002. lunar
  26003. // switch: show //是否是切换年月操作
  26004. });
  26005. } else {
  26006. if (!startDate.value || !endDate.value)
  26007. return;
  26008. let startMonthStr = formatNum(startMonth.value);
  26009. let startDayStr = formatNum(startDay.value);
  26010. let startDateStr = `${startYear.value}-${startMonthStr}-${startDayStr}`;
  26011. let startWeek = getWeekText(startDateStr);
  26012. let endMonthStr = formatNum(endMonth.value);
  26013. let endDayStr = formatNum(endDay.value);
  26014. let endDateStr = `${endYear.value}-${endMonthStr}-${endDayStr}`;
  26015. let endWeek = getWeekText(endDateStr);
  26016. let startLunar = null;
  26017. let endLunar = null;
  26018. if (props.showLunar) {
  26019. startLunar = getLunar(startYear.value, startMonth.value, startDay.value);
  26020. endLunar = getLunar(endYear.value, endMonth.value, endDay.value);
  26021. }
  26022. emit("change", {
  26023. startYear: startYear.value,
  26024. startMonth: startMonth.value,
  26025. startDay: startDay.value,
  26026. startDate: startDateStr,
  26027. startWeek,
  26028. endYear: endYear.value,
  26029. endMonth: endMonth.value,
  26030. endDay: endDay.value,
  26031. endDate: endDateStr,
  26032. endWeek,
  26033. startLunar,
  26034. endLunar
  26035. });
  26036. }
  26037. }
  26038. const __returned__ = { props, emit, slots, t: t2, weekday, weekdayArr, days, daysArr, lunarArr, showTitle, year, month, day, startYear, startMonth, startDay, endYear, endMonth, endDay, today, activeDate, startDate, endDate, isStart, min, max, weekDayZh, dataChange, lunarChange, uZIndex, popupValue, getColor: getColor2, init, initDate, openDisAbled, generateArray, formatNum, getMonthDay, getWeekday, checkRange, changeMonthHandler, changeYearHandler, changeData, getLunar, dateClick, close, getWeekText, btnFix, get $u() {
  26039. return $u;
  26040. } };
  26041. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  26042. return __returned__;
  26043. }
  26044. });
  26045. function _sfc_render$Z(_ctx, _cache, $props, $setup, $data, $options) {
  26046. const _component_u_icon = __unplugin_components_0$5;
  26047. const _component_u_button = __unplugin_components_2$1;
  26048. const _component_u_popup = __unplugin_components_2$3;
  26049. return $setup.props.isPage ? (vue.openBlock(), vue.createElementBlock(
  26050. "view",
  26051. {
  26052. key: 0,
  26053. class: vue.normalizeClass(["u-calendar", $setup.props.customClass]),
  26054. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle))
  26055. },
  26056. [
  26057. vue.createCommentVNode(' <view class="u-calendar__header">\r\n <view class="u-calendar__header__text" v-if="!slots.tooltip">\r\n {{ toolTip }}\r\n </view>\r\n <slot v-else name="tooltip" />\r\n </view> '),
  26058. vue.createElementVNode("view", { class: "u-calendar__action u-flex u-row-center" }, [
  26059. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26060. _ctx.changeYear ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26061. key: 0,
  26062. name: "arrow-left-double",
  26063. color: _ctx.yearArrowColor,
  26064. onClick: _cache[0] || (_cache[0] = ($event) => $setup.changeYearHandler(0))
  26065. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26066. ]),
  26067. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26068. _ctx.changeMonth ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26069. key: 0,
  26070. name: "arrow-left",
  26071. color: _ctx.monthArrowColor,
  26072. onClick: _cache[1] || (_cache[1] = ($event) => $setup.changeMonthHandler(0))
  26073. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26074. ]),
  26075. vue.createElementVNode(
  26076. "view",
  26077. { class: "u-calendar__action__text" },
  26078. vue.toDisplayString($setup.showTitle),
  26079. 1
  26080. /* TEXT */
  26081. ),
  26082. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26083. _ctx.changeMonth ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26084. key: 0,
  26085. name: "arrow-right",
  26086. color: _ctx.monthArrowColor,
  26087. onClick: _cache[2] || (_cache[2] = ($event) => $setup.changeMonthHandler(1))
  26088. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26089. ]),
  26090. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26091. _ctx.changeYear ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26092. key: 0,
  26093. name: "arrow-right-double",
  26094. color: _ctx.yearArrowColor,
  26095. onClick: _cache[3] || (_cache[3] = ($event) => $setup.changeYearHandler(1))
  26096. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26097. ])
  26098. ]),
  26099. vue.createElementVNode("view", { class: "u-calendar__week-day" }, [
  26100. (vue.openBlock(true), vue.createElementBlock(
  26101. vue.Fragment,
  26102. null,
  26103. vue.renderList($setup.weekDayZh, (item, index) => {
  26104. return vue.openBlock(), vue.createElementBlock(
  26105. "view",
  26106. {
  26107. class: "u-calendar__week-day__text",
  26108. key: index
  26109. },
  26110. vue.toDisplayString(item),
  26111. 1
  26112. /* TEXT */
  26113. );
  26114. }),
  26115. 128
  26116. /* KEYED_FRAGMENT */
  26117. ))
  26118. ]),
  26119. vue.createElementVNode("view", { class: "u-calendar__content" }, [
  26120. vue.createCommentVNode(" 前置空白部分 "),
  26121. (vue.openBlock(true), vue.createElementBlock(
  26122. vue.Fragment,
  26123. null,
  26124. vue.renderList($setup.weekdayArr, (item, index) => {
  26125. return vue.openBlock(), vue.createElementBlock("view", {
  26126. key: index,
  26127. class: "u-calendar__content__item"
  26128. });
  26129. }),
  26130. 128
  26131. /* KEYED_FRAGMENT */
  26132. )),
  26133. (vue.openBlock(true), vue.createElementBlock(
  26134. vue.Fragment,
  26135. null,
  26136. vue.renderList($setup.daysArr, (item, index) => {
  26137. var _a2, _b2;
  26138. return vue.openBlock(), vue.createElementBlock("view", {
  26139. class: vue.normalizeClass(["u-calendar__content__item", {
  26140. "u-hover-class": $setup.openDisAbled($setup.year, $setup.month, index + 1),
  26141. "u-calendar__content--start-date": _ctx.mode == "range" && $setup.startDate == `${$setup.year}-${$setup.month}-${index + 1}` || _ctx.mode == "date",
  26142. "u-calendar__content--end-date": _ctx.mode == "range" && $setup.endDate == `${$setup.year}-${$setup.month}-${index + 1}` || _ctx.mode == "date"
  26143. }]),
  26144. style: vue.normalizeStyle({ backgroundColor: $setup.getColor(index, 1) }),
  26145. key: index,
  26146. onClick: ($event) => $setup.dateClick(index)
  26147. }, [
  26148. vue.createElementVNode(
  26149. "view",
  26150. {
  26151. class: "u-calendar__content__item__inner",
  26152. style: vue.normalizeStyle({ color: $setup.getColor(index, 2) })
  26153. },
  26154. [
  26155. vue.createElementVNode(
  26156. "view",
  26157. null,
  26158. vue.toDisplayString(index + 1),
  26159. 1
  26160. /* TEXT */
  26161. )
  26162. ],
  26163. 4
  26164. /* STYLE */
  26165. ),
  26166. _ctx.mode == "range" && $setup.startDate == `${$setup.year}-${$setup.month}-${index + 1}` && $setup.startDate != $setup.endDate ? (vue.openBlock(), vue.createElementBlock(
  26167. "view",
  26168. {
  26169. key: 0,
  26170. class: "u-calendar__content__item__tips",
  26171. style: vue.normalizeStyle({ color: _ctx.activeColor })
  26172. },
  26173. vue.toDisplayString(_ctx.startText),
  26174. 5
  26175. /* TEXT, STYLE */
  26176. )) : vue.createCommentVNode("v-if", true),
  26177. _ctx.mode == "range" && $setup.endDate == `${$setup.year}-${$setup.month}-${index + 1}` ? (vue.openBlock(), vue.createElementBlock(
  26178. "view",
  26179. {
  26180. key: 1,
  26181. class: "u-calendar__content__item__tips",
  26182. style: vue.normalizeStyle({ color: _ctx.activeColor })
  26183. },
  26184. vue.toDisplayString(_ctx.endText),
  26185. 5
  26186. /* TEXT, STYLE */
  26187. )) : vue.createCommentVNode("v-if", true),
  26188. $setup.props.showLunar && !(_ctx.mode == "range" && $setup.startDate == `${$setup.year}-${$setup.month}-${index + 1}` && $setup.startDate != $setup.endDate) && !(_ctx.mode == "range" && $setup.endDate == `${$setup.year}-${$setup.month}-${index + 1}`) ? (vue.openBlock(), vue.createElementBlock(
  26189. "view",
  26190. {
  26191. key: 2,
  26192. class: "u-calendar__content__item__tips",
  26193. style: vue.normalizeStyle({ color: $setup.getColor(index, 2) })
  26194. },
  26195. vue.toDisplayString(((_a2 = $setup.lunarArr[index]) == null ? void 0 : _a2.dayCn) === "初一" ? $setup.lunarArr[index].monthCn : ((_b2 = $setup.lunarArr[index]) == null ? void 0 : _b2.dayCn) ?? ""),
  26196. 5
  26197. /* TEXT, STYLE */
  26198. )) : vue.createCommentVNode("v-if", true)
  26199. ], 14, ["onClick"]);
  26200. }),
  26201. 128
  26202. /* KEYED_FRAGMENT */
  26203. )),
  26204. vue.createElementVNode(
  26205. "view",
  26206. { class: "u-calendar__content__bg-month" },
  26207. vue.toDisplayString($setup.month),
  26208. 1
  26209. /* TEXT */
  26210. )
  26211. ]),
  26212. vue.createCommentVNode(` <view class="u-calendar__bottom">\r
  26213. <view class="u-calendar__bottom__choose">\r
  26214. <text>{{ mode == 'date' ? activeDate : startDate }}</text>\r
  26215. <text v-if="endDate">至{{ endDate }}</text>\r
  26216. </view>\r
  26217. <view class="u-calendar__bottom__btn">\r
  26218. <u-button :type="btnType" shape="circle" size="default" @click="btnFix(false)">确定</u-button>\r
  26219. </view>\r
  26220. </view> `)
  26221. ],
  26222. 6
  26223. /* CLASS, STYLE */
  26224. )) : (vue.openBlock(), vue.createBlock(_component_u_popup, {
  26225. key: 1,
  26226. maskCloseAble: _ctx.maskCloseAble,
  26227. mode: "bottom",
  26228. popup: false,
  26229. modelValue: $setup.popupValue,
  26230. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.popupValue = $event),
  26231. length: "auto",
  26232. safeAreaInsetBottom: _ctx.safeAreaInsetBottom,
  26233. onClose: $setup.close,
  26234. "z-index": $setup.uZIndex,
  26235. "border-radius": _ctx.borderRadius,
  26236. closeable: _ctx.closeable
  26237. }, {
  26238. default: vue.withCtx(() => [
  26239. vue.createElementVNode(
  26240. "view",
  26241. {
  26242. class: vue.normalizeClass(["u-calendar", $setup.props.customClass]),
  26243. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle))
  26244. },
  26245. [
  26246. vue.createElementVNode("view", { class: "u-calendar__header" }, [
  26247. !$setup.slots.tooltip ? (vue.openBlock(), vue.createElementBlock(
  26248. "view",
  26249. {
  26250. key: 0,
  26251. class: "u-calendar__header__text"
  26252. },
  26253. vue.toDisplayString(_ctx.toolTip),
  26254. 1
  26255. /* TEXT */
  26256. )) : vue.renderSlot(_ctx.$slots, "tooltip", { key: 1 }, void 0, true)
  26257. ]),
  26258. vue.createElementVNode("view", { class: "u-calendar__action u-flex u-row-center" }, [
  26259. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26260. _ctx.changeYear ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26261. key: 0,
  26262. name: "arrow-left-double",
  26263. color: _ctx.yearArrowColor,
  26264. onClick: _cache[4] || (_cache[4] = ($event) => $setup.changeYearHandler(0))
  26265. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26266. ]),
  26267. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26268. _ctx.changeMonth ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26269. key: 0,
  26270. name: "arrow-left",
  26271. color: _ctx.monthArrowColor,
  26272. onClick: _cache[5] || (_cache[5] = ($event) => $setup.changeMonthHandler(0))
  26273. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26274. ]),
  26275. vue.createElementVNode(
  26276. "view",
  26277. { class: "u-calendar__action__text" },
  26278. vue.toDisplayString($setup.showTitle),
  26279. 1
  26280. /* TEXT */
  26281. ),
  26282. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26283. _ctx.changeMonth ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26284. key: 0,
  26285. name: "arrow-right",
  26286. color: _ctx.monthArrowColor,
  26287. onClick: _cache[6] || (_cache[6] = ($event) => $setup.changeMonthHandler(1))
  26288. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26289. ]),
  26290. vue.createElementVNode("view", { class: "u-calendar__action__icon" }, [
  26291. _ctx.changeYear ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  26292. key: 0,
  26293. name: "arrow-right-double",
  26294. color: _ctx.yearArrowColor,
  26295. onClick: _cache[7] || (_cache[7] = ($event) => $setup.changeYearHandler(1))
  26296. }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true)
  26297. ])
  26298. ]),
  26299. vue.createElementVNode("view", { class: "u-calendar__week-day" }, [
  26300. (vue.openBlock(true), vue.createElementBlock(
  26301. vue.Fragment,
  26302. null,
  26303. vue.renderList($setup.weekDayZh, (item, index) => {
  26304. return vue.openBlock(), vue.createElementBlock(
  26305. "view",
  26306. {
  26307. class: "u-calendar__week-day__text",
  26308. key: index
  26309. },
  26310. vue.toDisplayString(item),
  26311. 1
  26312. /* TEXT */
  26313. );
  26314. }),
  26315. 128
  26316. /* KEYED_FRAGMENT */
  26317. ))
  26318. ]),
  26319. vue.createElementVNode("view", { class: "u-calendar__content" }, [
  26320. vue.createCommentVNode(" 前置空白部分 "),
  26321. (vue.openBlock(true), vue.createElementBlock(
  26322. vue.Fragment,
  26323. null,
  26324. vue.renderList($setup.weekdayArr, (item, index) => {
  26325. return vue.openBlock(), vue.createElementBlock("view", {
  26326. key: index,
  26327. class: "u-calendar__content__item"
  26328. });
  26329. }),
  26330. 128
  26331. /* KEYED_FRAGMENT */
  26332. )),
  26333. (vue.openBlock(true), vue.createElementBlock(
  26334. vue.Fragment,
  26335. null,
  26336. vue.renderList($setup.daysArr, (item, index) => {
  26337. var _a2, _b2;
  26338. return vue.openBlock(), vue.createElementBlock("view", {
  26339. class: vue.normalizeClass(["u-calendar__content__item", {
  26340. "u-hover-class": $setup.openDisAbled($setup.year, $setup.month, index + 1),
  26341. "u-calendar__content--start-date": _ctx.mode == "range" && $setup.startDate == `${$setup.year}-${$setup.month}-${index + 1}` || _ctx.mode == "date",
  26342. "u-calendar__content--end-date": _ctx.mode == "range" && $setup.endDate == `${$setup.year}-${$setup.month}-${index + 1}` || _ctx.mode == "date"
  26343. }]),
  26344. style: vue.normalizeStyle({ backgroundColor: $setup.getColor(index, 1) }),
  26345. key: index,
  26346. onClick: ($event) => $setup.dateClick(index)
  26347. }, [
  26348. vue.createElementVNode(
  26349. "view",
  26350. {
  26351. class: "u-calendar__content__item__inner",
  26352. style: vue.normalizeStyle({ color: $setup.getColor(index, 2) })
  26353. },
  26354. [
  26355. vue.createElementVNode(
  26356. "view",
  26357. null,
  26358. vue.toDisplayString(index + 1),
  26359. 1
  26360. /* TEXT */
  26361. )
  26362. ],
  26363. 4
  26364. /* STYLE */
  26365. ),
  26366. _ctx.mode == "range" && $setup.startDate == `${$setup.year}-${$setup.month}-${index + 1}` && $setup.startDate != $setup.endDate ? (vue.openBlock(), vue.createElementBlock(
  26367. "view",
  26368. {
  26369. key: 0,
  26370. class: "u-calendar__content__item__tips",
  26371. style: vue.normalizeStyle({ color: _ctx.activeColor })
  26372. },
  26373. vue.toDisplayString(_ctx.startText),
  26374. 5
  26375. /* TEXT, STYLE */
  26376. )) : vue.createCommentVNode("v-if", true),
  26377. _ctx.mode == "range" && $setup.endDate == `${$setup.year}-${$setup.month}-${index + 1}` ? (vue.openBlock(), vue.createElementBlock(
  26378. "view",
  26379. {
  26380. key: 1,
  26381. class: "u-calendar__content__item__tips",
  26382. style: vue.normalizeStyle({ color: _ctx.activeColor })
  26383. },
  26384. vue.toDisplayString(_ctx.endText),
  26385. 5
  26386. /* TEXT, STYLE */
  26387. )) : vue.createCommentVNode("v-if", true),
  26388. $setup.props.showLunar && !(_ctx.mode == "range" && $setup.startDate == `${$setup.year}-${$setup.month}-${index + 1}` && $setup.startDate != $setup.endDate) && !(_ctx.mode == "range" && $setup.endDate == `${$setup.year}-${$setup.month}-${index + 1}`) ? (vue.openBlock(), vue.createElementBlock(
  26389. "view",
  26390. {
  26391. key: 2,
  26392. class: "u-calendar__content__item__tips",
  26393. style: vue.normalizeStyle({ color: $setup.getColor(index, 2) })
  26394. },
  26395. vue.toDisplayString(((_a2 = $setup.lunarArr[index]) == null ? void 0 : _a2.dayCn) === "初一" ? $setup.lunarArr[index].monthCn : ((_b2 = $setup.lunarArr[index]) == null ? void 0 : _b2.dayCn) ?? ""),
  26396. 5
  26397. /* TEXT, STYLE */
  26398. )) : vue.createCommentVNode("v-if", true)
  26399. ], 14, ["onClick"]);
  26400. }),
  26401. 128
  26402. /* KEYED_FRAGMENT */
  26403. )),
  26404. vue.createElementVNode(
  26405. "view",
  26406. { class: "u-calendar__content__bg-month" },
  26407. vue.toDisplayString($setup.month),
  26408. 1
  26409. /* TEXT */
  26410. )
  26411. ]),
  26412. vue.createElementVNode("view", { class: "u-calendar__bottom" }, [
  26413. vue.createElementVNode("view", { class: "u-calendar__bottom__choose" }, [
  26414. vue.createElementVNode(
  26415. "text",
  26416. null,
  26417. vue.toDisplayString(_ctx.mode == "date" ? $setup.activeDate : $setup.startDate),
  26418. 1
  26419. /* TEXT */
  26420. ),
  26421. $setup.endDate ? (vue.openBlock(), vue.createElementBlock(
  26422. "text",
  26423. { key: 0 },
  26424. vue.toDisplayString($setup.t("uCalendar.to")) + vue.toDisplayString($setup.endDate),
  26425. 1
  26426. /* TEXT */
  26427. )) : vue.createCommentVNode("v-if", true)
  26428. ]),
  26429. vue.createElementVNode("view", { class: "u-calendar__bottom__btn" }, [
  26430. vue.createVNode(_component_u_button, {
  26431. type: _ctx.btnType,
  26432. shape: "circle",
  26433. size: "default",
  26434. onClick: _cache[8] || (_cache[8] = ($event) => $setup.btnFix(false))
  26435. }, {
  26436. default: vue.withCtx(() => [
  26437. vue.createTextVNode(
  26438. vue.toDisplayString($setup.t("uCalendar.confirmText")),
  26439. 1
  26440. /* TEXT */
  26441. )
  26442. ]),
  26443. _: 1
  26444. /* STABLE */
  26445. }, 8, ["type"])
  26446. ])
  26447. ])
  26448. ],
  26449. 6
  26450. /* CLASS, STYLE */
  26451. )
  26452. ]),
  26453. _: 3
  26454. /* FORWARDED */
  26455. }, 8, ["maskCloseAble", "modelValue", "safeAreaInsetBottom", "z-index", "border-radius", "closeable"]));
  26456. }
  26457. const __unplugin_components_6 = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$Z], ["__scopeId", "data-v-2a51c813"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-calendar/u-calendar.vue"]]);
  26458. const _sfc_main$Z = {
  26459. __name: "SportDateFilter",
  26460. props: {
  26461. state: {
  26462. type: Number,
  26463. required: true
  26464. },
  26465. daysCount: {
  26466. type: Number,
  26467. default: 7
  26468. }
  26469. },
  26470. emits: ["change", "update:date"],
  26471. setup(__props, { expose: __expose, emit: __emit }) {
  26472. __expose();
  26473. const { t: t2 } = useI18n();
  26474. const props = __props;
  26475. const emit = __emit;
  26476. const activeDate = vue.ref("");
  26477. const showCalendar = vue.ref(false);
  26478. const getLocalYYYYMMDD = (date2) => {
  26479. const y = date2.getFullYear();
  26480. const m = String(date2.getMonth() + 1).padStart(2, "0");
  26481. const d = String(date2.getDate()).padStart(2, "0");
  26482. return `${y}-${m}-${d}`;
  26483. };
  26484. const getWeekLabel = (dateObj, isToday = false) => {
  26485. if (isToday)
  26486. return t2("今天");
  26487. const weeks = [t2("周日"), t2("周一"), t2("周二"), t2("周三"), t2("周四"), t2("周五"), t2("周六")];
  26488. return weeks[dateObj.getDay()];
  26489. };
  26490. const getDateLabel = (dateObj) => {
  26491. const m = String(dateObj.getMonth() + 1).padStart(2, "0");
  26492. const d = String(dateObj.getDate()).padStart(2, "0");
  26493. return `${m}/${d}`;
  26494. };
  26495. const baseOptions = vue.computed(() => {
  26496. const options = [];
  26497. const today = /* @__PURE__ */ new Date();
  26498. const direction = props.state === 2 ? -1 : 1;
  26499. const count = props.state === 1 ? 1 : props.daysCount;
  26500. for (let i = 0; i < count; i++) {
  26501. const targetDate = new Date(today);
  26502. targetDate.setDate(today.getDate() + i * direction);
  26503. const isActuallyToday = targetDate.toDateString() === today.toDateString();
  26504. options.push({
  26505. weekLabel: getWeekLabel(targetDate, isActuallyToday),
  26506. dateLabel: getDateLabel(targetDate),
  26507. value: getLocalYYYYMMDD(targetDate)
  26508. });
  26509. }
  26510. return options;
  26511. });
  26512. const displayOptions = vue.computed(() => {
  26513. const options = [...baseOptions.value];
  26514. if (activeDate.value) {
  26515. const exists = options.some((opt) => opt.value === activeDate.value);
  26516. if (!exists) {
  26517. const safeDateStr = activeDate.value.replace(/-/g, "/");
  26518. const customDate = new Date(safeDateStr);
  26519. options.push({
  26520. weekLabel: getWeekLabel(customDate, false),
  26521. dateLabel: getDateLabel(customDate),
  26522. value: activeDate.value
  26523. });
  26524. }
  26525. }
  26526. return options;
  26527. });
  26528. const minDate = vue.computed(() => {
  26529. const todayStr = getLocalYYYYMMDD(/* @__PURE__ */ new Date());
  26530. if (props.state === 0 || props.state === 1)
  26531. return todayStr;
  26532. return "2000-01-01";
  26533. });
  26534. const maxDate = vue.computed(() => {
  26535. const todayStr = getLocalYYYYMMDD(/* @__PURE__ */ new Date());
  26536. if (props.state === 2 || props.state === 1)
  26537. return todayStr;
  26538. return "2099-12-31";
  26539. });
  26540. const initToday = (isPassive = false) => {
  26541. const todayStr = getLocalYYYYMMDD(/* @__PURE__ */ new Date());
  26542. activeDate.value = todayStr;
  26543. emit("update:date", todayStr);
  26544. if (!isPassive) {
  26545. emit("change", todayStr);
  26546. }
  26547. };
  26548. vue.watch(() => props.state, () => {
  26549. initToday(true);
  26550. });
  26551. vue.onMounted(() => {
  26552. initToday(true);
  26553. });
  26554. const selectDate = (val) => {
  26555. if (activeDate.value === val)
  26556. return;
  26557. activeDate.value = val;
  26558. emit("update:date", val);
  26559. emit("change", val);
  26560. };
  26561. const openCalendar = () => {
  26562. showCalendar.value = true;
  26563. };
  26564. const onCalendarConfirm = (e) => {
  26565. const selected = e.result;
  26566. activeDate.value = selected;
  26567. emit("update:date", selected);
  26568. emit("change", selected);
  26569. };
  26570. const __returned__ = { t: t2, props, emit, activeDate, showCalendar, getLocalYYYYMMDD, getWeekLabel, getDateLabel, baseOptions, displayOptions, minDate, maxDate, initToday, selectDate, openCalendar, onCalendarConfirm, ref: vue.ref, computed: vue.computed, watch: vue.watch, onMounted: vue.onMounted, get useI18n() {
  26571. return useI18n;
  26572. } };
  26573. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  26574. return __returned__;
  26575. }
  26576. };
  26577. function _sfc_render$Y(_ctx, _cache, $props, $setup, $data, $options) {
  26578. const _component_u_icon = __unplugin_components_0$5;
  26579. const _component_u_calendar = __unplugin_components_6;
  26580. return vue.openBlock(), vue.createElementBlock("view", { class: "sport-date-filter-container" }, [
  26581. vue.createElementVNode("scroll-view", {
  26582. "scroll-x": "",
  26583. class: "date-scroll",
  26584. "show-scrollbar": false
  26585. }, [
  26586. vue.createElementVNode("view", { class: "date-tabs" }, [
  26587. (vue.openBlock(true), vue.createElementBlock(
  26588. vue.Fragment,
  26589. null,
  26590. vue.renderList($setup.displayOptions, (item, index) => {
  26591. return vue.openBlock(), vue.createElementBlock("view", {
  26592. class: vue.normalizeClass(["date-tab", { "is-active": $setup.activeDate === item.value }]),
  26593. key: index,
  26594. onClick: ($event) => $setup.selectDate(item.value)
  26595. }, [
  26596. vue.createElementVNode(
  26597. "text",
  26598. { class: "weekday" },
  26599. vue.toDisplayString(item.weekLabel),
  26600. 1
  26601. /* TEXT */
  26602. ),
  26603. vue.createElementVNode(
  26604. "text",
  26605. { class: "date-text" },
  26606. vue.toDisplayString(item.dateLabel),
  26607. 1
  26608. /* TEXT */
  26609. )
  26610. ], 10, ["onClick"]);
  26611. }),
  26612. 128
  26613. /* KEYED_FRAGMENT */
  26614. ))
  26615. ])
  26616. ]),
  26617. vue.createElementVNode("view", {
  26618. class: "calendar-action",
  26619. onClick: $setup.openCalendar
  26620. }, [
  26621. vue.createElementVNode("view", { class: "divider" }),
  26622. vue.createElementVNode("view", { class: "icon-btn" }, [
  26623. vue.createVNode(_component_u_icon, {
  26624. name: "calendar",
  26625. size: "44",
  26626. color: "#94a3b8"
  26627. })
  26628. ])
  26629. ]),
  26630. vue.createVNode(_component_u_calendar, {
  26631. modelValue: $setup.showCalendar,
  26632. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.showCalendar = $event),
  26633. mode: "date",
  26634. "min-date": $setup.minDate,
  26635. "max-date": $setup.maxDate,
  26636. "active-bg-color": "#f8b932",
  26637. "cancel-text": $setup.t("取消"),
  26638. "confirm-text": $setup.t("确认"),
  26639. onChange: $setup.onCalendarConfirm
  26640. }, null, 8, ["modelValue", "min-date", "max-date", "cancel-text", "confirm-text"])
  26641. ]);
  26642. }
  26643. const SportDateFilter = /* @__PURE__ */ _export_sfc(_sfc_main$Z, [["render", _sfc_render$Y], ["__scopeId", "data-v-124c2f8c"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/SportsBetting/SportDateFilter.vue"]]);
  26644. const _sfc_main$Y = {
  26645. __name: "index",
  26646. props: {
  26647. keyword: {
  26648. type: String,
  26649. default: ""
  26650. }
  26651. },
  26652. setup(__props, { expose: __expose }) {
  26653. const { t: t2, locale } = useI18n();
  26654. const router2 = useRouter();
  26655. const orderStore = useOrderStore();
  26656. const props = __props;
  26657. const leagueList = vue.ref([]);
  26658. const page = vue.ref(1);
  26659. const limit = vue.ref(20);
  26660. const isFetching = vue.ref(false);
  26661. const isNoMore = vue.ref(false);
  26662. const selectedMap = vue.ref({});
  26663. vue.onMounted(() => {
  26664. fetchLeagueList(1);
  26665. syncFromStore();
  26666. });
  26667. const fetchLeagueList = async (pageNum) => {
  26668. if (isFetching.value || isNoMore.value && pageNum !== 1)
  26669. return;
  26670. isFetching.value = true;
  26671. if (pageNum === 1) {
  26672. leagueList.value = [];
  26673. isNoMore.value = false;
  26674. }
  26675. try {
  26676. const params = { page: pageNum, limit: limit.value };
  26677. if (props.keyword) {
  26678. params.keyword = props.keyword;
  26679. }
  26680. const res = await getLeagueList(params);
  26681. if (res.code === 1 && res.data && res.data.list) {
  26682. const formattedList = res.data.list.map((league) => ({
  26683. ...league,
  26684. isExpanded: false,
  26685. loadingMatches: false,
  26686. matches: []
  26687. }));
  26688. leagueList.value = pageNum === 1 ? formattedList : [...leagueList.value, ...formattedList];
  26689. if (res.data.list.length < limit.value) {
  26690. isNoMore.value = true;
  26691. }
  26692. page.value = pageNum;
  26693. } else {
  26694. isNoMore.value = true;
  26695. }
  26696. } catch (error) {
  26697. formatAppLog("error", "at pages/Tabbar/SportsBetting/LeagueList/index.vue:185", "Fetch league list failed", error);
  26698. } finally {
  26699. isFetching.value = false;
  26700. }
  26701. };
  26702. const onLoadMore = () => {
  26703. if (!isNoMore.value) {
  26704. fetchLeagueList(page.value + 1);
  26705. }
  26706. };
  26707. const refresh = () => {
  26708. fetchLeagueList(1);
  26709. };
  26710. __expose({ refresh });
  26711. const toggleLeague = async (index) => {
  26712. const target = leagueList.value[index];
  26713. target.isExpanded = !target.isExpanded;
  26714. if (target.isExpanded && (!target.matches || target.matches.length === 0)) {
  26715. target.loadingMatches = true;
  26716. try {
  26717. const res = await getSportSchedule({ page: 1, limit: 100, league_id: target.league_id });
  26718. if (res.code === 1 && res.data && res.data.list) {
  26719. target.matches = res.data.list.map((item) => {
  26720. if (typeof item.odds === "string") {
  26721. try {
  26722. item.odds = JSON.parse(item.odds);
  26723. } catch (e) {
  26724. item.odds = [];
  26725. }
  26726. }
  26727. return item;
  26728. });
  26729. }
  26730. } catch (e) {
  26731. formatAppLog("error", "at pages/Tabbar/SportsBetting/LeagueList/index.vue:220", e);
  26732. } finally {
  26733. target.loadingMatches = false;
  26734. }
  26735. }
  26736. };
  26737. const goDetail = (item) => {
  26738. router2.push({ name: "sportDetail", query: { data_id: item.data_id } });
  26739. };
  26740. const translateSelection = (valStr) => String(valStr || "");
  26741. const getUniqueKey = (matchId, marketId, selection) => {
  26742. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  26743. return `${matchId}_${marketId}_${selection.value}_${selection.handicap}`;
  26744. }
  26745. return `${matchId}_${marketId}_${selection.value}`;
  26746. };
  26747. const checkIsLocked = (item) => {
  26748. if (!item)
  26749. return true;
  26750. if (Number(item.is_locked) === 1)
  26751. return true;
  26752. if (Number(item.status) !== 1)
  26753. return true;
  26754. const state = Number(item.state);
  26755. if (state !== 0 && state !== 1)
  26756. return true;
  26757. return false;
  26758. };
  26759. const isOptionLocked = (item, opt) => {
  26760. if (checkIsLocked(item))
  26761. return true;
  26762. if (item && item.odd_ids_locked && item.odds && item.odds.length > 0) {
  26763. let lockedIds = item.odd_ids_locked;
  26764. if (typeof lockedIds === "string") {
  26765. try {
  26766. lockedIds = JSON.parse(lockedIds);
  26767. } catch (e) {
  26768. lockedIds = [];
  26769. }
  26770. }
  26771. const currentMarketId = item.odds[0].id;
  26772. if (Array.isArray(lockedIds) && lockedIds.map(Number).includes(Number(currentMarketId))) {
  26773. return true;
  26774. }
  26775. }
  26776. if (!opt)
  26777. return true;
  26778. if (!opt.odd || opt.odd === "-" || Number(opt.odd) === 0)
  26779. return true;
  26780. if (opt.suspended === true || String(opt.suspended).toLowerCase() === "true")
  26781. return true;
  26782. return false;
  26783. };
  26784. const isSelected = (matchId, marketId, selection) => {
  26785. if (!selection)
  26786. return false;
  26787. const uniqueKey = getUniqueKey(matchId, marketId, selection);
  26788. return !!selectedMap.value[uniqueKey];
  26789. };
  26790. const handleOddsClick = (item, selection) => {
  26791. if (isOptionLocked(item, selection))
  26792. return;
  26793. if (!item.odds || item.odds.length === 0)
  26794. return;
  26795. const market = item.odds[0];
  26796. const uniqueKey = getUniqueKey(item.id, market.id, selection);
  26797. if (selectedMap.value[uniqueKey]) {
  26798. orderStore.removeOrderItemByKey(uniqueKey);
  26799. } else {
  26800. if (market.values) {
  26801. market.values.forEach((wsItem) => {
  26802. const otherKey = getUniqueKey(item.id, market.id, wsItem);
  26803. if (selectedMap.value[otherKey]) {
  26804. orderStore.removeOrderItemByKey(otherKey);
  26805. }
  26806. });
  26807. }
  26808. const betItem = {
  26809. matchId: item.id,
  26810. data_id: item.data_id,
  26811. league: item.league,
  26812. league_en: item.league_en,
  26813. homeTeam: item.home_team,
  26814. home_team_en: item.home_team_en,
  26815. guestTeam: item.guest_team,
  26816. guest_team_en: item.guest_team_en,
  26817. betType: market.name,
  26818. betTypeEn: market.name_en,
  26819. betTypeName: selection.value_text,
  26820. betTypeNameEn: selection.value,
  26821. handicap: selection.handicap,
  26822. handicap_text: selection.handicap_text,
  26823. odds: selection.odd,
  26824. score: item.score,
  26825. state: item.state,
  26826. status: item.status,
  26827. is_roll: item.is_roll,
  26828. is_locked: item.is_locked,
  26829. uniqueKey,
  26830. optionValue: selection.value,
  26831. marketId: market.id,
  26832. mininum: market.mininum,
  26833. // 新增:最低限额
  26834. maxinum: market.maxinum,
  26835. // 新增:最高限额
  26836. selection: {
  26837. ...selection
  26838. }
  26839. };
  26840. orderStore.addOrderItem(betItem);
  26841. uni.vibrateShort();
  26842. }
  26843. };
  26844. const syncFromStore = () => {
  26845. const map = {};
  26846. if (orderStore.selectOrders && orderStore.selectOrders.length) {
  26847. orderStore.selectOrders.forEach((order) => {
  26848. if (order.uniqueKey)
  26849. map[order.uniqueKey] = true;
  26850. });
  26851. }
  26852. selectedMap.value = map;
  26853. };
  26854. vue.watch(() => orderStore.selectOrders, () => {
  26855. syncFromStore();
  26856. }, { deep: true });
  26857. const getStatusText = (state) => {
  26858. const states = { 0: t2("未开始"), 1: t2("进行中"), 2: t2("已完场"), 3: t2("延期"), 4: t2("取消") };
  26859. return states[state] || "";
  26860. };
  26861. const __returned__ = { t: t2, locale, router: router2, orderStore, props, leagueList, page, limit, isFetching, isNoMore, selectedMap, fetchLeagueList, onLoadMore, refresh, toggleLeague, goDetail, translateSelection, getUniqueKey, checkIsLocked, isOptionLocked, isSelected, handleOddsClick, syncFromStore, getStatusText, ref: vue.ref, watch: vue.watch, onMounted: vue.onMounted, get useI18n() {
  26862. return useI18n;
  26863. }, get getLeagueList() {
  26864. return getLeagueList;
  26865. }, get getSportSchedule() {
  26866. return getSportSchedule;
  26867. }, get useOrderStore() {
  26868. return useOrderStore;
  26869. } };
  26870. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  26871. return __returned__;
  26872. }
  26873. };
  26874. function _sfc_render$X(_ctx, _cache, $props, $setup, $data, $options) {
  26875. const _component_u_image = __unplugin_components_1$1;
  26876. const _component_u_icon = __unplugin_components_0$5;
  26877. const _component_u_loading = __unplugin_components_3$3;
  26878. const _component_u_tag = __unplugin_components_2$2;
  26879. const _component_u_empty = __unplugin_components_4$2;
  26880. return vue.openBlock(), vue.createElementBlock(
  26881. "scroll-view",
  26882. {
  26883. class: "league-scroll-view",
  26884. "scroll-y": "",
  26885. onScrolltolower: $setup.onLoadMore
  26886. },
  26887. [
  26888. vue.createElementVNode("view", { class: "league-list-container" }, [
  26889. (vue.openBlock(true), vue.createElementBlock(
  26890. vue.Fragment,
  26891. null,
  26892. vue.renderList($setup.leagueList, (league, lIndex) => {
  26893. return vue.openBlock(), vue.createElementBlock("view", {
  26894. class: "league-group",
  26895. key: league.id
  26896. }, [
  26897. vue.createElementVNode("view", {
  26898. class: "league-header",
  26899. onClick: ($event) => $setup.toggleLeague(lIndex)
  26900. }, [
  26901. vue.createElementVNode("view", { class: "l-left" }, [
  26902. vue.createVNode(_component_u_image, {
  26903. src: league.logo,
  26904. width: "24px",
  26905. height: "24px",
  26906. shape: "circle",
  26907. errorIcon: "photo"
  26908. }, null, 8, ["src"]),
  26909. vue.createElementVNode(
  26910. "text",
  26911. { class: "l-name" },
  26912. vue.toDisplayString($setup.locale === "zh" ? league.league : league.league_en),
  26913. 1
  26914. /* TEXT */
  26915. )
  26916. ]),
  26917. vue.createElementVNode("view", { class: "l-right" }, [
  26918. vue.createElementVNode(
  26919. "text",
  26920. { class: "l-count" },
  26921. vue.toDisplayString(league.sport_count),
  26922. 1
  26923. /* TEXT */
  26924. ),
  26925. vue.createVNode(_component_u_icon, {
  26926. name: league.isExpanded ? "arrow-up" : "arrow-down",
  26927. color: "#999",
  26928. size: "14",
  26929. style: { "margin-left": "6px" }
  26930. }, null, 8, ["name"])
  26931. ])
  26932. ], 8, ["onClick"]),
  26933. league.isExpanded ? (vue.openBlock(), vue.createElementBlock("view", {
  26934. key: 0,
  26935. class: "league-matches"
  26936. }, [
  26937. league.loadingMatches ? (vue.openBlock(), vue.createElementBlock("view", {
  26938. key: 0,
  26939. class: "loading-wrap"
  26940. }, [
  26941. vue.createVNode(_component_u_loading, {
  26942. mode: "circle",
  26943. color: "#f8b932"
  26944. })
  26945. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  26946. key: 1,
  26947. class: "matches-wrap"
  26948. }, [
  26949. (vue.openBlock(true), vue.createElementBlock(
  26950. vue.Fragment,
  26951. null,
  26952. vue.renderList(league.matches, (item, index) => {
  26953. var _a2, _b2, _c;
  26954. return vue.openBlock(), vue.createElementBlock("view", {
  26955. class: "match-card",
  26956. key: item.data_id || item.id,
  26957. onClick: ($event) => $setup.goDetail(item)
  26958. }, [
  26959. vue.createElementVNode("view", { class: "league-info" }, [
  26960. vue.createElementVNode("view", { class: "league-left" }, [
  26961. vue.createCommentVNode(' <u-image v-if="item.league_logo" :src="item.league_logo" width="16px" height="16px" shape="circle" errorIcon="photo"></u-image> '),
  26962. vue.createCommentVNode(' <u-icon v-else name="grid-fill" color="#f8b932" size="16"></u-icon> '),
  26963. vue.createVNode(_component_u_tag, {
  26964. size: "mini",
  26965. type: item.state === 0 ? "info" : "warning"
  26966. }, {
  26967. default: vue.withCtx(() => [
  26968. vue.createTextVNode(
  26969. vue.toDisplayString($setup.getStatusText(item.state)),
  26970. 1
  26971. /* TEXT */
  26972. )
  26973. ]),
  26974. _: 2
  26975. /* DYNAMIC */
  26976. }, 1032, ["type"]),
  26977. vue.createCommentVNode(` <text class="league-name">{{ locale === 'zh' ? item.league : item.league_en }}</text> `)
  26978. ]),
  26979. item.state === 1 && item.fixture_status ? (vue.openBlock(), vue.createElementBlock("view", { key: 0 }, [
  26980. vue.createVNode(_component_u_tag, {
  26981. text: $setup.t((_a2 = item.fixture_status) == null ? void 0 : _a2.long),
  26982. mode: "plain",
  26983. type: "primary",
  26984. size: "mini"
  26985. }, null, 8, ["text"]),
  26986. item.is_roll === 1 ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  26987. key: 0,
  26988. text: $setup.t("滚球"),
  26989. mode: "plain",
  26990. type: "primary",
  26991. size: "mini",
  26992. style: { "margin-left": "6px" }
  26993. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true)
  26994. ])) : vue.createCommentVNode("v-if", true)
  26995. ]),
  26996. vue.createElementVNode("view", { class: "match-time-status" }, [
  26997. item.fixture_status ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, [
  26998. ((_b2 = item.fixture_status) == null ? void 0 : _b2.seconds) ? (vue.openBlock(), vue.createElementBlock(
  26999. "span",
  27000. { key: 0 },
  27001. vue.toDisplayString((_c = item.fixture_status) == null ? void 0 : _c.seconds),
  27002. 1
  27003. /* TEXT */
  27004. )) : vue.createCommentVNode("v-if", true)
  27005. ])) : vue.createCommentVNode("v-if", true),
  27006. vue.createElementVNode(
  27007. "text",
  27008. { class: "match-time" },
  27009. vue.toDisplayString(item.game_time || "--:--"),
  27010. 1
  27011. /* TEXT */
  27012. )
  27013. ]),
  27014. vue.createElementVNode("view", { class: "team-item" }, [
  27015. vue.createVNode(_component_u_image, {
  27016. src: item.home_team_logo,
  27017. width: "28px",
  27018. height: "28px",
  27019. shape: "circle",
  27020. errorIcon: "photo"
  27021. }, null, 8, ["src"]),
  27022. vue.createElementVNode("view", {
  27023. class: "team-name",
  27024. style: { "display": "flex", "align-items": "center" }
  27025. }, [
  27026. vue.createTextVNode(
  27027. vue.toDisplayString($setup.locale === "zh" ? item.home_team : item.home_team_en) + " ",
  27028. 1
  27029. /* TEXT */
  27030. ),
  27031. vue.createVNode(_component_u_tag, {
  27032. size: "mini",
  27033. type: "success",
  27034. style: { "margin-top": "-2px", "margin-left": "4px" },
  27035. text: $setup.t("主")
  27036. }, null, 8, ["text"])
  27037. ]),
  27038. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  27039. "text",
  27040. {
  27041. key: 0,
  27042. class: "team-score"
  27043. },
  27044. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[0] : "0"),
  27045. 1
  27046. /* TEXT */
  27047. )) : vue.createCommentVNode("v-if", true)
  27048. ]),
  27049. vue.createElementVNode("view", { class: "team-item" }, [
  27050. vue.createVNode(_component_u_image, {
  27051. src: item.guest_team_logo,
  27052. width: "28px",
  27053. height: "28px",
  27054. shape: "circle",
  27055. errorIcon: "photo"
  27056. }, null, 8, ["src"]),
  27057. vue.createElementVNode("view", {
  27058. class: "team-name",
  27059. style: { "display": "flex", "align-items": "center" }
  27060. }, [
  27061. vue.createTextVNode(
  27062. vue.toDisplayString($setup.locale === "zh" ? item.guest_team : item.guest_team_en) + " ",
  27063. 1
  27064. /* TEXT */
  27065. ),
  27066. vue.createVNode(_component_u_tag, {
  27067. size: "mini",
  27068. type: "error",
  27069. style: { "margin-left": "4px", "margin-top": "-2px" },
  27070. text: $setup.t("客")
  27071. }, null, 8, ["text"])
  27072. ]),
  27073. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  27074. "text",
  27075. {
  27076. key: 0,
  27077. class: "team-score"
  27078. },
  27079. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[1] : "0"),
  27080. 1
  27081. /* TEXT */
  27082. )) : vue.createCommentVNode("v-if", true)
  27083. ]),
  27084. [0, 1].includes(item.state) ? (vue.openBlock(), vue.createElementBlock("view", {
  27085. key: 0,
  27086. class: "odds-group"
  27087. }, [
  27088. item.odds && item.odds.length > 0 && item.odds[0].values ? (vue.openBlock(), vue.createElementBlock("view", {
  27089. key: 0,
  27090. class: "odds-grid"
  27091. }, [
  27092. (vue.openBlock(true), vue.createElementBlock(
  27093. vue.Fragment,
  27094. null,
  27095. vue.renderList(item.odds[0].values.slice(0, 3), (opt, optIndex) => {
  27096. return vue.openBlock(), vue.createElementBlock("view", {
  27097. class: vue.normalizeClass(["odds-btn compact-btn", {
  27098. "is-active": $setup.isSelected(item.id, item.odds[0].id, opt),
  27099. "is-locked": $setup.isOptionLocked(item, opt)
  27100. }]),
  27101. key: optIndex,
  27102. onClick: vue.withModifiers(($event) => $setup.handleOddsClick(item, opt), ["stop"])
  27103. }, [
  27104. $setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createElementBlock("view", {
  27105. key: 0,
  27106. class: "locked-overlay"
  27107. }, [
  27108. vue.createVNode(_component_u_icon, {
  27109. name: "lock",
  27110. color: "#fff",
  27111. size: "24"
  27112. })
  27113. ])) : vue.createCommentVNode("v-if", true),
  27114. vue.createElementVNode("view", { class: "btn-top" }, [
  27115. vue.createElementVNode(
  27116. "text",
  27117. { class: "selection-name" },
  27118. vue.toDisplayString($setup.translateSelection($setup.locale === "zh" ? opt.value_text : opt.value)),
  27119. 1
  27120. /* TEXT */
  27121. ),
  27122. opt.handicap_text ? (vue.openBlock(), vue.createElementBlock(
  27123. "text",
  27124. {
  27125. key: 0,
  27126. class: "selection-handicap"
  27127. },
  27128. vue.toDisplayString(opt.handicap_text),
  27129. 1
  27130. /* TEXT */
  27131. )) : vue.createCommentVNode("v-if", true)
  27132. ]),
  27133. vue.createElementVNode("view", { class: "btn-bottom" }, [
  27134. vue.createElementVNode("view", {
  27135. class: "odds-val",
  27136. style: { "display": "flex" }
  27137. }, [
  27138. vue.createElementVNode(
  27139. "span",
  27140. null,
  27141. vue.toDisplayString(opt.odd || "-"),
  27142. 1
  27143. /* TEXT */
  27144. )
  27145. ])
  27146. ])
  27147. ], 10, ["onClick"]);
  27148. }),
  27149. 128
  27150. /* KEYED_FRAGMENT */
  27151. ))
  27152. ])) : vue.createCommentVNode("v-if", true)
  27153. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  27154. key: 1,
  27155. class: "match-footer-tip"
  27156. }, [
  27157. vue.createElementVNode(
  27158. "text",
  27159. null,
  27160. vue.toDisplayString($setup.getStatusText(item.state)),
  27161. 1
  27162. /* TEXT */
  27163. )
  27164. ])),
  27165. vue.createElementVNode("view", {
  27166. class: "match-footer-bar",
  27167. onClick: vue.withModifiers(($event) => $setup.goDetail(item), ["stop"])
  27168. }, [
  27169. vue.createElementVNode(
  27170. "text",
  27171. { class: "footer-text" },
  27172. vue.toDisplayString($setup.t("全部玩法")) + " " + vue.toDisplayString(item.odds_count ? `(${item.odds_count})` : ""),
  27173. 1
  27174. /* TEXT */
  27175. ),
  27176. vue.createVNode(_component_u_icon, {
  27177. name: "arrow-right",
  27178. color: "#999",
  27179. size: "12",
  27180. style: { "margin-left": "4px" }
  27181. })
  27182. ], 8, ["onClick"])
  27183. ], 8, ["onClick"]);
  27184. }),
  27185. 128
  27186. /* KEYED_FRAGMENT */
  27187. )),
  27188. !league.matches || league.matches.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  27189. key: 0,
  27190. class: "empty-box"
  27191. }, [
  27192. vue.createVNode(_component_u_empty, {
  27193. text: $setup.t("暂无赛事数据"),
  27194. mode: "data"
  27195. }, null, 8, ["text"])
  27196. ])) : vue.createCommentVNode("v-if", true)
  27197. ]))
  27198. ])) : vue.createCommentVNode("v-if", true)
  27199. ]);
  27200. }),
  27201. 128
  27202. /* KEYED_FRAGMENT */
  27203. )),
  27204. $setup.leagueList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  27205. key: 0,
  27206. class: "loading-more"
  27207. }, [
  27208. vue.createElementVNode(
  27209. "text",
  27210. null,
  27211. vue.toDisplayString($setup.isNoMore ? $setup.t("没有更多了") : $setup.t("正在加载")),
  27212. 1
  27213. /* TEXT */
  27214. )
  27215. ])) : vue.createCommentVNode("v-if", true)
  27216. ])
  27217. ],
  27218. 32
  27219. /* NEED_HYDRATION */
  27220. );
  27221. }
  27222. const LeagueList = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$X], ["__scopeId", "data-v-4130ae5c"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/SportsBetting/LeagueList/index.vue"]]);
  27223. const MIN_NEW_ITEMS$1 = 10;
  27224. const TIME_INCREMENT_MS = 6e4;
  27225. const itemHeight = 220;
  27226. const _sfc_main$X = {
  27227. __name: "index",
  27228. setup(__props, { expose: __expose }) {
  27229. __expose();
  27230. const { t: t2, locale } = useI18n();
  27231. const orderStore = useOrderStore();
  27232. const WebsocketData = useWebsocketDataStore();
  27233. const sportList = vue.ref([]);
  27234. const skeletonLoading = vue.ref(true);
  27235. const router2 = useRouter();
  27236. const currentDate = vue.ref("");
  27237. const isAndroid = uni.getSystemInfoSync().platform === "android";
  27238. const keyword = vue.ref("");
  27239. const currentSportIndex = vue.ref(0);
  27240. const sportCategoryList = vue.ref([
  27241. { name: "足球", icon: "⚽️", value: 1 },
  27242. { name: "篮球", icon: "🏀", value: 2 },
  27243. { name: "网球", icon: "🎾", value: 3 },
  27244. { name: "排球", icon: "🏐", value: 4 },
  27245. { name: "羽毛球", icon: "🏸", value: 5 },
  27246. { name: "乒乓球", icon: "🏓", value: 6 },
  27247. { name: "电竞", icon: "🎮", value: 7 }
  27248. ]);
  27249. const leagueListRef = vue.ref(null);
  27250. const onSearch = () => {
  27251. if (currentState.value === "league") {
  27252. if (leagueListRef.value) {
  27253. leagueListRef.value.refresh();
  27254. }
  27255. return;
  27256. }
  27257. onQuery(1, currentLimit.value);
  27258. };
  27259. const onSportCategoryChange = (index) => {
  27260. currentSportIndex.value = index;
  27261. formatAppLog("log", "at pages/Tabbar/SportsBetting/index.vue:234", "选择的体育分类:", sportCategoryList.value[index].name);
  27262. };
  27263. const isNoMore = vue.ref(false);
  27264. const isFetching = vue.ref(false);
  27265. const currentPage = vue.ref(1);
  27266. const currentLimit = vue.ref(20);
  27267. let currentQueryId = 0;
  27268. const scrollTop = vue.ref(0);
  27269. const scrollTopValue = vue.ref(0);
  27270. const containerHeight = vue.ref(800);
  27271. const onScroll = (e) => {
  27272. scrollTop.value = e.detail.scrollTop;
  27273. };
  27274. const startIndex = vue.computed(() => {
  27275. let index = Math.floor(scrollTop.value / itemHeight) - 3;
  27276. let count = Math.ceil(containerHeight.value / itemHeight) + 5;
  27277. let maxIndex = Math.max(0, sportList.value.length - count);
  27278. return Math.max(0, Math.min(index, maxIndex));
  27279. });
  27280. const endIndex = vue.computed(() => {
  27281. let count = Math.ceil(containerHeight.value / itemHeight) + 5;
  27282. return Math.min(sportList.value.length, startIndex.value + count);
  27283. });
  27284. const visibleSportList = vue.computed(() => {
  27285. if (isAndroid)
  27286. return sportList.value;
  27287. return sportList.value.slice(startIndex.value, endIndex.value);
  27288. });
  27289. const listPaddingTop = vue.computed(() => {
  27290. if (isAndroid)
  27291. return 0;
  27292. return startIndex.value * itemHeight;
  27293. });
  27294. const listPaddingBottom = vue.computed(() => {
  27295. if (isAndroid)
  27296. return 0;
  27297. return (sportList.value.length - endIndex.value) * itemHeight;
  27298. });
  27299. vue.onMounted(() => {
  27300. onQuery(1, currentLimit.value);
  27301. vue.nextTick(() => {
  27302. uni.createSelectorQuery().select(".scroll-view-container").boundingClientRect((rect) => {
  27303. if (rect && rect.height) {
  27304. containerHeight.value = rect.height;
  27305. }
  27306. }).exec();
  27307. });
  27308. });
  27309. const onLoadMore = () => {
  27310. if (isNoMore.value || isFetching.value || skeletonLoading.value)
  27311. return;
  27312. onQuery(currentPage.value + 1, currentLimit.value);
  27313. };
  27314. const oddsChangeMap = vue.ref(/* @__PURE__ */ new Map());
  27315. const getOddsKey = (matchId, marketId, selection) => {
  27316. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  27317. return `${matchId}_${marketId}_${selection.value}_${selection.handicap}`;
  27318. }
  27319. return `${matchId}_${marketId}_${selection.value}`;
  27320. };
  27321. const isOddsUp = (key) => {
  27322. const change = oddsChangeMap.value.get(key);
  27323. return (change == null ? void 0 : change.direction) === "up" && Date.now() - change.timestamp < 3e3;
  27324. };
  27325. const isOddsDown = (key) => {
  27326. const change = oddsChangeMap.value.get(key);
  27327. return (change == null ? void 0 : change.direction) === "down" && Date.now() - change.timestamp < 3e3;
  27328. };
  27329. const showChangeIcon = (key) => {
  27330. const change = oddsChangeMap.value.get(key);
  27331. return change && Date.now() - change.timestamp < 3e3;
  27332. };
  27333. const goDetail = (item) => {
  27334. router2.push({ name: "sportDetail", query: { data_id: item.data_id } });
  27335. };
  27336. const tabList = vue.computed(() => [
  27337. { name: t2("联赛"), value: "league" },
  27338. { name: t2("进行中"), value: 1 },
  27339. { name: t2("未开始"), value: 0 },
  27340. { name: t2("已完场"), value: 2 },
  27341. { name: t2("其他"), value: 4 }
  27342. ]);
  27343. const currentTabIndex = vue.ref(1);
  27344. const currentState = vue.ref(1);
  27345. const selectedMap = vue.ref({});
  27346. vue.watch(() => WebsocketData.data, handleWebsocketData);
  27347. const translateSelection = (valStr) => {
  27348. if (valStr === void 0 || valStr === null)
  27349. return "";
  27350. return String(valStr);
  27351. };
  27352. const getUniqueKey = (matchId, marketId, selection) => {
  27353. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  27354. return `${matchId}_${marketId}_${selection.value}_${selection.handicap}`;
  27355. }
  27356. return `${matchId}_${marketId}_${selection.value}`;
  27357. };
  27358. const checkIsLocked = (item) => {
  27359. if (!item)
  27360. return true;
  27361. if (Number(item.is_locked) === 1)
  27362. return true;
  27363. if (Number(item.status) !== 1)
  27364. return true;
  27365. const state = Number(item.state);
  27366. if (state !== 0 && state !== 1)
  27367. return true;
  27368. return false;
  27369. };
  27370. const isOptionLocked = (item, opt) => {
  27371. if (checkIsLocked(item))
  27372. return true;
  27373. if (item && item.odd_ids_locked && item.odds && item.odds.length > 0) {
  27374. let lockedIds = item.odd_ids_locked;
  27375. if (typeof lockedIds === "string") {
  27376. try {
  27377. lockedIds = JSON.parse(lockedIds);
  27378. } catch (e) {
  27379. lockedIds = [];
  27380. }
  27381. }
  27382. const currentMarketId = item.odds[0].id;
  27383. if (Array.isArray(lockedIds) && lockedIds.map(Number).includes(Number(currentMarketId))) {
  27384. return true;
  27385. }
  27386. }
  27387. if (!opt)
  27388. return true;
  27389. if (!opt.odd || opt.odd === "-" || Number(opt.odd) === 0)
  27390. return true;
  27391. if (opt.suspended === true || String(opt.suspended).toLowerCase() === "true")
  27392. return true;
  27393. return false;
  27394. };
  27395. const syncFromStore = () => {
  27396. const map = {};
  27397. if (orderStore.selectOrders && orderStore.selectOrders.length) {
  27398. orderStore.selectOrders.forEach((order) => {
  27399. if (order.uniqueKey) {
  27400. map[order.uniqueKey] = true;
  27401. }
  27402. });
  27403. }
  27404. selectedMap.value = map;
  27405. };
  27406. vue.watch(() => orderStore.selectOrders, () => {
  27407. syncFromStore();
  27408. }, { deep: true, immediate: true });
  27409. function handleWebsocketData(data) {
  27410. if (currentState.value === "league")
  27411. return;
  27412. try {
  27413. const res = typeof data === "string" ? JSON.parse(data) : data;
  27414. if (res.type === "sport_list" && Array.isArray(res.message)) {
  27415. res.message.forEach((newMatch) => {
  27416. var _a2;
  27417. const idx = sportList.value.findIndex((item) => item.data_id === newMatch.data_id);
  27418. if (idx !== -1) {
  27419. const oldMatch = sportList.value[idx];
  27420. let parsedOdds = newMatch.odds;
  27421. if (typeof parsedOdds === "string") {
  27422. try {
  27423. parsedOdds = JSON.parse(parsedOdds);
  27424. } catch (e) {
  27425. parsedOdds = [];
  27426. }
  27427. } else if (!parsedOdds) {
  27428. parsedOdds = oldMatch.odds;
  27429. }
  27430. if (oldMatch && ((_a2 = oldMatch.odds) == null ? void 0 : _a2[0]) && (parsedOdds == null ? void 0 : parsedOdds[0])) {
  27431. const oldMarket = oldMatch.odds[0];
  27432. const newMarket = parsedOdds[0];
  27433. if (oldMarket.values && newMarket.values) {
  27434. newMarket.values.forEach((newOpt) => {
  27435. const oldOpt = oldMarket.values.find(
  27436. (o) => o.value === newOpt.value && (o.handicap == newOpt.handicap || !o.handicap && !newOpt.handicap)
  27437. );
  27438. if ((oldOpt == null ? void 0 : oldOpt.odd) && (newOpt == null ? void 0 : newOpt.odd)) {
  27439. const oldOddNum = parseFloat(oldOpt.odd);
  27440. const newOddNum = parseFloat(newOpt.odd);
  27441. if (!isNaN(oldOddNum) && !isNaN(newOddNum) && oldOddNum !== newOddNum) {
  27442. const marketId = newMarket.id || oldMarket.id;
  27443. const matchId = oldMatch.id || oldMatch.data_id;
  27444. const key = getOddsKey(matchId, marketId, newOpt);
  27445. const direction = newOddNum > oldOddNum ? "up" : "down";
  27446. oddsChangeMap.value.set(key, {
  27447. direction,
  27448. timestamp: Date.now()
  27449. });
  27450. let timer = setTimeout(() => {
  27451. oddsChangeMap.value.delete(key);
  27452. clearTimeout(timer);
  27453. }, 3100);
  27454. }
  27455. }
  27456. });
  27457. }
  27458. }
  27459. const isStateChanged = newMatch.state !== void 0 && Number(newMatch.state) !== Number(currentState.value);
  27460. const isStatusOffline = newMatch.status !== void 0 && Number(newMatch.status) === 0;
  27461. if (isStateChanged || isStatusOffline) {
  27462. sportList.value.splice(idx, 1);
  27463. } else {
  27464. if (typeof parsedOdds === "string") {
  27465. try {
  27466. parsedOdds = JSON.parse(parsedOdds);
  27467. } catch (e) {
  27468. parsedOdds = [];
  27469. }
  27470. } else if (!parsedOdds) {
  27471. parsedOdds = sportList.value[idx].odds;
  27472. }
  27473. let parsedLockedIds = newMatch.odd_ids_locked;
  27474. if (typeof parsedLockedIds === "string") {
  27475. try {
  27476. parsedLockedIds = JSON.parse(parsedLockedIds);
  27477. } catch (e) {
  27478. parsedLockedIds = [];
  27479. }
  27480. } else if (parsedLockedIds === void 0) {
  27481. parsedLockedIds = sportList.value[idx].odd_ids_locked || [];
  27482. }
  27483. sportList.value[idx] = {
  27484. ...sportList.value[idx],
  27485. ...newMatch,
  27486. odds: parsedOdds,
  27487. odd_ids_locked: parsedLockedIds
  27488. };
  27489. if (sportList.value[idx].odds && sportList.value[idx].odds.length > 0) {
  27490. const market = sportList.value[idx].odds[0];
  27491. if (market.values) {
  27492. market.values.forEach((wsItem) => {
  27493. if (isOptionLocked(sportList.value[idx], wsItem)) {
  27494. const uniqueKey = getUniqueKey(sportList.value[idx].id, market.id, wsItem);
  27495. }
  27496. });
  27497. }
  27498. }
  27499. orderStore.updateMatchStatus(newMatch.data_id, sportList.value[idx]);
  27500. }
  27501. } else {
  27502. const isStateMatching = newMatch.state !== void 0 && Number(newMatch.state) === Number(currentState.value);
  27503. const isStatusOnline = newMatch.status === void 0 || Number(newMatch.status) === 1;
  27504. if (isStateMatching && isStatusOnline) {
  27505. let parsedOdds = newMatch.odds;
  27506. if (typeof parsedOdds === "string") {
  27507. try {
  27508. parsedOdds = JSON.parse(parsedOdds);
  27509. } catch (e) {
  27510. parsedOdds = [];
  27511. }
  27512. } else if (!parsedOdds) {
  27513. parsedOdds = [];
  27514. }
  27515. let parsedLockedIds = newMatch.odd_ids_locked;
  27516. if (typeof parsedLockedIds === "string") {
  27517. try {
  27518. parsedLockedIds = JSON.parse(parsedLockedIds);
  27519. } catch (e) {
  27520. parsedLockedIds = [];
  27521. }
  27522. } else if (parsedLockedIds === void 0) {
  27523. parsedLockedIds = [];
  27524. }
  27525. const formattedNewMatch = {
  27526. ...newMatch,
  27527. odds: parsedOdds,
  27528. odd_ids_locked: parsedLockedIds
  27529. };
  27530. sportList.value.push(formattedNewMatch);
  27531. sportList.value.sort((a, b) => {
  27532. const timeA = a.game_time ? new Date(a.game_time.replace(/-/g, "/")).getTime() : 0;
  27533. const timeB = b.game_time ? new Date(b.game_time.replace(/-/g, "/")).getTime() : 0;
  27534. return timeA - timeB;
  27535. });
  27536. }
  27537. }
  27538. });
  27539. }
  27540. } catch (error) {
  27541. formatAppLog("error", "at pages/Tabbar/SportsBetting/index.vue:502", "WebSocket解析错误:", error);
  27542. }
  27543. }
  27544. const setupSocketListener = () => {
  27545. uni.$on("onSocketMessage", handleWebsocketData);
  27546. };
  27547. const removeSocketListener = () => {
  27548. };
  27549. onShow(() => {
  27550. syncFromStore();
  27551. });
  27552. vue.onUnmounted(() => {
  27553. });
  27554. const getTodayStr = () => {
  27555. const d = /* @__PURE__ */ new Date();
  27556. const y = d.getFullYear();
  27557. const m = String(d.getMonth() + 1).padStart(2, "0");
  27558. const day = String(d.getDate()).padStart(2, "0");
  27559. return `${y}-${m}-${day}`;
  27560. };
  27561. async function onQuery(pageNo, pageSize) {
  27562. if (currentState.value === "league")
  27563. return;
  27564. const queryId = ++currentQueryId;
  27565. try {
  27566. if (pageNo === 1) {
  27567. isNoMore.value = false;
  27568. scrollTopValue.value = scrollTopValue.value === 0 ? -0.1 : 0;
  27569. scrollTop.value = 0;
  27570. currentPage.value = 1;
  27571. skeletonLoading.value = true;
  27572. sportList.value = [];
  27573. } else {
  27574. if (isFetching.value || isNoMore.value)
  27575. return;
  27576. }
  27577. isFetching.value = true;
  27578. let accumulatedNewItems = [];
  27579. let currentApiGameTime = null;
  27580. let attemptCount = 0;
  27581. const maxAttempts = 5;
  27582. if (pageNo > 1 && sportList.value.length > 0) {
  27583. const lastItem = sportList.value[sportList.value.length - 1];
  27584. if (lastItem && lastItem.game_time) {
  27585. currentApiGameTime = lastItem.game_time;
  27586. }
  27587. }
  27588. let targetCount = pageNo === 1 ? pageSize : MIN_NEW_ITEMS$1;
  27589. while (accumulatedNewItems.length < targetCount && !isNoMore.value && attemptCount < maxAttempts) {
  27590. if (queryId !== currentQueryId)
  27591. return;
  27592. attemptCount++;
  27593. const params = {
  27594. page: 1,
  27595. limit: pageSize,
  27596. state: currentState.value
  27597. };
  27598. if (keyword.value) {
  27599. params.keyword = keyword.value;
  27600. }
  27601. if (currentApiGameTime) {
  27602. params.game_time = currentApiGameTime;
  27603. }
  27604. const dateObj = {
  27605. start_time: currentDate.value,
  27606. end_time: currentDate.value
  27607. };
  27608. if (currentTabIndex.value === 2 || currentTabIndex.value === 3) {
  27609. Object.assign(params, dateObj);
  27610. }
  27611. const res = await getSportSchedule(params);
  27612. if (queryId !== currentQueryId)
  27613. return;
  27614. if (res.code === 1 && res.data.list && res.data.list.length > 0) {
  27615. const rawList = res.data.list;
  27616. const formatList = rawList.map((item) => {
  27617. if (typeof item.odds === "string") {
  27618. try {
  27619. item.odds = JSON.parse(item.odds);
  27620. } catch (e) {
  27621. item.odds = [];
  27622. }
  27623. }
  27624. return item;
  27625. });
  27626. const existingIds = /* @__PURE__ */ new Set([
  27627. ...pageNo === 1 ? [] : sportList.value.map((i) => i.id),
  27628. ...accumulatedNewItems.map((i) => i.id)
  27629. ]);
  27630. const newItems = formatList.filter((item) => !existingIds.has(item.id));
  27631. accumulatedNewItems = accumulatedNewItems.concat(newItems);
  27632. if (rawList.length < pageSize) {
  27633. isNoMore.value = true;
  27634. } else {
  27635. if (newItems.length === 0) {
  27636. let baseTimeStr = currentApiGameTime || rawList[rawList.length - 1].game_time;
  27637. if (baseTimeStr) {
  27638. let dateVal = new Date(baseTimeStr.replace(/-/g, "/"));
  27639. if (!isNaN(dateVal.getTime())) {
  27640. dateVal = new Date(dateVal.getTime() + TIME_INCREMENT_MS);
  27641. const y = dateVal.getFullYear();
  27642. const m = String(dateVal.getMonth() + 1).padStart(2, "0");
  27643. const d = String(dateVal.getDate()).padStart(2, "0");
  27644. const h = String(dateVal.getHours()).padStart(2, "0");
  27645. const min = String(dateVal.getMinutes()).padStart(2, "0");
  27646. const s = String(dateVal.getSeconds()).padStart(2, "0");
  27647. currentApiGameTime = `${y}-${m}-${d} ${h}:${min}:${s}`;
  27648. } else {
  27649. currentApiGameTime = rawList[rawList.length - 1].game_time;
  27650. }
  27651. }
  27652. } else {
  27653. currentApiGameTime = rawList[rawList.length - 1].game_time;
  27654. }
  27655. }
  27656. } else {
  27657. isNoMore.value = true;
  27658. }
  27659. }
  27660. if (queryId === currentQueryId) {
  27661. if (pageNo === 1) {
  27662. sportList.value = accumulatedNewItems;
  27663. } else {
  27664. sportList.value = sportList.value.concat(accumulatedNewItems);
  27665. }
  27666. currentPage.value = pageNo;
  27667. skeletonLoading.value = false;
  27668. isFetching.value = false;
  27669. }
  27670. } catch (error) {
  27671. if (queryId === currentQueryId) {
  27672. isNoMore.value = true;
  27673. skeletonLoading.value = false;
  27674. isFetching.value = false;
  27675. }
  27676. }
  27677. }
  27678. const onTabChange = (index) => {
  27679. currentTabIndex.value = index;
  27680. const selectedTab = tabList.value[index];
  27681. if (selectedTab) {
  27682. currentState.value = selectedTab.value;
  27683. if (currentState.value !== "league") {
  27684. currentDate.value = getTodayStr();
  27685. onQuery(1, currentLimit.value);
  27686. }
  27687. }
  27688. };
  27689. const getStatusText = (state) => {
  27690. const states = { 0: t2("未开始"), 1: t2("进行中"), 2: t2("已完场"), 3: t2("延期"), 4: t2("取消") };
  27691. return states[state] || "";
  27692. };
  27693. const isSelected = (matchId, marketId, selection) => {
  27694. if (!selection)
  27695. return false;
  27696. const uniqueKey = getUniqueKey(matchId, marketId, selection);
  27697. return !!selectedMap.value[uniqueKey];
  27698. };
  27699. const handleOddsClick = (item, selection) => {
  27700. if (isOptionLocked(item, selection))
  27701. return;
  27702. if (!item.odds || item.odds.length === 0)
  27703. return;
  27704. const market = item.odds[0];
  27705. const uniqueKey = getUniqueKey(item.id, market.id, selection);
  27706. if (selectedMap.value[uniqueKey]) {
  27707. orderStore.removeOrderItemByKey(uniqueKey);
  27708. } else {
  27709. if (market.values) {
  27710. market.values.forEach((wsItem) => {
  27711. const otherKey = getUniqueKey(item.id, market.id, wsItem);
  27712. if (selectedMap.value[otherKey]) {
  27713. orderStore.removeOrderItemByKey(otherKey);
  27714. }
  27715. });
  27716. }
  27717. const betItem = {
  27718. matchId: item.id,
  27719. data_id: item.data_id,
  27720. league: item.league,
  27721. league_en: item.league_en,
  27722. homeTeam: item.home_team,
  27723. home_team_en: item.home_team_en,
  27724. guestTeam: item.guest_team,
  27725. guest_team_en: item.guest_team_en,
  27726. betType: market.name,
  27727. betTypeEn: market.name_en,
  27728. betTypeName: selection.value_text,
  27729. betTypeNameEn: selection.value,
  27730. handicap: selection.handicap,
  27731. handicap_text: selection.handicap_text,
  27732. odds: selection.odd,
  27733. score: item.score,
  27734. state: item.state,
  27735. status: item.status,
  27736. is_roll: item.is_roll,
  27737. is_locked: item.is_locked,
  27738. uniqueKey,
  27739. optionValue: selection.value,
  27740. submit_value: selection.submit_value,
  27741. marketId: market.id,
  27742. mininum: market.mininum,
  27743. // 新增:最低限额
  27744. maxinum: market.maxinum,
  27745. // 新增:最高限额
  27746. selection: {
  27747. ...selection
  27748. }
  27749. };
  27750. orderStore.addOrderItem(betItem);
  27751. uni.vibrateShort();
  27752. }
  27753. };
  27754. const onDateChange = (e) => {
  27755. currentDate.value = e;
  27756. if (currentTabIndex.value === 2 || currentTabIndex.value === 3) {
  27757. onQuery(1, currentLimit.value);
  27758. }
  27759. };
  27760. const __returned__ = { t: t2, locale, orderStore, WebsocketData, sportList, skeletonLoading, router: router2, currentDate, isAndroid, keyword, currentSportIndex, sportCategoryList, leagueListRef, onSearch, onSportCategoryChange, isNoMore, isFetching, currentPage, currentLimit, MIN_NEW_ITEMS: MIN_NEW_ITEMS$1, TIME_INCREMENT_MS, get currentQueryId() {
  27761. return currentQueryId;
  27762. }, set currentQueryId(v) {
  27763. currentQueryId = v;
  27764. }, scrollTop, scrollTopValue, itemHeight, containerHeight, onScroll, startIndex, endIndex, visibleSportList, listPaddingTop, listPaddingBottom, onLoadMore, oddsChangeMap, getOddsKey, isOddsUp, isOddsDown, showChangeIcon, goDetail, tabList, currentTabIndex, currentState, selectedMap, translateSelection, getUniqueKey, checkIsLocked, isOptionLocked, syncFromStore, handleWebsocketData, setupSocketListener, removeSocketListener, getTodayStr, onQuery, onTabChange, getStatusText, isSelected, handleOddsClick, onDateChange, ref: vue.ref, watch: vue.watch, computed: vue.computed, onUnmounted: vue.onUnmounted, onMounted: vue.onMounted, nextTick: vue.nextTick, get useI18n() {
  27765. return useI18n;
  27766. }, get onShow() {
  27767. return onShow;
  27768. }, get getSportSchedule() {
  27769. return getSportSchedule;
  27770. }, get useOrderStore() {
  27771. return useOrderStore;
  27772. }, get getLocale() {
  27773. return getLocale;
  27774. }, SportDateFilter, get useWebsocketDataStore() {
  27775. return useWebsocketDataStore;
  27776. }, get formatRange() {
  27777. return formatRange;
  27778. }, LeagueList };
  27779. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  27780. return __returned__;
  27781. }
  27782. };
  27783. function _sfc_render$W(_ctx, _cache, $props, $setup, $data, $options) {
  27784. const _component_u_search = __unplugin_components_0$1;
  27785. const _component_u_skeleton = __unplugin_components_0$3;
  27786. const _component_u_image = __unplugin_components_1$1;
  27787. const _component_u_icon = __unplugin_components_0$5;
  27788. const _component_u_tag = __unplugin_components_2$2;
  27789. const _component_u_empty = __unplugin_components_4$2;
  27790. const _component_PageContainer = PageContainer;
  27791. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  27792. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  27793. default: vue.withCtx(() => [
  27794. vue.createVNode(_component_PageContainer, {
  27795. "nav-title": $setup.t("赛事列表")
  27796. }, {
  27797. default: vue.withCtx(() => [
  27798. vue.createElementVNode("view", {
  27799. class: "page-content",
  27800. style: { "display": "flex", "flex-direction": "column" }
  27801. }, [
  27802. vue.createElementVNode(
  27803. "view",
  27804. {
  27805. onTouchmove: _cache[2] || (_cache[2] = vue.withModifiers(() => {
  27806. }, ["stop", "prevent"]))
  27807. },
  27808. [
  27809. vue.createElementVNode("view", { class: "sticky-tabs" }, [
  27810. vue.createElementVNode("view", { class: "search-box" }, [
  27811. vue.createVNode(_component_u_search, {
  27812. placeholder: $setup.t("搜索赛事关键字"),
  27813. modelValue: $setup.keyword,
  27814. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.keyword = $event),
  27815. "show-action": true,
  27816. "action-text": $setup.t("搜索"),
  27817. onSearch: $setup.onSearch,
  27818. onCustom: $setup.onSearch,
  27819. onClear: $setup.onSearch,
  27820. "bg-color": "#f5f6fa",
  27821. shape: "round"
  27822. }, null, 8, ["placeholder", "modelValue", "action-text"])
  27823. ]),
  27824. vue.createElementVNode("scroll-view", {
  27825. "scroll-x": "",
  27826. class: "capsule-tabs-scroll",
  27827. "show-scrollbar": false
  27828. }, [
  27829. vue.createElementVNode("view", { class: "capsule-tabs-container" }, [
  27830. (vue.openBlock(true), vue.createElementBlock(
  27831. vue.Fragment,
  27832. null,
  27833. vue.renderList($setup.tabList, (item, index) => {
  27834. return vue.openBlock(), vue.createElementBlock("view", {
  27835. class: vue.normalizeClass(["capsule-tab-item", { "is-active": $setup.currentTabIndex === index }]),
  27836. key: index,
  27837. onClick: ($event) => $setup.onTabChange(index)
  27838. }, [
  27839. vue.createElementVNode(
  27840. "text",
  27841. null,
  27842. vue.toDisplayString(item.name),
  27843. 1
  27844. /* TEXT */
  27845. )
  27846. ], 10, ["onClick"]);
  27847. }),
  27848. 128
  27849. /* KEYED_FRAGMENT */
  27850. ))
  27851. ])
  27852. ])
  27853. ]),
  27854. vue.withDirectives(vue.createVNode($setup["SportDateFilter"], {
  27855. state: $setup.tabList[$setup.currentTabIndex].value,
  27856. date: $setup.currentDate,
  27857. "onUpdate:date": _cache[1] || (_cache[1] = ($event) => $setup.currentDate = $event),
  27858. onChange: $setup.onDateChange
  27859. }, null, 8, ["state", "date"]), [
  27860. [vue.vShow, $setup.currentState !== "league" && $setup.currentTabIndex !== 0 && $setup.currentTabIndex !== 1 && $setup.currentTabIndex !== 4]
  27861. ])
  27862. ],
  27863. 32
  27864. /* NEED_HYDRATION */
  27865. ),
  27866. $setup.currentState === "league" ? (vue.openBlock(), vue.createBlock($setup["LeagueList"], {
  27867. key: 0,
  27868. keyword: $setup.keyword,
  27869. ref: "leagueListRef"
  27870. }, null, 8, ["keyword"])) : vue.createCommentVNode("v-if", true),
  27871. vue.withDirectives(vue.createElementVNode("scroll-view", {
  27872. class: "scroll-view-container",
  27873. "scroll-y": "",
  27874. "scroll-top": $setup.scrollTopValue,
  27875. "scroll-with-animation": false,
  27876. onScrolltolower: $setup.onLoadMore,
  27877. onScroll: $setup.onScroll
  27878. }, [
  27879. vue.createElementVNode("view", { class: "match-list" }, [
  27880. $setup.skeletonLoading ? (vue.openBlock(), vue.createElementBlock(
  27881. vue.Fragment,
  27882. { key: 0 },
  27883. vue.renderList(5, (i) => {
  27884. return vue.createElementVNode("view", {
  27885. class: "match-card",
  27886. key: i
  27887. }, [
  27888. vue.createVNode(_component_u_skeleton, {
  27889. loading: true,
  27890. animate: true,
  27891. rows: "3",
  27892. title: "",
  27893. avatar: "",
  27894. "avatar-size": 28
  27895. })
  27896. ]);
  27897. }),
  27898. 64
  27899. /* STABLE_FRAGMENT */
  27900. )) : (vue.openBlock(), vue.createElementBlock(
  27901. "view",
  27902. {
  27903. key: 1,
  27904. style: vue.normalizeStyle({ paddingTop: $setup.listPaddingTop + "px", paddingBottom: $setup.listPaddingBottom + "px" })
  27905. },
  27906. [
  27907. (vue.openBlock(true), vue.createElementBlock(
  27908. vue.Fragment,
  27909. null,
  27910. vue.renderList($setup.visibleSportList, (item, index) => {
  27911. var _a2, _b2, _c;
  27912. return vue.openBlock(), vue.createElementBlock("view", {
  27913. class: "match-card",
  27914. key: item.data_id || item.id,
  27915. onClick: ($event) => $setup.goDetail(item)
  27916. }, [
  27917. vue.createElementVNode("view", { class: "league-info" }, [
  27918. vue.createElementVNode("view", { class: "league-left" }, [
  27919. item.league_logo ? (vue.openBlock(), vue.createBlock(_component_u_image, {
  27920. key: 0,
  27921. src: item.league_logo,
  27922. width: "16px",
  27923. height: "16px",
  27924. shape: "circle",
  27925. errorIcon: "photo"
  27926. }, null, 8, ["src"])) : (vue.openBlock(), vue.createBlock(_component_u_icon, {
  27927. key: 1,
  27928. name: "grid-fill",
  27929. color: "#f8b932",
  27930. size: "16"
  27931. })),
  27932. vue.createElementVNode(
  27933. "text",
  27934. { class: "league-name" },
  27935. vue.toDisplayString($setup.locale === "zh" ? item.league : item.league_en),
  27936. 1
  27937. /* TEXT */
  27938. )
  27939. ]),
  27940. item.state === 1 && item.fixture_status ? (vue.openBlock(), vue.createElementBlock("view", { key: 0 }, [
  27941. vue.createVNode(_component_u_tag, {
  27942. text: $setup.t((_a2 = item.fixture_status) == null ? void 0 : _a2.long),
  27943. mode: "plain",
  27944. type: "primary",
  27945. size: "mini"
  27946. }, null, 8, ["text"]),
  27947. item.is_roll === 1 ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  27948. key: 0,
  27949. text: $setup.t("滚球"),
  27950. mode: "plain",
  27951. type: "primary",
  27952. size: "mini",
  27953. style: { "margin-left": "6px" }
  27954. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true)
  27955. ])) : vue.createCommentVNode("v-if", true)
  27956. ]),
  27957. vue.createElementVNode("view", { class: "match-time-status" }, [
  27958. item.fixture_status ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, [
  27959. ((_b2 = item.fixture_status) == null ? void 0 : _b2.seconds) ? (vue.openBlock(), vue.createElementBlock(
  27960. "span",
  27961. { key: 0 },
  27962. vue.toDisplayString((_c = item.fixture_status) == null ? void 0 : _c.seconds),
  27963. 1
  27964. /* TEXT */
  27965. )) : vue.createCommentVNode("v-if", true)
  27966. ])) : vue.createCommentVNode("v-if", true),
  27967. vue.createElementVNode(
  27968. "text",
  27969. { class: "match-time" },
  27970. vue.toDisplayString(item.game_time || "--:--"),
  27971. 1
  27972. /* TEXT */
  27973. )
  27974. ]),
  27975. vue.createElementVNode("view", { class: "team-item" }, [
  27976. vue.createVNode(_component_u_image, {
  27977. src: item.home_team_logo,
  27978. width: "28px",
  27979. height: "28px",
  27980. shape: "circle",
  27981. errorIcon: "photo"
  27982. }, null, 8, ["src"]),
  27983. vue.createElementVNode("view", {
  27984. class: "team-name",
  27985. style: { "display": "flex", "align-items": "center" }
  27986. }, [
  27987. vue.createTextVNode(
  27988. vue.toDisplayString($setup.locale === "zh" ? item.home_team : item.home_team_en) + " ",
  27989. 1
  27990. /* TEXT */
  27991. ),
  27992. vue.createVNode(_component_u_tag, {
  27993. size: "mini",
  27994. type: "success",
  27995. style: { "margin-top": "-2px", "margin-left": "4px" },
  27996. text: $setup.t("主")
  27997. }, null, 8, ["text"])
  27998. ]),
  27999. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  28000. "text",
  28001. {
  28002. key: 0,
  28003. class: "team-score"
  28004. },
  28005. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[0] : "0"),
  28006. 1
  28007. /* TEXT */
  28008. )) : vue.createCommentVNode("v-if", true)
  28009. ]),
  28010. vue.createElementVNode("view", { class: "team-item" }, [
  28011. vue.createVNode(_component_u_image, {
  28012. src: item.guest_team_logo,
  28013. width: "28px",
  28014. height: "28px",
  28015. shape: "circle",
  28016. errorIcon: "photo"
  28017. }, null, 8, ["src"]),
  28018. vue.createElementVNode("view", {
  28019. class: "team-name",
  28020. style: { "display": "flex", "align-items": "center" }
  28021. }, [
  28022. vue.createTextVNode(
  28023. vue.toDisplayString($setup.locale === "zh" ? item.guest_team : item.guest_team_en) + " ",
  28024. 1
  28025. /* TEXT */
  28026. ),
  28027. vue.createVNode(_component_u_tag, {
  28028. size: "mini",
  28029. type: "error",
  28030. style: { "margin-left": "4px", "margin-top": "-2px" },
  28031. text: $setup.t("客")
  28032. }, null, 8, ["text"])
  28033. ]),
  28034. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  28035. "text",
  28036. {
  28037. key: 0,
  28038. class: "team-score"
  28039. },
  28040. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[1] : "0"),
  28041. 1
  28042. /* TEXT */
  28043. )) : vue.createCommentVNode("v-if", true)
  28044. ]),
  28045. [0, 1].includes(item.state) ? (vue.openBlock(), vue.createElementBlock("view", {
  28046. key: 0,
  28047. class: "odds-group"
  28048. }, [
  28049. item.odds && item.odds.length > 0 && item.odds[0].values ? (vue.openBlock(), vue.createElementBlock("view", {
  28050. key: 0,
  28051. class: "odds-grid"
  28052. }, [
  28053. (vue.openBlock(true), vue.createElementBlock(
  28054. vue.Fragment,
  28055. null,
  28056. vue.renderList(item.odds[0].values.slice(0, 3), (opt, optIndex) => {
  28057. return vue.openBlock(), vue.createElementBlock("view", {
  28058. class: vue.normalizeClass(["odds-btn compact-btn", {
  28059. "is-active": $setup.isSelected(item.id, item.odds[0].id, opt),
  28060. "odds-up": $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt),
  28061. "odds-down": $setup.isOddsDown($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt),
  28062. "is-locked": $setup.isOptionLocked(item, opt)
  28063. }]),
  28064. key: optIndex,
  28065. onClick: vue.withModifiers(($event) => $setup.handleOddsClick(item, opt), ["stop"])
  28066. }, [
  28067. $setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createElementBlock("view", {
  28068. key: 0,
  28069. class: "locked-overlay"
  28070. }, [
  28071. vue.createVNode(_component_u_icon, {
  28072. name: "lock",
  28073. color: "#fff",
  28074. size: "24"
  28075. })
  28076. ])) : vue.createCommentVNode("v-if", true),
  28077. vue.createElementVNode("view", { class: "btn-top" }, [
  28078. vue.createElementVNode(
  28079. "text",
  28080. { class: "selection-name" },
  28081. vue.toDisplayString($setup.translateSelection($setup.locale === "zh" ? opt.value_text : opt.value)),
  28082. 1
  28083. /* TEXT */
  28084. ),
  28085. opt.handicap_text ? (vue.openBlock(), vue.createElementBlock(
  28086. "text",
  28087. {
  28088. key: 0,
  28089. class: "selection-handicap"
  28090. },
  28091. vue.toDisplayString(opt.handicap_text),
  28092. 1
  28093. /* TEXT */
  28094. )) : vue.createCommentVNode("v-if", true)
  28095. ]),
  28096. vue.createElementVNode("view", { class: "btn-bottom" }, [
  28097. vue.createElementVNode("view", {
  28098. class: "odds-val",
  28099. style: { "display": "flex", "align-items": "center" }
  28100. }, [
  28101. vue.createElementVNode(
  28102. "span",
  28103. null,
  28104. vue.toDisplayString(opt.odd || "-"),
  28105. 1
  28106. /* TEXT */
  28107. ),
  28108. $setup.showChangeIcon($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createElementBlock(
  28109. "view",
  28110. {
  28111. key: 0,
  28112. class: vue.normalizeClass(["change-icon", {
  28113. up: $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt)),
  28114. down: $setup.isOddsDown($setup.getOddsKey(item.id, item.odds[0].id, opt))
  28115. }])
  28116. },
  28117. [
  28118. vue.withDirectives(vue.createVNode(
  28119. _component_u_icon,
  28120. {
  28121. name: "arrow-up-fill",
  28122. size: "12"
  28123. },
  28124. null,
  28125. 512
  28126. /* NEED_PATCH */
  28127. ), [
  28128. [vue.vShow, $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt))]
  28129. ]),
  28130. vue.withDirectives(vue.createVNode(
  28131. _component_u_icon,
  28132. {
  28133. name: "arrow-down-fill",
  28134. size: "12"
  28135. },
  28136. null,
  28137. 512
  28138. /* NEED_PATCH */
  28139. ), [
  28140. [vue.vShow, !$setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt))]
  28141. ])
  28142. ],
  28143. 2
  28144. /* CLASS */
  28145. )) : vue.createCommentVNode("v-if", true)
  28146. ])
  28147. ])
  28148. ], 10, ["onClick"]);
  28149. }),
  28150. 128
  28151. /* KEYED_FRAGMENT */
  28152. ))
  28153. ])) : vue.createCommentVNode("v-if", true)
  28154. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  28155. key: 1,
  28156. class: "match-footer-tip"
  28157. }, [
  28158. vue.createElementVNode(
  28159. "text",
  28160. null,
  28161. vue.toDisplayString($setup.getStatusText(item.state)),
  28162. 1
  28163. /* TEXT */
  28164. )
  28165. ])),
  28166. item.state === 0 || item.state === 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  28167. key: 2,
  28168. class: "match-footer-bar",
  28169. onClick: vue.withModifiers(($event) => $setup.goDetail(item), ["stop"])
  28170. }, [
  28171. vue.createElementVNode(
  28172. "text",
  28173. { class: "footer-text" },
  28174. vue.toDisplayString($setup.t("全部玩法")) + " " + vue.toDisplayString(item.odds_count ? `(${item.odds_count})` : ""),
  28175. 1
  28176. /* TEXT */
  28177. ),
  28178. vue.createVNode(_component_u_icon, {
  28179. name: "arrow-right",
  28180. color: "#999",
  28181. size: "12",
  28182. style: { "margin-left": "4px" }
  28183. })
  28184. ], 8, ["onClick"])) : vue.createCommentVNode("v-if", true)
  28185. ], 8, ["onClick"]);
  28186. }),
  28187. 128
  28188. /* KEYED_FRAGMENT */
  28189. ))
  28190. ],
  28191. 4
  28192. /* STYLE */
  28193. ))
  28194. ]),
  28195. $setup.sportList.length === 0 && !$setup.skeletonLoading ? (vue.openBlock(), vue.createElementBlock("view", {
  28196. key: 0,
  28197. class: "empty-box"
  28198. }, [
  28199. vue.createVNode(_component_u_empty, {
  28200. text: $setup.t("暂无赛事数据"),
  28201. mode: "data",
  28202. "icon-size": "100"
  28203. }, null, 8, ["text"])
  28204. ])) : vue.createCommentVNode("v-if", true),
  28205. $setup.sportList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  28206. key: 1,
  28207. class: "loading-more"
  28208. }, [
  28209. vue.createElementVNode(
  28210. "text",
  28211. null,
  28212. vue.toDisplayString($setup.isNoMore ? $setup.t("没有更多了") : $setup.t("正在加载")),
  28213. 1
  28214. /* TEXT */
  28215. )
  28216. ])) : vue.createCommentVNode("v-if", true),
  28217. vue.createElementVNode("view", { style: { "height": "50px" } }),
  28218. vue.createElementVNode("view", { class: "digital-bottom" })
  28219. ], 40, ["scroll-top"]), [
  28220. [vue.vShow, $setup.currentState !== "league"]
  28221. ])
  28222. ])
  28223. ]),
  28224. _: 1
  28225. /* STABLE */
  28226. }, 8, ["nav-title"])
  28227. ]),
  28228. _: 1
  28229. /* STABLE */
  28230. });
  28231. }
  28232. const PagesTabbarSportsBettingIndex = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$W], ["__scopeId", "data-v-e5399539"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/SportsBetting/index.vue"]]);
  28233. const MIN_NEW_ITEMS = 10;
  28234. const _sfc_main$W = {
  28235. __name: "index",
  28236. setup(__props, { expose: __expose }) {
  28237. __expose();
  28238. const { t: t2, locale } = useI18n();
  28239. const orderStore = useOrderStore();
  28240. const WebsocketData = useWebsocketDataStore();
  28241. const sportList = vue.ref([]);
  28242. const skeletonLoading = vue.ref(true);
  28243. const router2 = useRouter();
  28244. const currentSportIndex = vue.ref(0);
  28245. const sportCategoryList = vue.ref([
  28246. { name: "足球", icon: "⚽️", value: 1 },
  28247. { name: "篮球", icon: "🏀", value: 2 },
  28248. { name: "网球", icon: "🎾", value: 3 },
  28249. { name: "排球", icon: "🏐", value: 4 },
  28250. { name: "羽毛球", icon: "🏸", value: 5 },
  28251. { name: "乒乓球", icon: "🏓", value: 6 },
  28252. { name: "电竞", icon: "🎮", value: 7 }
  28253. ]);
  28254. const onSportCategoryChange = (index) => {
  28255. currentSportIndex.value = index;
  28256. formatAppLog("log", "at pages/Tabbar/WorldCup/index.vue:188", "选择的体育分类:", sportCategoryList.value[index].name);
  28257. };
  28258. const isTriggered = vue.ref(false);
  28259. const isNoMore = vue.ref(false);
  28260. const isFetching = vue.ref(false);
  28261. const currentPage = vue.ref(1);
  28262. const currentLimit = vue.ref(20);
  28263. let currentQueryId = 0;
  28264. const activeDateTab = vue.ref("");
  28265. const intoViewId = vue.ref("");
  28266. const dateTabs = vue.computed(() => {
  28267. const dates = [];
  28268. const dateSet = /* @__PURE__ */ new Set();
  28269. sportList.value.forEach((item) => {
  28270. if (item.game_time) {
  28271. const datePart = item.game_time.split(" ")[0];
  28272. if (!dateSet.has(datePart)) {
  28273. dateSet.add(datePart);
  28274. dates.push(datePart);
  28275. }
  28276. }
  28277. });
  28278. return dates;
  28279. });
  28280. vue.watch(dateTabs, (newVal) => {
  28281. if (newVal.length > 0 && !activeDateTab.value) {
  28282. activeDateTab.value = newVal[0];
  28283. }
  28284. });
  28285. const scrollToDate = (datePart) => {
  28286. activeDateTab.value = datePart;
  28287. const targetItem = sportList.value.find((item) => item.game_time && item.game_time.split(" ")[0] === datePart);
  28288. if (targetItem) {
  28289. intoViewId.value = "";
  28290. vue.nextTick(() => {
  28291. intoViewId.value = "match-" + (targetItem.data_id || targetItem.id);
  28292. });
  28293. }
  28294. };
  28295. const formatDateInfo = (dateStr) => {
  28296. if (!dateStr)
  28297. return { topText: "", bottomText: "" };
  28298. const [year, month, day] = dateStr.split("-");
  28299. const dateObj = new Date(dateStr.replace(/-/g, "/"));
  28300. const daysArr = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
  28301. const dayOfWeek = daysArr[dateObj.getDay()];
  28302. const today = /* @__PURE__ */ new Date();
  28303. const isToday = today.getFullYear() === parseInt(year) && today.getMonth() + 1 === parseInt(month) && today.getDate() === parseInt(day);
  28304. return {
  28305. topText: isToday ? t2("今天") : t2(dayOfWeek),
  28306. bottomText: `${month}/${day}`
  28307. };
  28308. };
  28309. vue.onMounted(() => {
  28310. onQuery(1, currentLimit.value);
  28311. });
  28312. const oddsChangeMap = vue.ref(/* @__PURE__ */ new Map());
  28313. const getOddsKey = (matchId, marketId, selection) => {
  28314. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  28315. return `${matchId}_${marketId}_${selection.value}_${selection.handicap}`;
  28316. }
  28317. return `${matchId}_${marketId}_${selection.value}`;
  28318. };
  28319. const isOddsUp = (key) => {
  28320. const change = oddsChangeMap.value.get(key);
  28321. return (change == null ? void 0 : change.direction) === "up" && Date.now() - change.timestamp < 3e3;
  28322. };
  28323. const isOddsDown = (key) => {
  28324. const change = oddsChangeMap.value.get(key);
  28325. return (change == null ? void 0 : change.direction) === "down" && Date.now() - change.timestamp < 3e3;
  28326. };
  28327. const showChangeIcon = (key) => {
  28328. const change = oddsChangeMap.value.get(key);
  28329. return change && Date.now() - change.timestamp < 3e3;
  28330. };
  28331. const goDetail = (item) => {
  28332. router2.push({ name: "sportDetail", query: { data_id: item.data_id } });
  28333. };
  28334. const selectedMap = vue.ref({});
  28335. vue.watch(() => WebsocketData.data, handleWebsocketData);
  28336. const translateSelection = (valStr) => {
  28337. if (valStr === void 0 || valStr === null)
  28338. return "";
  28339. return String(valStr);
  28340. };
  28341. const getUniqueKey = (matchId, marketId, selection) => {
  28342. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  28343. return `${matchId}_${marketId}_${selection.value}_${selection.handicap}`;
  28344. }
  28345. return `${matchId}_${marketId}_${selection.value}`;
  28346. };
  28347. const checkIsLocked = (item) => {
  28348. if (!item)
  28349. return true;
  28350. if (Number(item.is_locked) === 1)
  28351. return true;
  28352. if (Number(item.status) !== 1)
  28353. return true;
  28354. const state = Number(item.state);
  28355. if (state !== 0 && state !== 1)
  28356. return true;
  28357. return false;
  28358. };
  28359. const isOptionLocked = (item, opt) => {
  28360. if (checkIsLocked(item))
  28361. return true;
  28362. if (item && item.odd_ids_locked && item.odds && item.odds.length > 0) {
  28363. let lockedIds = item.odd_ids_locked;
  28364. if (typeof lockedIds === "string") {
  28365. try {
  28366. lockedIds = JSON.parse(lockedIds);
  28367. } catch (e) {
  28368. lockedIds = [];
  28369. }
  28370. }
  28371. const currentMarketId = item.odds[0].id;
  28372. if (Array.isArray(lockedIds) && lockedIds.map(Number).includes(Number(currentMarketId))) {
  28373. return true;
  28374. }
  28375. }
  28376. if (!opt)
  28377. return true;
  28378. if (!opt.odd || opt.odd === "-" || Number(opt.odd) === 0)
  28379. return true;
  28380. if (opt.suspended === true || String(opt.suspended).toLowerCase() === "true")
  28381. return true;
  28382. return false;
  28383. };
  28384. const syncFromStore = () => {
  28385. const map = {};
  28386. if (orderStore.selectOrders && orderStore.selectOrders.length) {
  28387. orderStore.selectOrders.forEach((order) => {
  28388. if (order.uniqueKey) {
  28389. map[order.uniqueKey] = true;
  28390. }
  28391. });
  28392. }
  28393. selectedMap.value = map;
  28394. };
  28395. vue.watch(() => orderStore.selectOrders, () => {
  28396. syncFromStore();
  28397. }, { deep: true, immediate: true });
  28398. function handleWebsocketData(data) {
  28399. try {
  28400. const res = typeof data === "string" ? JSON.parse(data) : data;
  28401. if (res.type === "sport_list" && Array.isArray(res.message)) {
  28402. res.message.forEach((newMatch) => {
  28403. var _a2;
  28404. if (newMatch.league_id !== 1)
  28405. return;
  28406. const idx = sportList.value.findIndex((item) => item.data_id === newMatch.data_id);
  28407. if (idx !== -1) {
  28408. const oldMatch = sportList.value[idx];
  28409. let parsedOdds = newMatch.odds;
  28410. if (typeof parsedOdds === "string") {
  28411. try {
  28412. parsedOdds = JSON.parse(parsedOdds);
  28413. } catch (e) {
  28414. parsedOdds = [];
  28415. }
  28416. } else if (!parsedOdds) {
  28417. parsedOdds = oldMatch.odds;
  28418. }
  28419. if (oldMatch && ((_a2 = oldMatch.odds) == null ? void 0 : _a2[0]) && (parsedOdds == null ? void 0 : parsedOdds[0])) {
  28420. const oldMarket = oldMatch.odds[0];
  28421. const newMarket = parsedOdds[0];
  28422. if (oldMarket.values && newMarket.values) {
  28423. newMarket.values.forEach((newOpt) => {
  28424. const oldOpt = oldMarket.values.find(
  28425. (o) => o.value === newOpt.value && (o.handicap == newOpt.handicap || !o.handicap && !newOpt.handicap)
  28426. );
  28427. if ((oldOpt == null ? void 0 : oldOpt.odd) && (newOpt == null ? void 0 : newOpt.odd)) {
  28428. const oldOddNum = parseFloat(oldOpt.odd);
  28429. const newOddNum = parseFloat(newOpt.odd);
  28430. if (!isNaN(oldOddNum) && !isNaN(newOddNum) && oldOddNum !== newOddNum) {
  28431. const marketId = newMarket.id || oldMarket.id;
  28432. const matchId = oldMatch.id || oldMatch.data_id;
  28433. const key = getOddsKey(matchId, marketId, newOpt);
  28434. const direction = newOddNum > oldOddNum ? "up" : "down";
  28435. oddsChangeMap.value.set(key, {
  28436. direction,
  28437. timestamp: Date.now()
  28438. });
  28439. let timer = setTimeout(() => {
  28440. oddsChangeMap.value.delete(key);
  28441. clearTimeout(timer);
  28442. }, 3100);
  28443. }
  28444. }
  28445. });
  28446. }
  28447. }
  28448. if (typeof parsedOdds === "string") {
  28449. try {
  28450. parsedOdds = JSON.parse(parsedOdds);
  28451. } catch (e) {
  28452. parsedOdds = [];
  28453. }
  28454. } else if (!parsedOdds) {
  28455. parsedOdds = sportList.value[idx].odds;
  28456. }
  28457. let parsedLockedIds = newMatch.odd_ids_locked;
  28458. if (typeof parsedLockedIds === "string") {
  28459. try {
  28460. parsedLockedIds = JSON.parse(parsedLockedIds);
  28461. } catch (e) {
  28462. parsedLockedIds = [];
  28463. }
  28464. } else if (parsedLockedIds === void 0) {
  28465. parsedLockedIds = sportList.value[idx].odd_ids_locked || [];
  28466. }
  28467. sportList.value[idx] = {
  28468. ...sportList.value[idx],
  28469. ...newMatch,
  28470. odds: parsedOdds,
  28471. odd_ids_locked: parsedLockedIds
  28472. };
  28473. if (sportList.value[idx].odds && sportList.value[idx].odds.length > 0) {
  28474. const market = sportList.value[idx].odds[0];
  28475. if (market.values) {
  28476. market.values.forEach((wsItem) => {
  28477. if (isOptionLocked(sportList.value[idx], wsItem)) {
  28478. const uniqueKey = getUniqueKey(sportList.value[idx].id, market.id, wsItem);
  28479. }
  28480. });
  28481. }
  28482. }
  28483. orderStore.updateMatchStatus(newMatch.data_id, sportList.value[idx]);
  28484. } else {
  28485. const isStatusOnline = newMatch.status === void 0 || Number(newMatch.status) === 1;
  28486. if (isStatusOnline) {
  28487. let parsedOdds = newMatch.odds;
  28488. if (typeof parsedOdds === "string") {
  28489. try {
  28490. parsedOdds = JSON.parse(parsedOdds);
  28491. } catch (e) {
  28492. parsedOdds = [];
  28493. }
  28494. } else if (!parsedOdds) {
  28495. parsedOdds = [];
  28496. }
  28497. let parsedLockedIds = newMatch.odd_ids_locked;
  28498. if (typeof parsedLockedIds === "string") {
  28499. try {
  28500. parsedLockedIds = JSON.parse(parsedLockedIds);
  28501. } catch (e) {
  28502. parsedLockedIds = [];
  28503. }
  28504. } else if (parsedLockedIds === void 0) {
  28505. parsedLockedIds = [];
  28506. }
  28507. const formattedNewMatch = {
  28508. ...newMatch,
  28509. odds: parsedOdds,
  28510. odd_ids_locked: parsedLockedIds
  28511. };
  28512. sportList.value.push(formattedNewMatch);
  28513. sportList.value.sort((a, b) => {
  28514. const timeA = a.game_time ? new Date(a.game_time.replace(/-/g, "/")).getTime() : 0;
  28515. const timeB = b.game_time ? new Date(b.game_time.replace(/-/g, "/")).getTime() : 0;
  28516. return timeA - timeB;
  28517. });
  28518. }
  28519. }
  28520. });
  28521. }
  28522. } catch (error) {
  28523. formatAppLog("error", "at pages/Tabbar/WorldCup/index.vue:449", "WebSocket解析错误:", error);
  28524. }
  28525. }
  28526. const setupSocketListener = () => {
  28527. uni.$on("onSocketMessage", handleWebsocketData);
  28528. };
  28529. const removeSocketListener = () => {
  28530. };
  28531. onShow(() => {
  28532. syncFromStore();
  28533. });
  28534. vue.onUnmounted(() => {
  28535. });
  28536. async function onQuery(pageNo, pageSize) {
  28537. const queryId = ++currentQueryId;
  28538. try {
  28539. if (pageNo === 1) {
  28540. isNoMore.value = false;
  28541. currentPage.value = 1;
  28542. if (!isTriggered.value) {
  28543. skeletonLoading.value = true;
  28544. sportList.value = [];
  28545. }
  28546. } else {
  28547. if (isFetching.value || isNoMore.value)
  28548. return;
  28549. }
  28550. isFetching.value = true;
  28551. let accumulatedNewItems = [];
  28552. let attemptCount = 0;
  28553. const maxAttempts = 5;
  28554. let targetCount = pageNo === 1 ? pageSize : MIN_NEW_ITEMS;
  28555. let extendDate = null;
  28556. while (accumulatedNewItems.length < targetCount && !isNoMore.value && attemptCount < maxAttempts) {
  28557. if (queryId !== currentQueryId)
  28558. return;
  28559. attemptCount++;
  28560. const res = await getWorldCupSport();
  28561. if (queryId !== currentQueryId)
  28562. return;
  28563. if (res.code === 1 && res.data.list && res.data.list.length > 0) {
  28564. if (res.data.extend && res.data.extend.date) {
  28565. extendDate = res.data.extend.date;
  28566. }
  28567. const rawList = res.data.list;
  28568. const formatList = rawList.map((item) => {
  28569. if (typeof item.odds === "string") {
  28570. try {
  28571. item.odds = JSON.parse(item.odds);
  28572. } catch (e) {
  28573. item.odds = [];
  28574. }
  28575. }
  28576. return item;
  28577. });
  28578. const existingIds = /* @__PURE__ */ new Set([
  28579. ...pageNo === 1 ? [] : sportList.value.map((i) => i.id),
  28580. ...accumulatedNewItems.map((i) => i.id)
  28581. ]);
  28582. const newItems = formatList.filter((item) => !existingIds.has(item.id));
  28583. accumulatedNewItems = accumulatedNewItems.concat(newItems);
  28584. if (rawList.length < pageSize) {
  28585. isNoMore.value = true;
  28586. }
  28587. } else {
  28588. isNoMore.value = true;
  28589. }
  28590. }
  28591. if (queryId === currentQueryId) {
  28592. if (pageNo === 1) {
  28593. sportList.value = accumulatedNewItems;
  28594. } else {
  28595. sportList.value = sportList.value.concat(accumulatedNewItems);
  28596. }
  28597. currentPage.value = pageNo;
  28598. skeletonLoading.value = false;
  28599. isFetching.value = false;
  28600. if (pageNo === 1 && extendDate) {
  28601. vue.nextTick(() => {
  28602. if (dateTabs.value.length > 0) {
  28603. const targetMatch = sportList.value.find((item) => {
  28604. if (item.state === 0 && item.game_time) {
  28605. const itemDate = item.game_time.split(" ")[0];
  28606. return itemDate >= extendDate;
  28607. }
  28608. return false;
  28609. });
  28610. if (targetMatch) {
  28611. const targetDatePart = targetMatch.game_time.split(" ")[0];
  28612. activeDateTab.value = targetDatePart;
  28613. intoViewId.value = "";
  28614. vue.nextTick(() => {
  28615. intoViewId.value = "match-" + (targetMatch.data_id || targetMatch.id);
  28616. });
  28617. } else {
  28618. const lastDate = dateTabs.value[dateTabs.value.length - 1];
  28619. scrollToDate(lastDate);
  28620. }
  28621. }
  28622. });
  28623. }
  28624. }
  28625. } catch (error) {
  28626. if (queryId === currentQueryId) {
  28627. isNoMore.value = true;
  28628. skeletonLoading.value = false;
  28629. isFetching.value = false;
  28630. }
  28631. }
  28632. }
  28633. const getStatusText = (state) => {
  28634. const states = { 0: t2("未开始"), 1: t2("进行中"), 2: t2("已完场"), 3: t2("延期"), 4: t2("取消") };
  28635. return states[state] || "";
  28636. };
  28637. const isSelected = (matchId, marketId, selection) => {
  28638. if (!selection)
  28639. return false;
  28640. const uniqueKey = getUniqueKey(matchId, marketId, selection);
  28641. return !!selectedMap.value[uniqueKey];
  28642. };
  28643. const handleOddsClick = (item, selection) => {
  28644. if (isOptionLocked(item, selection))
  28645. return;
  28646. if (!item.odds || item.odds.length === 0)
  28647. return;
  28648. const market = item.odds[0];
  28649. const uniqueKey = getUniqueKey(item.id, market.id, selection);
  28650. if (selectedMap.value[uniqueKey]) {
  28651. orderStore.removeOrderItemByKey(uniqueKey);
  28652. } else {
  28653. if (market.values) {
  28654. market.values.forEach((wsItem) => {
  28655. const otherKey = getUniqueKey(item.id, market.id, wsItem);
  28656. if (selectedMap.value[otherKey]) {
  28657. orderStore.removeOrderItemByKey(otherKey);
  28658. }
  28659. });
  28660. }
  28661. const betItem = {
  28662. matchId: item.id,
  28663. data_id: item.data_id,
  28664. league: item.league,
  28665. league_en: item.league_en,
  28666. homeTeam: item.home_team,
  28667. home_team_en: item.home_team_en,
  28668. guestTeam: item.guest_team,
  28669. guest_team_en: item.guest_team_en,
  28670. betType: market.name,
  28671. betTypeEn: market.name_en,
  28672. betTypeName: selection.value_text,
  28673. betTypeNameEn: selection.value,
  28674. handicap: selection.handicap,
  28675. handicap_text: selection.handicap_text,
  28676. odds: selection.odd,
  28677. score: item.score,
  28678. state: item.state,
  28679. status: item.status,
  28680. is_roll: item.is_roll,
  28681. is_locked: item.is_locked,
  28682. uniqueKey,
  28683. optionValue: selection.value,
  28684. marketId: market.id
  28685. };
  28686. orderStore.addOrderItem(betItem);
  28687. uni.vibrateShort();
  28688. }
  28689. };
  28690. const __returned__ = { t: t2, locale, orderStore, WebsocketData, sportList, skeletonLoading, router: router2, currentSportIndex, sportCategoryList, onSportCategoryChange, isTriggered, isNoMore, isFetching, currentPage, currentLimit, MIN_NEW_ITEMS, get currentQueryId() {
  28691. return currentQueryId;
  28692. }, set currentQueryId(v) {
  28693. currentQueryId = v;
  28694. }, activeDateTab, intoViewId, dateTabs, scrollToDate, formatDateInfo, oddsChangeMap, getOddsKey, isOddsUp, isOddsDown, showChangeIcon, goDetail, selectedMap, translateSelection, getUniqueKey, checkIsLocked, isOptionLocked, syncFromStore, handleWebsocketData, setupSocketListener, removeSocketListener, onQuery, getStatusText, isSelected, handleOddsClick, ref: vue.ref, watch: vue.watch, computed: vue.computed, onUnmounted: vue.onUnmounted, onMounted: vue.onMounted, nextTick: vue.nextTick, get useI18n() {
  28695. return useI18n;
  28696. }, get onShow() {
  28697. return onShow;
  28698. }, get getWorldCupSport() {
  28699. return getWorldCupSport;
  28700. }, get useOrderStore() {
  28701. return useOrderStore;
  28702. }, get getLocale() {
  28703. return getLocale;
  28704. }, get useWebsocketDataStore() {
  28705. return useWebsocketDataStore;
  28706. }, get formatRange() {
  28707. return formatRange;
  28708. } };
  28709. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  28710. return __returned__;
  28711. }
  28712. };
  28713. function _sfc_render$V(_ctx, _cache, $props, $setup, $data, $options) {
  28714. const _component_u_skeleton = __unplugin_components_0$3;
  28715. const _component_u_image = __unplugin_components_1$1;
  28716. const _component_u_icon = __unplugin_components_0$5;
  28717. const _component_u_tag = __unplugin_components_2$2;
  28718. const _component_u_empty = __unplugin_components_4$2;
  28719. const _component_PageContainer = PageContainer;
  28720. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  28721. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  28722. default: vue.withCtx(() => [
  28723. vue.createVNode(_component_PageContainer, {
  28724. "nav-title": $setup.t("世界杯")
  28725. }, {
  28726. default: vue.withCtx(() => [
  28727. vue.createElementVNode("view", {
  28728. class: "page-content",
  28729. style: { "display": "flex", "flex-direction": "column" }
  28730. }, [
  28731. $setup.dateTabs.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  28732. key: 0,
  28733. class: "sticky-tabs"
  28734. }, [
  28735. vue.createElementVNode("scroll-view", {
  28736. "scroll-x": "",
  28737. class: "date-tabs-scroll",
  28738. "show-scrollbar": false,
  28739. "scroll-into-view": "tab-" + $setup.activeDateTab
  28740. }, [
  28741. vue.createElementVNode("view", { class: "date-tabs-container" }, [
  28742. (vue.openBlock(true), vue.createElementBlock(
  28743. vue.Fragment,
  28744. null,
  28745. vue.renderList($setup.dateTabs, (date2, index) => {
  28746. return vue.openBlock(), vue.createElementBlock("view", {
  28747. class: vue.normalizeClass(["date-tab-item", { "is-active": $setup.activeDateTab === date2 }]),
  28748. key: index,
  28749. id: "tab-" + date2,
  28750. onClick: ($event) => $setup.scrollToDate(date2)
  28751. }, [
  28752. vue.createElementVNode(
  28753. "text",
  28754. { class: "tab-text-top" },
  28755. vue.toDisplayString($setup.formatDateInfo(date2).topText),
  28756. 1
  28757. /* TEXT */
  28758. ),
  28759. vue.createElementVNode(
  28760. "text",
  28761. { class: "tab-text-bottom" },
  28762. vue.toDisplayString($setup.formatDateInfo(date2).bottomText),
  28763. 1
  28764. /* TEXT */
  28765. )
  28766. ], 10, ["id", "onClick"]);
  28767. }),
  28768. 128
  28769. /* KEYED_FRAGMENT */
  28770. ))
  28771. ])
  28772. ], 8, ["scroll-into-view"])
  28773. ])) : vue.createCommentVNode("v-if", true),
  28774. vue.createElementVNode("scroll-view", {
  28775. class: "scroll-view-container",
  28776. "scroll-y": "",
  28777. "scroll-into-view": $setup.intoViewId,
  28778. "scroll-with-animation": true
  28779. }, [
  28780. vue.createElementVNode("view", { class: "match-list" }, [
  28781. $setup.skeletonLoading ? (vue.openBlock(), vue.createElementBlock(
  28782. vue.Fragment,
  28783. { key: 0 },
  28784. vue.renderList(5, (i) => {
  28785. return vue.createElementVNode("view", {
  28786. class: "match-card",
  28787. key: i
  28788. }, [
  28789. vue.createVNode(_component_u_skeleton, {
  28790. loading: true,
  28791. animate: true,
  28792. rows: "3",
  28793. title: "",
  28794. avatar: "",
  28795. "avatar-size": 28
  28796. })
  28797. ]);
  28798. }),
  28799. 64
  28800. /* STABLE_FRAGMENT */
  28801. )) : (vue.openBlock(), vue.createElementBlock("view", { key: 1 }, [
  28802. (vue.openBlock(true), vue.createElementBlock(
  28803. vue.Fragment,
  28804. null,
  28805. vue.renderList($setup.sportList, (item, index) => {
  28806. var _a2, _b2, _c;
  28807. return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  28808. class: "match-card",
  28809. key: item.data_id || item.id,
  28810. id: "match-" + (item.data_id || item.id),
  28811. onClick: ($event) => $setup.goDetail(item)
  28812. }, [
  28813. vue.createElementVNode("view", { class: "league-info" }, [
  28814. vue.createElementVNode("view", { class: "league-left" }, [
  28815. item.league_logo ? (vue.openBlock(), vue.createBlock(_component_u_image, {
  28816. key: 0,
  28817. src: item.league_logo,
  28818. width: "16px",
  28819. height: "16px",
  28820. shape: "circle",
  28821. errorIcon: "photo"
  28822. }, null, 8, ["src"])) : (vue.openBlock(), vue.createBlock(_component_u_icon, {
  28823. key: 1,
  28824. name: "grid-fill",
  28825. color: "#f8b932",
  28826. size: "16"
  28827. })),
  28828. vue.createElementVNode(
  28829. "text",
  28830. { class: "league-name" },
  28831. vue.toDisplayString($setup.locale === "zh" ? item.league : item.league_en),
  28832. 1
  28833. /* TEXT */
  28834. )
  28835. ]),
  28836. item.state === 1 && item.fixture_status ? (vue.openBlock(), vue.createElementBlock("view", { key: 0 }, [
  28837. vue.createVNode(_component_u_tag, {
  28838. text: $setup.t((_a2 = item.fixture_status) == null ? void 0 : _a2.long),
  28839. mode: "plain",
  28840. type: "primary",
  28841. size: "mini"
  28842. }, null, 8, ["text"]),
  28843. item.is_roll === 1 ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  28844. key: 0,
  28845. text: $setup.t("滚球"),
  28846. mode: "plain",
  28847. type: "primary",
  28848. size: "mini",
  28849. style: { "margin-left": "6px" }
  28850. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true)
  28851. ])) : vue.createCommentVNode("v-if", true)
  28852. ]),
  28853. vue.createElementVNode("view", { class: "match-time-status" }, [
  28854. item.fixture_status ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, [
  28855. ((_b2 = item.fixture_status) == null ? void 0 : _b2.seconds) ? (vue.openBlock(), vue.createElementBlock(
  28856. "span",
  28857. { key: 0 },
  28858. vue.toDisplayString((_c = item.fixture_status) == null ? void 0 : _c.seconds),
  28859. 1
  28860. /* TEXT */
  28861. )) : vue.createCommentVNode("v-if", true)
  28862. ])) : vue.createCommentVNode("v-if", true),
  28863. vue.createElementVNode(
  28864. "text",
  28865. { class: "match-time" },
  28866. vue.toDisplayString(item.game_time || "--:--"),
  28867. 1
  28868. /* TEXT */
  28869. )
  28870. ]),
  28871. vue.createElementVNode("view", { class: "team-item" }, [
  28872. vue.createVNode(_component_u_image, {
  28873. src: item.home_team_logo,
  28874. width: "28px",
  28875. height: "28px",
  28876. shape: "circle",
  28877. errorIcon: "photo"
  28878. }, null, 8, ["src"]),
  28879. vue.createElementVNode("view", {
  28880. class: "team-name",
  28881. style: { "display": "flex", "align-items": "center" }
  28882. }, [
  28883. vue.createTextVNode(
  28884. vue.toDisplayString($setup.locale === "zh" ? item.home_team : item.home_team_en) + " ",
  28885. 1
  28886. /* TEXT */
  28887. ),
  28888. vue.createVNode(_component_u_tag, {
  28889. size: "mini",
  28890. type: "success",
  28891. style: { "margin-top": "-2px", "margin-left": "4px" },
  28892. text: $setup.t("主")
  28893. }, null, 8, ["text"])
  28894. ]),
  28895. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  28896. "text",
  28897. {
  28898. key: 0,
  28899. class: "team-score"
  28900. },
  28901. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[0] : "0"),
  28902. 1
  28903. /* TEXT */
  28904. )) : vue.createCommentVNode("v-if", true)
  28905. ]),
  28906. vue.createElementVNode("view", { class: "team-item" }, [
  28907. vue.createVNode(_component_u_image, {
  28908. src: item.guest_team_logo,
  28909. width: "28px",
  28910. height: "28px",
  28911. shape: "circle",
  28912. errorIcon: "photo"
  28913. }, null, 8, ["src"]),
  28914. vue.createElementVNode("view", {
  28915. class: "team-name",
  28916. style: { "display": "flex", "align-items": "center" }
  28917. }, [
  28918. vue.createTextVNode(
  28919. vue.toDisplayString($setup.locale === "zh" ? item.guest_team : item.guest_team_en) + " ",
  28920. 1
  28921. /* TEXT */
  28922. ),
  28923. vue.createVNode(_component_u_tag, {
  28924. size: "mini",
  28925. type: "error",
  28926. style: { "margin-left": "4px", "margin-top": "-2px" },
  28927. text: $setup.t("客")
  28928. }, null, 8, ["text"])
  28929. ]),
  28930. item.state !== 0 ? (vue.openBlock(), vue.createElementBlock(
  28931. "text",
  28932. {
  28933. key: 0,
  28934. class: "team-score"
  28935. },
  28936. vue.toDisplayString(item.score && item.score !== "-" ? item.score.split("-")[1] : "0"),
  28937. 1
  28938. /* TEXT */
  28939. )) : vue.createCommentVNode("v-if", true)
  28940. ]),
  28941. [0, 1].includes(item.state) ? (vue.openBlock(), vue.createElementBlock("view", {
  28942. key: 0,
  28943. class: "odds-group"
  28944. }, [
  28945. item.odds && item.odds.length > 0 && item.odds[0].values ? (vue.openBlock(), vue.createElementBlock("view", {
  28946. key: 0,
  28947. class: "odds-grid"
  28948. }, [
  28949. (vue.openBlock(true), vue.createElementBlock(
  28950. vue.Fragment,
  28951. null,
  28952. vue.renderList(item.odds[0].values.slice(0, 3), (opt, optIndex) => {
  28953. return vue.openBlock(), vue.createElementBlock("view", {
  28954. class: vue.normalizeClass(["odds-btn compact-btn", {
  28955. "is-active": $setup.isSelected(item.id, item.odds[0].id, opt),
  28956. "odds-up": $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt),
  28957. "odds-down": $setup.isOddsDown($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt),
  28958. "is-locked": $setup.isOptionLocked(item, opt)
  28959. }]),
  28960. key: optIndex,
  28961. onClick: vue.withModifiers(($event) => $setup.handleOddsClick(item, opt), ["stop"])
  28962. }, [
  28963. $setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createElementBlock("view", {
  28964. key: 0,
  28965. class: "locked-overlay"
  28966. }, [
  28967. vue.createVNode(_component_u_icon, {
  28968. name: "lock",
  28969. color: "#fff",
  28970. size: "24"
  28971. })
  28972. ])) : vue.createCommentVNode("v-if", true),
  28973. vue.createElementVNode("view", { class: "btn-top" }, [
  28974. vue.createElementVNode(
  28975. "text",
  28976. { class: "selection-name" },
  28977. vue.toDisplayString($setup.translateSelection($setup.locale === "zh" ? opt.value_text : opt.value)),
  28978. 1
  28979. /* TEXT */
  28980. ),
  28981. opt.handicap_text ? (vue.openBlock(), vue.createElementBlock(
  28982. "text",
  28983. {
  28984. key: 0,
  28985. class: "selection-handicap"
  28986. },
  28987. vue.toDisplayString(opt.handicap_text),
  28988. 1
  28989. /* TEXT */
  28990. )) : vue.createCommentVNode("v-if", true)
  28991. ]),
  28992. vue.createElementVNode("view", { class: "btn-bottom" }, [
  28993. vue.createElementVNode("view", {
  28994. class: "odds-val",
  28995. style: { "display": "flex", "align-items": "center" }
  28996. }, [
  28997. vue.createElementVNode(
  28998. "span",
  28999. null,
  29000. vue.toDisplayString(opt.odd || "-"),
  29001. 1
  29002. /* TEXT */
  29003. ),
  29004. $setup.showChangeIcon($setup.getOddsKey(item.id, item.odds[0].id, opt)) && !$setup.isOptionLocked(item, opt) ? (vue.openBlock(), vue.createElementBlock(
  29005. "view",
  29006. {
  29007. key: 0,
  29008. class: vue.normalizeClass(["change-icon", {
  29009. up: $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt)),
  29010. down: $setup.isOddsDown($setup.getOddsKey(item.id, item.odds[0].id, opt))
  29011. }])
  29012. },
  29013. [
  29014. vue.withDirectives(vue.createVNode(
  29015. _component_u_icon,
  29016. {
  29017. name: "arrow-up-fill",
  29018. size: "12"
  29019. },
  29020. null,
  29021. 512
  29022. /* NEED_PATCH */
  29023. ), [
  29024. [vue.vShow, $setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt))]
  29025. ]),
  29026. vue.withDirectives(vue.createVNode(
  29027. _component_u_icon,
  29028. {
  29029. name: "arrow-down-fill",
  29030. size: "12"
  29031. },
  29032. null,
  29033. 512
  29034. /* NEED_PATCH */
  29035. ), [
  29036. [vue.vShow, !$setup.isOddsUp($setup.getOddsKey(item.id, item.odds[0].id, opt))]
  29037. ])
  29038. ],
  29039. 2
  29040. /* CLASS */
  29041. )) : vue.createCommentVNode("v-if", true)
  29042. ])
  29043. ])
  29044. ], 10, ["onClick"]);
  29045. }),
  29046. 128
  29047. /* KEYED_FRAGMENT */
  29048. ))
  29049. ])) : vue.createCommentVNode("v-if", true)
  29050. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  29051. key: 1,
  29052. class: "match-footer-tip"
  29053. }, [
  29054. vue.createElementVNode(
  29055. "text",
  29056. null,
  29057. vue.toDisplayString($setup.getStatusText(item.state)),
  29058. 1
  29059. /* TEXT */
  29060. )
  29061. ])),
  29062. item.state === 0 || item.state === 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  29063. key: 2,
  29064. class: "match-footer-bar",
  29065. onClick: vue.withModifiers(($event) => $setup.goDetail(item), ["stop"])
  29066. }, [
  29067. vue.createElementVNode(
  29068. "text",
  29069. { class: "footer-text" },
  29070. vue.toDisplayString($setup.t("全部玩法")) + " " + vue.toDisplayString(item.odds_count ? `(${item.odds_count})` : ""),
  29071. 1
  29072. /* TEXT */
  29073. ),
  29074. vue.createVNode(_component_u_icon, {
  29075. name: "arrow-right",
  29076. color: "#999",
  29077. size: "12",
  29078. style: { "margin-left": "4px" }
  29079. })
  29080. ], 8, ["onClick"])) : vue.createCommentVNode("v-if", true)
  29081. ], 8, ["id", "onClick"])), [
  29082. [vue.vShow, item.league_id === 1]
  29083. ]);
  29084. }),
  29085. 128
  29086. /* KEYED_FRAGMENT */
  29087. ))
  29088. ]))
  29089. ]),
  29090. $setup.sportList.length === 0 && !$setup.skeletonLoading ? (vue.openBlock(), vue.createElementBlock("view", {
  29091. key: 0,
  29092. class: "empty-box"
  29093. }, [
  29094. vue.createVNode(_component_u_empty, {
  29095. text: $setup.t("暂无赛事数据"),
  29096. mode: "data",
  29097. "icon-size": "100"
  29098. }, null, 8, ["text"])
  29099. ])) : vue.createCommentVNode("v-if", true),
  29100. vue.createElementVNode("view", { style: { "height": "50px" } })
  29101. ], 8, ["scroll-into-view"])
  29102. ])
  29103. ]),
  29104. _: 1
  29105. /* STABLE */
  29106. }, 8, ["nav-title"])
  29107. ]),
  29108. _: 1
  29109. /* STABLE */
  29110. });
  29111. }
  29112. const PagesTabbarWorldCupIndex = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$V], ["__scopeId", "data-v-938cd9d8"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/WorldCup/index.vue"]]);
  29113. const _sfc_main$V = {
  29114. __name: "index",
  29115. setup(__props, { expose: __expose }) {
  29116. __expose();
  29117. const { t: t2 } = useI18n();
  29118. const __returned__ = { t: t2, list, get useI18n() {
  29119. return useI18n;
  29120. } };
  29121. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  29122. return __returned__;
  29123. }
  29124. };
  29125. function _sfc_render$U(_ctx, _cache, $props, $setup, $data, $options) {
  29126. const _component_PageContainer = PageContainer;
  29127. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  29128. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  29129. default: vue.withCtx(() => [
  29130. vue.createVNode(_component_PageContainer, {
  29131. "nav-title": $setup.t("彩票"),
  29132. style: { "background": "linear-gradient(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05)), url('/static/images/enter-bg.png') no-repeat", "background-size": "cover" }
  29133. }, {
  29134. default: vue.withCtx(() => [
  29135. vue.createElementVNode("div", { style: { "padding": "24rpx" } }, [
  29136. vue.createVNode($setup["list"])
  29137. ])
  29138. ]),
  29139. _: 1
  29140. /* STABLE */
  29141. }, 8, ["nav-title"])
  29142. ]),
  29143. _: 1
  29144. /* STABLE */
  29145. });
  29146. }
  29147. const PagesTabbarEntertainmentIndex = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["render", _sfc_render$U], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/index.vue"]]);
  29148. const _sfc_main$U = /* @__PURE__ */ vue.defineComponent({
  29149. __name: "index",
  29150. setup(__props, { expose: __expose }) {
  29151. __expose();
  29152. const { t: t2 } = useI18n();
  29153. const router2 = useRouter();
  29154. const mainTab = vue.ref(0);
  29155. onLoad((options) => {
  29156. if (options.tab !== void 0) {
  29157. mainTab.value = Number(options.tab);
  29158. onGameQuery();
  29159. }
  29160. });
  29161. const switchMainTab = (index) => {
  29162. if (mainTab.value === index)
  29163. return;
  29164. mainTab.value = index;
  29165. };
  29166. const tabList = vue.computed(() => [
  29167. { name: t2("体育"), value: 1 },
  29168. { name: t2("彩票"), value: 0 },
  29169. { name: t2("六合彩"), value: 2 }
  29170. ]);
  29171. const gamePagingRef = vue.ref(null);
  29172. const gameBetList = vue.ref([]);
  29173. const gameStatusShow = vue.ref(false);
  29174. const gameSettleStatusShow = vue.ref(false);
  29175. const gameCalendarShow = vue.ref(false);
  29176. const gameStatus = vue.ref("");
  29177. const gameSettleStatus = vue.ref("");
  29178. const gameDateRange = vue.ref("");
  29179. const gameStart = vue.ref("");
  29180. const gameEnd = vue.ref("");
  29181. const gameStatusColumns = vue.computed(() => [
  29182. { label: t2("中奖"), value: 1 },
  29183. { label: t2("未中奖"), value: 0 }
  29184. ]);
  29185. const gameSettleStatusColumns = vue.computed(() => [
  29186. { label: t2("待结算"), value: 1 },
  29187. { label: t2("已结算"), value: 2 }
  29188. ]);
  29189. const gameStatusText = vue.computed(() => {
  29190. const target = gameStatusColumns.value.find((item) => item.value === gameStatus.value);
  29191. return target ? target.label : "";
  29192. });
  29193. const gameSettleStatusText = vue.computed(() => {
  29194. const target = gameSettleStatusColumns.value.find((item) => item.value === gameSettleStatus.value);
  29195. return target ? target.label : "";
  29196. });
  29197. const onTabChange = (index) => {
  29198. mainTab.value = index;
  29199. };
  29200. const onGameQuery = async (pageNo, pageSize) => {
  29201. try {
  29202. const params = {
  29203. page: pageNo,
  29204. limit: pageSize,
  29205. is_winner: gameStatus.value,
  29206. status: gameSettleStatus.value,
  29207. start_time: gameStart.value,
  29208. end_time: gameEnd.value
  29209. };
  29210. const res = await getGameBetList(params);
  29211. if (res.code === 1 && res.data && res.data.list) {
  29212. gamePagingRef.value.complete(res.data.list);
  29213. } else {
  29214. gamePagingRef.value.complete(false);
  29215. }
  29216. } catch (error) {
  29217. gamePagingRef.value.complete(false);
  29218. }
  29219. };
  29220. const onGameStatusConfirm = (e) => {
  29221. gameStatus.value = e[0].value;
  29222. handleGameQuery();
  29223. };
  29224. const onGameSettleStatusConfirm = (e) => {
  29225. gameSettleStatus.value = e[0].value;
  29226. handleGameQuery();
  29227. };
  29228. const onGameCalendarChange = (e) => {
  29229. if (e.startDate && e.endDate) {
  29230. gameStart.value = e.startDate;
  29231. gameEnd.value = e.endDate;
  29232. gameDateRange.value = `${e.startDate} ~ ${e.endDate}`;
  29233. handleGameQuery();
  29234. }
  29235. };
  29236. const handleGameQuery = () => {
  29237. var _a2;
  29238. (_a2 = gamePagingRef.value) == null ? void 0 : _a2.reload();
  29239. };
  29240. const handleGameReset = () => {
  29241. var _a2;
  29242. gameStatus.value = "";
  29243. gameSettleStatus.value = "";
  29244. gameDateRange.value = "";
  29245. gameStart.value = "";
  29246. gameEnd.value = "";
  29247. (_a2 = gamePagingRef.value) == null ? void 0 : _a2.reload();
  29248. };
  29249. const getGameStatusText = (item) => {
  29250. const status = Number(item.status);
  29251. const isWinner = Number(item.profit) > 0;
  29252. if (status === 1)
  29253. return t2("待结算");
  29254. else if (status === 2)
  29255. return isWinner ? t2("已中奖") : t2("未中奖");
  29256. return t2("未知");
  29257. };
  29258. const getGameStatusClass = (item) => {
  29259. const status = Number(item.status);
  29260. const isWinner = Number(item.profit) > 0;
  29261. if (status === 1)
  29262. return "status-pending";
  29263. else if (status === 2)
  29264. return isWinner ? "status-win" : "status-lose";
  29265. return "status-default";
  29266. };
  29267. const sportPagingRef = vue.ref(null);
  29268. const sportOrderList = vue.ref([]);
  29269. const sportStatusShow = vue.ref(false);
  29270. const sportSettleStatusShow = vue.ref(false);
  29271. const sportCalendarShow = vue.ref(false);
  29272. const sportStatus = vue.ref("");
  29273. const sportSettleStatus = vue.ref("");
  29274. const sportDateRange = vue.ref("");
  29275. const sportStart = vue.ref("");
  29276. const sportEnd = vue.ref("");
  29277. const sportStatusColumns = vue.computed(() => [
  29278. { label: t2("未中奖"), value: 0 },
  29279. { label: t2("中奖"), value: 1 },
  29280. { label: t2("和局"), value: 2 },
  29281. { label: t2("平手半"), value: 3 }
  29282. ]);
  29283. const sportSettleStatusColumns = vue.computed(() => [
  29284. { label: t2("未结算"), value: 0 },
  29285. { label: t2("已结算"), value: 1 },
  29286. { label: t2("结算待发放"), value: 2 }
  29287. ]);
  29288. const sportStatusText = vue.computed(() => {
  29289. const target = sportStatusColumns.value.find((item) => item.value === sportStatus.value);
  29290. return target ? target.label : "";
  29291. });
  29292. const sportSettleStatusText = vue.computed(() => {
  29293. const target = sportSettleStatusColumns.value.find((item) => item.value === sportSettleStatus.value);
  29294. return target ? target.label : "";
  29295. });
  29296. const onSportQuery = async (pageNo, pageSize) => {
  29297. try {
  29298. const params = {
  29299. page: pageNo,
  29300. limit: pageSize,
  29301. is_win: sportStatus.value,
  29302. settlement_status: sportSettleStatus.value,
  29303. start_time: sportStart.value,
  29304. end_time: sportEnd.value
  29305. };
  29306. const res = await getOrderList(params);
  29307. if (res.code === 1) {
  29308. const list2 = (res.data.list || []).map((item) => {
  29309. try {
  29310. item.parsedDetail = item.detail ? JSON.parse(item.detail) : {};
  29311. } catch (e) {
  29312. item.parsedDetail = {};
  29313. }
  29314. return item;
  29315. });
  29316. sportPagingRef.value.complete(list2);
  29317. } else {
  29318. sportPagingRef.value.complete(false);
  29319. }
  29320. } catch (e) {
  29321. sportPagingRef.value.complete(false);
  29322. }
  29323. };
  29324. const getMarketName = (item) => {
  29325. var _a2, _b2, _c;
  29326. return ((_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.name) || "-";
  29327. };
  29328. const getSelectionValue = (item) => {
  29329. var _a2, _b2, _c, _d, _e;
  29330. return ((_e = (_d = (_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.values) == null ? void 0 : _d[0]) == null ? void 0 : _e.value) || "-";
  29331. };
  29332. const getSelectionHandicap = (item) => {
  29333. var _a2, _b2, _c, _d, _e;
  29334. return ((_e = (_d = (_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.values) == null ? void 0 : _d[0]) == null ? void 0 : _e.handicap) || "";
  29335. };
  29336. const getSelectionOdd = (item) => {
  29337. var _a2, _b2, _c, _d, _e;
  29338. return ((_e = (_d = (_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.values) == null ? void 0 : _d[0]) == null ? void 0 : _e.odd) || "0.00";
  29339. };
  29340. const onSportStatusConfirm = (e) => {
  29341. sportStatus.value = e[0].value;
  29342. handleSportQuery();
  29343. };
  29344. const onSportSettleStatusConfirm = (e) => {
  29345. sportSettleStatus.value = e[0].value;
  29346. handleSportQuery();
  29347. };
  29348. const onSportCalendarConfirm = (e) => {
  29349. if (e.startDate && e.endDate) {
  29350. sportStart.value = e.startDate;
  29351. sportEnd.value = e.endDate;
  29352. sportDateRange.value = `${e.startDate} ~ ${e.endDate}`;
  29353. handleSportQuery();
  29354. }
  29355. sportCalendarShow.value = false;
  29356. };
  29357. const handleSportQuery = () => {
  29358. var _a2;
  29359. (_a2 = sportPagingRef.value) == null ? void 0 : _a2.reload();
  29360. };
  29361. const handleSportReset = () => {
  29362. var _a2;
  29363. sportStatus.value = "";
  29364. sportSettleStatus.value = "";
  29365. sportDateRange.value = "";
  29366. sportStart.value = "";
  29367. sportEnd.value = "";
  29368. (_a2 = sportPagingRef.value) == null ? void 0 : _a2.reload();
  29369. };
  29370. const getSportItemStatus = (item) => {
  29371. const settleStatus = Number(item.status);
  29372. const settlementStatus = Number(item.settlement_status);
  29373. const isWin = Number(item.is_win);
  29374. if (settlementStatus === 1) {
  29375. switch (isWin) {
  29376. case 1:
  29377. return { text: t2("中奖"), type: "success" };
  29378. case 2:
  29379. return { text: t2("和局"), type: "primary" };
  29380. case 0:
  29381. default:
  29382. return { text: t2("未中奖"), type: "error" };
  29383. }
  29384. }
  29385. if (settleStatus === 0)
  29386. return { text: t2("下注中"), type: "warning" };
  29387. else if (settleStatus === 1)
  29388. return { text: t2("下注成功"), type: "success" };
  29389. else if (settleStatus === -1)
  29390. return { text: t2("订单已取消"), type: "error" };
  29391. };
  29392. const getSportProfitClass = (item) => {
  29393. if (item.status !== 1)
  29394. return "";
  29395. const profit = Number(item.profit_and_loss);
  29396. if (profit > 0)
  29397. return "text-success";
  29398. if (profit < 0)
  29399. return "text-error";
  29400. return "text-gray";
  29401. };
  29402. const getRefundStatusText = (status) => {
  29403. const map = { 1: t2("退款审核中"), 2: t2("已退款"), 3: t2("退款被驳回") };
  29404. return map[Number(status)] || "";
  29405. };
  29406. const getRefundStatusClass = (status) => {
  29407. const map = { 1: "refund-pending", 2: "refund-success", 3: "refund-reject" };
  29408. return map[Number(status)] || "";
  29409. };
  29410. const copyText = (text) => {
  29411. uni.setClipboardData({ data: text, success: () => uni.showToast({ title: t2("复制成功"), icon: "none" }) });
  29412. };
  29413. const handleSportDetail = (item) => {
  29414. router2.push({ name: "bettingDetail", query: { order_id: item.order_id }, data: { order_id: item.order_id } });
  29415. };
  29416. const lhcPagingRef = vue.ref(null);
  29417. const lhcOrderList = vue.ref([]);
  29418. const lhcStatusShow = vue.ref(false);
  29419. const lhcCalendarShow = vue.ref(false);
  29420. const lhcStatus = vue.ref("");
  29421. const lhcDateRange = vue.ref("");
  29422. const lhcStart = vue.ref("");
  29423. const lhcEnd = vue.ref("");
  29424. const lhcStatusColumns = vue.computed(() => [
  29425. { value: 0, label: t2("待开奖") },
  29426. { value: 1, label: t2("未中奖") },
  29427. { value: 2, label: t2("已中奖") },
  29428. { value: 3, label: t2("合局") }
  29429. // { value: 4, label: t('购物车') },
  29430. ]);
  29431. const lhcStatusText = vue.computed(() => {
  29432. const target = lhcStatusColumns.value.find((item) => item.value === lhcStatus.value);
  29433. return target ? target.label : "";
  29434. });
  29435. const onLhcQuery = async (pageNo, pageSize) => {
  29436. try {
  29437. const params = {
  29438. page: pageNo,
  29439. limit: pageSize,
  29440. lottery_status: lhcStatus.value,
  29441. start_time: lhcStart.value,
  29442. end_time: lhcEnd.value
  29443. };
  29444. const res = await (typeof getDigitalOrderList === "function" ? getDigitalOrderList(params) : Promise.resolve({ code: 1, data: { list: [] } }));
  29445. if (res.code === 1 && res.data && res.data.list) {
  29446. lhcPagingRef.value.complete(res.data.list);
  29447. } else {
  29448. lhcPagingRef.value.complete(false);
  29449. }
  29450. } catch (error) {
  29451. lhcPagingRef.value.complete(false);
  29452. }
  29453. };
  29454. const onLhcStatusConfirm = (e) => {
  29455. lhcStatus.value = e[0].value;
  29456. handleLhcQuery();
  29457. };
  29458. const onLhcCalendarChange = (e) => {
  29459. if (e.startDate && e.endDate) {
  29460. lhcStart.value = e.startDate;
  29461. lhcEnd.value = e.endDate;
  29462. lhcDateRange.value = `${e.startDate} ~ ${e.endDate}`;
  29463. handleLhcQuery();
  29464. }
  29465. };
  29466. const handleLhcQuery = () => {
  29467. var _a2;
  29468. (_a2 = lhcPagingRef.value) == null ? void 0 : _a2.reload();
  29469. };
  29470. const handleLhcReset = () => {
  29471. var _a2;
  29472. lhcStatus.value = "";
  29473. lhcDateRange.value = "";
  29474. lhcStart.value = "";
  29475. lhcEnd.value = "";
  29476. (_a2 = lhcPagingRef.value) == null ? void 0 : _a2.reload();
  29477. };
  29478. const getLhcStatusText = (status) => {
  29479. const s = Number(status);
  29480. if (s === 0)
  29481. return t2("待开奖");
  29482. if (s === 1)
  29483. return t2("未中奖");
  29484. if (s === 2)
  29485. return t2("已中奖");
  29486. if (s === 3)
  29487. return t2("合局");
  29488. if (s === 4)
  29489. return t2("购物车");
  29490. return t2("未知");
  29491. };
  29492. const getLhcStatusClass = (status) => {
  29493. const s = Number(status);
  29494. if (s === 0)
  29495. return "status-pending";
  29496. if (s === 1)
  29497. return "status-lose";
  29498. if (s === 2)
  29499. return "status-win";
  29500. if (s === 3)
  29501. return "status-default";
  29502. if (s === 4)
  29503. return "status-default";
  29504. return "status-default";
  29505. };
  29506. const getLhcProfitText = (data) => {
  29507. const status = Number(data.lottery_status);
  29508. if (status === 1) {
  29509. return data.profit_and_loss || "--";
  29510. } else if (status === 2) {
  29511. return data.win_amount || "--";
  29512. } else {
  29513. return 0;
  29514. }
  29515. };
  29516. const getLhcProfitClass = (status) => {
  29517. const s = Number(status);
  29518. if (s === 1)
  29519. return "is-lose";
  29520. if (s === 2)
  29521. return "is-win";
  29522. return "";
  29523. };
  29524. const handleLhcDetail = (item) => {
  29525. router2.push({ name: "DigitalDetail", query: { id: item.id } });
  29526. };
  29527. const __returned__ = { t: t2, router: router2, mainTab, switchMainTab, tabList, gamePagingRef, gameBetList, gameStatusShow, gameSettleStatusShow, gameCalendarShow, gameStatus, gameSettleStatus, gameDateRange, gameStart, gameEnd, gameStatusColumns, gameSettleStatusColumns, gameStatusText, gameSettleStatusText, onTabChange, onGameQuery, onGameStatusConfirm, onGameSettleStatusConfirm, onGameCalendarChange, handleGameQuery, handleGameReset, getGameStatusText, getGameStatusClass, sportPagingRef, sportOrderList, sportStatusShow, sportSettleStatusShow, sportCalendarShow, sportStatus, sportSettleStatus, sportDateRange, sportStart, sportEnd, sportStatusColumns, sportSettleStatusColumns, sportStatusText, sportSettleStatusText, onSportQuery, getMarketName, getSelectionValue, getSelectionHandicap, getSelectionOdd, onSportStatusConfirm, onSportSettleStatusConfirm, onSportCalendarConfirm, handleSportQuery, handleSportReset, getSportItemStatus, getSportProfitClass, getRefundStatusText, getRefundStatusClass, copyText, handleSportDetail, lhcPagingRef, lhcOrderList, lhcStatusShow, lhcCalendarShow, lhcStatus, lhcDateRange, lhcStart, lhcEnd, lhcStatusColumns, lhcStatusText, onLhcQuery, onLhcStatusConfirm, onLhcCalendarChange, handleLhcQuery, handleLhcReset, getLhcStatusText, getLhcStatusClass, getLhcProfitText, getLhcProfitClass, handleLhcDetail, get getLocale() {
  29528. return getLocale;
  29529. } };
  29530. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  29531. return __returned__;
  29532. }
  29533. });
  29534. function _sfc_render$T(_ctx, _cache, $props, $setup, $data, $options) {
  29535. const _component_u_tabs = __unplugin_components_0$2;
  29536. const _component_u_icon = __unplugin_components_0$5;
  29537. const _component_u_button = __unplugin_components_2$1;
  29538. const _component_u_tag = __unplugin_components_2$2;
  29539. const _component_u_empty = __unplugin_components_4$2;
  29540. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  29541. const _component_u_select = __unplugin_components_5$1;
  29542. const _component_u_calendar = __unplugin_components_6;
  29543. const _component_PageContainer = PageContainer;
  29544. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  29545. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  29546. default: vue.withCtx(() => [
  29547. vue.createVNode(_component_PageContainer, null, {
  29548. default: vue.withCtx(() => [
  29549. vue.createElementVNode("view", { class: "page-content" }, [
  29550. vue.createVNode(_component_u_tabs, {
  29551. list: $setup.tabList,
  29552. current: $setup.mainTab,
  29553. onChange: $setup.onTabChange,
  29554. "active-color": "#f8b932",
  29555. "inactive-color": "#666",
  29556. "line-color": "#f8b932",
  29557. "is-scroll": $setup.getLocale() != "zh"
  29558. }, null, 8, ["list", "current", "is-scroll"]),
  29559. vue.createElementVNode("view", { class: "main-tabs-wrapper" }),
  29560. vue.createElementVNode("view", { class: "paging-container" }, [
  29561. $setup.mainTab === 1 ? (vue.openBlock(), vue.createBlock(_component_z_paging, {
  29562. key: 0,
  29563. ref: "gamePagingRef",
  29564. modelValue: $setup.gameBetList,
  29565. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.gameBetList = $event),
  29566. onQuery: $setup.onGameQuery,
  29567. fixed: false,
  29568. "refresher-enabled": true,
  29569. "loading-more-enabled": true,
  29570. "auto-show-back-to-top": true,
  29571. "back-to-top-threshold": 300,
  29572. loadingMoreLoadingText: $setup.t("正在加载"),
  29573. loadingMoreNoMoreText: $setup.t("没有更多了"),
  29574. loadingMoreDefaultText: $setup.t("点击加载更多")
  29575. }, {
  29576. top: vue.withCtx(() => [
  29577. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  29578. vue.createElementVNode("view", { class: "filter-card" }, [
  29579. vue.createElementVNode("view", { class: "filter-header" }, [
  29580. vue.createElementVNode("view", { class: "title-line" }, [
  29581. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  29582. vue.createElementVNode(
  29583. "text",
  29584. { class: "title-text" },
  29585. vue.toDisplayString($setup.t("条件筛选")),
  29586. 1
  29587. /* TEXT */
  29588. )
  29589. ]),
  29590. vue.createElementVNode(
  29591. "text",
  29592. {
  29593. class: "reset-link",
  29594. onClick: $setup.handleGameReset
  29595. },
  29596. vue.toDisplayString($setup.t("重置全部")),
  29597. 1
  29598. /* TEXT */
  29599. )
  29600. ]),
  29601. vue.createElementVNode("view", { class: "filter-body" }, [
  29602. vue.createElementVNode("view", { class: "filter-row" }, [
  29603. vue.createElementVNode("view", {
  29604. class: "filter-item type-item",
  29605. onClick: _cache[0] || (_cache[0] = ($event) => $setup.gameStatusShow = true)
  29606. }, [
  29607. vue.createVNode(_component_u_icon, {
  29608. name: "list-dot",
  29609. size: "32",
  29610. color: _ctx.$mainColor
  29611. }, null, 8, ["color"]),
  29612. vue.createElementVNode("view", { class: "filter-content" }, [
  29613. vue.withDirectives(vue.createElementVNode(
  29614. "text",
  29615. { class: "filter-value" },
  29616. vue.toDisplayString($setup.gameStatusText),
  29617. 513
  29618. /* TEXT, NEED_PATCH */
  29619. ), [
  29620. [vue.vShow, $setup.gameStatusText]
  29621. ]),
  29622. vue.withDirectives(vue.createElementVNode(
  29623. "text",
  29624. { class: "filter-placeholder" },
  29625. vue.toDisplayString($setup.t("是否中奖")),
  29626. 513
  29627. /* TEXT, NEED_PATCH */
  29628. ), [
  29629. [vue.vShow, !$setup.gameStatusText]
  29630. ])
  29631. ]),
  29632. vue.createVNode(_component_u_icon, {
  29633. name: "arrow-down",
  29634. size: "14",
  29635. color: "#ccc"
  29636. })
  29637. ]),
  29638. vue.createElementVNode("view", {
  29639. class: "filter-item date-item",
  29640. onClick: _cache[1] || (_cache[1] = ($event) => $setup.gameCalendarShow = true)
  29641. }, [
  29642. vue.createVNode(_component_u_icon, {
  29643. name: "calendar",
  29644. size: "32",
  29645. color: _ctx.$mainColor
  29646. }, null, 8, ["color"]),
  29647. vue.createElementVNode("view", { class: "filter-content" }, [
  29648. $setup.gameDateRange ? (vue.openBlock(), vue.createElementBlock(
  29649. "text",
  29650. {
  29651. key: 0,
  29652. class: "filter-value"
  29653. },
  29654. vue.toDisplayString($setup.gameDateRange),
  29655. 1
  29656. /* TEXT */
  29657. )) : (vue.openBlock(), vue.createElementBlock(
  29658. "text",
  29659. {
  29660. key: 1,
  29661. class: "filter-placeholder"
  29662. },
  29663. vue.toDisplayString($setup.t("日期区间")),
  29664. 1
  29665. /* TEXT */
  29666. ))
  29667. ]),
  29668. vue.createVNode(_component_u_icon, {
  29669. name: "arrow-down",
  29670. size: "14",
  29671. color: "#ccc"
  29672. })
  29673. ])
  29674. ]),
  29675. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  29676. vue.createElementVNode("view", {
  29677. class: "filter-item type-item",
  29678. onClick: _cache[2] || (_cache[2] = ($event) => $setup.gameSettleStatusShow = true)
  29679. }, [
  29680. vue.createVNode(_component_u_icon, {
  29681. name: "coupon",
  29682. size: "32",
  29683. color: _ctx.$mainColor
  29684. }, null, 8, ["color"]),
  29685. vue.createElementVNode("view", { class: "filter-content" }, [
  29686. vue.withDirectives(vue.createElementVNode(
  29687. "text",
  29688. { class: "filter-value" },
  29689. vue.toDisplayString($setup.gameSettleStatusText),
  29690. 513
  29691. /* TEXT, NEED_PATCH */
  29692. ), [
  29693. [vue.vShow, $setup.gameSettleStatusText]
  29694. ]),
  29695. vue.withDirectives(vue.createElementVNode(
  29696. "text",
  29697. { class: "filter-placeholder" },
  29698. vue.toDisplayString($setup.t("结算状态")),
  29699. 513
  29700. /* TEXT, NEED_PATCH */
  29701. ), [
  29702. [vue.vShow, !$setup.gameSettleStatusText]
  29703. ])
  29704. ]),
  29705. vue.createVNode(_component_u_icon, {
  29706. name: "arrow-down",
  29707. size: "14",
  29708. color: "#ccc"
  29709. })
  29710. ]),
  29711. vue.createElementVNode("view", { class: "button-group" }, [
  29712. vue.createVNode(_component_u_button, {
  29713. type: "primary",
  29714. shape: "circle",
  29715. class: "search-btn",
  29716. onClick: $setup.handleGameQuery,
  29717. "custom-style": "width: 100%; height: 76rpx;"
  29718. }, {
  29719. default: vue.withCtx(() => [
  29720. vue.createVNode(_component_u_icon, {
  29721. name: "search",
  29722. size: "32",
  29723. color: "#fff",
  29724. class: "mr-1"
  29725. }),
  29726. vue.createTextVNode(
  29727. " " + vue.toDisplayString($setup.t("立即查询")),
  29728. 1
  29729. /* TEXT */
  29730. )
  29731. ]),
  29732. _: 1
  29733. /* STABLE */
  29734. })
  29735. ])
  29736. ])
  29737. ])
  29738. ])
  29739. ])
  29740. ]),
  29741. refresher: vue.withCtx(() => [
  29742. vue.createElementVNode("view", { class: "refresher-ui" }, [
  29743. vue.createElementVNode("view", { class: "spin-loader" }),
  29744. vue.createElementVNode(
  29745. "text",
  29746. { class: "refresher-text" },
  29747. vue.toDisplayString($setup.t("更新数据中...")),
  29748. 1
  29749. /* TEXT */
  29750. )
  29751. ])
  29752. ]),
  29753. empty: vue.withCtx(() => [
  29754. vue.createElementVNode("view", { class: "empty-ui" }, [
  29755. vue.createVNode(_component_u_empty, {
  29756. text: $setup.t("暂无投注记录"),
  29757. mode: "history",
  29758. "icon-size": "120"
  29759. }, null, 8, ["text"])
  29760. ])
  29761. ]),
  29762. default: vue.withCtx(() => [
  29763. vue.createElementVNode("view", { class: "bet-list-container" }, [
  29764. (vue.openBlock(true), vue.createElementBlock(
  29765. vue.Fragment,
  29766. null,
  29767. vue.renderList($setup.gameBetList, (item) => {
  29768. return vue.openBlock(), vue.createElementBlock("view", {
  29769. key: item.id,
  29770. class: "bet-card",
  29771. onClick: ($event) => $setup.router.push({ name: "EntertainmentDetail", query: { id: item.id } })
  29772. }, [
  29773. vue.createElementVNode("view", { class: "card-header" }, [
  29774. vue.createElementVNode("view", { class: "issue-box" }, [
  29775. vue.createElementVNode(
  29776. "text",
  29777. { class: "label" },
  29778. vue.toDisplayString($setup.t("期号")) + ":",
  29779. 1
  29780. /* TEXT */
  29781. ),
  29782. vue.createElementVNode(
  29783. "text",
  29784. { class: "issue-no" },
  29785. vue.toDisplayString(item.issue_no),
  29786. 1
  29787. /* TEXT */
  29788. )
  29789. ]),
  29790. vue.createElementVNode(
  29791. "view",
  29792. {
  29793. class: vue.normalizeClass(["status-badge", $setup.getGameStatusClass(item)])
  29794. },
  29795. vue.toDisplayString($setup.getGameStatusText(item)),
  29796. 3
  29797. /* TEXT, CLASS */
  29798. )
  29799. ]),
  29800. vue.createElementVNode("view", { class: "card-main" }, [
  29801. vue.createElementVNode("view", {
  29802. class: "bet-content-box",
  29803. style: { "margin-bottom": "12rpx" }
  29804. }, [
  29805. vue.createElementVNode(
  29806. "text",
  29807. { class: "bet-label" },
  29808. vue.toDisplayString($setup.t("彩票玩法")),
  29809. 1
  29810. /* TEXT */
  29811. ),
  29812. vue.createVNode(_component_u_tag, {
  29813. text: Number(item.is_pc) === 1 ? $setup.t("加拿大") + 28 : $setup.t("极速") + 28,
  29814. type: "primary",
  29815. plain: "",
  29816. size: "mini"
  29817. }, null, 8, ["text"])
  29818. ]),
  29819. vue.createElementVNode("view", { class: "bet-content-box" }, [
  29820. vue.createElementVNode(
  29821. "text",
  29822. { class: "bet-label" },
  29823. vue.toDisplayString($setup.t("投注内容")),
  29824. 1
  29825. /* TEXT */
  29826. ),
  29827. vue.createElementVNode(
  29828. "text",
  29829. { class: "bet-keywords" },
  29830. vue.toDisplayString(item.keywords),
  29831. 1
  29832. /* TEXT */
  29833. )
  29834. ]),
  29835. vue.createElementVNode("view", { class: "data-grid" }, [
  29836. vue.createElementVNode("view", { class: "data-item" }, [
  29837. vue.createElementVNode(
  29838. "text",
  29839. { class: "d-label" },
  29840. vue.toDisplayString($setup.t("赔率")),
  29841. 1
  29842. /* TEXT */
  29843. ),
  29844. vue.createElementVNode(
  29845. "text",
  29846. { class: "d-val" },
  29847. vue.toDisplayString(item.odds),
  29848. 1
  29849. /* TEXT */
  29850. )
  29851. ]),
  29852. vue.createElementVNode("view", { class: "data-item" }, [
  29853. vue.createElementVNode(
  29854. "text",
  29855. { class: "d-label" },
  29856. vue.toDisplayString($setup.t("投注本金")),
  29857. 1
  29858. /* TEXT */
  29859. ),
  29860. vue.createElementVNode(
  29861. "text",
  29862. { class: "d-val" },
  29863. vue.toDisplayString(parseFloat(item.amount)),
  29864. 1
  29865. /* TEXT */
  29866. )
  29867. ]),
  29868. vue.createElementVNode("view", { class: "data-item" }, [
  29869. vue.createElementVNode(
  29870. "text",
  29871. { class: "d-label" },
  29872. vue.toDisplayString($setup.t("盈亏")),
  29873. 1
  29874. /* TEXT */
  29875. ),
  29876. item.status === 2 && !Number(item.profit) > 0 ? (vue.openBlock(), vue.createElementBlock(
  29877. "span",
  29878. {
  29879. key: 0,
  29880. class: "d-val profit-val is-lose"
  29881. },
  29882. " - " + vue.toDisplayString(parseFloat(item.amount)),
  29883. 1
  29884. /* TEXT */
  29885. )) : (vue.openBlock(), vue.createElementBlock(
  29886. "span",
  29887. {
  29888. key: 1,
  29889. class: vue.normalizeClass(["d-val profit-val", Number(item.profit) > 0 ? "is-win" : ""])
  29890. },
  29891. [
  29892. Number(item.profit) > 0 ? (vue.openBlock(), vue.createElementBlock(
  29893. "text",
  29894. { key: 0 },
  29895. " +" + vue.toDisplayString(parseFloat(item.profit)),
  29896. 1
  29897. /* TEXT */
  29898. )) : (vue.openBlock(), vue.createElementBlock(
  29899. "text",
  29900. { key: 1 },
  29901. vue.toDisplayString(parseFloat(item.profit)),
  29902. 1
  29903. /* TEXT */
  29904. ))
  29905. ],
  29906. 2
  29907. /* CLASS */
  29908. ))
  29909. ])
  29910. ])
  29911. ]),
  29912. vue.createElementVNode("view", { class: "card-footer" }, [
  29913. vue.createElementVNode(
  29914. "text",
  29915. { class: "time" },
  29916. vue.toDisplayString(item.created_at),
  29917. 1
  29918. /* TEXT */
  29919. )
  29920. ])
  29921. ], 8, ["onClick"]);
  29922. }),
  29923. 128
  29924. /* KEYED_FRAGMENT */
  29925. ))
  29926. ])
  29927. ]),
  29928. _: 1
  29929. /* STABLE */
  29930. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])) : vue.createCommentVNode("v-if", true),
  29931. $setup.mainTab === 0 ? (vue.openBlock(), vue.createBlock(_component_z_paging, {
  29932. key: 1,
  29933. ref: "sportPagingRef",
  29934. modelValue: $setup.sportOrderList,
  29935. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.sportOrderList = $event),
  29936. onQuery: $setup.onSportQuery,
  29937. fixed: false,
  29938. "refresher-enabled": true,
  29939. "loading-more-enabled": true,
  29940. "auto-show-back-to-top": true,
  29941. "back-to-top-threshold": 300,
  29942. loadingMoreLoadingText: $setup.t("正在加载"),
  29943. loadingMoreNoMoreText: $setup.t("没有更多了"),
  29944. loadingMoreDefaultText: $setup.t("点击加载更多")
  29945. }, {
  29946. top: vue.withCtx(() => [
  29947. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  29948. vue.createElementVNode("view", { class: "filter-card" }, [
  29949. vue.createElementVNode("view", { class: "filter-header" }, [
  29950. vue.createElementVNode("view", { class: "title-line" }, [
  29951. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  29952. vue.createElementVNode(
  29953. "text",
  29954. { class: "title-text" },
  29955. vue.toDisplayString($setup.t("条件筛选")),
  29956. 1
  29957. /* TEXT */
  29958. )
  29959. ]),
  29960. vue.createElementVNode(
  29961. "text",
  29962. {
  29963. class: "reset-link",
  29964. onClick: $setup.handleSportReset
  29965. },
  29966. vue.toDisplayString($setup.t("重置全部")),
  29967. 1
  29968. /* TEXT */
  29969. )
  29970. ]),
  29971. vue.createElementVNode("view", { class: "filter-body" }, [
  29972. vue.createElementVNode("view", { class: "filter-row" }, [
  29973. vue.createElementVNode("view", {
  29974. class: "filter-item type-item",
  29975. onClick: _cache[4] || (_cache[4] = ($event) => $setup.sportStatusShow = true)
  29976. }, [
  29977. vue.createVNode(_component_u_icon, {
  29978. name: "list-dot",
  29979. size: "32",
  29980. color: _ctx.$mainColor
  29981. }, null, 8, ["color"]),
  29982. vue.createElementVNode("view", { class: "filter-content" }, [
  29983. vue.withDirectives(vue.createElementVNode(
  29984. "text",
  29985. { class: "filter-value" },
  29986. vue.toDisplayString($setup.sportStatusText),
  29987. 513
  29988. /* TEXT, NEED_PATCH */
  29989. ), [
  29990. [vue.vShow, $setup.sportStatusText]
  29991. ]),
  29992. vue.withDirectives(vue.createElementVNode(
  29993. "text",
  29994. { class: "filter-placeholder" },
  29995. vue.toDisplayString($setup.t("是否中奖")),
  29996. 513
  29997. /* TEXT, NEED_PATCH */
  29998. ), [
  29999. [vue.vShow, !$setup.sportStatusText]
  30000. ])
  30001. ]),
  30002. vue.createVNode(_component_u_icon, {
  30003. name: "arrow-down",
  30004. size: "14",
  30005. color: "#ccc"
  30006. })
  30007. ]),
  30008. vue.createElementVNode("view", {
  30009. class: "filter-item date-item",
  30010. onClick: _cache[5] || (_cache[5] = ($event) => $setup.sportCalendarShow = true)
  30011. }, [
  30012. vue.createVNode(_component_u_icon, {
  30013. name: "calendar",
  30014. size: "32",
  30015. color: _ctx.$mainColor
  30016. }, null, 8, ["color"]),
  30017. vue.createElementVNode("view", { class: "filter-content" }, [
  30018. $setup.sportDateRange ? (vue.openBlock(), vue.createElementBlock(
  30019. "text",
  30020. {
  30021. key: 0,
  30022. class: "filter-value"
  30023. },
  30024. vue.toDisplayString($setup.sportDateRange),
  30025. 1
  30026. /* TEXT */
  30027. )) : (vue.openBlock(), vue.createElementBlock(
  30028. "text",
  30029. {
  30030. key: 1,
  30031. class: "filter-placeholder"
  30032. },
  30033. vue.toDisplayString($setup.t("日期区间")),
  30034. 1
  30035. /* TEXT */
  30036. ))
  30037. ]),
  30038. vue.createVNode(_component_u_icon, {
  30039. name: "arrow-down",
  30040. size: "14",
  30041. color: "#ccc"
  30042. })
  30043. ])
  30044. ]),
  30045. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  30046. vue.createElementVNode("view", {
  30047. class: "filter-item type-item",
  30048. onClick: _cache[6] || (_cache[6] = ($event) => $setup.sportSettleStatusShow = true)
  30049. }, [
  30050. vue.createVNode(_component_u_icon, {
  30051. name: "coupon",
  30052. size: "32",
  30053. color: _ctx.$mainColor
  30054. }, null, 8, ["color"]),
  30055. vue.createElementVNode("view", { class: "filter-content" }, [
  30056. vue.withDirectives(vue.createElementVNode(
  30057. "text",
  30058. { class: "filter-value" },
  30059. vue.toDisplayString($setup.sportSettleStatusText),
  30060. 513
  30061. /* TEXT, NEED_PATCH */
  30062. ), [
  30063. [vue.vShow, $setup.sportSettleStatusText]
  30064. ]),
  30065. vue.withDirectives(vue.createElementVNode(
  30066. "text",
  30067. { class: "filter-placeholder" },
  30068. vue.toDisplayString($setup.t("结算状态")),
  30069. 513
  30070. /* TEXT, NEED_PATCH */
  30071. ), [
  30072. [vue.vShow, !$setup.sportSettleStatusText]
  30073. ])
  30074. ]),
  30075. vue.createVNode(_component_u_icon, {
  30076. name: "arrow-down",
  30077. size: "14",
  30078. color: "#ccc"
  30079. })
  30080. ]),
  30081. vue.createElementVNode("view", { class: "button-group" }, [
  30082. vue.createVNode(_component_u_button, {
  30083. type: "primary",
  30084. shape: "circle",
  30085. class: "search-btn",
  30086. onClick: $setup.handleSportQuery,
  30087. "custom-style": "width: 100%; height: 76rpx;"
  30088. }, {
  30089. default: vue.withCtx(() => [
  30090. vue.createVNode(_component_u_icon, {
  30091. name: "search",
  30092. size: "32",
  30093. color: "#fff",
  30094. class: "mr-1"
  30095. }),
  30096. vue.createTextVNode(
  30097. " " + vue.toDisplayString($setup.t("立即查询")),
  30098. 1
  30099. /* TEXT */
  30100. )
  30101. ]),
  30102. _: 1
  30103. /* STABLE */
  30104. })
  30105. ])
  30106. ])
  30107. ])
  30108. ])
  30109. ])
  30110. ]),
  30111. refresher: vue.withCtx(() => [
  30112. vue.createElementVNode("view", { class: "refresher-ui" }, [
  30113. vue.createElementVNode("view", { class: "spin-loader" }),
  30114. vue.createElementVNode(
  30115. "text",
  30116. { class: "refresher-text" },
  30117. vue.toDisplayString($setup.t("加载最新记录...")),
  30118. 1
  30119. /* TEXT */
  30120. )
  30121. ])
  30122. ]),
  30123. empty: vue.withCtx(() => [
  30124. vue.createElementVNode("view", { class: "empty-ui" }, [
  30125. vue.createVNode(_component_u_empty, {
  30126. text: $setup.t("暂无投注记录"),
  30127. mode: "list",
  30128. "icon-size": "120"
  30129. }, null, 8, ["text"])
  30130. ])
  30131. ]),
  30132. default: vue.withCtx(() => [
  30133. vue.createElementVNode("view", { class: "order-list" }, [
  30134. (vue.openBlock(true), vue.createElementBlock(
  30135. vue.Fragment,
  30136. null,
  30137. vue.renderList($setup.sportOrderList, (item, index) => {
  30138. return vue.openBlock(), vue.createElementBlock("view", {
  30139. key: item.id || index,
  30140. class: "log-card",
  30141. onClick: ($event) => $setup.handleSportDetail(item)
  30142. }, [
  30143. vue.createElementVNode("view", { class: "card-header" }, [
  30144. vue.createElementVNode("view", { class: "order-info" }, [
  30145. vue.createElementVNode(
  30146. "text",
  30147. { class: "label" },
  30148. vue.toDisplayString($setup.t("注单号")) + ":",
  30149. 1
  30150. /* TEXT */
  30151. ),
  30152. vue.createElementVNode(
  30153. "text",
  30154. { class: "val" },
  30155. vue.toDisplayString(item.order_id),
  30156. 1
  30157. /* TEXT */
  30158. ),
  30159. vue.createElementVNode("view", {
  30160. class: "copy-btn",
  30161. onClick: vue.withModifiers(($event) => $setup.copyText(item.order_id), ["stop"])
  30162. }, [
  30163. vue.createVNode(_component_u_icon, {
  30164. name: "file-text",
  30165. size: "24",
  30166. color: "#999"
  30167. })
  30168. ], 8, ["onClick"])
  30169. ]),
  30170. vue.createElementVNode(
  30171. "text",
  30172. { class: "time" },
  30173. vue.toDisplayString(item.create_time),
  30174. 1
  30175. /* TEXT */
  30176. )
  30177. ]),
  30178. vue.createElementVNode("view", { class: "card-main" }, [
  30179. vue.createElementVNode("view", { class: "bet-info" }, [
  30180. vue.createElementVNode("view", { class: "bet-type" }, [
  30181. vue.createElementVNode("text", { class: "type-name" }, [
  30182. vue.createCommentVNode(" {{ getMarketName(item) }}"),
  30183. vue.createTextVNode(
  30184. " " + vue.toDisplayString(item.odd_name) + " ",
  30185. 1
  30186. /* TEXT */
  30187. ),
  30188. vue.createElementVNode("text", { style: { "color": "#64748b", "font-size": "26rpx", "margin-left": "8rpx", "font-weight": "normal" } }, [
  30189. vue.createTextVNode(
  30190. " - " + vue.toDisplayString(item.odd_value) + " ",
  30191. 1
  30192. /* TEXT */
  30193. ),
  30194. vue.createCommentVNode(" {{ getSelectionValue(item) }}")
  30195. ]),
  30196. $setup.getSelectionHandicap(item) ? (vue.openBlock(), vue.createElementBlock(
  30197. "text",
  30198. {
  30199. key: 0,
  30200. style: { "color": "#f8b932", "margin-left": "6rpx" }
  30201. },
  30202. " [" + vue.toDisplayString($setup.getSelectionHandicap(item)) + "] ",
  30203. 1
  30204. /* TEXT */
  30205. )) : vue.createCommentVNode("v-if", true)
  30206. ])
  30207. ]),
  30208. vue.createElementVNode("view", { style: { "margin-top": "8rpx", "margin-bottom": "8rpx", "display": "flex", "gap": "8rpx" } }, [
  30209. item.is_roll ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  30210. key: 0,
  30211. text: $setup.t("滚球"),
  30212. size: "mini",
  30213. type: "primary",
  30214. plain: ""
  30215. }, null, 8, ["text"])) : (vue.openBlock(), vue.createBlock(_component_u_tag, {
  30216. key: 1,
  30217. text: $setup.t("体育博彩"),
  30218. size: "mini",
  30219. type: "primary",
  30220. plain: ""
  30221. }, null, 8, ["text"]))
  30222. ]),
  30223. vue.createElementVNode("view", { class: "odds-row" }, [
  30224. vue.createElementVNode(
  30225. "text",
  30226. { class: "label" },
  30227. vue.toDisplayString($setup.t("赔率")),
  30228. 1
  30229. /* TEXT */
  30230. ),
  30231. vue.createCommentVNode(' <text class="val odds-val">{{ getSelectionOdd(item) }}</text>'),
  30232. vue.createTextVNode(
  30233. " " + vue.toDisplayString(Number(item.odd)),
  30234. 1
  30235. /* TEXT */
  30236. )
  30237. ])
  30238. ]),
  30239. vue.createElementVNode(
  30240. "view",
  30241. {
  30242. class: vue.normalizeClass(["custom-sport-tag", "tag-" + $setup.getSportItemStatus(item).type])
  30243. },
  30244. vue.toDisplayString($setup.getSportItemStatus(item).text),
  30245. 3
  30246. /* TEXT, CLASS */
  30247. )
  30248. ]),
  30249. item.failure ? (vue.openBlock(), vue.createElementBlock("view", {
  30250. key: 0,
  30251. class: "odds-row"
  30252. }, [
  30253. vue.createElementVNode(
  30254. "span",
  30255. { class: "label" },
  30256. vue.toDisplayString($setup.t("取消原因")) + ":",
  30257. 1
  30258. /* TEXT */
  30259. ),
  30260. vue.createElementVNode(
  30261. "span",
  30262. { style: { "color": "#fa3534" } },
  30263. vue.toDisplayString(item.failure),
  30264. 1
  30265. /* TEXT */
  30266. )
  30267. ])) : vue.createCommentVNode("v-if", true),
  30268. vue.createElementVNode("view", { class: "divider" }),
  30269. vue.createElementVNode("view", { class: "card-footer" }, [
  30270. vue.createElementVNode("view", { class: "info-column" }, [
  30271. vue.createElementVNode(
  30272. "text",
  30273. { class: "info-label" },
  30274. vue.toDisplayString($setup.t("投注金额")),
  30275. 1
  30276. /* TEXT */
  30277. ),
  30278. vue.createElementVNode(
  30279. "text",
  30280. { class: "info-value" },
  30281. vue.toDisplayString(item.amount),
  30282. 1
  30283. /* TEXT */
  30284. ),
  30285. Number(item.return_status) !== 0 ? (vue.openBlock(), vue.createElementBlock(
  30286. "text",
  30287. {
  30288. key: 0,
  30289. class: vue.normalizeClass(["refund-text", $setup.getRefundStatusClass(item.return_status)])
  30290. },
  30291. vue.toDisplayString($setup.getRefundStatusText(item.return_status)),
  30292. 3
  30293. /* TEXT, CLASS */
  30294. )) : vue.createCommentVNode("v-if", true)
  30295. ]),
  30296. vue.createElementVNode("view", { class: "info-column align-right" }, [
  30297. vue.createElementVNode(
  30298. "text",
  30299. { class: "info-label" },
  30300. vue.toDisplayString($setup.t("派彩金额")),
  30301. 1
  30302. /* TEXT */
  30303. ),
  30304. vue.createElementVNode(
  30305. "text",
  30306. {
  30307. class: vue.normalizeClass(["info-value big-num", $setup.getSportProfitClass(item)])
  30308. },
  30309. [
  30310. item.is_win === 0 ? (vue.openBlock(), vue.createElementBlock(
  30311. "span",
  30312. { key: 0 },
  30313. vue.toDisplayString(item.profit_and_loss),
  30314. 1
  30315. /* TEXT */
  30316. )) : item.is_win === 1 ? (vue.openBlock(), vue.createElementBlock(
  30317. "span",
  30318. { key: 1 },
  30319. "+" + vue.toDisplayString(item.win_amount),
  30320. 1
  30321. /* TEXT */
  30322. )) : (vue.openBlock(), vue.createElementBlock("span", { key: 2 }, "0.00"))
  30323. ],
  30324. 2
  30325. /* CLASS */
  30326. )
  30327. ])
  30328. ])
  30329. ], 8, ["onClick"]);
  30330. }),
  30331. 128
  30332. /* KEYED_FRAGMENT */
  30333. ))
  30334. ])
  30335. ]),
  30336. _: 1
  30337. /* STABLE */
  30338. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])) : vue.createCommentVNode("v-if", true),
  30339. $setup.mainTab === 2 ? (vue.openBlock(), vue.createBlock(_component_z_paging, {
  30340. key: 2,
  30341. ref: "lhcPagingRef",
  30342. modelValue: $setup.lhcOrderList,
  30343. "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.lhcOrderList = $event),
  30344. onQuery: $setup.onLhcQuery,
  30345. fixed: false,
  30346. "refresher-enabled": true,
  30347. "loading-more-enabled": true,
  30348. "auto-show-back-to-top": true,
  30349. "back-to-top-threshold": 300,
  30350. loadingMoreLoadingText: $setup.t("正在加载"),
  30351. loadingMoreNoMoreText: $setup.t("没有更多了"),
  30352. loadingMoreDefaultText: $setup.t("点击加载更多")
  30353. }, {
  30354. top: vue.withCtx(() => [
  30355. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  30356. vue.createElementVNode("view", { class: "filter-card" }, [
  30357. vue.createElementVNode("view", { class: "filter-header" }, [
  30358. vue.createElementVNode("view", { class: "title-line" }, [
  30359. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  30360. vue.createElementVNode(
  30361. "text",
  30362. { class: "title-text" },
  30363. vue.toDisplayString($setup.t("条件筛选")),
  30364. 1
  30365. /* TEXT */
  30366. )
  30367. ]),
  30368. vue.createElementVNode(
  30369. "text",
  30370. {
  30371. class: "reset-link",
  30372. onClick: $setup.handleLhcReset
  30373. },
  30374. vue.toDisplayString($setup.t("重置全部")),
  30375. 1
  30376. /* TEXT */
  30377. )
  30378. ]),
  30379. vue.createElementVNode("view", { class: "filter-body" }, [
  30380. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  30381. vue.createElementVNode("view", {
  30382. class: "filter-item date-item",
  30383. onClick: _cache[8] || (_cache[8] = ($event) => $setup.lhcCalendarShow = true),
  30384. style: { "margin-bottom": "20rpx" }
  30385. }, [
  30386. vue.createVNode(_component_u_icon, {
  30387. name: "calendar",
  30388. size: "32",
  30389. color: _ctx.$mainColor
  30390. }, null, 8, ["color"]),
  30391. vue.createElementVNode("view", { class: "filter-content" }, [
  30392. $setup.lhcDateRange ? (vue.openBlock(), vue.createElementBlock(
  30393. "text",
  30394. {
  30395. key: 0,
  30396. class: "filter-value"
  30397. },
  30398. vue.toDisplayString($setup.lhcDateRange),
  30399. 1
  30400. /* TEXT */
  30401. )) : (vue.openBlock(), vue.createElementBlock(
  30402. "text",
  30403. {
  30404. key: 1,
  30405. class: "filter-placeholder"
  30406. },
  30407. vue.toDisplayString($setup.t("日期区间")),
  30408. 1
  30409. /* TEXT */
  30410. ))
  30411. ]),
  30412. vue.createVNode(_component_u_icon, {
  30413. name: "arrow-down",
  30414. size: "14",
  30415. color: "#ccc"
  30416. })
  30417. ])
  30418. ]),
  30419. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  30420. vue.createElementVNode("view", {
  30421. class: "filter-item type-item",
  30422. onClick: _cache[9] || (_cache[9] = ($event) => $setup.lhcStatusShow = true)
  30423. }, [
  30424. vue.createVNode(_component_u_icon, {
  30425. name: "list-dot",
  30426. size: "32",
  30427. color: _ctx.$mainColor
  30428. }, null, 8, ["color"]),
  30429. vue.createElementVNode("view", { class: "filter-content" }, [
  30430. vue.withDirectives(vue.createElementVNode(
  30431. "text",
  30432. { class: "filter-value" },
  30433. vue.toDisplayString($setup.lhcStatusText),
  30434. 513
  30435. /* TEXT, NEED_PATCH */
  30436. ), [
  30437. [vue.vShow, $setup.lhcStatusText]
  30438. ]),
  30439. vue.withDirectives(vue.createElementVNode(
  30440. "text",
  30441. { class: "filter-placeholder" },
  30442. vue.toDisplayString($setup.t("状态")),
  30443. 513
  30444. /* TEXT, NEED_PATCH */
  30445. ), [
  30446. [vue.vShow, !$setup.lhcStatusText]
  30447. ])
  30448. ]),
  30449. vue.createVNode(_component_u_icon, {
  30450. name: "arrow-down",
  30451. size: "14",
  30452. color: "#ccc"
  30453. })
  30454. ]),
  30455. vue.createElementVNode("view", {
  30456. class: "button-group",
  30457. style: { "margin-left": "20rpx" }
  30458. }, [
  30459. vue.createVNode(_component_u_button, {
  30460. type: "primary",
  30461. shape: "circle",
  30462. class: "search-btn",
  30463. onClick: $setup.handleLhcQuery,
  30464. "custom-style": "width: 100%; height: 76rpx;"
  30465. }, {
  30466. default: vue.withCtx(() => [
  30467. vue.createVNode(_component_u_icon, {
  30468. name: "search",
  30469. size: "32",
  30470. color: "#fff",
  30471. style: { "margin-right": "20rpx" }
  30472. }),
  30473. vue.createTextVNode(
  30474. " " + vue.toDisplayString($setup.t("查询")),
  30475. 1
  30476. /* TEXT */
  30477. )
  30478. ]),
  30479. _: 1
  30480. /* STABLE */
  30481. })
  30482. ])
  30483. ])
  30484. ])
  30485. ])
  30486. ])
  30487. ]),
  30488. refresher: vue.withCtx(() => [
  30489. vue.createElementVNode("view", { class: "refresher-ui" }, [
  30490. vue.createElementVNode("view", { class: "spin-loader" }),
  30491. vue.createElementVNode(
  30492. "text",
  30493. { class: "refresher-text" },
  30494. vue.toDisplayString($setup.t("更新数据中...")),
  30495. 1
  30496. /* TEXT */
  30497. )
  30498. ])
  30499. ]),
  30500. empty: vue.withCtx(() => [
  30501. vue.createElementVNode("view", { class: "empty-ui" }, [
  30502. vue.createVNode(_component_u_empty, {
  30503. text: $setup.t("暂无投注记录"),
  30504. mode: "history",
  30505. "icon-size": "120"
  30506. }, null, 8, ["text"])
  30507. ])
  30508. ]),
  30509. default: vue.withCtx(() => [
  30510. vue.createElementVNode("view", { class: "bet-list-container" }, [
  30511. (vue.openBlock(true), vue.createElementBlock(
  30512. vue.Fragment,
  30513. null,
  30514. vue.renderList($setup.lhcOrderList, (item) => {
  30515. return vue.openBlock(), vue.createElementBlock("view", {
  30516. key: item.id,
  30517. class: "bet-card lhc-card",
  30518. onClick: ($event) => $setup.handleLhcDetail(item)
  30519. }, [
  30520. vue.createElementVNode("view", { class: "card-header" }, [
  30521. vue.createElementVNode("view", { class: "issue-box" }, [
  30522. vue.createElementVNode(
  30523. "text",
  30524. { class: "label" },
  30525. vue.toDisplayString($setup.t("期号")) + ":",
  30526. 1
  30527. /* TEXT */
  30528. ),
  30529. vue.createElementVNode(
  30530. "text",
  30531. { class: "issue-no" },
  30532. vue.toDisplayString(item.issue),
  30533. 1
  30534. /* TEXT */
  30535. )
  30536. ]),
  30537. vue.createElementVNode(
  30538. "view",
  30539. {
  30540. class: vue.normalizeClass(["status-badge", $setup.getLhcStatusClass(item.lottery_status)])
  30541. },
  30542. vue.toDisplayString($setup.getLhcStatusText(item.lottery_status)),
  30543. 3
  30544. /* TEXT, CLASS */
  30545. )
  30546. ]),
  30547. vue.createElementVNode("view", { class: "card-main" }, [
  30548. vue.createElementVNode("view", {
  30549. class: "bet-content-box",
  30550. style: { "margin-bottom": "12rpx" }
  30551. }, [
  30552. item.type === 1 ? (vue.openBlock(), vue.createElementBlock(
  30553. "text",
  30554. {
  30555. key: 0,
  30556. class: "bet-label"
  30557. },
  30558. vue.toDisplayString($setup.t("澳门六合彩")),
  30559. 1
  30560. /* TEXT */
  30561. )) : (vue.openBlock(), vue.createElementBlock(
  30562. "text",
  30563. {
  30564. key: 1,
  30565. class: "bet-label"
  30566. },
  30567. vue.toDisplayString($setup.t("香港六合彩")),
  30568. 1
  30569. /* TEXT */
  30570. )),
  30571. vue.createVNode(_component_u_tag, {
  30572. text: `[${item.game}] - ${item.gameplay}`,
  30573. type: "primary",
  30574. plain: "",
  30575. size: "mini"
  30576. }, null, 8, ["text"])
  30577. ]),
  30578. vue.createElementVNode("view", { class: "bet-content-box" }, [
  30579. vue.createElementVNode(
  30580. "text",
  30581. { class: "bet-label" },
  30582. vue.toDisplayString($setup.t("投注内容")),
  30583. 1
  30584. /* TEXT */
  30585. ),
  30586. vue.createElementVNode(
  30587. "text",
  30588. { class: "bet-keywords" },
  30589. vue.toDisplayString(item.number),
  30590. 1
  30591. /* TEXT */
  30592. )
  30593. ]),
  30594. vue.createElementVNode("view", { class: "data-grid" }, [
  30595. vue.createElementVNode("view", { class: "data-item" }, [
  30596. vue.createElementVNode(
  30597. "text",
  30598. { class: "d-label" },
  30599. vue.toDisplayString($setup.t("赔率")),
  30600. 1
  30601. /* TEXT */
  30602. ),
  30603. vue.createElementVNode(
  30604. "text",
  30605. { class: "d-val" },
  30606. "@" + vue.toDisplayString(item.odds),
  30607. 1
  30608. /* TEXT */
  30609. )
  30610. ]),
  30611. vue.createElementVNode("view", { class: "data-item" }, [
  30612. vue.createElementVNode(
  30613. "text",
  30614. { class: "d-label" },
  30615. vue.toDisplayString($setup.t("投注本金")),
  30616. 1
  30617. /* TEXT */
  30618. ),
  30619. vue.createElementVNode(
  30620. "text",
  30621. { class: "d-val" },
  30622. vue.toDisplayString(parseFloat(item.amount || 0).toFixed(2)),
  30623. 1
  30624. /* TEXT */
  30625. )
  30626. ]),
  30627. vue.createElementVNode("view", { class: "data-item" }, [
  30628. vue.createElementVNode(
  30629. "text",
  30630. { class: "d-label" },
  30631. vue.toDisplayString($setup.t("盈亏")),
  30632. 1
  30633. /* TEXT */
  30634. ),
  30635. vue.createElementVNode(
  30636. "span",
  30637. {
  30638. class: vue.normalizeClass(["d-val profit-val", $setup.getLhcProfitClass(item.lottery_status)])
  30639. },
  30640. vue.toDisplayString($setup.getLhcProfitText(item)),
  30641. 3
  30642. /* TEXT, CLASS */
  30643. )
  30644. ])
  30645. ])
  30646. ]),
  30647. vue.createElementVNode("view", { class: "card-footer" }, [
  30648. vue.createElementVNode("view", { style: { "display": "flex", "align-items": "center", "gap": "8rpx", "color": "#94a3b8", "font-size": "22rpx" } }, [
  30649. vue.createElementVNode(
  30650. "text",
  30651. null,
  30652. vue.toDisplayString($setup.t("单号")) + ":",
  30653. 1
  30654. /* TEXT */
  30655. ),
  30656. vue.createTextVNode(),
  30657. vue.createElementVNode(
  30658. "text",
  30659. { style: { "font-family": "monospace" } },
  30660. vue.toDisplayString(item.ordernum),
  30661. 1
  30662. /* TEXT */
  30663. )
  30664. ]),
  30665. vue.createElementVNode(
  30666. "text",
  30667. { class: "time" },
  30668. vue.toDisplayString(item.created_at),
  30669. 1
  30670. /* TEXT */
  30671. )
  30672. ])
  30673. ], 8, ["onClick"]);
  30674. }),
  30675. 128
  30676. /* KEYED_FRAGMENT */
  30677. ))
  30678. ])
  30679. ]),
  30680. _: 1
  30681. /* STABLE */
  30682. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])) : vue.createCommentVNode("v-if", true)
  30683. ])
  30684. ]),
  30685. vue.createVNode(_component_u_select, {
  30686. modelValue: $setup.gameStatusShow,
  30687. "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => $setup.gameStatusShow = $event),
  30688. mode: "single-column",
  30689. list: $setup.gameStatusColumns,
  30690. "confirm-color": _ctx.$mainColor,
  30691. onConfirm: $setup.onGameStatusConfirm
  30692. }, null, 8, ["modelValue", "list", "confirm-color"]),
  30693. vue.createVNode(_component_u_select, {
  30694. modelValue: $setup.gameSettleStatusShow,
  30695. "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $setup.gameSettleStatusShow = $event),
  30696. mode: "single-column",
  30697. list: $setup.gameSettleStatusColumns,
  30698. "confirm-color": _ctx.$mainColor,
  30699. onConfirm: $setup.onGameSettleStatusConfirm
  30700. }, null, 8, ["modelValue", "list", "confirm-color"]),
  30701. vue.createVNode(_component_u_calendar, {
  30702. modelValue: $setup.gameCalendarShow,
  30703. "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => $setup.gameCalendarShow = $event),
  30704. mode: "range",
  30705. "active-bg-color": _ctx.$mainColor,
  30706. "range-color": _ctx.$mainColor,
  30707. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  30708. onChange: $setup.onGameCalendarChange
  30709. }, null, 8, ["modelValue", "active-bg-color", "range-color"]),
  30710. vue.createVNode(_component_u_select, {
  30711. modelValue: $setup.sportStatusShow,
  30712. "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => $setup.sportStatusShow = $event),
  30713. mode: "single-column",
  30714. list: $setup.sportStatusColumns,
  30715. "confirm-color": _ctx.$mainColor,
  30716. onConfirm: $setup.onSportStatusConfirm
  30717. }, null, 8, ["modelValue", "list", "confirm-color"]),
  30718. vue.createVNode(_component_u_select, {
  30719. modelValue: $setup.sportSettleStatusShow,
  30720. "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => $setup.sportSettleStatusShow = $event),
  30721. mode: "single-column",
  30722. list: $setup.sportSettleStatusColumns,
  30723. "confirm-color": _ctx.$mainColor,
  30724. onConfirm: $setup.onSportSettleStatusConfirm
  30725. }, null, 8, ["modelValue", "list", "confirm-color"]),
  30726. vue.createVNode(_component_u_calendar, {
  30727. modelValue: $setup.sportCalendarShow,
  30728. "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => $setup.sportCalendarShow = $event),
  30729. mode: "range",
  30730. "active-bg-color": _ctx.$mainColor,
  30731. "range-color": _ctx.$mainColor,
  30732. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  30733. onChange: $setup.onSportCalendarConfirm
  30734. }, null, 8, ["modelValue", "active-bg-color", "range-color"]),
  30735. vue.createVNode(_component_u_select, {
  30736. modelValue: $setup.lhcStatusShow,
  30737. "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => $setup.lhcStatusShow = $event),
  30738. mode: "single-column",
  30739. list: $setup.lhcStatusColumns,
  30740. "confirm-color": _ctx.$mainColor,
  30741. onConfirm: $setup.onLhcStatusConfirm
  30742. }, null, 8, ["modelValue", "list", "confirm-color"]),
  30743. vue.createVNode(_component_u_calendar, {
  30744. modelValue: $setup.lhcCalendarShow,
  30745. "onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => $setup.lhcCalendarShow = $event),
  30746. mode: "range",
  30747. "active-bg-color": _ctx.$mainColor,
  30748. "range-color": _ctx.$mainColor,
  30749. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  30750. onChange: $setup.onLhcCalendarChange
  30751. }, null, 8, ["modelValue", "active-bg-color", "range-color"])
  30752. ]),
  30753. _: 1
  30754. /* STABLE */
  30755. })
  30756. ]),
  30757. _: 1
  30758. /* STABLE */
  30759. });
  30760. }
  30761. const PagesTabbarBettingHistoryIndex = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$T], ["__scopeId", "data-v-43be1064"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/BettingHistory/index.vue"]]);
  30762. const CellGroupProps = {
  30763. ...baseProps,
  30764. /** 分组标题 */
  30765. title: { type: String, default: "" },
  30766. /** 是否显示分组list上下边框 */
  30767. border: { type: Boolean, default: true },
  30768. /** 分组标题的样式,对象形式,注意驼峰属性写法 */
  30769. titleStyle: { type: Object, default: () => ({}) }
  30770. };
  30771. const __default__$6 = {
  30772. name: "u-cell-group",
  30773. options: {
  30774. addGlobalClass: true,
  30775. virtualHost: true,
  30776. styleIsolation: "shared"
  30777. }
  30778. };
  30779. const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({
  30780. ...__default__$6,
  30781. props: CellGroupProps,
  30782. setup(__props, { expose: __expose }) {
  30783. __expose();
  30784. const __returned__ = { get $u() {
  30785. return $u;
  30786. } };
  30787. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  30788. return __returned__;
  30789. }
  30790. });
  30791. function _sfc_render$S(_ctx, _cache, $props, $setup, $data, $options) {
  30792. return vue.openBlock(), vue.createElementBlock(
  30793. "view",
  30794. {
  30795. class: vue.normalizeClass(["u-cell-box", _ctx.customClass]),
  30796. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle))
  30797. },
  30798. [
  30799. _ctx.title ? (vue.openBlock(), vue.createElementBlock(
  30800. "view",
  30801. {
  30802. key: 0,
  30803. class: "u-cell-title",
  30804. style: vue.normalizeStyle([_ctx.titleStyle])
  30805. },
  30806. vue.toDisplayString(_ctx.title),
  30807. 5
  30808. /* TEXT, STYLE */
  30809. )) : vue.createCommentVNode("v-if", true),
  30810. vue.createElementVNode(
  30811. "view",
  30812. {
  30813. class: vue.normalizeClass(["u-cell-item-box", { "u-border-bottom u-border-top": _ctx.border }])
  30814. },
  30815. [
  30816. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  30817. ],
  30818. 2
  30819. /* CLASS */
  30820. )
  30821. ],
  30822. 6
  30823. /* CLASS, STYLE */
  30824. );
  30825. }
  30826. const __unplugin_components_4$1 = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$S], ["__scopeId", "data-v-c088534b"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-cell-group/u-cell-group.vue"]]);
  30827. const CellItemProps = {
  30828. ...baseProps,
  30829. /** 左侧图标名称(只能uView内置图标),或者图标src */
  30830. icon: { type: String, default: "" },
  30831. /** 左侧标题 */
  30832. title: { type: [String, Number], default: "" },
  30833. /** 右侧内容 */
  30834. value: { type: [String, Number], default: "" },
  30835. /** 标题下方的描述信息 */
  30836. label: { type: [String, Number], default: "" },
  30837. /** 是否显示下边框 */
  30838. borderBottom: { type: Boolean, default: true },
  30839. /** 是否显示上边框 */
  30840. borderTop: { type: Boolean, default: false },
  30841. /** 是否开启点击反馈,即点击时cell背景为灰色,none为无效果 */
  30842. hoverClass: { type: String, default: "u-cell-hover" },
  30843. /** 是否显示右侧箭头 */
  30844. arrow: { type: Boolean, default: true },
  30845. /** 内容是否垂直居中 */
  30846. center: { type: Boolean, default: false },
  30847. /** 是否显示左边表示必填的星号 */
  30848. required: { type: Boolean, default: false },
  30849. /** 标题的宽度,单位rpx */
  30850. titleWidth: { type: [Number, String], default: "" },
  30851. /** 右侧箭头方向,可选值:right|up|down,默认为right */
  30852. arrowDirection: { type: String, default: "right" },
  30853. /** 控制标题的样式 */
  30854. titleStyle: { type: Object, default: () => ({}) },
  30855. /** 右侧显示内容的样式 */
  30856. valueStyle: { type: Object, default: () => ({}) },
  30857. /** 描述信息的样式 */
  30858. labelStyle: { type: Object, default: () => ({}) },
  30859. /** 背景颜色 */
  30860. bgColor: { type: String, default: "transparent" },
  30861. /** 用于识别被点击的是第几个cell */
  30862. index: { type: [String, Number], default: "" },
  30863. /** 是否使用label插槽 */
  30864. useLabelSlot: { type: Boolean, default: false },
  30865. /** 左边图标的大小,单位rpx,只对传入icon字段时有效 */
  30866. iconSize: { type: [Number, String], default: 34 },
  30867. /** 左边图标的样式,对象形式 */
  30868. iconStyle: { type: Object, default: () => ({}) }
  30869. };
  30870. const __default__$5 = {
  30871. name: "u-cell-item",
  30872. options: {
  30873. addGlobalClass: true,
  30874. virtualHost: true,
  30875. styleIsolation: "shared"
  30876. }
  30877. };
  30878. const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
  30879. ...__default__$5,
  30880. props: CellItemProps,
  30881. emits: ["click"],
  30882. setup(__props, { expose: __expose, emit: __emit }) {
  30883. __expose();
  30884. const emit = __emit;
  30885. const props = __props;
  30886. const $slots = vue.useSlots();
  30887. const arrowStyle = vue.computed(() => {
  30888. let style = {};
  30889. if (props.arrowDirection === "up")
  30890. style.transform = "rotate(-90deg)";
  30891. else if (props.arrowDirection === "down")
  30892. style.transform = "rotate(90deg)";
  30893. else
  30894. style.transform = "rotate(0deg)";
  30895. return style;
  30896. });
  30897. function onClick() {
  30898. emit("click", props.index);
  30899. }
  30900. const __returned__ = { emit, props, $slots, arrowStyle, onClick, get $u() {
  30901. return $u;
  30902. } };
  30903. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  30904. return __returned__;
  30905. }
  30906. });
  30907. function _sfc_render$R(_ctx, _cache, $props, $setup, $data, $options) {
  30908. const _component_u_icon = __unplugin_components_0$5;
  30909. return vue.openBlock(), vue.createElementBlock("view", {
  30910. onClick: $setup.onClick,
  30911. class: vue.normalizeClass(["u-cell", [
  30912. {
  30913. "u-border-bottom": _ctx.borderBottom,
  30914. "u-border-top": _ctx.borderTop,
  30915. "u-col-center": _ctx.center,
  30916. "u-cell--required": _ctx.required
  30917. },
  30918. _ctx.customClass
  30919. ]]),
  30920. "hover-stay-time": "150",
  30921. "hover-class": _ctx.hoverClass,
  30922. style: vue.normalizeStyle($setup.$u.toStyle({ backgroundColor: _ctx.bgColor }, _ctx.customStyle))
  30923. }, [
  30924. _ctx.icon ? (vue.openBlock(), vue.createElementBlock("view", {
  30925. key: 0,
  30926. class: "u-cell__left-icon-wrap"
  30927. }, [
  30928. vue.createVNode(_component_u_icon, {
  30929. size: _ctx.iconSize,
  30930. name: _ctx.icon,
  30931. "custom-style": _ctx.iconStyle
  30932. }, null, 8, ["size", "name", "custom-style"])
  30933. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  30934. key: 1,
  30935. class: "u-flex"
  30936. }, [
  30937. vue.renderSlot(_ctx.$slots, "icon", {}, void 0, true)
  30938. ])),
  30939. vue.createElementVNode(
  30940. "view",
  30941. {
  30942. class: "u-cell_title",
  30943. style: vue.normalizeStyle([{ width: _ctx.titleWidth ? _ctx.titleWidth + "rpx" : "auto" }, _ctx.titleStyle])
  30944. },
  30945. [
  30946. _ctx.title !== "" ? (vue.openBlock(), vue.createElementBlock(
  30947. vue.Fragment,
  30948. { key: 0 },
  30949. [
  30950. vue.createTextVNode(
  30951. vue.toDisplayString(_ctx.title),
  30952. 1
  30953. /* TEXT */
  30954. )
  30955. ],
  30956. 64
  30957. /* STABLE_FRAGMENT */
  30958. )) : vue.renderSlot(_ctx.$slots, "title", { key: 1 }, void 0, true),
  30959. _ctx.label || $setup.$slots.label ? (vue.openBlock(), vue.createElementBlock(
  30960. "view",
  30961. {
  30962. key: 2,
  30963. class: "u-cell__label",
  30964. style: vue.normalizeStyle([_ctx.labelStyle])
  30965. },
  30966. [
  30967. _ctx.label !== "" ? (vue.openBlock(), vue.createElementBlock(
  30968. vue.Fragment,
  30969. { key: 0 },
  30970. [
  30971. vue.createTextVNode(
  30972. vue.toDisplayString(_ctx.label),
  30973. 1
  30974. /* TEXT */
  30975. )
  30976. ],
  30977. 64
  30978. /* STABLE_FRAGMENT */
  30979. )) : vue.renderSlot(_ctx.$slots, "label", { key: 1 }, void 0, true)
  30980. ],
  30981. 4
  30982. /* STYLE */
  30983. )) : vue.createCommentVNode("v-if", true)
  30984. ],
  30985. 4
  30986. /* STYLE */
  30987. ),
  30988. vue.createElementVNode(
  30989. "view",
  30990. {
  30991. class: "u-cell__value",
  30992. style: vue.normalizeStyle([_ctx.valueStyle])
  30993. },
  30994. [
  30995. _ctx.value !== "" ? (vue.openBlock(), vue.createElementBlock(
  30996. vue.Fragment,
  30997. { key: 0 },
  30998. [
  30999. vue.createTextVNode(
  31000. vue.toDisplayString(_ctx.value),
  31001. 1
  31002. /* TEXT */
  31003. )
  31004. ],
  31005. 64
  31006. /* STABLE_FRAGMENT */
  31007. )) : vue.renderSlot(_ctx.$slots, "default", { key: 1 }, void 0, true)
  31008. ],
  31009. 4
  31010. /* STYLE */
  31011. ),
  31012. $setup.$slots["right-icon"] ? (vue.openBlock(), vue.createElementBlock("view", {
  31013. key: 2,
  31014. class: "u-flex u-cell_right"
  31015. }, [
  31016. vue.renderSlot(_ctx.$slots, "right-icon", {}, void 0, true)
  31017. ])) : vue.createCommentVNode("v-if", true),
  31018. _ctx.arrow ? (vue.openBlock(), vue.createElementBlock("view", {
  31019. key: 3,
  31020. class: "u-icon-wrap u-cell__right-icon-wrap"
  31021. }, [
  31022. vue.createVNode(_component_u_icon, {
  31023. name: "arrow-right",
  31024. style: vue.normalizeStyle([$setup.arrowStyle])
  31025. }, null, 8, ["style"])
  31026. ])) : vue.createCommentVNode("v-if", true)
  31027. ], 14, ["hover-class"]);
  31028. }
  31029. const __unplugin_components_3 = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$R], ["__scopeId", "data-v-44a61c62"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-cell-item/u-cell-item.vue"]]);
  31030. const AvatarProps = {
  31031. ...baseProps,
  31032. /** 背景颜色 */
  31033. bgColor: { type: String, default: "transparent" },
  31034. /** 头像路径 */
  31035. src: { type: String, default: "" },
  31036. /** 尺寸,large-大,default-中等,mini-小,如果为数值,则单位为rpx,宽度等于高度 */
  31037. size: { type: [String, Number], default: "default" },
  31038. /** 头像模型,square-带圆角方形,circle-圆形 */
  31039. mode: { type: String, default: "circle" },
  31040. /** 文字内容 */
  31041. text: { type: String, default: "" },
  31042. /** 图片的裁剪模型 */
  31043. imgMode: { type: String, default: "aspectFill" },
  31044. /** 标识符 */
  31045. index: { type: [String, Number], default: "" },
  31046. /** 右上角性别角标,man-男,woman-女 */
  31047. sexIcon: { type: String, default: "man" },
  31048. /** 右下角的等级图标 */
  31049. levelIcon: { type: String, default: "level" },
  31050. /** 右下角等级图标背景颜色 */
  31051. levelBgColor: { type: String, default: "" },
  31052. /** 右上角性别图标的背景颜色 */
  31053. sexBgColor: { type: String, default: "" },
  31054. /** 是否显示性别图标 */
  31055. showSex: { type: Boolean, default: false },
  31056. /** 是否显示等级图标 */
  31057. showLevel: { type: Boolean, default: false }
  31058. };
  31059. const __default__$4 = {
  31060. name: "u-avatar",
  31061. options: {
  31062. addGlobalClass: true,
  31063. virtualHost: true,
  31064. styleIsolation: "shared"
  31065. }
  31066. };
  31067. const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
  31068. ...__default__$4,
  31069. props: AvatarProps,
  31070. emits: ["click"],
  31071. setup(__props, { expose: __expose, emit: __emit }) {
  31072. __expose();
  31073. const base64Avatar = "data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjREMEQwRkY0RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjREMEQwRkY1RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQwRDBGRjJGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEQwRDBGRjNGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDg8QDw4MExMUFBMTHBsbGxwfHx8fHx8fHx8fAQcHBw0MDRgQEBgaFREVGh8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx//wAARCADIAMgDAREAAhEBAxEB/8QAcQABAQEAAwEBAAAAAAAAAAAAAAUEAQMGAgcBAQAAAAAAAAAAAAAAAAAAAAAQAAIBAwICBgkDBQAAAAAAAAABAhEDBCEFMVFBYXGREiKBscHRMkJSEyOh4XLxYjNDFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A/fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHbHFyZ/Dam+yLA+Z2L0Pjtyj2poD4AAAAAAAAAAAAAAAAAAAAAAAAKWFs9y6lcvvwQeqj8z9wFaziY1n/HbUX9XF97A7QAGXI23EvJ1goyfzR0YEfN269jeZ+a03pNe0DIAAAAAAAAAAAAAAAAAAAACvtO3RcVkXlWutuL9YFYAAAAAOJRjKLjJVi9GmB5/csH/mu1h/in8PU+QGMAAAAAAAAAAAAAAAAAAaMDG/6MmMH8C80+xAelSSVFolwQAAAAAAAHVlWI37ErUulaPk+hgeYnCUJuElSUXRrrQHAAAAAAAAAAAAAAAAABa2Oz4bM7r4zdF2ICmAAAAAAAAAg7zZ8GX41wuJP0rRgYAAAAAAAAAAAAAAAAAD0m2R8ODaXU33tsDSAAAAAAAAAlb9HyWZcnJd9PcBHAAAAAAAAAAAAAAAAAPS7e64Vn+KA0AAAAAAAAAJm+v8Ftf3ewCKAAAAAAAAAAAAAAAAAX9muqeGo9NttP06+0DcAAAAAAAAAjb7dTu2ra+VOT9P8AQCWAAAAAAAAAAAAAAAAAUNmyPt5Ltv4bui/kuAF0AAAAAAADiUlGLlJ0SVW+oDzOXfd/Ind6JPRdS0QHSAAAAAAAAAAAAAAAAAE2nVaNcGB6Lbs6OTao9LsF51z60BrAAAAAABJ3jOVHjW3r/sa9QEgAAAAAAAAAAAAAAAAAAAPu1duWriuW34ZR4MC9hbnZyEoy8l36XwfYBsAAADaSq9EuLAlZ+7xSdrGdW9Hc5dgEdtt1erfFgAAAAAAAAAAAAAAAAADVjbblX6NR8MH80tEBRs7HYivyzlN8lovaBPzduvY0m6eK10TXtAyAarO55lpJK54orolr+4GqO/Xaea1FvqbXvA+Z77kNeW3GPbV+4DJfzcm/pcm3H6Vou5AdAFLC2ed2Pjv1txa8sV8T6wOL+yZEKu1JXFy4MDBOE4ScZxcZLinoB8gAAAAAAAAAAAB242LeyJ+C3GvN9C7QLmJtePYpKS+5c+p8F2IDYAANJqj1T4oCfk7Nj3G5Wn9qXJax7gJ93Z82D8sVNc4v30A6Xg5i42Z+iLfqARwcyT0sz9MWvWBps7LlTf5Grce9/oBTxdtxseklHxT+uWr9AGoAB138ezfj4bsFJdD6V2MCPm7RdtJzs1uW1xXzL3gTgAAAAAAAAADRhYc8q74I6RWs5ckB6GxYtWLat21SK731sDsAAAAAAAAAAAAAAAASt021NO/YjrxuQXT1oCOAAAAAAABzGLlJRSq26JAelwsWONYjbXxcZvmwO8AAAAAAAAAAAAAAAAAAef3TEWPkVivx3NY9T6UBiAAAAAABo2+VmGXblddIJ8eivRUD0oAAAAAAAAAAAAAAAAAAAYt4tKeFKVNYNSXfRgefAAAAAAAAr7VuSSWPedKaW5v1MCsAAAAAAAAAAAAAAAAAAIe6bj96Ts2n+JPzSXzP3ATgAAAAAAAAFbbt1UUrOQ9FpC4/UwK6aaqtU+DAAAAAAAAAAAAAAA4lKMIuUmoxWrb4ARNx3R3q2rLpa4Sl0y/YCcAAAAAAAAAAANmFud7G8r89r6X0dgFvGzLGRGtuWvTF6NAdwAAAAAAAAAAAy5W442PVN+K59EePp5ARMvOv5MvO6QXCC4AZwAAAAAAAAAAAAAcxlKLUotprg1owN+PvORborq+7Hnwl3gUbO74VzRydt8pKn68ANcJwmqwkpLmnUDkAAAAfNy9atqtyagut0AxXt5xIV8Fbj6lRd7Am5G65V6qUvtwfyx94GMAAAAAAAAAAAAAAAAAAAOU2nVOj5gdsc3LiqRvTpyqwOxbnnrhdfpSfrQB7pnv/AGvuS9gHXPMy5/Fem1yq0v0A6W29XqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Z";
  31074. const props = __props;
  31075. const emit = __emit;
  31076. const avatar = vue.ref(props.src ? props.src : base64Avatar);
  31077. const error = vue.ref(false);
  31078. vue.watch(
  31079. () => props.src,
  31080. (n) => {
  31081. if (!n) {
  31082. avatar.value = base64Avatar;
  31083. error.value = true;
  31084. } else {
  31085. avatar.value = n;
  31086. error.value = false;
  31087. }
  31088. }
  31089. );
  31090. const wrapStyle = vue.computed(() => {
  31091. let style = {};
  31092. style.height = props.size === "large" ? "120rpx" : props.size === "default" ? "90rpx" : props.size === "mini" ? "70rpx" : props.size + "rpx";
  31093. style.width = style.height;
  31094. style.flex = `0 0 ${style.height}`;
  31095. style.backgroundColor = props.bgColor;
  31096. style.borderRadius = props.mode === "circle" ? "500px" : "5px";
  31097. if (props.text)
  31098. style.padding = "0 6rpx";
  31099. return style;
  31100. });
  31101. const imgStyle = vue.computed(() => {
  31102. let style = {};
  31103. style.borderRadius = props.mode === "circle" ? "500px" : "5px";
  31104. return style;
  31105. });
  31106. const uText = vue.computed(() => {
  31107. return String(props.text)[0];
  31108. });
  31109. const uSexStyle = vue.computed(() => {
  31110. let style = {};
  31111. if (props.sexBgColor)
  31112. style.backgroundColor = props.sexBgColor;
  31113. return style;
  31114. });
  31115. const uLevelStyle = vue.computed(() => {
  31116. let style = {};
  31117. if (props.levelBgColor)
  31118. style.backgroundColor = props.levelBgColor;
  31119. return style;
  31120. });
  31121. function onLoadError() {
  31122. error.value = true;
  31123. avatar.value = base64Avatar;
  31124. }
  31125. function onClick() {
  31126. emit("click", props.index);
  31127. }
  31128. const __returned__ = { base64Avatar, props, emit, avatar, error, wrapStyle, imgStyle, uText, uSexStyle, uLevelStyle, onLoadError, onClick, get $u() {
  31129. return $u;
  31130. } };
  31131. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  31132. return __returned__;
  31133. }
  31134. });
  31135. function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
  31136. const _component_u_icon = __unplugin_components_0$5;
  31137. return vue.openBlock(), vue.createElementBlock(
  31138. "view",
  31139. {
  31140. class: vue.normalizeClass(["u-avatar", _ctx.customClass]),
  31141. style: vue.normalizeStyle($setup.$u.toStyle($setup.wrapStyle, _ctx.customStyle)),
  31142. onClick: $setup.onClick
  31143. },
  31144. [
  31145. !$setup.uText && $setup.avatar ? (vue.openBlock(), vue.createElementBlock("image", {
  31146. key: 0,
  31147. onError: $setup.onLoadError,
  31148. style: vue.normalizeStyle($setup.imgStyle),
  31149. class: "u-avatar__img",
  31150. src: $setup.avatar,
  31151. mode: _ctx.imgMode
  31152. }, null, 44, ["src", "mode"])) : $setup.uText ? (vue.openBlock(), vue.createElementBlock(
  31153. "text",
  31154. {
  31155. key: 1,
  31156. class: "u-line-1",
  31157. style: { fontSize: "38rpx" }
  31158. },
  31159. vue.toDisplayString($setup.uText),
  31160. 1
  31161. /* TEXT */
  31162. )) : vue.renderSlot(_ctx.$slots, "default", { key: 2 }, void 0, true),
  31163. _ctx.showSex ? (vue.openBlock(), vue.createElementBlock(
  31164. "view",
  31165. {
  31166. key: 3,
  31167. class: vue.normalizeClass(["u-avatar__sex", ["u-avatar__sex--" + _ctx.sexIcon]]),
  31168. style: vue.normalizeStyle($setup.uSexStyle)
  31169. },
  31170. [
  31171. vue.createVNode(_component_u_icon, {
  31172. name: _ctx.sexIcon,
  31173. size: "20"
  31174. }, null, 8, ["name"])
  31175. ],
  31176. 6
  31177. /* CLASS, STYLE */
  31178. )) : vue.createCommentVNode("v-if", true),
  31179. _ctx.showLevel ? (vue.openBlock(), vue.createElementBlock(
  31180. "view",
  31181. {
  31182. key: 4,
  31183. class: "u-avatar__level",
  31184. style: vue.normalizeStyle($setup.uLevelStyle)
  31185. },
  31186. [
  31187. vue.createVNode(_component_u_icon, {
  31188. name: _ctx.levelIcon,
  31189. size: "20"
  31190. }, null, 8, ["name"])
  31191. ],
  31192. 4
  31193. /* STYLE */
  31194. )) : vue.createCommentVNode("v-if", true)
  31195. ],
  31196. 6
  31197. /* CLASS, STYLE */
  31198. );
  31199. }
  31200. const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["render", _sfc_render$Q], ["__scopeId", "data-v-8a1adb58"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-avatar/u-avatar.vue"]]);
  31201. const _sfc_main$Q = {
  31202. __name: "index",
  31203. setup(__props, { expose: __expose }) {
  31204. __expose();
  31205. const router2 = useRouter();
  31206. const userSubmitData = vue.ref({
  31207. avatar: ""
  31208. });
  31209. const userInfo = vue.ref({});
  31210. const showUpload = vue.ref(false);
  31211. function getData() {
  31212. getUserInfo().then((res) => {
  31213. formatAppLog("log", "at pages/Tabbar/My/index.vue:221", res, 218);
  31214. userInfo.value = res.data;
  31215. });
  31216. }
  31217. function saveAvatar() {
  31218. if (!userSubmitData.value.avatar) {
  31219. uni.showToast({
  31220. title: uni.$t("请先选择头像"),
  31221. icon: "none"
  31222. });
  31223. return;
  31224. }
  31225. updateUserInfo(userSubmitData.value).then(async () => {
  31226. showUpload.value = false;
  31227. await sleep(1e3);
  31228. getData();
  31229. });
  31230. }
  31231. function changeImg(e) {
  31232. userSubmitData.value.avatar = Array.isArray(e) ? e[0] : e;
  31233. }
  31234. function goPage(name) {
  31235. router2.push({ name });
  31236. }
  31237. function goLogout() {
  31238. uni.showModal({
  31239. title: uni.$t("提示"),
  31240. content: uni.$t("确定要退出登录吗?"),
  31241. confirmText: uni.$t("确定"),
  31242. cancelText: uni.$t("取消"),
  31243. success: (res) => {
  31244. if (res.confirm) {
  31245. logout().then(() => {
  31246. uni.removeStorageSync("token");
  31247. uni.removeStorageSync("userInfo");
  31248. router2.replaceAll("/login");
  31249. });
  31250. }
  31251. }
  31252. });
  31253. }
  31254. const handleCopy = () => {
  31255. var _a2;
  31256. const code2 = (_a2 = userInfo.value) == null ? void 0 : _a2.user_code;
  31257. if (!code2)
  31258. return;
  31259. uni.setClipboardData({
  31260. data: String(code2),
  31261. // 必须是字符串类型
  31262. success: () => {
  31263. uni.showToast({
  31264. title: uni.$t("复制成功"),
  31265. icon: "success",
  31266. duration: 2e3
  31267. });
  31268. }
  31269. });
  31270. };
  31271. onShow(() => {
  31272. getData();
  31273. });
  31274. const __returned__ = { router: router2, userSubmitData, userInfo, showUpload, getData, saveAvatar, changeImg, goPage, goLogout, handleCopy, CUploadImage, get getUserInfo() {
  31275. return getUserInfo;
  31276. }, get updateUserInfo() {
  31277. return updateUserInfo;
  31278. }, get logout() {
  31279. return logout;
  31280. }, ref: vue.ref, get onShow() {
  31281. return onShow;
  31282. }, get sleep() {
  31283. return sleep;
  31284. }, PageContainer };
  31285. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  31286. return __returned__;
  31287. }
  31288. };
  31289. function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
  31290. const _component_u_avatar = __unplugin_components_0;
  31291. const _component_u_icon = __unplugin_components_0$5;
  31292. const _component_u_button = __unplugin_components_2$1;
  31293. const _component_u_cell_item = __unplugin_components_3;
  31294. const _component_u_cell_group = __unplugin_components_4$1;
  31295. const _component_u_popup = __unplugin_components_2$3;
  31296. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  31297. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  31298. default: vue.withCtx(() => [
  31299. vue.createVNode($setup["PageContainer"], null, {
  31300. default: vue.withCtx(() => [
  31301. vue.createElementVNode("view", { class: "my-page" }, [
  31302. vue.createElementVNode("view", { class: "top-bg" }),
  31303. vue.createElementVNode("view", { class: "main-content" }, [
  31304. vue.createElementVNode("view", { class: "user-card" }, [
  31305. vue.createElementVNode("view", { class: "avatar-section" }, [
  31306. vue.createElementVNode("view", { class: "avatar-wrapper" }, [
  31307. $setup.userInfo.level && $setup.userInfo.level != 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  31308. key: 0,
  31309. class: "avatar-wrapper-lv"
  31310. }, [
  31311. vue.createElementVNode("image", {
  31312. src: $setup.userInfo.level.img,
  31313. style: { "width": "100%", "height": "100%" }
  31314. }, null, 8, ["src"])
  31315. ])) : vue.createCommentVNode("v-if", true),
  31316. vue.createVNode(_component_u_avatar, {
  31317. src: $setup.userInfo.avatar || "https://img.yzcdn.cn/vant/cat.jpeg",
  31318. size: "120",
  31319. shape: "circle",
  31320. customStyle: "border: 3px solid rgba(248, 185, 50, 0.2)"
  31321. }, null, 8, ["src"]),
  31322. vue.createElementVNode("view", {
  31323. class: "upload-btn",
  31324. onClick: _cache[0] || (_cache[0] = ($event) => $setup.showUpload = true)
  31325. }, [
  31326. vue.createVNode(_component_u_icon, {
  31327. name: "camera-fill",
  31328. color: "#fff",
  31329. size: "20"
  31330. })
  31331. ])
  31332. ]),
  31333. vue.createElementVNode("view", { class: "user-info" }, [
  31334. vue.createElementVNode("text", { class: "username" }, [
  31335. vue.createTextVNode(
  31336. vue.toDisplayString($setup.userInfo.first_name || _ctx.$t("未设置用户名")) + " ",
  31337. 1
  31338. /* TEXT */
  31339. ),
  31340. vue.createVNode(_component_u_icon, {
  31341. name: "edit-pen",
  31342. color: "#999",
  31343. size: "32",
  31344. onClick: _cache[1] || (_cache[1] = ($event) => $setup.router.push({ name: "userInfo" }))
  31345. })
  31346. ]),
  31347. vue.createElementVNode("view", { class: "invite-code-container" }, [
  31348. vue.createElementVNode(
  31349. "text",
  31350. {
  31351. class: "user-id",
  31352. style: { "color": "#666" }
  31353. },
  31354. vue.toDisplayString(_ctx.$t("邀请码")) + ": " + vue.toDisplayString($setup.userInfo.user_code || "--"),
  31355. 1
  31356. /* TEXT */
  31357. ),
  31358. $setup.userInfo.user_id ? (vue.openBlock(), vue.createElementBlock("view", {
  31359. key: 0,
  31360. class: "copy-btn",
  31361. onClick: $setup.handleCopy
  31362. }, [
  31363. vue.createVNode(_component_u_icon, {
  31364. name: "file-text",
  31365. size: "30"
  31366. })
  31367. ])) : vue.createCommentVNode("v-if", true)
  31368. ]),
  31369. vue.createElementVNode(
  31370. "text",
  31371. {
  31372. class: "user-id",
  31373. style: { "font-size": "12px" }
  31374. },
  31375. "ID: " + vue.toDisplayString($setup.userInfo.user_id || "--"),
  31376. 1
  31377. /* TEXT */
  31378. )
  31379. ])
  31380. ]),
  31381. $setup.userInfo.level && $setup.userInfo.level.level != 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  31382. key: 0,
  31383. class: "level-progress-section"
  31384. }, [
  31385. vue.createElementVNode("view", { class: "level-info-text" }, [
  31386. vue.createElementVNode(
  31387. "text",
  31388. { class: "current-level-name" },
  31389. vue.toDisplayString($setup.userInfo.level.level_name),
  31390. 1
  31391. /* TEXT */
  31392. ),
  31393. $setup.userInfo.next_level ? (vue.openBlock(), vue.createElementBlock("text", {
  31394. key: 0,
  31395. class: "upgrade-tips"
  31396. }, [
  31397. vue.createTextVNode(
  31398. vue.toDisplayString(_ctx.$t("距升级")) + " " + vue.toDisplayString($setup.userInfo.next_level.level_name) + " " + vue.toDisplayString(_ctx.$t("还需")) + " ",
  31399. 1
  31400. /* TEXT */
  31401. ),
  31402. vue.createElementVNode(
  31403. "text",
  31404. { class: "highlight" },
  31405. vue.toDisplayString(Math.max(0, Number($setup.userInfo.next_level.recharge) - Number($setup.userInfo.total_recharge || 0)).toFixed(2)),
  31406. 1
  31407. /* TEXT */
  31408. ),
  31409. vue.createTextVNode(
  31410. " " + vue.toDisplayString(_ctx.$t("成长值")),
  31411. 1
  31412. /* TEXT */
  31413. )
  31414. ])) : (vue.openBlock(), vue.createElementBlock(
  31415. "text",
  31416. {
  31417. key: 1,
  31418. class: "upgrade-tips"
  31419. },
  31420. vue.toDisplayString(_ctx.$t("已达到最高等级")),
  31421. 1
  31422. /* TEXT */
  31423. ))
  31424. ]),
  31425. vue.createElementVNode("view", { class: "progress-bar-container" }, [
  31426. vue.createElementVNode("view", { class: "progress-track" }, [
  31427. vue.createElementVNode(
  31428. "view",
  31429. {
  31430. class: "progress-fill",
  31431. style: vue.normalizeStyle({ width: $setup.userInfo.next_level ? Math.min(Number($setup.userInfo.total_recharge || 0) / Number($setup.userInfo.next_level.recharge) * 100, 100) + "%" : "100%" })
  31432. },
  31433. null,
  31434. 4
  31435. /* STYLE */
  31436. )
  31437. ]),
  31438. vue.createElementVNode("view", { class: "progress-value" }, [
  31439. $setup.userInfo.next_level ? (vue.openBlock(), vue.createElementBlock(
  31440. "text",
  31441. { key: 0 },
  31442. vue.toDisplayString(Number($setup.userInfo.total_recharge || 0).toFixed(2)) + " / " + vue.toDisplayString(Number($setup.userInfo.next_level.recharge).toFixed(2)),
  31443. 1
  31444. /* TEXT */
  31445. )) : (vue.openBlock(), vue.createElementBlock(
  31446. "text",
  31447. { key: 1 },
  31448. vue.toDisplayString(Number($setup.userInfo.total_recharge || 0).toFixed(2)) + " / MAX",
  31449. 1
  31450. /* TEXT */
  31451. ))
  31452. ])
  31453. ])
  31454. ])) : vue.createCommentVNode("v-if", true),
  31455. vue.createElementVNode("view", { class: "asset-section" }, [
  31456. vue.createElementVNode("view", { class: "asset-item" }, [
  31457. vue.createElementVNode(
  31458. "text",
  31459. { class: "asset-label" },
  31460. vue.toDisplayString(_ctx.$t("账户余额")),
  31461. 1
  31462. /* TEXT */
  31463. ),
  31464. vue.createElementVNode(
  31465. "text",
  31466. { class: "asset-value" },
  31467. "¥" + vue.toDisplayString($setup.userInfo.money || 0),
  31468. 1
  31469. /* TEXT */
  31470. )
  31471. ]),
  31472. vue.createElementVNode("view", { class: "asset-item" }, [
  31473. vue.createElementVNode(
  31474. "text",
  31475. { class: "asset-label" },
  31476. vue.toDisplayString(_ctx.$t("冻结金额")),
  31477. 1
  31478. /* TEXT */
  31479. ),
  31480. vue.createElementVNode(
  31481. "text",
  31482. { class: "asset-value muted" },
  31483. "¥" + vue.toDisplayString($setup.userInfo.frozen_money || 0),
  31484. 1
  31485. /* TEXT */
  31486. )
  31487. ])
  31488. ])
  31489. ]),
  31490. vue.createElementVNode("view", { class: "quick-actions" }, [
  31491. vue.createVNode(_component_u_button, {
  31492. type: "primary",
  31493. icon: "plus-circle",
  31494. customStyle: "flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;",
  31495. onClick: _cache[2] || (_cache[2] = ($event) => $setup.goPage("topUp"))
  31496. }, {
  31497. default: vue.withCtx(() => [
  31498. vue.createTextVNode(
  31499. vue.toDisplayString(_ctx.$t("充值")),
  31500. 1
  31501. /* TEXT */
  31502. )
  31503. ]),
  31504. _: 1
  31505. /* STABLE */
  31506. }),
  31507. vue.createVNode(_component_u_button, {
  31508. type: "primary",
  31509. icon: "red-packet",
  31510. customStyle: "flex: 1; height: 46px; border-radius: 12px; background: #f8b932; border: none; font-weight: bold;",
  31511. onClick: _cache[3] || (_cache[3] = ($event) => $setup.goPage("withdraw"))
  31512. }, {
  31513. default: vue.withCtx(() => [
  31514. vue.createTextVNode(
  31515. vue.toDisplayString(_ctx.$t("提现")),
  31516. 1
  31517. /* TEXT */
  31518. )
  31519. ]),
  31520. _: 1
  31521. /* STABLE */
  31522. })
  31523. ]),
  31524. vue.createElementVNode("view", { class: "function-list" }, [
  31525. vue.createVNode(_component_u_cell_group, { border: false }, {
  31526. default: vue.withCtx(() => [
  31527. vue.createVNode(_component_u_cell_item, {
  31528. title: _ctx.$t("余额宝"),
  31529. isLink: "",
  31530. icon: "rmb-circle",
  31531. customStyle: "padding: 12px 20px",
  31532. onClick: _cache[4] || (_cache[4] = ($event) => $setup.goPage("Yuebao"))
  31533. }, null, 8, ["title"]),
  31534. vue.createVNode(_component_u_cell_item, {
  31535. title: _ctx.$t("钱包管理"),
  31536. isLink: "",
  31537. icon: "bag",
  31538. customStyle: "padding: 12px 20px",
  31539. onClick: _cache[5] || (_cache[5] = ($event) => $setup.goPage("WalletManagement"))
  31540. }, null, 8, ["title"]),
  31541. vue.createVNode(_component_u_cell_item, {
  31542. title: _ctx.$t("优惠活动"),
  31543. isLink: "",
  31544. icon: "gift",
  31545. customStyle: "padding: 12px 20px",
  31546. onClick: _cache[6] || (_cache[6] = ($event) => $setup.goPage("promotion"))
  31547. }, null, 8, ["title"]),
  31548. vue.createVNode(_component_u_cell_item, {
  31549. title: _ctx.$t("资金记录"),
  31550. isLink: "",
  31551. icon: "order",
  31552. customStyle: "padding: 12px 20px",
  31553. onClick: _cache[7] || (_cache[7] = ($event) => $setup.goPage("fundRecord"))
  31554. }, null, 8, ["title"]),
  31555. vue.createVNode(_component_u_cell_item, {
  31556. title: _ctx.$t("充值记录"),
  31557. isLink: "",
  31558. icon: "coupon",
  31559. customStyle: "padding: 12px 20px",
  31560. onClick: _cache[8] || (_cache[8] = ($event) => $setup.goPage("rechargeRecord"))
  31561. }, null, 8, ["title"]),
  31562. vue.createVNode(_component_u_cell_item, {
  31563. title: _ctx.$t("提现记录"),
  31564. isLink: "",
  31565. icon: "tags",
  31566. customStyle: "padding: 12px 20px",
  31567. onClick: _cache[9] || (_cache[9] = ($event) => $setup.goPage("withdrawalHistory"))
  31568. }, null, 8, ["title"]),
  31569. vue.createVNode(_component_u_cell_item, {
  31570. title: _ctx.$t("投注历史"),
  31571. isLink: "",
  31572. icon: "clock",
  31573. customStyle: "padding: 12px 20px",
  31574. onClick: _cache[10] || (_cache[10] = ($event) => $setup.goPage("AllHistory"))
  31575. }, null, 8, ["title"]),
  31576. vue.createVNode(_component_u_cell_item, {
  31577. title: _ctx.$t("账户安全"),
  31578. isLink: "",
  31579. icon: "integral",
  31580. customStyle: "padding: 12px 20px",
  31581. onClick: _cache[11] || (_cache[11] = ($event) => $setup.goPage("safety"))
  31582. }, null, 8, ["title"])
  31583. ]),
  31584. _: 1
  31585. /* STABLE */
  31586. })
  31587. ]),
  31588. vue.createElementVNode("view", { class: "logout-section" }, [
  31589. vue.createVNode(_component_u_button, {
  31590. plain: "",
  31591. customStyle: "height: 46px; border-radius: 12px; color: #ff6b6b; border-color: #ff6b6b; font-weight: 500;",
  31592. onClick: $setup.goLogout
  31593. }, {
  31594. default: vue.withCtx(() => [
  31595. vue.createTextVNode(
  31596. vue.toDisplayString(_ctx.$t("退出登录")),
  31597. 1
  31598. /* TEXT */
  31599. )
  31600. ]),
  31601. _: 1
  31602. /* STABLE */
  31603. })
  31604. ]),
  31605. vue.createElementVNode("view", { class: "my-bottom" })
  31606. ]),
  31607. vue.createVNode(_component_u_popup, {
  31608. modelValue: $setup.showUpload,
  31609. "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => $setup.showUpload = $event),
  31610. mode: "bottom",
  31611. "border-radius": "24",
  31612. "safe-area-inset-bottom": true,
  31613. onClose: _cache[14] || (_cache[14] = ($event) => $setup.showUpload = false)
  31614. }, {
  31615. default: vue.withCtx(() => [
  31616. vue.createElementVNode("view", { class: "popup-inner" }, [
  31617. vue.createElementVNode(
  31618. "view",
  31619. { class: "popup-title" },
  31620. vue.toDisplayString(_ctx.$t("更换头像")),
  31621. 1
  31622. /* TEXT */
  31623. ),
  31624. vue.createElementVNode("view", { class: "uploader-box" }, [
  31625. vue.createVNode($setup["CUploadImage"], {
  31626. onChange: $setup.changeImg,
  31627. maxCount: 1
  31628. })
  31629. ]),
  31630. vue.createElementVNode("view", { class: "popup-btns" }, [
  31631. vue.createVNode(_component_u_button, {
  31632. customStyle: "flex: 1; height: 48px; border-radius: 12px; margin-right: 12px",
  31633. onClick: _cache[12] || (_cache[12] = ($event) => $setup.showUpload = false)
  31634. }, {
  31635. default: vue.withCtx(() => [
  31636. vue.createTextVNode(
  31637. vue.toDisplayString(_ctx.$t("取消")),
  31638. 1
  31639. /* TEXT */
  31640. )
  31641. ]),
  31642. _: 1
  31643. /* STABLE */
  31644. }),
  31645. vue.createVNode(_component_u_button, {
  31646. type: "primary",
  31647. customStyle: "flex: 1; height: 48px; border-radius: 12px; background: #f8b932; border: none;",
  31648. onClick: $setup.saveAvatar
  31649. }, {
  31650. default: vue.withCtx(() => [
  31651. vue.createTextVNode(
  31652. vue.toDisplayString(_ctx.$t("保存")),
  31653. 1
  31654. /* TEXT */
  31655. )
  31656. ]),
  31657. _: 1
  31658. /* STABLE */
  31659. })
  31660. ])
  31661. ])
  31662. ]),
  31663. _: 1
  31664. /* STABLE */
  31665. }, 8, ["modelValue"])
  31666. ])
  31667. ]),
  31668. _: 1
  31669. /* STABLE */
  31670. })
  31671. ]),
  31672. _: 1
  31673. /* STABLE */
  31674. });
  31675. }
  31676. const PagesTabbarMyIndex = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["render", _sfc_render$P], ["__scopeId", "data-v-5b567bcd"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/My/index.vue"]]);
  31677. const _sfc_main$P = {
  31678. __name: "detail",
  31679. setup(__props, { expose: __expose }) {
  31680. __expose();
  31681. const { t: t2 } = useI18n();
  31682. const detailData = vue.ref(null);
  31683. const orderId = vue.ref("");
  31684. onLoad((options) => {
  31685. if (options && options.id) {
  31686. orderId.value = options.id;
  31687. fetchDetail();
  31688. }
  31689. });
  31690. const fetchDetail = async () => {
  31691. try {
  31692. const res = await getDigitalOrderInfo({ id: orderId.value });
  31693. if (res && res.code === 1 && res.data) {
  31694. detailData.value = res.data;
  31695. } else {
  31696. uni.showToast({ title: (res == null ? void 0 : res.msg) || t2("获取注单详情失败"), icon: "none" });
  31697. }
  31698. } catch (error) {
  31699. formatAppLog("error", "at pages/Tabbar/Entertainment/components/Digital/detail.vue:138", "获取详情失败", error);
  31700. }
  31701. };
  31702. const getBallColorClass = (numStr) => {
  31703. const num = parseInt(numStr, 10);
  31704. if (isNaN(num))
  31705. return "bg-gray";
  31706. const reds = [1, 2, 7, 8, 12, 13, 18, 19, 23, 24, 29, 30, 34, 35, 40, 45, 46];
  31707. const blues = [3, 4, 9, 10, 14, 15, 20, 25, 26, 31, 36, 37, 41, 42, 47, 48];
  31708. const greens = [5, 6, 11, 16, 17, 21, 22, 27, 28, 32, 33, 38, 39, 43, 44, 49];
  31709. if (reds.includes(num))
  31710. return "bg-red";
  31711. if (blues.includes(num))
  31712. return "bg-blue";
  31713. if (greens.includes(num))
  31714. return "bg-green";
  31715. return "bg-gray";
  31716. };
  31717. const getStatusText = (status) => {
  31718. const s = Number(status);
  31719. if (s === 0)
  31720. return t2("待开奖");
  31721. if (s === 1)
  31722. return t2("未中奖");
  31723. if (s === 2)
  31724. return t2("已中奖");
  31725. if (s === 3)
  31726. return t2("合局");
  31727. return t2("未知状态");
  31728. };
  31729. const statusBgClass = vue.computed(() => {
  31730. if (!detailData.value)
  31731. return "";
  31732. const s = Number(detailData.value.lottery_status);
  31733. if (s === 0)
  31734. return "bg-pending";
  31735. if (s === 1)
  31736. return "bg-loss";
  31737. if (s === 2)
  31738. return "bg-win";
  31739. if (s === 3)
  31740. return "bg-draw";
  31741. return "bg-loss";
  31742. });
  31743. const statusIcon = vue.computed(() => {
  31744. if (!detailData.value)
  31745. return "";
  31746. const s = Number(detailData.value.lottery_status);
  31747. if (s === 0)
  31748. return "clock";
  31749. if (s === 1)
  31750. return "close-circle";
  31751. if (s === 2)
  31752. return "checkmark-circle";
  31753. if (s === 3)
  31754. return "minus-circle";
  31755. return "info-circle";
  31756. });
  31757. const getProfitText = (data) => {
  31758. const s = Number(data.lottery_status);
  31759. if (s === 2)
  31760. return `+${parseFloat(data.win_amount || 0).toFixed(2)}`;
  31761. if (s === 1)
  31762. return `-${parseFloat(data.amount || 0).toFixed(2)}`;
  31763. if (s === 3)
  31764. return "0.00";
  31765. return "--";
  31766. };
  31767. const copyText = (text) => {
  31768. uni.setClipboardData({
  31769. data: String(text),
  31770. success: () => uni.showToast({ title: t2("复制成功"), icon: "none" })
  31771. });
  31772. };
  31773. const __returned__ = { t: t2, detailData, orderId, fetchDetail, getBallColorClass, getStatusText, statusBgClass, statusIcon, getProfitText, copyText, ref: vue.ref, computed: vue.computed, get onLoad() {
  31774. return onLoad;
  31775. }, get useI18n() {
  31776. return useI18n;
  31777. }, get getDigitalOrderInfo() {
  31778. return getDigitalOrderInfo;
  31779. } };
  31780. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  31781. return __returned__;
  31782. }
  31783. };
  31784. function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) {
  31785. const _component_u_icon = __unplugin_components_0$5;
  31786. const _component_u_tag = __unplugin_components_2$2;
  31787. const _component_u_cell_item = __unplugin_components_3;
  31788. const _component_u_cell_group = __unplugin_components_4$1;
  31789. const _component_u_loading = __unplugin_components_3$3;
  31790. const _component_PageContainer = PageContainer;
  31791. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  31792. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  31793. default: vue.withCtx(() => [
  31794. vue.createVNode(_component_PageContainer, {
  31795. "nav-title": $setup.t("注单详情")
  31796. }, {
  31797. default: vue.withCtx(() => [
  31798. $setup.detailData ? (vue.openBlock(), vue.createElementBlock("view", {
  31799. key: 0,
  31800. class: "detail-content"
  31801. }, [
  31802. vue.createElementVNode(
  31803. "view",
  31804. {
  31805. class: vue.normalizeClass(["status-card", $setup.statusBgClass])
  31806. },
  31807. [
  31808. vue.createElementVNode("view", { class: "status-top" }, [
  31809. vue.createElementVNode("view", { class: "status-icon-row" }, [
  31810. vue.createVNode(_component_u_icon, {
  31811. name: $setup.statusIcon,
  31812. size: "44",
  31813. color: "#fff"
  31814. }, null, 8, ["name"]),
  31815. vue.createElementVNode(
  31816. "text",
  31817. { class: "status-text" },
  31818. vue.toDisplayString($setup.getStatusText($setup.detailData.lottery_status)),
  31819. 1
  31820. /* TEXT */
  31821. )
  31822. ])
  31823. ]),
  31824. vue.createElementVNode("view", { class: "profit-row" }, [
  31825. vue.createElementVNode(
  31826. "text",
  31827. { class: "label" },
  31828. vue.toDisplayString($setup.detailData.lottery_status === 0 ? $setup.t("等待开奖中") : $setup.t("盈亏金额")),
  31829. 1
  31830. /* TEXT */
  31831. ),
  31832. vue.createElementVNode(
  31833. "text",
  31834. {
  31835. class: vue.normalizeClass(["value", { "is-win": $setup.detailData.lottery_status === 2 }])
  31836. },
  31837. vue.toDisplayString($setup.getProfitText($setup.detailData)),
  31838. 3
  31839. /* TEXT, CLASS */
  31840. )
  31841. ])
  31842. ],
  31843. 2
  31844. /* CLASS */
  31845. ),
  31846. vue.createElementVNode("view", { class: "info-card" }, [
  31847. vue.createElementVNode("view", { class: "card-header" }, [
  31848. vue.createElementVNode("view", { class: "title-row" }, [
  31849. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  31850. vue.createElementVNode(
  31851. "text",
  31852. { class: "title" },
  31853. vue.toDisplayString($setup.t("投注内容")),
  31854. 1
  31855. /* TEXT */
  31856. )
  31857. ]),
  31858. vue.createVNode(_component_u_tag, {
  31859. text: $setup.detailData.type === 1 ? $setup.t("澳门六合彩") : $setup.t("香港六合彩"),
  31860. type: "primary",
  31861. plain: "",
  31862. size: "mini"
  31863. }, null, 8, ["text"])
  31864. ]),
  31865. vue.createElementVNode("view", { class: "bet-details" }, [
  31866. vue.createElementVNode("view", { class: "detail-item full-width" }, [
  31867. vue.createElementVNode(
  31868. "text",
  31869. { class: "label" },
  31870. vue.toDisplayString($setup.t("期号 / 玩法")),
  31871. 1
  31872. /* TEXT */
  31873. ),
  31874. vue.createElementVNode("text", { class: "val" }, [
  31875. vue.createTextVNode(
  31876. vue.toDisplayString($setup.t("第")) + " ",
  31877. 1
  31878. /* TEXT */
  31879. ),
  31880. vue.createElementVNode(
  31881. "text",
  31882. { class: "font-din" },
  31883. vue.toDisplayString($setup.detailData.issue),
  31884. 1
  31885. /* TEXT */
  31886. ),
  31887. vue.createTextVNode(
  31888. " " + vue.toDisplayString($setup.t("期")) + " ",
  31889. 1
  31890. /* TEXT */
  31891. ),
  31892. vue.createElementVNode("text", { style: { "color": "#94a3b8", "margin": "0 8rpx" } }, "|"),
  31893. vue.createTextVNode(
  31894. " [" + vue.toDisplayString($setup.detailData.game) + "] - " + vue.toDisplayString($setup.detailData.gameplay),
  31895. 1
  31896. /* TEXT */
  31897. )
  31898. ])
  31899. ]),
  31900. vue.createElementVNode("view", { class: "detail-item full-width highlight-box" }, [
  31901. vue.createElementVNode(
  31902. "text",
  31903. { class: "label" },
  31904. vue.toDisplayString($setup.t("投注项")),
  31905. 1
  31906. /* TEXT */
  31907. ),
  31908. vue.createElementVNode(
  31909. "text",
  31910. { class: "val bet-number" },
  31911. vue.toDisplayString($setup.detailData.number),
  31912. 1
  31913. /* TEXT */
  31914. )
  31915. ]),
  31916. vue.createElementVNode("view", { class: "detail-item-group" }, [
  31917. vue.createElementVNode("view", { class: "detail-item" }, [
  31918. vue.createElementVNode(
  31919. "text",
  31920. { class: "label" },
  31921. vue.toDisplayString($setup.t("赔率")),
  31922. 1
  31923. /* TEXT */
  31924. ),
  31925. vue.createElementVNode(
  31926. "text",
  31927. { class: "val odds" },
  31928. "@" + vue.toDisplayString($setup.detailData.odds),
  31929. 1
  31930. /* TEXT */
  31931. )
  31932. ]),
  31933. vue.createElementVNode("view", { class: "detail-item" }, [
  31934. vue.createElementVNode(
  31935. "text",
  31936. { class: "label" },
  31937. vue.toDisplayString($setup.t("投注本金")),
  31938. 1
  31939. /* TEXT */
  31940. ),
  31941. vue.createElementVNode(
  31942. "text",
  31943. { class: "val amount-val" },
  31944. vue.toDisplayString(parseFloat($setup.detailData.amount || 0).toFixed(2)),
  31945. 1
  31946. /* TEXT */
  31947. )
  31948. ]),
  31949. $setup.detailData.lottery_status === 2 ? (vue.openBlock(), vue.createElementBlock("view", {
  31950. key: 0,
  31951. class: "detail-item"
  31952. }, [
  31953. vue.createElementVNode(
  31954. "text",
  31955. { class: "label" },
  31956. vue.toDisplayString($setup.t("派彩金额")),
  31957. 1
  31958. /* TEXT */
  31959. ),
  31960. vue.createElementVNode(
  31961. "text",
  31962. { class: "val win-val" },
  31963. vue.toDisplayString(parseFloat($setup.detailData.win_amount || 0).toFixed(2)),
  31964. 1
  31965. /* TEXT */
  31966. )
  31967. ])) : vue.createCommentVNode("v-if", true)
  31968. ])
  31969. ])
  31970. ]),
  31971. $setup.detailData.lottery && $setup.detailData.lottery.open_code ? (vue.openBlock(), vue.createElementBlock("view", {
  31972. key: 0,
  31973. class: "info-card"
  31974. }, [
  31975. vue.createElementVNode("view", { class: "card-header" }, [
  31976. vue.createElementVNode("view", { class: "title-row" }, [
  31977. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  31978. vue.createElementVNode(
  31979. "text",
  31980. { class: "title" },
  31981. vue.toDisplayString($setup.t("开奖结果")),
  31982. 1
  31983. /* TEXT */
  31984. )
  31985. ])
  31986. ]),
  31987. vue.createElementVNode("view", { class: "lottery-result-box" }, [
  31988. $setup.detailData.lottery.open_time ? (vue.openBlock(), vue.createElementBlock("view", {
  31989. key: 0,
  31990. class: "open-time-row"
  31991. }, [
  31992. vue.createElementVNode(
  31993. "text",
  31994. { class: "label" },
  31995. vue.toDisplayString($setup.t("开奖时间")) + ":",
  31996. 1
  31997. /* TEXT */
  31998. ),
  31999. vue.createElementVNode(
  32000. "text",
  32001. { class: "val font-din" },
  32002. vue.toDisplayString($setup.detailData.lottery.open_time),
  32003. 1
  32004. /* TEXT */
  32005. )
  32006. ])) : vue.createCommentVNode("v-if", true),
  32007. vue.createElementVNode("view", { class: "lhc-open-code-box" }, [
  32008. (vue.openBlock(true), vue.createElementBlock(
  32009. vue.Fragment,
  32010. null,
  32011. vue.renderList($setup.detailData.lottery.open_code.split(","), (code2, index) => {
  32012. return vue.openBlock(), vue.createElementBlock(
  32013. vue.Fragment,
  32014. { key: index },
  32015. [
  32016. index === $setup.detailData.lottery.open_code.split(",").length - 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  32017. key: 0,
  32018. class: "plus-sign"
  32019. }, "+")) : vue.createCommentVNode("v-if", true),
  32020. vue.createCommentVNode(" 替换为波色计算类名 "),
  32021. vue.createElementVNode(
  32022. "view",
  32023. {
  32024. class: vue.normalizeClass(["lhc-ball", $setup.getBallColorClass(code2)])
  32025. },
  32026. vue.toDisplayString(code2),
  32027. 3
  32028. /* TEXT, CLASS */
  32029. )
  32030. ],
  32031. 64
  32032. /* STABLE_FRAGMENT */
  32033. );
  32034. }),
  32035. 128
  32036. /* KEYED_FRAGMENT */
  32037. ))
  32038. ])
  32039. ])
  32040. ])) : vue.createCommentVNode("v-if", true),
  32041. vue.createElementVNode("view", { class: "info-card no-padding" }, [
  32042. vue.createVNode(_component_u_cell_group, { border: false }, {
  32043. default: vue.withCtx(() => [
  32044. vue.createVNode(_component_u_cell_item, {
  32045. title: $setup.t("注单单号"),
  32046. arrow: false,
  32047. "border-bottom": true,
  32048. "title-style": { color: "#64748b" }
  32049. }, {
  32050. "right-icon": vue.withCtx(() => [
  32051. vue.createElementVNode("view", {
  32052. class: "copy-value",
  32053. onClick: _cache[0] || (_cache[0] = ($event) => $setup.copyText($setup.detailData.ordernum))
  32054. }, [
  32055. vue.createElementVNode(
  32056. "text",
  32057. { class: "font-din" },
  32058. vue.toDisplayString($setup.detailData.ordernum),
  32059. 1
  32060. /* TEXT */
  32061. ),
  32062. vue.createVNode(_component_u_icon, {
  32063. name: "file-text",
  32064. size: "28",
  32065. color: "#94a3b8",
  32066. style: { "margin-left": "8rpx" }
  32067. })
  32068. ])
  32069. ]),
  32070. _: 1
  32071. /* STABLE */
  32072. }, 8, ["title"]),
  32073. vue.createVNode(_component_u_cell_item, {
  32074. title: $setup.t("投注时间"),
  32075. value: $setup.detailData.created_at,
  32076. arrow: false,
  32077. "border-bottom": false,
  32078. "title-style": { color: "#64748b" }
  32079. }, null, 8, ["title", "value"])
  32080. ]),
  32081. _: 1
  32082. /* STABLE */
  32083. })
  32084. ])
  32085. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  32086. key: 1,
  32087. class: "loading-container"
  32088. }, [
  32089. vue.createVNode(_component_u_loading, {
  32090. mode: "circle",
  32091. size: "40",
  32092. color: _ctx.$mainColor
  32093. }, null, 8, ["color"]),
  32094. vue.createElementVNode(
  32095. "text",
  32096. { class: "loading-text" },
  32097. vue.toDisplayString($setup.t("正在加载注单详情...")),
  32098. 1
  32099. /* TEXT */
  32100. )
  32101. ]))
  32102. ]),
  32103. _: 1
  32104. /* STABLE */
  32105. }, 8, ["nav-title"])
  32106. ]),
  32107. _: 1
  32108. /* STABLE */
  32109. });
  32110. }
  32111. const PagesTabbarEntertainmentComponentsDigitalDetail = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$O], ["__scopeId", "data-v-d0d4f802"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/components/Digital/detail.vue"]]);
  32112. const version = "4.1.2";
  32113. const description = "";
  32114. const author = {
  32115. name: "viarotel",
  32116. email: "viarotel@qq.com",
  32117. url: "https://viarotel.eu.org/",
  32118. wechat: "viarotel",
  32119. address: "河南省郑州市"
  32120. };
  32121. const primaryColor = "#028d71";
  32122. const appName = "MelBet";
  32123. const appVersion = version;
  32124. const appDescription = description;
  32125. const appExtra = {
  32126. ...author
  32127. };
  32128. var wsURL = "wss://sportapi.sp2509.cc:9501";
  32129. class WebSocketService {
  32130. constructor() {
  32131. this.url = wsURL;
  32132. this.socketTask = null;
  32133. this.isOpen = false;
  32134. this.isReconnecting = false;
  32135. this.reconnectCount = 0;
  32136. this.maxReconnect = 5;
  32137. this.timer = null;
  32138. this.pingInterval = 3e4;
  32139. }
  32140. // 1. 初始化连接
  32141. connect() {
  32142. if (this.isOpen)
  32143. return;
  32144. let token = uni.getStorageSync("token");
  32145. this.socketTask = uni.connectSocket({
  32146. url: token ? this.url + "?token=" + token : this.url,
  32147. success: () => {
  32148. formatAppLog("log", "at utils/websocket.js:40", "WebSocket 开始连接...");
  32149. }
  32150. });
  32151. this.socketTask.onOpen(() => {
  32152. formatAppLog("log", "at utils/websocket.js:46", "WebSocket 连接成功");
  32153. this.isOpen = true;
  32154. this.isReconnecting = false;
  32155. this.reconnectCount = 0;
  32156. this.startHeartbeat();
  32157. });
  32158. this.socketTask.onMessage((res) => {
  32159. const WebsocketData = useWebsocketDataStore();
  32160. const responseData = JSON.parse(res.data);
  32161. if (responseData.type === "sport_list") {
  32162. try {
  32163. const arrayBuffer = uni.base64ToArrayBuffer(responseData.message);
  32164. const uint8Array = new Uint8Array(arrayBuffer);
  32165. const decompressedData = pako.inflate(uint8Array);
  32166. let resultText = "";
  32167. if (typeof TextDecoder !== "undefined") {
  32168. const textDecoder = new TextDecoder("utf-8");
  32169. resultText = textDecoder.decode(decompressedData);
  32170. } else {
  32171. resultText = utf8ArrayToString(decompressedData);
  32172. }
  32173. const sport_list_res = JSON.stringify(
  32174. {
  32175. ...responseData,
  32176. message: JSON.parse(resultText)
  32177. }
  32178. );
  32179. WebsocketData.setWebsocketData(sport_list_res);
  32180. } catch (err) {
  32181. formatAppLog("error", "at utils/websocket.js:106", "解压失败:", err);
  32182. }
  32183. } else {
  32184. WebsocketData.setWebsocketGlobalData(responseData);
  32185. uni.$emit("onSocketMessage", res.data);
  32186. }
  32187. });
  32188. this.socketTask.onClose(() => {
  32189. formatAppLog("log", "at utils/websocket.js:119", "WebSocket 连接断开");
  32190. this.isOpen = false;
  32191. this.socketTask = null;
  32192. this.stopHeartbeat();
  32193. this.reconnect();
  32194. });
  32195. this.socketTask.onError((err) => {
  32196. formatAppLog("error", "at utils/websocket.js:128", "WebSocket 连接错误:", err);
  32197. this.isOpen = false;
  32198. });
  32199. }
  32200. // 2. 发送消息
  32201. send(data) {
  32202. if (this.isOpen && this.socketTask) {
  32203. const msg = typeof data === "object" ? JSON.stringify(data) : data;
  32204. this.socketTask.send({ data: msg });
  32205. } else {
  32206. formatAppLog("error", "at utils/websocket.js:140", "WebSocket 尚未连接,消息发送失败");
  32207. }
  32208. }
  32209. // 3. 开启心跳机制 (防止连接假死或被网关切断)
  32210. startHeartbeat() {
  32211. this.stopHeartbeat();
  32212. this.timer = setInterval(() => {
  32213. this.send({ type: "ping" });
  32214. }, this.pingInterval);
  32215. }
  32216. // 4. 停止心跳
  32217. stopHeartbeat() {
  32218. if (this.timer) {
  32219. clearInterval(this.timer);
  32220. this.timer = null;
  32221. }
  32222. }
  32223. // 5. 断线重连机制
  32224. reconnect() {
  32225. if (this.isReconnecting)
  32226. return;
  32227. this.isReconnecting = true;
  32228. this.reconnectCount++;
  32229. formatAppLog("log", "at utils/websocket.js:171", `WebSocket 正在尝试第 ${this.reconnectCount} 次重连...`);
  32230. setTimeout(() => {
  32231. this.isReconnecting = false;
  32232. this.connect();
  32233. }, 3e3);
  32234. }
  32235. // 6. 主动关闭连接 (退出登录或离开应用时调用)
  32236. close() {
  32237. this.maxReconnect = 0;
  32238. this.stopHeartbeat();
  32239. if (this.isOpen && this.socketTask) {
  32240. this.socketTask.close();
  32241. }
  32242. }
  32243. }
  32244. const socket = new WebSocketService();
  32245. function useWebView() {
  32246. const router2 = useRouter();
  32247. function open2(props) {
  32248. router2.push({
  32249. path: "/web-view",
  32250. query: props
  32251. });
  32252. }
  32253. return {
  32254. open: open2
  32255. };
  32256. }
  32257. var __defProp$3 = Object.defineProperty;
  32258. var __defProps$3 = Object.defineProperties;
  32259. var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
  32260. var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
  32261. var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
  32262. var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
  32263. var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  32264. var __spreadValues$3 = (a, b) => {
  32265. for (var prop in b || (b = {}))
  32266. if (__hasOwnProp$3.call(b, prop))
  32267. __defNormalProp$3(a, prop, b[prop]);
  32268. if (__getOwnPropSymbols$3)
  32269. for (var prop of __getOwnPropSymbols$3(b)) {
  32270. if (__propIsEnum$3.call(b, prop))
  32271. __defNormalProp$3(a, prop, b[prop]);
  32272. }
  32273. return a;
  32274. };
  32275. var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
  32276. function promisify(callback) {
  32277. return (...args) => {
  32278. const options = args[0];
  32279. return new Promise(
  32280. (resolve2, reject) => {
  32281. callback(__spreadProps$3(__spreadValues$3({}, options), {
  32282. success: (result) => {
  32283. var _a2;
  32284. (_a2 = options == null ? void 0 : options.success) == null ? void 0 : _a2.call(options, result);
  32285. resolve2(result);
  32286. },
  32287. fail: (error) => {
  32288. var _a2;
  32289. (_a2 = options == null ? void 0 : options.fail) == null ? void 0 : _a2.call(options, error);
  32290. reject(error);
  32291. }
  32292. }));
  32293. }
  32294. );
  32295. };
  32296. }
  32297. promisify(uni.addPhoneContact);
  32298. promisify(uni.authorize);
  32299. promisify(uni.checkIsSoterEnrolledInDevice);
  32300. promisify(uni.checkIsSupportSoterAuthentication);
  32301. promisify(uni.checkSession);
  32302. promisify(uni.chooseAddress);
  32303. promisify(uni.chooseFile);
  32304. promisify(uni.chooseImage);
  32305. promisify(uni.chooseInvoice);
  32306. promisify(uni.chooseInvoiceTitle);
  32307. promisify(uni.chooseLocation);
  32308. promisify(uni.chooseMedia);
  32309. promisify(uni.chooseMessageFile);
  32310. promisify(uni.chooseVideo);
  32311. promisify(uni.clearStorage);
  32312. promisify(uni.closeBLEConnection);
  32313. promisify(uni.closeBluetoothAdapter);
  32314. promisify(uni.closePreviewImage);
  32315. promisify(uni.compressImage);
  32316. promisify(uni.compressVideo);
  32317. promisify(uni.createBLEConnection);
  32318. promisify(uni.createPushMessage);
  32319. promisify(uni.getBatteryInfo);
  32320. promisify(uni.getBLEDeviceCharacteristics);
  32321. promisify(uni.getBLEDeviceRSSI);
  32322. promisify(uni.getBLEDeviceServices);
  32323. promisify(uni.getBluetoothAdapterState);
  32324. promisify(uni.getBluetoothDevices);
  32325. promisify(uni.getCheckBoxState);
  32326. promisify(uni.getClipboardData);
  32327. promisify(uni.getConnectedBluetoothDevices);
  32328. promisify(uni.getExtConfig);
  32329. promisify(uni.getFileInfo);
  32330. promisify(uni.getImageInfo);
  32331. promisify(uni.getLocation);
  32332. promisify(uni.getNetworkType);
  32333. promisify(uni.getProvider);
  32334. promisify(uni.getPushClientId);
  32335. promisify(uni.getSavedFileInfo);
  32336. promisify(uni.getSavedFileList);
  32337. promisify(uni.getScreenBrightness);
  32338. promisify(uni.getSelectedTextRange);
  32339. promisify(uni.getSetting);
  32340. promisify(uni.getStorage);
  32341. promisify(uni.getStorageInfo);
  32342. promisify(uni.getSystemInfo);
  32343. promisify(uni.getUserInfo);
  32344. promisify(uni.getUserProfile);
  32345. promisify(uni.getVideoInfo);
  32346. promisify(uni.hideHomeButton);
  32347. promisify(uni.hideNavigationBarLoading);
  32348. promisify(uni.hideShareMenu);
  32349. promisify(uni.hideTabBar);
  32350. promisify(uni.hideTabBarRedDot);
  32351. promisify(uni.loadFontFace);
  32352. promisify(uni.login);
  32353. promisify(uni.makePhoneCall);
  32354. promisify(uni.navigateBack);
  32355. promisify(uni.navigateBackMiniProgram);
  32356. promisify(uni.navigateTo);
  32357. promisify(uni.navigateToMiniProgram);
  32358. promisify(uni.notifyBLECharacteristicValueChange);
  32359. promisify(uni.openAppAuthorizeSetting);
  32360. promisify(uni.openBluetoothAdapter);
  32361. promisify(uni.openDocument);
  32362. promisify(uni.openLocation);
  32363. promisify(uni.openVideoEditor);
  32364. promisify(uni.pageScrollTo);
  32365. promisify(uni.preLogin);
  32366. promisify(uni.previewImage);
  32367. promisify(uni.readBLECharacteristicValue);
  32368. promisify(uni.redirectTo);
  32369. promisify(uni.reLaunch);
  32370. promisify(uni.removeSavedFile);
  32371. promisify(uni.removeStorage);
  32372. promisify(uni.removeTabBarBadge);
  32373. promisify(uni.requestPayment);
  32374. promisify(uni.requestSubscribeMessage);
  32375. promisify(uni.saveFile);
  32376. promisify(uni.saveImageToPhotosAlbum);
  32377. promisify(uni.saveVideoToPhotosAlbum);
  32378. promisify(uni.scanCode);
  32379. promisify(uni.setBackgroundColor);
  32380. promisify(uni.setBackgroundTextStyle);
  32381. promisify(uni.setBLEMTU);
  32382. promisify(uni.setClipboardData);
  32383. promisify(uni.setEnableDebug);
  32384. promisify(uni.setKeepScreenOn);
  32385. promisify(uni.setNavigationBarColor);
  32386. promisify(uni.setNavigationBarTitle);
  32387. promisify(uni.setScreenBrightness);
  32388. promisify(uni.setStorage);
  32389. promisify(uni.setTabBarBadge);
  32390. promisify(uni.setTabBarItem);
  32391. promisify(uni.setTabBarStyle);
  32392. promisify(uni.share);
  32393. promisify(uni.shareWithSystem);
  32394. promisify(uni.showActionSheet);
  32395. promisify(uni.showLoading);
  32396. const showModal = promisify(uni.showModal);
  32397. promisify(uni.showNavigationBarLoading);
  32398. promisify(uni.showShareMenu);
  32399. promisify(uni.showTabBar);
  32400. promisify(uni.showTabBarRedDot);
  32401. const showToast = promisify(uni.showToast);
  32402. promisify(uni.startBluetoothDevicesDiscovery);
  32403. promisify(uni.startPullDownRefresh);
  32404. promisify(uni.startSoterAuthentication);
  32405. promisify(uni.stopBluetoothDevicesDiscovery);
  32406. promisify(uni.switchTab);
  32407. promisify(uni.vibrate);
  32408. promisify(uni.vibrateLong);
  32409. promisify(uni.vibrateShort);
  32410. promisify(uni.writeBLECharacteristicValue);
  32411. const useUserStore = defineStore(
  32412. "user",
  32413. () => {
  32414. const userInfo = vue.ref({});
  32415. const userId = vue.computed(() => userInfo.value.id || "");
  32416. const loginLoading = vue.ref(false);
  32417. function logout2() {
  32418. uni.removeStorageSync("token");
  32419. uni.removeStorageSync("user_info");
  32420. userInfo.value = {};
  32421. }
  32422. async function getUserData() {
  32423. if (!uni.getStorageSync("token")) {
  32424. throw new Error("未登录,无法获取用户信息");
  32425. }
  32426. try {
  32427. const res = await getUserInfo();
  32428. if (res == null ? void 0 : res.data) {
  32429. userInfo.value = res.data;
  32430. uni.setStorageSync("user_info", res.data);
  32431. }
  32432. } catch (error) {
  32433. formatAppLog("error", "at store/user/index.js:42", "获取用户信息失败:", error);
  32434. throw new Error("获取用户信息失败");
  32435. }
  32436. }
  32437. async function initUserInfo() {
  32438. if (uni.getStorageSync("token")) {
  32439. await getUserData();
  32440. }
  32441. }
  32442. return {
  32443. userInfo,
  32444. userId,
  32445. loginLoading,
  32446. logout: logout2,
  32447. getUserData,
  32448. initUserInfo
  32449. };
  32450. }
  32451. );
  32452. const _imports_0$3 = "/static/images/login/f1bet.png";
  32453. const _imports_1 = "/static/images/login/mclaren.png";
  32454. const _imports_2 = "/static/images/login/Profile.png";
  32455. const _imports_3 = "/static/images/login/Lock.png";
  32456. const _imports_4$1 = "/static/images/login/register.png";
  32457. const _imports_5 = "/static/images/login/youke.png";
  32458. const _imports_6 = "/static/images/login/kefu.png";
  32459. const _sfc_main$O = {
  32460. __name: "index",
  32461. setup(__props, { expose: __expose }) {
  32462. __expose();
  32463. const { locale } = useI18n();
  32464. const router2 = useRouter();
  32465. const webView = useWebView();
  32466. const richView = useRichView();
  32467. const userStore = useUserStore();
  32468. const agreed = vue.ref(false);
  32469. const RememberPwd = vue.ref(false);
  32470. const activeLoginType = vue.ref(0);
  32471. const accountForm = vue.reactive({
  32472. account: "",
  32473. // 账号
  32474. password: ""
  32475. // 密码
  32476. });
  32477. const emailForm = vue.reactive({
  32478. account: "",
  32479. // 邮箱
  32480. password: ""
  32481. // 密码
  32482. });
  32483. function initRecall() {
  32484. const isRememberAccount = uni.getStorageSync("is_remember_pwd_account");
  32485. if (isRememberAccount === "true" || isRememberAccount === true) {
  32486. accountForm.account = uni.getStorageSync("saved_account_account") || "";
  32487. accountForm.password = uni.getStorageSync("saved_password_account") || "";
  32488. }
  32489. const isRememberEmail = uni.getStorageSync("is_remember_pwd_email");
  32490. if (isRememberEmail === "true" || isRememberEmail === true) {
  32491. emailForm.account = uni.getStorageSync("saved_account_email") || "";
  32492. emailForm.password = uni.getStorageSync("saved_password_email") || "";
  32493. }
  32494. updateRememberPwdStatus();
  32495. }
  32496. function updateRememberPwdStatus() {
  32497. if (activeLoginType.value === 0) {
  32498. const isRememberAccount = uni.getStorageSync("is_remember_pwd_account");
  32499. RememberPwd.value = isRememberAccount === "true" || isRememberAccount === true;
  32500. } else {
  32501. const isRememberEmail = uni.getStorageSync("is_remember_pwd_email");
  32502. RememberPwd.value = isRememberEmail === "true" || isRememberEmail === true;
  32503. }
  32504. }
  32505. initRecall();
  32506. const changeLoginType = (index) => {
  32507. activeLoginType.value = index;
  32508. updateRememberPwdStatus();
  32509. };
  32510. function onAgreementClick() {
  32511. richView.open({
  32512. title: uni.$t("隐私政策"),
  32513. content: `
  32514. <div style="padding: 15px 20px; line-height: 1.8; color: #333; font-size: 14px; text-align: justify;">
  32515. <h3 style="text-align: center; font-size: 16px; font-weight: bold; margin-bottom: 15px; color: #111;">隐私政策声明</h3>
  32516. <p style="margin-bottom: 12px;">欢迎您使用我们的服务!我们非常重视您的隐私保护和个人信息安全。本《隐私政策》将帮助您了解我们如何收集、使用、存储和保护您的个人信息。</p>
  32517. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">1. 我们如何收集您的信息</h4>
  32518. <p style="margin-bottom: 8px;">当您注册账号或使用我们的产品时,我们可能会收集您的以下信息:</p>
  32519. <ul style="padding-left: 20px; margin-bottom: 12px; color: #444;">
  32520. <li style="list-style-type: disc; margin-bottom: 4px;"><strong>注册信息:</strong>如您的邮箱地址、账号名称、密码等。</li>
  32521. <li style="list-style-type: disc; margin-bottom: 4px;"><strong>设备信息:</strong>如设备型号、操作系统版本、唯一设备标识符等,用于保障账号安全及风险控制。</li>
  32522. <li style="list-style-type: disc;"><strong>日志信息:</strong>如您的IP地址、访问时间、操作记录等。</li>
  32523. </ul>
  32524. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">2. 我们如何使用您的信息</h4>
  32525. <p style="margin-bottom: 8px;">我们收集的信息将主要用于以下用途:</p>
  32526. <ul style="padding-left: 20px; margin-bottom: 12px; color: #444;">
  32527. <li style="list-style-type: disc; margin-bottom: 4px;">向您提供、维护和改进我们的产品及服务;</li>
  32528. <li style="list-style-type: disc; margin-bottom: 4px;">进行身份验证、安全防范、诈骗监测,确保系统及您的资金/数据安全;</li>
  32529. <li style="list-style-type: disc;">为您提供专属的客户服务及技术支持。</li>
  32530. </ul>
  32531. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">3. 信息的共享与保护</h4>
  32532. <p style="margin-bottom: 12px;">我们承诺对您的信息承担保密义务。除法律法规要求或为实现核心功能所必须的第三方合作外,我们不会擅自向任何无关第三方出售、共享或披露您的个人信息。我们采用符合业界标准的加密技术和安全防护措施,防止您的信息遭到未经授权的访问、泄露或损坏。</p>
  32533. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">4. 您的权利</h4>
  32534. <p style="margin-bottom: 12px;">您有权随时访问、更正、删除您的个人信息,或注销您的账号。如您在此过程中遇到任何问题,请随时联系我们的在线客服。</p>
  32535. <div style="margin-top: 25px; padding-top: 15px; border-top: 1px solid #eee; text-align: center; color: #888; font-size: 12px;">
  32536. 请仔细阅读以上内容,勾选“我已阅读并同意”即代表您完全认可本政策。
  32537. </div>
  32538. </div>
  32539. `
  32540. });
  32541. }
  32542. async function validateAccountForm() {
  32543. if (!accountForm.account) {
  32544. await $u.toast(uni.$t("请输入账号"));
  32545. return false;
  32546. }
  32547. if (!accountForm.password) {
  32548. await $u.toast(uni.$t("请输入登录密码"));
  32549. return false;
  32550. }
  32551. return true;
  32552. }
  32553. async function validateEmailForm() {
  32554. if (!emailForm.account) {
  32555. await $u.toast(uni.$t("请输入登录邮箱"));
  32556. return false;
  32557. }
  32558. if (!emailForm.password) {
  32559. await $u.toast(uni.$t("请输入登录密码"));
  32560. return false;
  32561. }
  32562. return true;
  32563. }
  32564. function checkAgreement(callback) {
  32565. if (!agreed.value) {
  32566. uni.showModal({
  32567. title: uni.$t("温馨提示"),
  32568. content: uni.$t("为了保障您的权益,请先阅读并同意相关条款"),
  32569. confirmText: uni.$t("同意"),
  32570. cancelText: uni.$t("取消"),
  32571. confirmColor: "#f8b932",
  32572. success: (res) => {
  32573. if (res.confirm) {
  32574. agreed.value = true;
  32575. callback();
  32576. }
  32577. }
  32578. });
  32579. } else {
  32580. callback();
  32581. }
  32582. }
  32583. function onGuestClick() {
  32584. checkAgreement(() => {
  32585. uni.switchTab({ url: "/pages/Tabbar/Home/index" });
  32586. });
  32587. }
  32588. function onLineService() {
  32589. if (!uni.getStorageSync("youke_token")) {
  32590. userGuestRegister().then((res) => {
  32591. uni.setStorageSync("youke_token", res.data.token);
  32592. router2.push({
  32593. name: "customerService",
  32594. query: { GuestMode: 1 }
  32595. });
  32596. });
  32597. } else {
  32598. router2.push({
  32599. name: "customerService",
  32600. query: { GuestMode: 1 }
  32601. });
  32602. }
  32603. }
  32604. function onLoginClick() {
  32605. checkAgreement(async () => {
  32606. let isValid = false;
  32607. let loginData = { account: "", password: "" };
  32608. if (activeLoginType.value === 0) {
  32609. isValid = await validateAccountForm();
  32610. loginData.account = accountForm.account;
  32611. loginData.password = accountForm.password;
  32612. } else {
  32613. isValid = await validateEmailForm();
  32614. loginData.account = emailForm.account;
  32615. loginData.password = emailForm.password;
  32616. }
  32617. if (!isValid)
  32618. return;
  32619. postUserLogin(loginData).then((res) => {
  32620. formatAppLog("log", "at pages/login/index.vue:336", res, 315);
  32621. socket.close();
  32622. if (activeLoginType.value === 0) {
  32623. if (RememberPwd.value) {
  32624. uni.setStorageSync("is_remember_pwd_account", true);
  32625. uni.setStorageSync("saved_account_account", loginData.account);
  32626. uni.setStorageSync("saved_password_account", loginData.password);
  32627. } else {
  32628. uni.removeStorageSync("is_remember_pwd_account");
  32629. uni.removeStorageSync("saved_account_account");
  32630. uni.removeStorageSync("saved_password_account");
  32631. }
  32632. } else {
  32633. if (RememberPwd.value) {
  32634. uni.setStorageSync("is_remember_pwd_email", true);
  32635. uni.setStorageSync("saved_account_email", loginData.account);
  32636. uni.setStorageSync("saved_password_email", loginData.password);
  32637. } else {
  32638. uni.removeStorageSync("is_remember_pwd_email");
  32639. uni.removeStorageSync("saved_account_email");
  32640. uni.removeStorageSync("saved_password_email");
  32641. }
  32642. }
  32643. uni.setStorageSync("token", res.data.token);
  32644. setTimeout(() => {
  32645. userStore.getUserData();
  32646. const pages = getCurrentPages();
  32647. if (pages.length > 1) {
  32648. uni.navigateBack({ delta: 1 });
  32649. } else {
  32650. router2.pushTab({ name: "index" });
  32651. }
  32652. }, 1500);
  32653. });
  32654. });
  32655. }
  32656. const __returned__ = { locale, router: router2, webView, richView, userStore, agreed, RememberPwd, activeLoginType, accountForm, emailForm, initRecall, updateRememberPwdStatus, changeLoginType, onAgreementClick, validateAccountForm, validateEmailForm, checkAgreement, onGuestClick, onLineService, onLoginClick, ref: vue.ref, reactive: vue.reactive, computed: vue.computed, get $u() {
  32657. return $u;
  32658. }, get useLocale() {
  32659. return useLocale;
  32660. }, get appDescription() {
  32661. return appDescription;
  32662. }, get appExtra() {
  32663. return appExtra;
  32664. }, get appName() {
  32665. return appName;
  32666. }, get appVersion() {
  32667. return appVersion;
  32668. }, selectLang, get postUserLogin() {
  32669. return postUserLogin;
  32670. }, get userGuestRegister() {
  32671. return userGuestRegister;
  32672. }, get getLocale() {
  32673. return getLocale;
  32674. }, get socket() {
  32675. return socket;
  32676. }, get useI18n() {
  32677. return useI18n;
  32678. } };
  32679. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  32680. return __returned__;
  32681. }
  32682. };
  32683. function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) {
  32684. const _component_u_input = __unplugin_components_3$2;
  32685. const _component_u_button = __unplugin_components_2$1;
  32686. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  32687. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  32688. default: vue.withCtx(() => [
  32689. vue.createElementVNode("view", {
  32690. class: "relative overflow-hidden login-page",
  32691. style: { "background-image": "url('/static/images/login/bg-login-app.png')" }
  32692. }, [
  32693. vue.createElementVNode("view", {
  32694. class: "pos-fixed",
  32695. style: { "z-index": "999", "right": "20px", "top": "calc(20px + env(safe-area-inset-top))" }
  32696. }, [
  32697. vue.createVNode($setup["selectLang"])
  32698. ]),
  32699. vue.createElementVNode("view", {
  32700. class: "relative z-10 flex flex-col justify-center",
  32701. style: { "height": "100dvh", "padding-top": "env(safe-area-inset-top)", "padding-bottom": "env(safe-area-inset-bottom)", "box-sizing": "border-box" }
  32702. }, [
  32703. vue.createElementVNode("view", { class: "flex justify-center mb-4" }, [
  32704. vue.createElementVNode("image", {
  32705. src: _imports_0$3,
  32706. mode: "heightFix",
  32707. class: "h-6"
  32708. })
  32709. ]),
  32710. vue.createElementVNode("view", {
  32711. class: "mx-5 rounded-3xl p-4 shadow-lg relative",
  32712. style: { "background": "rgba(120, 120, 120, 0.1)", "backdrop-filter": "blur(5px)", "border": "1px solid rgba(255,255,255,0.6)" }
  32713. }, [
  32714. vue.createElementVNode("view", { class: "text-center mb-4 px-4" }, [
  32715. vue.createElementVNode("image", {
  32716. src: _imports_1,
  32717. mode: "widthFix",
  32718. style: { "width": "150px" }
  32719. }),
  32720. vue.createElementVNode(
  32721. "text",
  32722. {
  32723. class: "block mt-2",
  32724. style: { "font-weight": "800", "font-size": "20px" }
  32725. },
  32726. vue.toDisplayString(_ctx.$t("迈凯伦")),
  32727. 1
  32728. /* TEXT */
  32729. ),
  32730. vue.createElementVNode(
  32731. "text",
  32732. { class: "text-xs text-gray-600 block mt-1" },
  32733. vue.toDisplayString(_ctx.$t("官方合作伙伴")),
  32734. 1
  32735. /* TEXT */
  32736. )
  32737. ]),
  32738. vue.createElementVNode("view", { class: "flex mb-4" }, [
  32739. vue.createElementVNode(
  32740. "view",
  32741. {
  32742. class: "flex-1 text-center py-1.5 text-sm font-bold transition-all",
  32743. style: vue.normalizeStyle($setup.activeLoginType === 0 ? "background: rgba(255,255,255,0.8); color: #ff7700; border: 1px solid #ff7700; border-radius: 8px;" : "background: rgba(255,255,255,0.4); color: #666; border: 1px solid transparent; border-radius: 8px;"),
  32744. onClick: _cache[0] || (_cache[0] = ($event) => $setup.changeLoginType(0))
  32745. },
  32746. vue.toDisplayString(_ctx.$t("账号登录")),
  32747. 5
  32748. /* TEXT, STYLE */
  32749. ),
  32750. vue.createElementVNode("view", { style: { "width": "10px" } }),
  32751. vue.createElementVNode(
  32752. "view",
  32753. {
  32754. class: "flex-1 text-center py-1.5 text-sm font-bold transition-all",
  32755. style: vue.normalizeStyle($setup.activeLoginType === 1 ? "background: rgba(255,255,255,0.8); color: #ff7700; border: 1px solid #ff7700; border-radius: 8px;" : "background: rgba(255,255,255,0.4); color: #666; border: 1px solid transparent; border-radius: 8px;"),
  32756. onClick: _cache[1] || (_cache[1] = ($event) => $setup.changeLoginType(1))
  32757. },
  32758. vue.toDisplayString(_ctx.$t("邮箱登录")),
  32759. 5
  32760. /* TEXT, STYLE */
  32761. )
  32762. ]),
  32763. $setup.activeLoginType === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  32764. key: 0,
  32765. class: "space-y-3 mb-4"
  32766. }, [
  32767. vue.createElementVNode("view", {
  32768. class: "rounded-xl flex items-center px-4 py-0.5",
  32769. style: { "background": "rgba(255,255,255,0.6)" }
  32770. }, [
  32771. vue.createElementVNode("image", {
  32772. src: _imports_2,
  32773. class: "w-5 h-5 mr-2",
  32774. mode: "aspectFit"
  32775. }),
  32776. vue.createVNode(_component_u_input, {
  32777. modelValue: $setup.accountForm.account,
  32778. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.accountForm.account = $event),
  32779. placeholder: _ctx.$t("请输入账号"),
  32780. type: "text",
  32781. clearable: "",
  32782. border: false
  32783. }, null, 8, ["modelValue", "placeholder"])
  32784. ]),
  32785. vue.createElementVNode("view", {
  32786. class: "rounded-xl flex items-center px-4 py-0.5",
  32787. style: { "background": "rgba(255,255,255,0.6)" }
  32788. }, [
  32789. vue.createElementVNode("image", {
  32790. src: _imports_3,
  32791. class: "w-5 h-5 mr-2",
  32792. mode: "aspectFit"
  32793. }),
  32794. vue.createVNode(_component_u_input, {
  32795. modelValue: $setup.accountForm.password,
  32796. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.accountForm.password = $event),
  32797. placeholder: _ctx.$t("请输入登录密码"),
  32798. type: "password",
  32799. clearable: "",
  32800. border: false,
  32801. "password-icon": ""
  32802. }, null, 8, ["modelValue", "placeholder"])
  32803. ])
  32804. ])) : vue.createCommentVNode("v-if", true),
  32805. $setup.activeLoginType === 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  32806. key: 1,
  32807. class: "space-y-3 mb-4"
  32808. }, [
  32809. vue.createElementVNode("view", {
  32810. class: "rounded-xl flex items-center px-4 py-0.5",
  32811. style: { "background": "rgba(255,255,255,0.6)" }
  32812. }, [
  32813. vue.createElementVNode("image", {
  32814. src: _imports_2,
  32815. class: "w-5 h-5 mr-2",
  32816. mode: "aspectFit"
  32817. }),
  32818. vue.createVNode(_component_u_input, {
  32819. modelValue: $setup.emailForm.account,
  32820. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.emailForm.account = $event),
  32821. placeholder: _ctx.$t("请输入登录邮箱"),
  32822. type: "text",
  32823. clearable: "",
  32824. border: false
  32825. }, null, 8, ["modelValue", "placeholder"])
  32826. ]),
  32827. vue.createElementVNode("view", {
  32828. class: "rounded-xl flex items-center px-4 py-0.5",
  32829. style: { "background": "rgba(255,255,255,0.6)" }
  32830. }, [
  32831. vue.createElementVNode("image", {
  32832. src: _imports_3,
  32833. class: "w-5 h-5 mr-2",
  32834. mode: "aspectFit"
  32835. }),
  32836. vue.createVNode(_component_u_input, {
  32837. modelValue: $setup.emailForm.password,
  32838. "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $setup.emailForm.password = $event),
  32839. placeholder: _ctx.$t("请输入登录密码"),
  32840. type: "password",
  32841. clearable: "",
  32842. border: false,
  32843. "password-icon": ""
  32844. }, null, 8, ["modelValue", "placeholder"])
  32845. ])
  32846. ])) : vue.createCommentVNode("v-if", true),
  32847. vue.createElementVNode(
  32848. "view",
  32849. {
  32850. class: vue.normalizeClass(["flex items-center justify-between mb-4 text-xs", [$setup.locale !== "zh" ? "checkbox-group" : ""]])
  32851. },
  32852. [
  32853. vue.createElementVNode("view", {
  32854. class: "flex items-center",
  32855. onClick: _cache[6] || (_cache[6] = ($event) => $setup.RememberPwd = !$setup.RememberPwd)
  32856. }, [
  32857. vue.createElementVNode(
  32858. "view",
  32859. {
  32860. class: "flex items-center justify-center rounded-full transition-all",
  32861. style: vue.normalizeStyle([{ "width": "15px", "height": "15px", "border": "1px solid" }, $setup.RememberPwd ? "border-color: #ff8c00; background: rgba(255,255,255,0.9);" : "border-color: #999; background: rgba(255,255,255,0.4);"])
  32862. },
  32863. [
  32864. $setup.RememberPwd ? (vue.openBlock(), vue.createElementBlock("view", {
  32865. key: 0,
  32866. class: "rounded-full",
  32867. style: { "width": "7px", "height": "7px", "background-color": "#ff8c00" }
  32868. })) : vue.createCommentVNode("v-if", true)
  32869. ],
  32870. 4
  32871. /* STYLE */
  32872. ),
  32873. vue.createElementVNode(
  32874. "text",
  32875. { class: "text-gray-800 ml-1.5" },
  32876. vue.toDisplayString(_ctx.$t("记住密码")),
  32877. 1
  32878. /* TEXT */
  32879. )
  32880. ]),
  32881. vue.createElementVNode("view", {
  32882. class: "flex items-center",
  32883. onClick: _cache[7] || (_cache[7] = ($event) => $setup.agreed = !$setup.agreed)
  32884. }, [
  32885. vue.createElementVNode(
  32886. "view",
  32887. {
  32888. class: "flex items-center justify-center rounded-full transition-all",
  32889. style: vue.normalizeStyle([{ "width": "15px", "height": "15px", "border": "1px solid" }, $setup.agreed ? "border-color: #ff8c00; background: rgba(255,255,255,0.9);" : "border-color: #999; background: rgba(255,255,255,0.4);"])
  32890. },
  32891. [
  32892. $setup.agreed ? (vue.openBlock(), vue.createElementBlock("view", {
  32893. key: 0,
  32894. class: "rounded-full",
  32895. style: { "width": "7px", "height": "7px", "background-color": "#ff8c00" }
  32896. })) : vue.createCommentVNode("v-if", true)
  32897. ],
  32898. 4
  32899. /* STYLE */
  32900. ),
  32901. vue.createElementVNode(
  32902. "text",
  32903. { class: "text-gray-800 ml-1.5" },
  32904. vue.toDisplayString(_ctx.$t("已阅读并同意")),
  32905. 1
  32906. /* TEXT */
  32907. ),
  32908. vue.createElementVNode(
  32909. "text",
  32910. {
  32911. class: "font-medium",
  32912. style: { "color": "#ff8c00" },
  32913. onClick: vue.withModifiers($setup.onAgreementClick, ["stop"])
  32914. },
  32915. "《" + vue.toDisplayString(_ctx.$t("隐私政策")) + "》",
  32916. 1
  32917. /* TEXT */
  32918. )
  32919. ])
  32920. ],
  32921. 2
  32922. /* CLASS */
  32923. ),
  32924. vue.createElementVNode("view", { class: "mb-4" }, [
  32925. vue.createVNode(_component_u_button, {
  32926. ripple: "",
  32927. onClick: $setup.onLoginClick,
  32928. class: "rounded-xl h-10 text-base w-full font-bold",
  32929. "custom-style": { background: "linear-gradient(90deg, #ff8c00, #ff6600)", color: "#fff", border: "none", borderRadius: "10px" }
  32930. }, {
  32931. default: vue.withCtx(() => [
  32932. vue.createTextVNode(
  32933. vue.toDisplayString(_ctx.$t("登录")),
  32934. 1
  32935. /* TEXT */
  32936. )
  32937. ]),
  32938. _: 1
  32939. /* STABLE */
  32940. }, 8, ["custom-style"])
  32941. ]),
  32942. vue.createElementVNode("view", { class: "flex justify-between gap-2" }, [
  32943. vue.createElementVNode("view", {
  32944. class: "flex-1 flex flex-col items-center justify-center py-1.5 rounded-xl transition-all",
  32945. style: { "background": "rgba(255,255,255,0.2)", "border": "1px solid rgba(255,255,255,0.4)" },
  32946. onClick: _cache[8] || (_cache[8] = ($event) => $setup.router.push("/register"))
  32947. }, [
  32948. vue.createElementVNode("image", {
  32949. src: _imports_4$1,
  32950. class: "w-5 h-5 mb-1",
  32951. mode: "aspectFit"
  32952. }),
  32953. vue.createElementVNode(
  32954. "text",
  32955. { class: "text-white text-xs b-btn" },
  32956. vue.toDisplayString(_ctx.$t("注册")),
  32957. 1
  32958. /* TEXT */
  32959. )
  32960. ]),
  32961. vue.createElementVNode("view", {
  32962. class: "flex-1 flex flex-col items-center justify-center py-1.5 rounded-xl transition-all",
  32963. style: { "background": "rgba(255,255,255,0.2)", "border": "1px solid rgba(255,255,255,0.4)" },
  32964. onClick: $setup.onGuestClick
  32965. }, [
  32966. vue.createElementVNode("image", {
  32967. src: _imports_5,
  32968. class: "w-5 h-5 mb-1",
  32969. mode: "aspectFit"
  32970. }),
  32971. vue.createElementVNode(
  32972. "text",
  32973. { class: "text-white text-xs b-btn" },
  32974. vue.toDisplayString(_ctx.$t("游客登陆")),
  32975. 1
  32976. /* TEXT */
  32977. )
  32978. ]),
  32979. vue.createElementVNode("view", {
  32980. class: "flex-1 flex flex-col items-center justify-center py-1.5 rounded-xl transition-all",
  32981. style: { "background": "rgba(255,255,255,0.2)", "border": "1px solid rgba(255,255,255,0.4)" },
  32982. onClick: $setup.onLineService
  32983. }, [
  32984. vue.createElementVNode("image", {
  32985. src: _imports_6,
  32986. class: "w-5 h-5 mb-1",
  32987. mode: "aspectFit"
  32988. }),
  32989. vue.createElementVNode(
  32990. "text",
  32991. { class: "text-white text-xs b-btn" },
  32992. vue.toDisplayString(_ctx.$t("在线客服")),
  32993. 1
  32994. /* TEXT */
  32995. )
  32996. ])
  32997. ])
  32998. ]),
  32999. vue.createElementVNode("view", { class: "px-6 py-4" }, [
  33000. vue.createElementVNode("view", { class: "text-center space-y-3" }, [
  33001. vue.createElementVNode("view", { class: "flex items-center justify-center text-xs text-white/70 space-x-2" }, [
  33002. vue.createElementVNode("view", { class: "i-carbon-information h-3 w-3" }),
  33003. vue.createElementVNode(
  33004. "text",
  33005. null,
  33006. vue.toDisplayString(_ctx.$t("版本")) + " v" + vue.toDisplayString($setup.appVersion),
  33007. 1
  33008. /* TEXT */
  33009. )
  33010. ])
  33011. ])
  33012. ])
  33013. ])
  33014. ])
  33015. ]),
  33016. _: 1
  33017. /* STABLE */
  33018. });
  33019. }
  33020. const PagesLoginIndex = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$N], ["__scopeId", "data-v-45258083"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/login/index.vue"]]);
  33021. const _imports_4 = "/static/images/login/user.png";
  33022. const _sfc_main$N = {
  33023. __name: "index",
  33024. setup(__props, { expose: __expose }) {
  33025. __expose();
  33026. const router2 = useRouter();
  33027. const route2 = useRoute();
  33028. const richView = useRichView();
  33029. const userStore = useUserStore();
  33030. const agreed = vue.ref(false);
  33031. const registerLoading = vue.ref(false);
  33032. const activeRegisterType = vue.ref(1);
  33033. const emailForm = vue.reactive({ account: "", password: "", confirmPassword: "", user_code: "" });
  33034. const accountForm = vue.reactive({ account: "", password: "", confirmPassword: "", user_code: "" });
  33035. if (route2.query.invitationCode) {
  33036. uni.setStorageSync("vip_invitationCode", route2.query.invitationCode);
  33037. emailForm.user_code = route2.query.invitationCode;
  33038. accountForm.user_code = route2.query.invitationCode;
  33039. } else {
  33040. let vip_invitationCode = uni.getStorageSync("vip_invitationCode");
  33041. if (vip_invitationCode) {
  33042. emailForm.user_code = vip_invitationCode;
  33043. accountForm.user_code = vip_invitationCode;
  33044. }
  33045. }
  33046. const showCaptchaDialog = vue.ref(false);
  33047. const captchaStatus = vue.ref("idle");
  33048. const sliderMoveX = vue.ref(0);
  33049. const touchStartX = vue.ref(0);
  33050. const captchaData = vue.reactive({ bg: "", slider: "", y: 0, captcha: "" });
  33051. const imgScale = vue.ref(1);
  33052. const bgDisplayHeight = vue.ref(160);
  33053. const sliderBaseWidth = vue.ref(48);
  33054. const sliderBaseHeight = vue.ref(48);
  33055. const changeRegisterType = (index) => {
  33056. activeRegisterType.value = index;
  33057. };
  33058. const isEmail = (val) => /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(val);
  33059. function onAgreementClick() {
  33060. richView.open({
  33061. title: uni.$t("隐私政策"),
  33062. content: `
  33063. <div style="padding: 15px 20px; line-height: 1.8; color: #333; font-size: 14px; text-align: justify;">
  33064. <h3 style="text-align: center; font-size: 16px; font-weight: bold; margin-bottom: 15px; color: #111;">隐私政策声明</h3>
  33065. <p style="margin-bottom: 12px;">欢迎您使用我们的服务!我们非常重视您的隐私保护和个人信息安全。本《隐私政策》将帮助您了解我们如何收集、使用、存储和保护您的个人信息。</p>
  33066. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">1. 我们如何收集您的信息</h4>
  33067. <p style="margin-bottom: 8px;">当您注册账号或使用我们的产品时,我们可能会收集您的以下信息:</p>
  33068. <ul style="padding-left: 20px; margin-bottom: 12px; color: #444;">
  33069. <li style="list-style-type: disc; margin-bottom: 4px;"><strong>注册信息:</strong>如您的邮箱地址、账号名称、密码等。</li>
  33070. <li style="list-style-type: disc; margin-bottom: 4px;"><strong>设备信息:</strong>如设备型号、操作系统版本、唯一设备标识符等,用于保障账号安全及风险控制。</li>
  33071. <li style="list-style-type: disc;"><strong>日志信息:</strong>如您的IP地址、访问时间、操作记录等。</li>
  33072. </ul>
  33073. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">2. 我们如何使用您的信息</h4>
  33074. <p style="margin-bottom: 8px;">我们收集的信息将主要用于以下用途:</p>
  33075. <ul style="padding-left: 20px; margin-bottom: 12px; color: #444;">
  33076. <li style="list-style-type: disc; margin-bottom: 4px;">向您提供、维护和改进我们的产品及服务;</li>
  33077. <li style="list-style-type: disc; margin-bottom: 4px;">进行身份验证、安全防范、诈骗监测,确保系统及您的资金/数据安全;</li>
  33078. <li style="list-style-type: disc;">为您提供专属的客户服务及技术支持。</li>
  33079. </ul>
  33080. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">3. 信息的共享与保护</h4>
  33081. <p style="margin-bottom: 12px;">我们承诺对您的信息承担保密义务。除法律法规要求或为实现核心功能所必须的第三方合作外,我们不会擅自向任何无关第三方出售、共享或披露您的个人信息。我们采用符合业界标准的加密技术和安全防护措施,防止您的信息遭到未经授权的访问、泄露或损坏。</p>
  33082. <h4 style="font-size: 15px; font-weight: bold; margin-top: 15px; margin-bottom: 8px; color: #222;">4. 您的权利</h4>
  33083. <p style="margin-bottom: 12px;">您有权随时访问、更正、删除您的个人信息,或注销您的账号。如您在此过程中遇到任何问题,请随时联系我们的在线客服。</p>
  33084. <div style="margin-top: 25px; padding-top: 15px; border-top: 1px solid #eee; text-align: center; color: #888; font-size: 12px;">
  33085. 请仔细阅读以上内容,勾选“我已阅读并同意”即代表您完全认可本政策。
  33086. </div>
  33087. </div>
  33088. `
  33089. });
  33090. }
  33091. async function validateEmailForm() {
  33092. if (!emailForm.account) {
  33093. $u.toast(uni.$t("请输入注册邮箱"));
  33094. return false;
  33095. }
  33096. if (!isEmail(emailForm.account)) {
  33097. $u.toast(uni.$t("请输入正确的邮箱格式"));
  33098. return false;
  33099. }
  33100. if (!emailForm.password) {
  33101. $u.toast(uni.$t("请设置登录密码"));
  33102. return false;
  33103. }
  33104. if (emailForm.password.length < 6 || emailForm.password.length > 20) {
  33105. $u.toast(uni.$t("密码长度需在6-20个字符之间"));
  33106. return false;
  33107. }
  33108. if (emailForm.password !== emailForm.confirmPassword) {
  33109. $u.toast(uni.$t("两次输入的密码不一致"));
  33110. return false;
  33111. }
  33112. if (!emailForm.user_code) {
  33113. $u.toast(uni.$t("请输入邀请码"));
  33114. return false;
  33115. }
  33116. return true;
  33117. }
  33118. async function validateAccountForm() {
  33119. if (!accountForm.account) {
  33120. $u.toast(uni.$t("请输入账号"));
  33121. return false;
  33122. }
  33123. if (!accountForm.password) {
  33124. $u.toast(uni.$t("请设置登录密码"));
  33125. return false;
  33126. }
  33127. if (accountForm.password.length < 6 || accountForm.password.length > 20) {
  33128. $u.toast(uni.$t("密码长度需在6-20个字符之间"));
  33129. return false;
  33130. }
  33131. if (accountForm.password !== accountForm.confirmPassword) {
  33132. $u.toast(uni.$t("两次输入的密码不一致"));
  33133. return false;
  33134. }
  33135. if (!accountForm.user_code) {
  33136. $u.toast(uni.$t("请输入邀请码"));
  33137. return false;
  33138. }
  33139. return true;
  33140. }
  33141. function onGuestClick() {
  33142. if (!agreed.value)
  33143. return $u.toast(uni.$t("请先同意服务协议"));
  33144. uni.switchTab({ url: "/pages/Tabbar/Home/index" });
  33145. }
  33146. function onLineService() {
  33147. if (!uni.getStorageSync("youke_token")) {
  33148. userGuestRegister().then((res) => {
  33149. uni.setStorageSync("youke_token", res.data.token);
  33150. router2.push({
  33151. name: "customerService",
  33152. query: { GuestMode: 1 }
  33153. });
  33154. });
  33155. } else {
  33156. router2.push({
  33157. name: "customerService",
  33158. query: { GuestMode: 1 }
  33159. });
  33160. }
  33161. }
  33162. const onBgLoad = (e) => {
  33163. if (e.detail.width) {
  33164. imgScale.value = 320 / e.detail.width;
  33165. bgDisplayHeight.value = e.detail.height * imgScale.value;
  33166. }
  33167. };
  33168. const onSliderLoad = (e) => {
  33169. if (e.detail.width) {
  33170. sliderBaseWidth.value = e.detail.width;
  33171. sliderBaseHeight.value = e.detail.height;
  33172. }
  33173. };
  33174. const initCaptcha = async () => {
  33175. captchaStatus.value = "loading";
  33176. sliderMoveX.value = 0;
  33177. imgScale.value = 1;
  33178. try {
  33179. const res = await getCaptcha();
  33180. captchaData.bg = res.data.bg;
  33181. captchaData.slider = res.data.slider;
  33182. captchaData.y = res.data.y;
  33183. captchaData.captcha = res.data.captcha;
  33184. captchaStatus.value = "idle";
  33185. } catch (e) {
  33186. formatAppLog("error", "at pages/register/index.vue:327", e);
  33187. $u.toast(uni.$t("获取验证码失败"));
  33188. captchaStatus.value = "error";
  33189. }
  33190. };
  33191. const closeCaptcha = () => {
  33192. showCaptchaDialog.value = false;
  33193. };
  33194. const onTouchStart = (e) => {
  33195. if (captchaStatus.value === "success")
  33196. return;
  33197. touchStartX.value = e.touches[0].clientX;
  33198. };
  33199. const onTouchMove = (e) => {
  33200. if (captchaStatus.value === "success")
  33201. return;
  33202. const moveX = e.touches[0].clientX - touchStartX.value;
  33203. if (moveX < 0) {
  33204. sliderMoveX.value = 0;
  33205. } else if (moveX > 272) {
  33206. sliderMoveX.value = 272;
  33207. } else {
  33208. sliderMoveX.value = moveX;
  33209. }
  33210. };
  33211. const onTouchEnd = async () => {
  33212. if (captchaStatus.value === "success")
  33213. return;
  33214. if (sliderMoveX.value === 0)
  33215. return;
  33216. doRegister();
  33217. };
  33218. async function onRegisterClick() {
  33219. if (!agreed.value)
  33220. return $u.toast(uni.$t("请先同意服务协议"));
  33221. if (activeRegisterType.value === 0) {
  33222. const isValid = await validateEmailForm();
  33223. if (!isValid)
  33224. return;
  33225. } else {
  33226. const isValid = await validateAccountForm();
  33227. if (!isValid)
  33228. return;
  33229. }
  33230. showCaptchaDialog.value = true;
  33231. initCaptcha();
  33232. }
  33233. async function doRegister() {
  33234. registerLoading.value = true;
  33235. captchaStatus.value = "loading";
  33236. try {
  33237. const submitRealX = Math.round(sliderMoveX.value / (imgScale.value || 1));
  33238. let params = {};
  33239. if (activeRegisterType.value === 0) {
  33240. params = {
  33241. account: emailForm.account,
  33242. password: emailForm.password,
  33243. user_code: emailForm.user_code,
  33244. register_type: "email",
  33245. type: "email",
  33246. moveX: submitRealX,
  33247. captcha: captchaData.captcha
  33248. };
  33249. } else {
  33250. params = {
  33251. account: accountForm.account,
  33252. password: accountForm.password,
  33253. user_code: accountForm.user_code,
  33254. register_type: "account",
  33255. type: "account",
  33256. moveX: submitRealX,
  33257. captcha: captchaData.captcha
  33258. };
  33259. }
  33260. const res = await postUserRegister(params);
  33261. if (res.data.check_captcha === 0) {
  33262. uni.showToast({
  33263. title: res.msg,
  33264. icon: "none"
  33265. });
  33266. captchaStatus.value = "error";
  33267. setTimeout(() => {
  33268. initCaptcha();
  33269. }, 1e3);
  33270. registerLoading.value = false;
  33271. return;
  33272. }
  33273. captchaStatus.value = "success";
  33274. uni.setStorageSync("token", res.data.token);
  33275. uni.showToast({
  33276. title: res.msg,
  33277. icon: "none"
  33278. });
  33279. setTimeout(() => {
  33280. showCaptchaDialog.value = false;
  33281. userStore.getUserData();
  33282. router2.pushTab({ name: "index" });
  33283. }, 1500);
  33284. } catch (e) {
  33285. showCaptchaDialog.value = false;
  33286. } finally {
  33287. registerLoading.value = false;
  33288. }
  33289. }
  33290. const __returned__ = { router: router2, route: route2, richView, userStore, agreed, registerLoading, activeRegisterType, emailForm, accountForm, showCaptchaDialog, captchaStatus, sliderMoveX, touchStartX, captchaData, imgScale, bgDisplayHeight, sliderBaseWidth, sliderBaseHeight, changeRegisterType, isEmail, onAgreementClick, validateEmailForm, validateAccountForm, onGuestClick, onLineService, onBgLoad, onSliderLoad, initCaptcha, closeCaptcha, onTouchStart, onTouchMove, onTouchEnd, onRegisterClick, doRegister, ref: vue.ref, reactive: vue.reactive, get $u() {
  33291. return $u;
  33292. }, get appName() {
  33293. return appName;
  33294. }, get appVersion() {
  33295. return appVersion;
  33296. }, selectLang, get postUserRegister() {
  33297. return postUserRegister;
  33298. }, get getCaptcha() {
  33299. return getCaptcha;
  33300. }, get userGuestRegister() {
  33301. return userGuestRegister;
  33302. } };
  33303. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  33304. return __returned__;
  33305. }
  33306. };
  33307. function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
  33308. const _component_u_input = __unplugin_components_3$2;
  33309. const _component_u_button = __unplugin_components_2$1;
  33310. const _component_u_loading = __unplugin_components_3$3;
  33311. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  33312. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  33313. default: vue.withCtx(() => [
  33314. vue.createElementVNode("view", {
  33315. class: "relative overflow-hidden login-page",
  33316. style: { "background-image": "url('/static/images/login/bg-login-app.png')" }
  33317. }, [
  33318. vue.createElementVNode("view", {
  33319. class: "pos-fixed",
  33320. style: { "z-index": "999", "right": "20px", "top": "calc(20px + env(safe-area-inset-top))" }
  33321. }, [
  33322. vue.createVNode($setup["selectLang"])
  33323. ]),
  33324. vue.createElementVNode("view", {
  33325. class: "relative z-10 flex flex-col justify-center",
  33326. style: { "height": "100dvh", "padding-top": "env(safe-area-inset-top)", "padding-bottom": "env(safe-area-inset-bottom)", "box-sizing": "border-box" }
  33327. }, [
  33328. vue.createElementVNode("view", { class: "flex justify-center mb-4" }, [
  33329. vue.createElementVNode("image", {
  33330. src: _imports_0$3,
  33331. mode: "heightFix",
  33332. class: "h-6"
  33333. })
  33334. ]),
  33335. vue.createElementVNode("view", {
  33336. class: "mx-5 rounded-3xl p-4 shadow-lg relative",
  33337. style: { "background": "rgba(120, 120, 120, 0.1)", "backdrop-filter": "blur(5px)", "border": "1px solid rgba(255,255,255,0.6)" }
  33338. }, [
  33339. vue.createElementVNode("view", { class: "text-center mb-4 px-4" }, [
  33340. vue.createElementVNode("image", {
  33341. src: _imports_1,
  33342. mode: "widthFix",
  33343. style: { "width": "150px" }
  33344. }),
  33345. vue.createElementVNode(
  33346. "text",
  33347. {
  33348. class: "block mt-2",
  33349. style: { "font-weight": "800", "font-size": "20px" }
  33350. },
  33351. vue.toDisplayString(_ctx.$t("迈凯伦")),
  33352. 1
  33353. /* TEXT */
  33354. ),
  33355. vue.createElementVNode(
  33356. "text",
  33357. { class: "text-xs text-gray-600 block mt-1" },
  33358. vue.toDisplayString(_ctx.$t("官方合作伙伴")),
  33359. 1
  33360. /* TEXT */
  33361. )
  33362. ]),
  33363. vue.createElementVNode("view", { class: "flex mb-4" }, [
  33364. vue.createElementVNode(
  33365. "view",
  33366. {
  33367. class: "flex-1 text-center py-1.5 text-sm font-bold transition-all",
  33368. style: vue.normalizeStyle($setup.activeRegisterType === 1 ? "background: rgba(255,255,255,0.8); color: #ff7700; border: 1px solid #ff7700; border-radius: 8px;" : "background: rgba(255,255,255,0.4); color: #666; border: 1px solid transparent; border-radius: 8px;"),
  33369. onClick: _cache[0] || (_cache[0] = ($event) => $setup.changeRegisterType(1))
  33370. },
  33371. vue.toDisplayString(_ctx.$t("账号注册")),
  33372. 5
  33373. /* TEXT, STYLE */
  33374. ),
  33375. vue.createElementVNode("view", { style: { "width": "10px" } }),
  33376. vue.createElementVNode(
  33377. "view",
  33378. {
  33379. class: "flex-1 text-center py-1.5 text-sm font-bold transition-all",
  33380. style: vue.normalizeStyle($setup.activeRegisterType === 0 ? "background: rgba(255,255,255,0.8); color: #ff7700; border: 1px solid #ff7700; border-radius: 8px;" : "background: rgba(255,255,255,0.4); color: #666; border: 1px solid transparent; border-radius: 8px;"),
  33381. onClick: _cache[1] || (_cache[1] = ($event) => $setup.changeRegisterType(0))
  33382. },
  33383. vue.toDisplayString(_ctx.$t("邮箱注册")),
  33384. 5
  33385. /* TEXT, STYLE */
  33386. )
  33387. ]),
  33388. $setup.activeRegisterType === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  33389. key: 0,
  33390. class: "space-y-3 mb-4"
  33391. }, [
  33392. vue.createElementVNode("view", {
  33393. class: "rounded-xl flex items-center px-3 py-0.5",
  33394. style: { "background": "rgba(255,255,255,0.6)" }
  33395. }, [
  33396. vue.createElementVNode("image", {
  33397. src: _imports_2,
  33398. class: "w-5 h-5 mr-2",
  33399. mode: "aspectFit"
  33400. }),
  33401. vue.createVNode(_component_u_input, {
  33402. modelValue: $setup.emailForm.account,
  33403. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.emailForm.account = $event),
  33404. placeholder: _ctx.$t("请输入注册邮箱"),
  33405. type: "text",
  33406. clearable: "",
  33407. border: false
  33408. }, null, 8, ["modelValue", "placeholder"])
  33409. ]),
  33410. vue.createElementVNode("view", {
  33411. class: "rounded-xl flex items-center px-3 py-0.5",
  33412. style: { "background": "rgba(255,255,255,0.6)" }
  33413. }, [
  33414. vue.createElementVNode("image", {
  33415. src: _imports_3,
  33416. class: "w-5 h-5 mr-2",
  33417. mode: "aspectFit"
  33418. }),
  33419. vue.createVNode(_component_u_input, {
  33420. modelValue: $setup.emailForm.password,
  33421. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.emailForm.password = $event),
  33422. placeholder: _ctx.$t("请设置登录密码"),
  33423. type: "password",
  33424. clearable: "",
  33425. border: false,
  33426. "password-icon": ""
  33427. }, null, 8, ["modelValue", "placeholder"])
  33428. ]),
  33429. vue.createElementVNode("view", {
  33430. class: "rounded-xl flex items-center px-3 py-0.5",
  33431. style: { "background": "rgba(255,255,255,0.6)" }
  33432. }, [
  33433. vue.createElementVNode("image", {
  33434. src: _imports_3,
  33435. class: "w-5 h-5 mr-2",
  33436. mode: "aspectFit"
  33437. }),
  33438. vue.createVNode(_component_u_input, {
  33439. modelValue: $setup.emailForm.confirmPassword,
  33440. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.emailForm.confirmPassword = $event),
  33441. placeholder: _ctx.$t("请确认登录密码"),
  33442. type: "password",
  33443. clearable: "",
  33444. border: false,
  33445. "password-icon": ""
  33446. }, null, 8, ["modelValue", "placeholder"])
  33447. ]),
  33448. vue.createElementVNode("view", {
  33449. class: "rounded-xl flex items-center px-3 py-0.5",
  33450. style: { "background": "rgba(255,255,255,0.6)" }
  33451. }, [
  33452. vue.createElementVNode("image", {
  33453. src: _imports_2,
  33454. class: "w-5 h-5 mr-2",
  33455. mode: "aspectFit",
  33456. style: { "filter": "opacity(0.7)" }
  33457. }),
  33458. vue.createVNode(_component_u_input, {
  33459. modelValue: $setup.emailForm.user_code,
  33460. "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $setup.emailForm.user_code = $event),
  33461. placeholder: _ctx.$t("请输入邀请码"),
  33462. type: "text",
  33463. clearable: "",
  33464. border: false
  33465. }, null, 8, ["modelValue", "placeholder"])
  33466. ])
  33467. ])) : vue.createCommentVNode("v-if", true),
  33468. $setup.activeRegisterType === 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  33469. key: 1,
  33470. class: "space-y-3 mb-4"
  33471. }, [
  33472. vue.createElementVNode("view", {
  33473. class: "rounded-xl flex items-center px-3 py-0.5",
  33474. style: { "background": "rgba(255,255,255,0.6)" }
  33475. }, [
  33476. vue.createElementVNode("image", {
  33477. src: _imports_2,
  33478. class: "w-5 h-5 mr-2",
  33479. mode: "aspectFit"
  33480. }),
  33481. vue.createVNode(_component_u_input, {
  33482. modelValue: $setup.accountForm.account,
  33483. "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.accountForm.account = $event),
  33484. placeholder: _ctx.$t("请输入账号"),
  33485. type: "text",
  33486. clearable: "",
  33487. border: false
  33488. }, null, 8, ["modelValue", "placeholder"])
  33489. ]),
  33490. vue.createElementVNode("view", {
  33491. class: "rounded-xl flex items-center px-3 py-0.5",
  33492. style: { "background": "rgba(255,255,255,0.6)" }
  33493. }, [
  33494. vue.createElementVNode("image", {
  33495. src: _imports_3,
  33496. class: "w-5 h-5 mr-2",
  33497. mode: "aspectFit"
  33498. }),
  33499. vue.createVNode(_component_u_input, {
  33500. modelValue: $setup.accountForm.password,
  33501. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.accountForm.password = $event),
  33502. placeholder: _ctx.$t("请设置登录密码"),
  33503. type: "password",
  33504. clearable: "",
  33505. border: false,
  33506. "password-icon": ""
  33507. }, null, 8, ["modelValue", "placeholder"])
  33508. ]),
  33509. vue.createElementVNode("view", {
  33510. class: "rounded-xl flex items-center px-3 py-0.5",
  33511. style: { "background": "rgba(255,255,255,0.6)" }
  33512. }, [
  33513. vue.createElementVNode("image", {
  33514. src: _imports_3,
  33515. class: "w-5 h-5 mr-2",
  33516. mode: "aspectFit"
  33517. }),
  33518. vue.createVNode(_component_u_input, {
  33519. modelValue: $setup.accountForm.confirmPassword,
  33520. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.accountForm.confirmPassword = $event),
  33521. placeholder: _ctx.$t("请确认登录密码"),
  33522. type: "password",
  33523. clearable: "",
  33524. border: false,
  33525. "password-icon": ""
  33526. }, null, 8, ["modelValue", "placeholder"])
  33527. ]),
  33528. vue.createElementVNode("view", {
  33529. class: "rounded-xl flex items-center px-3 py-0.5",
  33530. style: { "background": "rgba(255,255,255,0.6)" }
  33531. }, [
  33532. vue.createElementVNode("image", {
  33533. src: _imports_2,
  33534. class: "w-5 h-5 mr-2",
  33535. mode: "aspectFit",
  33536. style: { "filter": "opacity(0.7)" }
  33537. }),
  33538. vue.createVNode(_component_u_input, {
  33539. modelValue: $setup.accountForm.user_code,
  33540. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.accountForm.user_code = $event),
  33541. placeholder: _ctx.$t("请输入邀请码"),
  33542. type: "text",
  33543. clearable: "",
  33544. border: false
  33545. }, null, 8, ["modelValue", "placeholder"])
  33546. ])
  33547. ])) : vue.createCommentVNode("v-if", true),
  33548. vue.createElementVNode("view", { class: "flex items-center justify-center mb-4 text-xs" }, [
  33549. vue.createElementVNode("view", {
  33550. class: "flex items-center",
  33551. onClick: _cache[10] || (_cache[10] = ($event) => $setup.agreed = !$setup.agreed)
  33552. }, [
  33553. vue.createElementVNode(
  33554. "view",
  33555. {
  33556. class: "flex items-center justify-center rounded-full transition-all",
  33557. style: vue.normalizeStyle([{ "width": "15px", "height": "15px", "border": "1px solid" }, $setup.agreed ? "border-color: #ff8c00; background: rgba(255,255,255,0.9);" : "border-color: #999; background: rgba(255,255,255,0.4);"])
  33558. },
  33559. [
  33560. $setup.agreed ? (vue.openBlock(), vue.createElementBlock("view", {
  33561. key: 0,
  33562. class: "rounded-full",
  33563. style: { "width": "7px", "height": "7px", "background-color": "#ff8c00" }
  33564. })) : vue.createCommentVNode("v-if", true)
  33565. ],
  33566. 4
  33567. /* STYLE */
  33568. ),
  33569. vue.createElementVNode(
  33570. "text",
  33571. { class: "text-gray-800 ml-1.5" },
  33572. vue.toDisplayString(_ctx.$t("我已阅读并同意")),
  33573. 1
  33574. /* TEXT */
  33575. )
  33576. ]),
  33577. vue.createElementVNode(
  33578. "text",
  33579. {
  33580. class: "font-medium",
  33581. style: { "color": "#ff8c00" },
  33582. onClick: vue.withModifiers($setup.onAgreementClick, ["stop"])
  33583. },
  33584. "《" + vue.toDisplayString(_ctx.$t("隐私政策")) + "》",
  33585. 1
  33586. /* TEXT */
  33587. )
  33588. ]),
  33589. vue.createElementVNode("view", { class: "mb-4" }, [
  33590. vue.createVNode(_component_u_button, {
  33591. ripple: "",
  33592. loading: $setup.registerLoading,
  33593. onClick: $setup.onRegisterClick,
  33594. disabled: $setup.registerLoading,
  33595. class: "rounded-xl h-10 text-base w-full font-bold",
  33596. "custom-style": { background: "linear-gradient(90deg, #ff8c00, #ff6600)", color: "#fff", border: "none", borderRadius: "10px" }
  33597. }, {
  33598. default: vue.withCtx(() => [
  33599. vue.createTextVNode(
  33600. vue.toDisplayString(_ctx.$t("立即注册")),
  33601. 1
  33602. /* TEXT */
  33603. )
  33604. ]),
  33605. _: 1
  33606. /* STABLE */
  33607. }, 8, ["loading", "disabled", "custom-style"])
  33608. ]),
  33609. vue.createElementVNode("view", { class: "flex justify-between gap-2" }, [
  33610. vue.createElementVNode("view", {
  33611. class: "flex-1 flex flex-col items-center justify-center py-1.5 rounded-xl transition-all",
  33612. style: { "background": "rgba(255,255,255,0.2)", "border": "1px solid rgba(255,255,255,0.4)" },
  33613. onClick: _cache[11] || (_cache[11] = ($event) => $setup.router.push({ name: "login" }))
  33614. }, [
  33615. vue.createElementVNode("image", {
  33616. src: _imports_4,
  33617. class: "w-5 h-5 mb-1",
  33618. mode: "aspectFit"
  33619. }),
  33620. vue.createElementVNode(
  33621. "text",
  33622. { class: "text-white text-xs b-btn" },
  33623. vue.toDisplayString(_ctx.$t("去登录")),
  33624. 1
  33625. /* TEXT */
  33626. )
  33627. ]),
  33628. vue.createElementVNode("view", {
  33629. class: "flex-1 flex flex-col items-center justify-center py-1.5 rounded-xl transition-all",
  33630. style: { "background": "rgba(255,255,255,0.2)", "border": "1px solid rgba(255,255,255,0.4)" },
  33631. onClick: $setup.onGuestClick
  33632. }, [
  33633. vue.createElementVNode("image", {
  33634. src: _imports_5,
  33635. class: "w-5 h-5 mb-1",
  33636. mode: "aspectFit"
  33637. }),
  33638. vue.createElementVNode(
  33639. "text",
  33640. { class: "text-white text-xs b-btn" },
  33641. vue.toDisplayString(_ctx.$t("游客登陆")),
  33642. 1
  33643. /* TEXT */
  33644. )
  33645. ]),
  33646. vue.createElementVNode("view", {
  33647. class: "flex-1 flex flex-col items-center justify-center py-1.5 rounded-xl transition-all",
  33648. style: { "background": "rgba(255,255,255,0.2)", "border": "1px solid rgba(255,255,255,0.4)" },
  33649. onClick: $setup.onLineService
  33650. }, [
  33651. vue.createElementVNode("image", {
  33652. src: _imports_6,
  33653. class: "w-5 h-5 mb-1",
  33654. mode: "aspectFit"
  33655. }),
  33656. vue.createElementVNode(
  33657. "text",
  33658. { class: "text-white text-xs b-btn" },
  33659. vue.toDisplayString(_ctx.$t("在线客服")),
  33660. 1
  33661. /* TEXT */
  33662. )
  33663. ])
  33664. ])
  33665. ]),
  33666. vue.createElementVNode("view", { class: "px-6 py-4" }, [
  33667. vue.createElementVNode("view", { class: "text-center space-y-3" }, [
  33668. vue.createElementVNode("view", { class: "flex items-center justify-center text-xs text-white/70 space-x-2" }, [
  33669. vue.createElementVNode("view", { class: "i-carbon-information h-3 w-3" }),
  33670. vue.createElementVNode(
  33671. "text",
  33672. null,
  33673. vue.toDisplayString(_ctx.$t("版本")) + " v" + vue.toDisplayString($setup.appVersion),
  33674. 1
  33675. /* TEXT */
  33676. )
  33677. ])
  33678. ])
  33679. ])
  33680. ]),
  33681. $setup.showCaptchaDialog ? (vue.openBlock(), vue.createElementBlock(
  33682. "view",
  33683. {
  33684. key: 0,
  33685. class: "fixed inset-0 flex justify-center items-center",
  33686. style: { "z-index": "9999", "background": "rgba(0,0,0,0.6)" },
  33687. onTouchmove: _cache[12] || (_cache[12] = vue.withModifiers(() => {
  33688. }, ["stop", "prevent"]))
  33689. },
  33690. [
  33691. vue.createElementVNode("view", {
  33692. class: "bg-white rounded-2xl p-4 shadow-2xl relative",
  33693. style: { "width": "352px" }
  33694. }, [
  33695. vue.createElementVNode("view", { class: "flex justify-between items-center mb-3 px-1" }, [
  33696. vue.createElementVNode(
  33697. "text",
  33698. { class: "text-base font-bold text-gray-800" },
  33699. vue.toDisplayString(_ctx.$t("安全验证")),
  33700. 1
  33701. /* TEXT */
  33702. ),
  33703. vue.createElementVNode("view", {
  33704. class: "i-carbon-close text-2xl text-gray-400",
  33705. onClick: $setup.closeCaptcha
  33706. })
  33707. ]),
  33708. vue.createElementVNode(
  33709. "view",
  33710. {
  33711. class: "relative bg-gray-100 rounded-lg overflow-hidden transition-all",
  33712. style: vue.normalizeStyle({ width: "320px", height: $setup.bgDisplayHeight + "px" })
  33713. },
  33714. [
  33715. $setup.captchaStatus === "loading" ? (vue.openBlock(), vue.createElementBlock("view", {
  33716. key: 0,
  33717. class: "absolute inset-0 flex justify-center items-center z-20 bg-white/80"
  33718. }, [
  33719. vue.createVNode(_component_u_loading, {
  33720. mode: "circle",
  33721. size: "24"
  33722. })
  33723. ])) : vue.createCommentVNode("v-if", true),
  33724. $setup.captchaData.bg ? (vue.openBlock(), vue.createElementBlock("image", {
  33725. key: 1,
  33726. src: $setup.captchaData.bg,
  33727. class: "w-full h-full block",
  33728. mode: "scaleToFill",
  33729. onLoad: $setup.onBgLoad
  33730. }, null, 40, ["src"])) : vue.createCommentVNode("v-if", true),
  33731. $setup.captchaData.slider ? (vue.openBlock(), vue.createElementBlock("image", {
  33732. key: 2,
  33733. src: $setup.captchaData.slider,
  33734. class: "absolute",
  33735. style: vue.normalizeStyle({
  33736. width: $setup.sliderBaseWidth * $setup.imgScale + "px",
  33737. height: $setup.sliderBaseHeight * $setup.imgScale + "px",
  33738. top: $setup.captchaData.y * $setup.imgScale + "px",
  33739. left: $setup.sliderMoveX + "px",
  33740. zIndex: 10
  33741. }),
  33742. mode: "scaleToFill",
  33743. onLoad: $setup.onSliderLoad
  33744. }, null, 44, ["src"])) : vue.createCommentVNode("v-if", true)
  33745. ],
  33746. 4
  33747. /* STYLE */
  33748. ),
  33749. vue.createElementVNode("view", {
  33750. class: "relative h-11 mt-5 bg-gray-100 rounded-full flex items-center shadow-inner overflow-hidden border border-gray-200",
  33751. style: { "width": "320px" }
  33752. }, [
  33753. vue.createElementVNode(
  33754. "text",
  33755. { class: "absolute w-full text-center text-sm text-gray-400 select-none" },
  33756. vue.toDisplayString(_ctx.$t("向右拖动滑块完成拼图")),
  33757. 1
  33758. /* TEXT */
  33759. ),
  33760. vue.createElementVNode(
  33761. "view",
  33762. {
  33763. class: "absolute left-0 top-0 h-full rounded-full pointer-events-none",
  33764. style: vue.normalizeStyle([{ "background": "linear-gradient(90deg, rgba(255, 140, 0, 0.1), rgba(255, 140, 0, 0.3))", "border-right": "2px solid rgba(255, 140, 0, 0.6)" }, { width: $setup.sliderMoveX + 24 + "px" }])
  33765. },
  33766. null,
  33767. 4
  33768. /* STYLE */
  33769. ),
  33770. vue.createElementVNode(
  33771. "view",
  33772. {
  33773. class: "absolute h-11 w-12 bg-white rounded-full shadow flex justify-center items-center transition-shadow border-2 border-orange-200",
  33774. style: vue.normalizeStyle([{ "box-shadow": "0 0 12px rgba(0,0,0,0.12)" }, { left: $setup.sliderMoveX + "px" }]),
  33775. onTouchstart: $setup.onTouchStart,
  33776. onTouchmove: vue.withModifiers($setup.onTouchMove, ["stop", "prevent"]),
  33777. onTouchend: $setup.onTouchEnd
  33778. },
  33779. [
  33780. $setup.captchaStatus === "success" ? (vue.openBlock(), vue.createElementBlock("view", {
  33781. key: 0,
  33782. class: "i-carbon-checkmark text-green-500 text-2xl font-bold"
  33783. })) : $setup.captchaStatus === "error" ? (vue.openBlock(), vue.createElementBlock("view", {
  33784. key: 1,
  33785. class: "i-carbon-close text-red-500 text-2xl font-bold"
  33786. })) : (vue.openBlock(), vue.createElementBlock("view", {
  33787. key: 2,
  33788. class: "text-orange-500 text-2xl font-bold",
  33789. style: { "transform": "scaleX(1.3)" }
  33790. }, "→"))
  33791. ],
  33792. 36
  33793. /* STYLE, NEED_HYDRATION */
  33794. )
  33795. ])
  33796. ])
  33797. ],
  33798. 32
  33799. /* NEED_HYDRATION */
  33800. )) : vue.createCommentVNode("v-if", true)
  33801. ])
  33802. ]),
  33803. _: 1
  33804. /* STABLE */
  33805. });
  33806. }
  33807. const PagesRegisterIndex = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$M], ["__scopeId", "data-v-c5d9c666"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/register/index.vue"]]);
  33808. const _sfc_main$M = {
  33809. __name: "index",
  33810. setup(__props, { expose: __expose }) {
  33811. __expose();
  33812. const router2 = useRouter();
  33813. const userStore = useUserStore();
  33814. const registerLoading = vue.ref(false);
  33815. const accountForm = vue.reactive({ account: "", password: "", confirmPassword: "", user_code: "" });
  33816. function onBack() {
  33817. uni.navigateBack();
  33818. }
  33819. async function validateAccountForm() {
  33820. if (!accountForm.account) {
  33821. $u.toast(uni.$t("请输入账号"));
  33822. return false;
  33823. }
  33824. if (!accountForm.password) {
  33825. $u.toast(uni.$t("请设置登录密码"));
  33826. return false;
  33827. }
  33828. if (accountForm.password.length < 6 || accountForm.password.length > 20) {
  33829. $u.toast(uni.$t("密码长度需在6-20个字符之间"));
  33830. return false;
  33831. }
  33832. if (accountForm.password !== accountForm.confirmPassword) {
  33833. $u.toast(uni.$t("两次输入的密码不一致"));
  33834. return false;
  33835. }
  33836. if (!accountForm.user_code) {
  33837. $u.toast(uni.$t("请输入邀请码"));
  33838. return false;
  33839. }
  33840. return true;
  33841. }
  33842. async function onRegisterClick() {
  33843. const isValid = await validateAccountForm();
  33844. if (!isValid)
  33845. return;
  33846. doRegister();
  33847. }
  33848. async function doRegister() {
  33849. registerLoading.value = true;
  33850. try {
  33851. const params = {
  33852. account: accountForm.account,
  33853. password: accountForm.password,
  33854. user_code: accountForm.user_code
  33855. };
  33856. const res = await setAccount(params);
  33857. if (res.data && res.data.token) {
  33858. uni.setStorageSync("token", res.data.token);
  33859. }
  33860. uni.showToast({
  33861. title: res.msg || uni.$t("提交成功"),
  33862. icon: "none"
  33863. });
  33864. setTimeout(() => {
  33865. userStore.getUserData();
  33866. router2.pushTab({ name: "index" });
  33867. }, 1500);
  33868. } catch (e) {
  33869. formatAppLog("error", "at pages/setAccount/index.vue:140", e);
  33870. } finally {
  33871. registerLoading.value = false;
  33872. }
  33873. }
  33874. const __returned__ = { router: router2, userStore, registerLoading, accountForm, onBack, validateAccountForm, onRegisterClick, doRegister, ref: vue.ref, reactive: vue.reactive, get $u() {
  33875. return $u;
  33876. }, get appName() {
  33877. return appName;
  33878. }, get appVersion() {
  33879. return appVersion;
  33880. }, selectLang, get setAccount() {
  33881. return setAccount;
  33882. } };
  33883. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  33884. return __returned__;
  33885. }
  33886. };
  33887. function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) {
  33888. const _component_u_input = __unplugin_components_3$2;
  33889. const _component_u_button = __unplugin_components_2$1;
  33890. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  33891. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  33892. default: vue.withCtx(() => [
  33893. vue.createElementVNode("view", {
  33894. class: "relative min-h-screen overflow-hidden login-page",
  33895. style: { "background-image": "url('/static/images/login/bg-login-app.png')" }
  33896. }, [
  33897. vue.createElementVNode("view", {
  33898. class: "pos-fixed",
  33899. style: { "z-index": "999", "right": "20px", "top": "20px" }
  33900. }, [
  33901. vue.createVNode($setup["selectLang"])
  33902. ]),
  33903. vue.createElementVNode("view", { class: "relative z-10 min-h-screen flex flex-col pt-12" }, [
  33904. vue.createElementVNode("view", { class: "flex justify-center mb-6 pt-10" }, [
  33905. vue.createElementVNode("image", {
  33906. src: _imports_0$3,
  33907. mode: "heightFix",
  33908. class: "h-6"
  33909. })
  33910. ]),
  33911. vue.createElementVNode("view", {
  33912. class: "mx-5 rounded-3xl p-5 shadow-lg relative",
  33913. style: { "background": "rgba(120, 120, 120, 0.1)", "backdrop-filter": "blur(5px)", "border": "1px solid rgba(255,255,255,0.6)" }
  33914. }, [
  33915. vue.createElementVNode("view", { class: "text-center mb-6 px-4" }, [
  33916. vue.createElementVNode("image", {
  33917. src: _imports_1,
  33918. mode: "widthFix",
  33919. style: { "width": "200px" }
  33920. }),
  33921. vue.createElementVNode(
  33922. "text",
  33923. {
  33924. class: "block mt-2",
  33925. style: { "font-weight": "800", "font-size": "24px" }
  33926. },
  33927. vue.toDisplayString(_ctx.$t("迈凯伦")),
  33928. 1
  33929. /* TEXT */
  33930. ),
  33931. vue.createElementVNode(
  33932. "text",
  33933. { class: "text-xs text-gray-600 block mt-1" },
  33934. vue.toDisplayString(_ctx.$t("官方合作伙伴")),
  33935. 1
  33936. /* TEXT */
  33937. )
  33938. ]),
  33939. vue.createElementVNode("view", { class: "space-y-4 mb-5" }, [
  33940. vue.createElementVNode("view", {
  33941. class: "rounded-xl flex items-center px-4 py-1",
  33942. style: { "background": "rgba(255,255,255,0.6)" }
  33943. }, [
  33944. vue.createElementVNode("image", {
  33945. src: _imports_2,
  33946. class: "w-5 h-5 mr-2",
  33947. mode: "aspectFit"
  33948. }),
  33949. vue.createVNode(_component_u_input, {
  33950. modelValue: $setup.accountForm.account,
  33951. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.accountForm.account = $event),
  33952. placeholder: _ctx.$t("请输入账号"),
  33953. type: "text",
  33954. clearable: "",
  33955. border: false
  33956. }, null, 8, ["modelValue", "placeholder"])
  33957. ]),
  33958. vue.createElementVNode("view", {
  33959. class: "rounded-xl flex items-center px-4 py-1",
  33960. style: { "background": "rgba(255,255,255,0.6)" }
  33961. }, [
  33962. vue.createElementVNode("image", {
  33963. src: _imports_3,
  33964. class: "w-5 h-5 mr-2",
  33965. mode: "aspectFit"
  33966. }),
  33967. vue.createVNode(_component_u_input, {
  33968. modelValue: $setup.accountForm.password,
  33969. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.accountForm.password = $event),
  33970. placeholder: _ctx.$t("请设置登录密码"),
  33971. type: "password",
  33972. clearable: "",
  33973. border: false,
  33974. "password-icon": ""
  33975. }, null, 8, ["modelValue", "placeholder"])
  33976. ]),
  33977. vue.createElementVNode("view", {
  33978. class: "rounded-xl flex items-center px-4 py-1",
  33979. style: { "background": "rgba(255,255,255,0.6)" }
  33980. }, [
  33981. vue.createElementVNode("image", {
  33982. src: _imports_3,
  33983. class: "w-5 h-5 mr-2",
  33984. mode: "aspectFit"
  33985. }),
  33986. vue.createVNode(_component_u_input, {
  33987. modelValue: $setup.accountForm.confirmPassword,
  33988. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.accountForm.confirmPassword = $event),
  33989. placeholder: _ctx.$t("请确认登录密码"),
  33990. type: "password",
  33991. clearable: "",
  33992. border: false,
  33993. "password-icon": ""
  33994. }, null, 8, ["modelValue", "placeholder"])
  33995. ]),
  33996. vue.createElementVNode("view", {
  33997. class: "rounded-xl flex items-center px-4 py-1",
  33998. style: { "background": "rgba(255,255,255,0.6)" }
  33999. }, [
  34000. vue.createElementVNode("image", {
  34001. src: _imports_2,
  34002. class: "w-5 h-5 mr-2",
  34003. mode: "aspectFit",
  34004. style: { "filter": "opacity(0.7)" }
  34005. }),
  34006. vue.createVNode(_component_u_input, {
  34007. modelValue: $setup.accountForm.user_code,
  34008. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.accountForm.user_code = $event),
  34009. placeholder: _ctx.$t("请输入邀请码"),
  34010. type: "text",
  34011. clearable: "",
  34012. border: false
  34013. }, null, 8, ["modelValue", "placeholder"])
  34014. ])
  34015. ]),
  34016. vue.createElementVNode("view", { class: "mb-6 flex space-x-3" }, [
  34017. vue.createVNode(_component_u_button, {
  34018. onClick: $setup.onBack,
  34019. class: "flex-1 rounded-xl h-12 text-lg font-bold",
  34020. "custom-style": { background: "rgba(255,255,255,0.2)", color: "#fd7602", border: "1px solid rgba(255,255,255,0.4)", borderRadius: "12px" }
  34021. }, {
  34022. default: vue.withCtx(() => [
  34023. vue.createTextVNode(
  34024. vue.toDisplayString(_ctx.$t("返回")),
  34025. 1
  34026. /* TEXT */
  34027. )
  34028. ]),
  34029. _: 1
  34030. /* STABLE */
  34031. }, 8, ["custom-style"]),
  34032. vue.createVNode(_component_u_button, {
  34033. ripple: "",
  34034. loading: $setup.registerLoading,
  34035. onClick: $setup.onRegisterClick,
  34036. disabled: $setup.registerLoading,
  34037. class: "flex-1 rounded-xl h-12 text-lg font-bold",
  34038. "custom-style": { background: "linear-gradient(90deg, #ff8c00, #ff6600)", color: "#fff", border: "none", borderRadius: "12px" }
  34039. }, {
  34040. default: vue.withCtx(() => [
  34041. vue.createTextVNode(
  34042. vue.toDisplayString(_ctx.$t("提交")),
  34043. 1
  34044. /* TEXT */
  34045. )
  34046. ]),
  34047. _: 1
  34048. /* STABLE */
  34049. }, 8, ["loading", "disabled", "custom-style"])
  34050. ])
  34051. ]),
  34052. vue.createElementVNode("view", { class: "mt-auto px-6 pb-8" }, [
  34053. vue.createElementVNode("view", { class: "text-center space-y-3" }, [
  34054. vue.createElementVNode("view", { class: "flex items-center justify-center text-xs text-white/70 space-x-2" }, [
  34055. vue.createElementVNode("view", { class: "i-carbon-information h-3 w-3" }),
  34056. vue.createElementVNode(
  34057. "text",
  34058. null,
  34059. vue.toDisplayString(_ctx.$t("版本")) + " v" + vue.toDisplayString($setup.appVersion),
  34060. 1
  34061. /* TEXT */
  34062. )
  34063. ])
  34064. ])
  34065. ])
  34066. ])
  34067. ])
  34068. ]),
  34069. _: 1
  34070. /* STABLE */
  34071. });
  34072. }
  34073. const PagesSetAccountIndex = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$L], ["__scopeId", "data-v-58a2bbdf"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/setAccount/index.vue"]]);
  34074. const _sfc_main$L = {
  34075. __name: "index",
  34076. setup(__props, { expose: __expose }) {
  34077. __expose();
  34078. const tabModel = [
  34079. {
  34080. label: "实用技巧",
  34081. children: [
  34082. {
  34083. icon: "i-carbon-router",
  34084. text: "路由中间件",
  34085. path: "/pages/tips/middleware/index"
  34086. }
  34087. ]
  34088. },
  34089. {
  34090. label: "业务模板",
  34091. children: [
  34092. {
  34093. icon: "i-carbon-list",
  34094. text: "通用列表",
  34095. path: "/pages/template/paging/index"
  34096. }
  34097. ]
  34098. }
  34099. ];
  34100. const tabIndex = vue.ref(0);
  34101. function onTabClick(index) {
  34102. tabIndex.value = index;
  34103. }
  34104. const activeTabItem = vue.computed(() => tabModel[tabIndex.value].children);
  34105. const __returned__ = { tabModel, tabIndex, onTabClick, activeTabItem };
  34106. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  34107. return __returned__;
  34108. }
  34109. };
  34110. function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
  34111. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  34112. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  34113. default: vue.withCtx(() => [
  34114. vue.createElementVNode("view", { class: "h-full flex flex-col overflow-hidden" }, [
  34115. vue.createElementVNode("view", { class: "h-[--safe-top] flex-none uni-mp:mt-4" }),
  34116. vue.createElementVNode("view", { class: "flex flex-none bg-white px-3 py-2 !uni-mp:pr-[var(--safe-right)]" }, [
  34117. (vue.openBlock(), vue.createElementBlock(
  34118. vue.Fragment,
  34119. null,
  34120. vue.renderList($setup.tabModel, (item, index) => {
  34121. return vue.createElementVNode("view", {
  34122. key: index,
  34123. class: vue.normalizeClass(["h-10 w-0 flex flex-1 items-center justify-center rounded-lg", [$setup.tabIndex === index ? "bg-primary-50 text-primary-600 font-bold" : ""]]),
  34124. onClick: ($event) => $setup.onTabClick(index)
  34125. }, vue.toDisplayString(item.label), 11, ["onClick"]);
  34126. }),
  34127. 64
  34128. /* STABLE_FRAGMENT */
  34129. ))
  34130. ]),
  34131. vue.createElementVNode("view", { class: "mt-3 h-0 flex-1 overflow-auto" }, [
  34132. vue.createElementVNode("view", { class: "mx-3 overflow-hidden rounded-xl shadow-sm" }, [
  34133. (vue.openBlock(true), vue.createElementBlock(
  34134. vue.Fragment,
  34135. null,
  34136. vue.renderList($setup.activeTabItem, (item, index) => {
  34137. return vue.openBlock(), vue.createElementBlock("view", {
  34138. key: index,
  34139. class: vue.normalizeClass(["flex items-center bg-white px-5 py-4 transition-colors duration-200 active:bg-gray-50", [
  34140. index !== $setup.activeTabItem.length - 1 ? "border-b border-gray-100" : ""
  34141. ]]),
  34142. "hover-class": "bg-gray-50",
  34143. onClick: ($event) => _ctx.$Router.push(item.path)
  34144. }, [
  34145. vue.createElementVNode("view", { class: "w-10 flex flex-none items-center justify-center text-gray-500" }, [
  34146. vue.createElementVNode(
  34147. "view",
  34148. {
  34149. class: vue.normalizeClass(["size-6 text-primary-500", item.icon])
  34150. },
  34151. null,
  34152. 2
  34153. /* CLASS */
  34154. )
  34155. ]),
  34156. vue.createElementVNode(
  34157. "view",
  34158. { class: "flex-1 text-gray-700 font-medium" },
  34159. vue.toDisplayString(item.text),
  34160. 1
  34161. /* TEXT */
  34162. ),
  34163. vue.createElementVNode("view", { class: "text-gray-400" }, [
  34164. vue.createElementVNode("view", { class: "i-carbon-chevron-right size-5" })
  34165. ])
  34166. ], 10, ["onClick"]);
  34167. }),
  34168. 128
  34169. /* KEYED_FRAGMENT */
  34170. ))
  34171. ])
  34172. ])
  34173. ])
  34174. ]),
  34175. _: 1
  34176. /* STABLE */
  34177. });
  34178. }
  34179. const PagesIndexExampleIndex = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["render", _sfc_render$K], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/index/example/index.vue"]]);
  34180. const _imports_0$2 = "/assets/avatar.0ad11987.gif";
  34181. const _sfc_main$K = {
  34182. __name: "index",
  34183. setup(__props, { expose: __expose }) {
  34184. __expose();
  34185. const userStore = useUserStore();
  34186. const router2 = useRouter();
  34187. const isLogin = vue.computed(() => !!uni.getStorageSync("token"));
  34188. const userInfo = vue.computed(() => userStore.userInfo);
  34189. const systemItems = vue.computed(() => [
  34190. {
  34191. icon: "i-carbon-customer-service",
  34192. text: "联系我们",
  34193. path: "/contact"
  34194. },
  34195. {
  34196. icon: "i-carbon-chat",
  34197. text: "意见反馈",
  34198. path: "/feedback"
  34199. },
  34200. {
  34201. icon: "i-carbon-settings",
  34202. text: "偏好设置",
  34203. path: "/preference"
  34204. }
  34205. ]);
  34206. function handleMenuItemClick(item) {
  34207. router2.push({
  34208. path: item.path,
  34209. query: item.query || {}
  34210. });
  34211. }
  34212. function handleLogin() {
  34213. if (isLogin.value) {
  34214. router2.push({
  34215. path: "/personal"
  34216. });
  34217. return false;
  34218. }
  34219. router2.push({
  34220. path: "/login"
  34221. });
  34222. }
  34223. function onEnterpriseClick() {
  34224. window.open(appExtra.url);
  34225. }
  34226. async function handleLogout() {
  34227. const result = await showModal({
  34228. title: "提示",
  34229. content: "确定要退出登录吗?",
  34230. showCancel: true,
  34231. confirmText: "确定",
  34232. cancelText: "取消"
  34233. });
  34234. if (result.confirm) {
  34235. await userStore.logout();
  34236. await showToast({
  34237. title: "退出登录成功",
  34238. icon: "success"
  34239. });
  34240. await sleep();
  34241. router2.push({
  34242. path: "/login"
  34243. });
  34244. }
  34245. }
  34246. const __returned__ = { userStore, router: router2, isLogin, userInfo, systemItems, handleMenuItemClick, handleLogin, onEnterpriseClick, handleLogout, get showModal() {
  34247. return showModal;
  34248. }, get showToast() {
  34249. return showToast;
  34250. }, get appExtra() {
  34251. return appExtra;
  34252. }, get appVersion() {
  34253. return appVersion;
  34254. }, get sleep() {
  34255. return sleep;
  34256. } };
  34257. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  34258. return __returned__;
  34259. }
  34260. };
  34261. function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
  34262. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  34263. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  34264. default: vue.withCtx(() => [
  34265. vue.createElementVNode("view", { class: "h-full flex flex-col" }, [
  34266. vue.createElementVNode("view", { class: "relative overflow-hidden" }, [
  34267. vue.createElementVNode("view", { class: "absolute inset-0 bg-primary-500" }),
  34268. vue.createElementVNode("view", { class: "absolute h-42 w-42 rounded-full bg-white opacity-10 -right-10 -top-10" }),
  34269. vue.createElementVNode("view", { class: "absolute bottom-0 right-20 h-20 w-20 rounded-full bg-white opacity-10" }),
  34270. vue.createElementVNode("view", { class: "h-[--safe-top]" }),
  34271. vue.createElementVNode("view", {
  34272. class: "relative flex items-center px-6 pb-12 pt-12",
  34273. "hover-class": "opacity-90",
  34274. onClick: $setup.handleLogin
  34275. }, [
  34276. vue.createElementVNode("view", { class: "h-18 w-18 overflow-hidden border-2 border-white/30 rounded-full shadow-lg" }, [
  34277. vue.createElementVNode("image", {
  34278. src: _imports_0$2,
  34279. alt: "用户头像",
  34280. class: "h-full w-full"
  34281. })
  34282. ]),
  34283. vue.createElementVNode("view", { class: "ml-4 flex-1" }, [
  34284. $setup.isLogin ? (vue.openBlock(), vue.createElementBlock(
  34285. "view",
  34286. {
  34287. key: 0,
  34288. class: "text-xl text-white font-bold"
  34289. },
  34290. vue.toDisplayString($setup.userInfo.username),
  34291. 1
  34292. /* TEXT */
  34293. )) : (vue.openBlock(), vue.createElementBlock("view", {
  34294. key: 1,
  34295. class: "flex items-center"
  34296. }, [
  34297. vue.createElementVNode("view", { class: "text-xl text-white font-medium" }, " 立即登录 "),
  34298. vue.createElementVNode("view", { class: "ml-2 rounded-full bg-white/20 px-3 py-1 text-xs text-white" }, " 未登录 ")
  34299. ]))
  34300. ]),
  34301. $setup.isLogin ? (vue.openBlock(), vue.createElementBlock("view", {
  34302. key: 0,
  34303. class: "flex items-center text-white/70"
  34304. }, [
  34305. vue.createElementVNode("view", null, "编辑个人资料"),
  34306. vue.createElementVNode("view", { class: "i-carbon-chevron-right size-6" })
  34307. ])) : vue.createCommentVNode("v-if", true)
  34308. ])
  34309. ]),
  34310. vue.createElementVNode("view", { class: "mx-3 mt-3 overflow-hidden rounded-xl shadow-sm" }, [
  34311. (vue.openBlock(true), vue.createElementBlock(
  34312. vue.Fragment,
  34313. null,
  34314. vue.renderList($setup.systemItems, (item, index) => {
  34315. return vue.openBlock(), vue.createElementBlock("view", {
  34316. key: index,
  34317. class: vue.normalizeClass(["flex items-center bg-white px-5 py-4 transition-colors duration-200 active:bg-gray-50", [
  34318. index !== $setup.systemItems.length - 1 ? "border-b border-gray-100" : ""
  34319. ]]),
  34320. "hover-class": "bg-gray-50",
  34321. onClick: ($event) => $setup.handleMenuItemClick(item)
  34322. }, [
  34323. vue.createElementVNode("view", { class: "w-10 flex flex-none items-center justify-center text-gray-500" }, [
  34324. vue.createElementVNode(
  34325. "view",
  34326. {
  34327. class: vue.normalizeClass(["size-6 text-primary-500", item.icon])
  34328. },
  34329. null,
  34330. 2
  34331. /* CLASS */
  34332. )
  34333. ]),
  34334. vue.createElementVNode(
  34335. "view",
  34336. { class: "flex-1 text-gray-700 font-medium" },
  34337. vue.toDisplayString(item.text),
  34338. 1
  34339. /* TEXT */
  34340. ),
  34341. vue.createElementVNode("view", { class: "text-gray-400" }, [
  34342. vue.createElementVNode("view", { class: "i-carbon-chevron-right size-5" })
  34343. ])
  34344. ], 10, ["onClick"]);
  34345. }),
  34346. 128
  34347. /* KEYED_FRAGMENT */
  34348. ))
  34349. ]),
  34350. $setup.isLogin ? (vue.openBlock(), vue.createElementBlock("view", {
  34351. key: 0,
  34352. class: "mb-8 mt-auto px-5"
  34353. }, [
  34354. vue.createElementVNode("button", {
  34355. class: "w-full bg-red-500 py-3 text-gray-50 font-medium transition-colors duration-200 !rounded-lg",
  34356. "hover-class": "bg-red-700",
  34357. onClick: $setup.handleLogout
  34358. }, " 退出登录 ")
  34359. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  34360. key: 1,
  34361. class: "mb-6 mt-auto text-center text-xs text-gray-400"
  34362. }, [
  34363. vue.createElementVNode("view", null, [
  34364. vue.createTextVNode(" Supported by "),
  34365. vue.createElementVNode(
  34366. "text",
  34367. {
  34368. class: "text-primary-500 underline active:text-primary-700",
  34369. onClick: $setup.onEnterpriseClick
  34370. },
  34371. vue.toDisplayString($setup.appExtra.name),
  34372. 1
  34373. /* TEXT */
  34374. ),
  34375. vue.createTextVNode(
  34376. " v" + vue.toDisplayString($setup.appVersion),
  34377. 1
  34378. /* TEXT */
  34379. )
  34380. ])
  34381. ]))
  34382. ])
  34383. ]),
  34384. _: 1
  34385. /* STABLE */
  34386. });
  34387. }
  34388. const PagesIndexUserIndex = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$J], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/index/user/index.vue"]]);
  34389. const _sfc_main$J = {
  34390. __name: "index",
  34391. setup(__props, { expose: __expose }) {
  34392. __expose();
  34393. const route2 = useRoute();
  34394. const webViewProps = vue.computed(() => route2.query);
  34395. uni.showLoading({
  34396. title: uni.$t("加载中")
  34397. });
  34398. setTimeout(() => {
  34399. hideLoading();
  34400. }, 1 * 1e3);
  34401. function hideLoading() {
  34402. uni.hideLoading();
  34403. }
  34404. onLoad(() => {
  34405. if (webViewProps.value && webViewProps.value.src) {
  34406. if (webViewProps.value.src === `${globalBaseURL}/rule.html`) {
  34407. uni.setNavigationBarTitle({
  34408. title: "开奖规则"
  34409. });
  34410. }
  34411. }
  34412. });
  34413. const __returned__ = { route: route2, webViewProps, hideLoading, get globalBaseURL() {
  34414. return globalBaseURL;
  34415. } };
  34416. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  34417. return __returned__;
  34418. }
  34419. };
  34420. function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) {
  34421. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  34422. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  34423. default: vue.withCtx(() => [
  34424. vue.createElementVNode("web-view", {
  34425. src: $setup.webViewProps.src,
  34426. onLoad: $setup.hideLoading,
  34427. onError: $setup.hideLoading
  34428. }, null, 40, ["src"])
  34429. ]),
  34430. _: 1
  34431. /* STABLE */
  34432. });
  34433. }
  34434. const PagesCommonWebViewIndex = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_render$I], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/web-view/index.vue"]]);
  34435. const block0 = (Comp) => {
  34436. (Comp.$wxs || (Comp.$wxs = [])).push("handler");
  34437. (Comp.$wxsModules || (Comp.$wxsModules = {}))["handler"] = "812594ec";
  34438. };
  34439. const _sfc_main$I = {
  34440. name: "node",
  34441. options: {},
  34442. data() {
  34443. return {
  34444. ctrl: {}
  34445. };
  34446. },
  34447. props: {
  34448. name: String,
  34449. attrs: {
  34450. type: Object,
  34451. default() {
  34452. return {};
  34453. }
  34454. },
  34455. childs: Array,
  34456. opts: Array
  34457. },
  34458. components: {},
  34459. mounted() {
  34460. this.$nextTick(() => {
  34461. for (this.root = this.$parent; this.root.$options.name !== "uv-parse"; this.root = this.root.$parent)
  34462. ;
  34463. });
  34464. if (this.opts[0]) {
  34465. let i;
  34466. for (i = this.childs.length; i--; ) {
  34467. if (this.childs[i].name === "img")
  34468. break;
  34469. }
  34470. if (i !== -1) {
  34471. this.observer = uni.createIntersectionObserver(this).relativeToViewport({
  34472. top: 500,
  34473. bottom: 500
  34474. });
  34475. this.observer.observe("._img", (res) => {
  34476. if (res.intersectionRatio) {
  34477. this.$set(this.ctrl, "load", 1);
  34478. this.observer.disconnect();
  34479. }
  34480. });
  34481. }
  34482. }
  34483. },
  34484. beforeDestroy() {
  34485. if (this.observer) {
  34486. this.observer.disconnect();
  34487. }
  34488. },
  34489. methods: {
  34490. /**
  34491. * @description 播放视频事件
  34492. * @param {Event} e
  34493. */
  34494. play(e) {
  34495. this.root.$emit("play");
  34496. },
  34497. /**
  34498. * @description 图片点击事件
  34499. * @param {Event} e
  34500. */
  34501. imgTap(e) {
  34502. const node2 = this.childs[e.currentTarget.dataset.i];
  34503. if (node2.a) {
  34504. this.linkTap(node2.a);
  34505. return;
  34506. }
  34507. if (node2.attrs.ignore)
  34508. return;
  34509. node2.attrs.src = node2.attrs.src || node2.attrs["data-src"];
  34510. this.root.$emit("imgtap", node2.attrs);
  34511. if (this.root.previewImg) {
  34512. uni.previewImage({
  34513. current: parseInt(node2.attrs.i),
  34514. urls: this.root.imgList
  34515. });
  34516. }
  34517. },
  34518. /**
  34519. * @description 图片长按
  34520. */
  34521. imgLongTap(e) {
  34522. const attrs = this.childs[e.currentTarget.dataset.i].attrs;
  34523. if (this.opts[3] && !attrs.ignore) {
  34524. uni.showActionSheet({
  34525. itemList: ["保存图片"],
  34526. success: () => {
  34527. const save = (path) => {
  34528. uni.saveImageToPhotosAlbum({
  34529. filePath: path,
  34530. success() {
  34531. uni.showToast({
  34532. title: "保存成功"
  34533. });
  34534. }
  34535. });
  34536. };
  34537. if (this.root.imgList[attrs.i].startsWith("http")) {
  34538. uni.downloadFile({
  34539. url: this.root.imgList[attrs.i],
  34540. success: (res) => save(res.tempFilePath)
  34541. });
  34542. } else {
  34543. save(this.root.imgList[attrs.i]);
  34544. }
  34545. }
  34546. });
  34547. }
  34548. },
  34549. /**
  34550. * @description 图片加载完成事件
  34551. * @param {Event} e
  34552. */
  34553. imgLoad(e) {
  34554. const i = e.currentTarget.dataset.i;
  34555. if (!this.childs[i].w) {
  34556. this.$set(this.ctrl, i, e.detail.width);
  34557. } else if (this.opts[1] && !this.ctrl[i] || this.ctrl[i] === -1) {
  34558. this.$set(this.ctrl, i, 1);
  34559. }
  34560. this.checkReady();
  34561. },
  34562. /**
  34563. * @description 检查是否所有图片加载完毕
  34564. */
  34565. checkReady() {
  34566. if (this.root && !this.root.lazyLoad) {
  34567. this.root._unloadimgs -= 1;
  34568. if (!this.root._unloadimgs) {
  34569. setTimeout(() => {
  34570. this.root.getRect().then((rect) => {
  34571. this.root.$emit("ready", rect);
  34572. }).catch(() => {
  34573. this.root.$emit("ready", {});
  34574. });
  34575. }, 350);
  34576. }
  34577. }
  34578. },
  34579. /**
  34580. * @description 链接点击事件
  34581. * @param {Event} e
  34582. */
  34583. linkTap(e) {
  34584. const node2 = e.currentTarget ? this.childs[e.currentTarget.dataset.i] : {};
  34585. const attrs = node2.attrs || e;
  34586. const href = attrs.href;
  34587. this.root.$emit("linktap", Object.assign({
  34588. innerText: this.root.getText(node2.children || [])
  34589. // 链接内的文本内容
  34590. }, attrs));
  34591. if (href) {
  34592. if (href[0] === "#") {
  34593. this.root.navigateTo(href.substring(1)).catch(() => {
  34594. });
  34595. } else if (href.split("?")[0].includes("://")) {
  34596. if (this.root.copyLink) {
  34597. plus.runtime.openWeb(href);
  34598. }
  34599. } else {
  34600. uni.navigateTo({
  34601. url: href,
  34602. fail() {
  34603. uni.switchTab({
  34604. url: href,
  34605. fail() {
  34606. }
  34607. });
  34608. }
  34609. });
  34610. }
  34611. }
  34612. },
  34613. /**
  34614. * @description 错误事件
  34615. * @param {Event} e
  34616. */
  34617. mediaError(e) {
  34618. const i = e.currentTarget.dataset.i;
  34619. const node2 = this.childs[i];
  34620. if (node2.name === "video" || node2.name === "audio") {
  34621. let index = (this.ctrl[i] || 0) + 1;
  34622. if (index > node2.src.length) {
  34623. index = 0;
  34624. }
  34625. if (index < node2.src.length) {
  34626. this.$set(this.ctrl, i, index);
  34627. return;
  34628. }
  34629. } else if (node2.name === "img") {
  34630. if (this.opts[2]) {
  34631. this.$set(this.ctrl, i, -1);
  34632. }
  34633. this.checkReady();
  34634. }
  34635. if (this.root) {
  34636. this.root.$emit("error", {
  34637. source: node2.name,
  34638. attrs: node2.attrs,
  34639. errMsg: e.detail.errMsg
  34640. });
  34641. }
  34642. }
  34643. }
  34644. };
  34645. function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
  34646. const _component_node = vue.resolveComponent("node", true);
  34647. return vue.openBlock(), vue.createElementBlock("view", {
  34648. id: $props.attrs.id,
  34649. class: vue.normalizeClass("_block _" + $props.name + " " + $props.attrs.class),
  34650. style: vue.normalizeStyle($props.attrs.style)
  34651. }, [
  34652. (vue.openBlock(true), vue.createElementBlock(
  34653. vue.Fragment,
  34654. null,
  34655. vue.renderList($props.childs, (n, i) => {
  34656. return vue.openBlock(), vue.createElementBlock(
  34657. vue.Fragment,
  34658. { key: i },
  34659. [
  34660. vue.createCommentVNode(" 图片 "),
  34661. vue.createCommentVNode(" 占位图 "),
  34662. n.name === "img" && !n.t && ($props.opts[1] && !$data.ctrl[i] || $data.ctrl[i] < 0) ? (vue.openBlock(), vue.createElementBlock("image", {
  34663. key: 0,
  34664. class: "_img",
  34665. style: vue.normalizeStyle(n.attrs.style),
  34666. src: $data.ctrl[i] < 0 ? $props.opts[2] : $props.opts[1],
  34667. mode: "widthFix"
  34668. }, null, 12, ["src"])) : vue.createCommentVNode("v-if", true),
  34669. vue.createCommentVNode(" 显示图片 "),
  34670. vue.createCommentVNode(" 表格中的图片,使用 rich-text 防止大小不正确 "),
  34671. n.name === "img" && n.t ? (vue.openBlock(), vue.createElementBlock("rich-text", {
  34672. key: 1,
  34673. style: vue.normalizeStyle("display:" + n.t),
  34674. nodes: [{ attrs: { style: n.attrs.style, src: n.attrs.src }, name: "img" }],
  34675. "data-i": i,
  34676. onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.imgTap && $options.imgTap(...args), ["stop"]))
  34677. }, null, 12, ["nodes", "data-i"])) : n.name === "img" ? (vue.openBlock(), vue.createElementBlock("image", {
  34678. key: 2,
  34679. id: n.attrs.id,
  34680. class: vue.normalizeClass("_img " + n.attrs.class),
  34681. style: vue.normalizeStyle(($data.ctrl[i] === -1 ? "display:none;" : "") + "width:" + ($data.ctrl[i] || 1) + "px;" + n.attrs.style),
  34682. src: n.attrs.src || ($data.ctrl.load ? n.attrs["data-src"] : ""),
  34683. mode: !n.h ? "widthFix" : !n.w ? "heightFix" : "",
  34684. "data-i": i,
  34685. onLoad: _cache[1] || (_cache[1] = (...args) => $options.imgLoad && $options.imgLoad(...args)),
  34686. onError: _cache[2] || (_cache[2] = (...args) => $options.mediaError && $options.mediaError(...args)),
  34687. onClick: _cache[3] || (_cache[3] = vue.withModifiers((...args) => $options.imgTap && $options.imgTap(...args), ["stop"])),
  34688. onLongpress: _cache[4] || (_cache[4] = (...args) => $options.imgLongTap && $options.imgLongTap(...args))
  34689. }, null, 46, ["id", "src", "mode", "data-i"])) : n.text ? (vue.openBlock(), vue.createElementBlock(
  34690. vue.Fragment,
  34691. { key: 3 },
  34692. [
  34693. vue.createCommentVNode(" 文本 "),
  34694. vue.createElementVNode(
  34695. "text",
  34696. { decode: "" },
  34697. vue.toDisplayString(n.text),
  34698. 1
  34699. /* TEXT */
  34700. )
  34701. ],
  34702. 2112
  34703. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  34704. )) : n.name === "br" ? (vue.openBlock(), vue.createElementBlock("text", { key: 4 }, "\\n")) : n.name === "a" ? (vue.openBlock(), vue.createElementBlock(
  34705. vue.Fragment,
  34706. { key: 5 },
  34707. [
  34708. vue.createCommentVNode(" 链接 "),
  34709. vue.createElementVNode("view", {
  34710. id: n.attrs.id,
  34711. class: vue.normalizeClass((n.attrs.href ? "_a " : "") + n.attrs.class),
  34712. "hover-class": "_hover",
  34713. style: vue.normalizeStyle("display:inline;" + n.attrs.style),
  34714. "data-i": i,
  34715. onClick: _cache[5] || (_cache[5] = vue.withModifiers((...args) => $options.linkTap && $options.linkTap(...args), ["stop"]))
  34716. }, [
  34717. vue.createVNode(_component_node, {
  34718. name: "span",
  34719. childs: n.children,
  34720. opts: $props.opts,
  34721. style: { "display": "inherit" }
  34722. }, null, 8, ["childs", "opts"])
  34723. ], 14, ["id", "data-i"])
  34724. ],
  34725. 2112
  34726. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  34727. )) : n.html ? (vue.openBlock(), vue.createElementBlock(
  34728. vue.Fragment,
  34729. { key: 6 },
  34730. [
  34731. vue.createCommentVNode(" 视频 "),
  34732. vue.createElementVNode("view", {
  34733. id: n.attrs.id,
  34734. class: vue.normalizeClass("_video " + n.attrs.class),
  34735. style: vue.normalizeStyle(n.attrs.style),
  34736. innerHTML: n.html,
  34737. onVplay: _cache[6] || (_cache[6] = vue.withModifiers((...args) => $options.play && $options.play(...args), ["stop"]))
  34738. }, null, 46, ["id", "innerHTML"])
  34739. ],
  34740. 2112
  34741. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  34742. )) : n.name === "iframe" ? (vue.openBlock(), vue.createElementBlock("iframe", {
  34743. key: 7,
  34744. style: vue.normalizeStyle(n.attrs.style),
  34745. allowfullscreen: n.attrs.allowfullscreen,
  34746. frameborder: n.attrs.frameborder,
  34747. src: n.attrs.src
  34748. }, null, 12, ["allowfullscreen", "frameborder", "src"])) : n.name === "embed" ? (vue.openBlock(), vue.createElementBlock("embed", {
  34749. key: 8,
  34750. style: vue.normalizeStyle(n.attrs.style),
  34751. src: n.attrs.src
  34752. }, null, 12, ["src"])) : n.name === "table" && n.c || n.name === "li" ? (vue.openBlock(), vue.createElementBlock("view", {
  34753. key: 9,
  34754. id: n.attrs.id,
  34755. class: vue.normalizeClass("_" + n.name + " " + n.attrs.class),
  34756. style: vue.normalizeStyle(n.attrs.style)
  34757. }, [
  34758. n.name === "li" ? (vue.openBlock(), vue.createBlock(_component_node, {
  34759. key: 0,
  34760. childs: n.children,
  34761. opts: $props.opts
  34762. }, null, 8, ["childs", "opts"])) : (vue.openBlock(true), vue.createElementBlock(
  34763. vue.Fragment,
  34764. { key: 1 },
  34765. vue.renderList(n.children, (tbody, x) => {
  34766. return vue.openBlock(), vue.createElementBlock(
  34767. "view",
  34768. {
  34769. key: x,
  34770. class: vue.normalizeClass("_" + tbody.name + " " + tbody.attrs.class),
  34771. style: vue.normalizeStyle(tbody.attrs.style)
  34772. },
  34773. [
  34774. tbody.name === "td" || tbody.name === "th" ? (vue.openBlock(), vue.createBlock(_component_node, {
  34775. key: 0,
  34776. childs: tbody.children,
  34777. opts: $props.opts
  34778. }, null, 8, ["childs", "opts"])) : (vue.openBlock(true), vue.createElementBlock(
  34779. vue.Fragment,
  34780. { key: 1 },
  34781. vue.renderList(tbody.children, (tr, y) => {
  34782. return vue.openBlock(), vue.createElementBlock(
  34783. vue.Fragment,
  34784. { key: y },
  34785. [
  34786. tr.name === "td" || tr.name === "th" ? (vue.openBlock(), vue.createElementBlock(
  34787. "view",
  34788. {
  34789. key: 0,
  34790. class: vue.normalizeClass("_" + tr.name + " " + tr.attrs.class),
  34791. style: vue.normalizeStyle(tr.attrs.style)
  34792. },
  34793. [
  34794. vue.createVNode(_component_node, {
  34795. childs: tr.children,
  34796. opts: $props.opts
  34797. }, null, 8, ["childs", "opts"])
  34798. ],
  34799. 6
  34800. /* CLASS, STYLE */
  34801. )) : (vue.openBlock(), vue.createElementBlock(
  34802. "view",
  34803. {
  34804. key: 1,
  34805. class: vue.normalizeClass("_" + tr.name + " " + tr.attrs.class),
  34806. style: vue.normalizeStyle(tr.attrs.style)
  34807. },
  34808. [
  34809. (vue.openBlock(true), vue.createElementBlock(
  34810. vue.Fragment,
  34811. null,
  34812. vue.renderList(tr.children, (td, z) => {
  34813. return vue.openBlock(), vue.createElementBlock(
  34814. "view",
  34815. {
  34816. key: z,
  34817. class: vue.normalizeClass("_" + td.name + " " + td.attrs.class),
  34818. style: vue.normalizeStyle(td.attrs.style)
  34819. },
  34820. [
  34821. vue.createVNode(_component_node, {
  34822. childs: td.children,
  34823. opts: $props.opts
  34824. }, null, 8, ["childs", "opts"])
  34825. ],
  34826. 6
  34827. /* CLASS, STYLE */
  34828. );
  34829. }),
  34830. 128
  34831. /* KEYED_FRAGMENT */
  34832. ))
  34833. ],
  34834. 6
  34835. /* CLASS, STYLE */
  34836. ))
  34837. ],
  34838. 64
  34839. /* STABLE_FRAGMENT */
  34840. );
  34841. }),
  34842. 128
  34843. /* KEYED_FRAGMENT */
  34844. ))
  34845. ],
  34846. 6
  34847. /* CLASS, STYLE */
  34848. );
  34849. }),
  34850. 128
  34851. /* KEYED_FRAGMENT */
  34852. ))
  34853. ], 14, ["id"])) : !n.c ? (vue.openBlock(), vue.createElementBlock(
  34854. vue.Fragment,
  34855. { key: 10 },
  34856. [
  34857. vue.createCommentVNode(" 富文本 "),
  34858. vue.createElementVNode("rich-text", {
  34859. id: n.attrs.id,
  34860. style: vue.normalizeStyle("display:inline;" + n.f),
  34861. preview: false,
  34862. selectable: $props.opts[4],
  34863. "user-select": $props.opts[4],
  34864. nodes: [n]
  34865. }, null, 12, ["id", "selectable", "user-select", "nodes"])
  34866. ],
  34867. 2112
  34868. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  34869. )) : n.c === 2 ? (vue.openBlock(), vue.createElementBlock(
  34870. vue.Fragment,
  34871. { key: 11 },
  34872. [
  34873. vue.createCommentVNode(" 继续递归 "),
  34874. vue.createElementVNode("view", {
  34875. id: n.attrs.id,
  34876. class: vue.normalizeClass("_block _" + n.name + " " + n.attrs.class),
  34877. style: vue.normalizeStyle(n.f + ";" + n.attrs.style)
  34878. }, [
  34879. (vue.openBlock(true), vue.createElementBlock(
  34880. vue.Fragment,
  34881. null,
  34882. vue.renderList(n.children, (n2, j) => {
  34883. return vue.openBlock(), vue.createBlock(_component_node, {
  34884. key: j,
  34885. style: vue.normalizeStyle(n2.f),
  34886. name: n2.name,
  34887. attrs: n2.attrs,
  34888. childs: n2.children,
  34889. opts: $props.opts
  34890. }, null, 8, ["style", "name", "attrs", "childs", "opts"]);
  34891. }),
  34892. 128
  34893. /* KEYED_FRAGMENT */
  34894. ))
  34895. ], 14, ["id"])
  34896. ],
  34897. 2112
  34898. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  34899. )) : (vue.openBlock(), vue.createBlock(_component_node, {
  34900. key: 12,
  34901. style: vue.normalizeStyle(n.f),
  34902. name: n.name,
  34903. attrs: n.attrs,
  34904. childs: n.children,
  34905. opts: $props.opts
  34906. }, null, 8, ["style", "name", "attrs", "childs", "opts"]))
  34907. ],
  34908. 64
  34909. /* STABLE_FRAGMENT */
  34910. );
  34911. }),
  34912. 128
  34913. /* KEYED_FRAGMENT */
  34914. ))
  34915. ], 14, ["id"]);
  34916. }
  34917. if (typeof block0 === "function")
  34918. block0(_sfc_main$I);
  34919. const node = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["render", _sfc_render$H], ["__scopeId", "data-v-c65e823d"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/uni_modules/uv-parse/components/uv-parse/node/node.vue"]]);
  34920. const config = {
  34921. // 信任的标签(保持标签名不变)
  34922. trustTags: makeMap("a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video"),
  34923. // 块级标签(转为 div,其他的非信任标签转为 span)
  34924. blockTags: makeMap("address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section"),
  34925. // 行内标签
  34926. inlineTags: makeMap("abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup"),
  34927. // 要移除的标签
  34928. ignoreTags: makeMap("area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr"),
  34929. // 自闭合的标签
  34930. voidTags: makeMap("area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr"),
  34931. // html 实体
  34932. entities: {
  34933. lt: "<",
  34934. gt: ">",
  34935. quot: '"',
  34936. apos: "'",
  34937. ensp: " ",
  34938. emsp: " ",
  34939. nbsp: " ",
  34940. semi: ";",
  34941. ndash: "–",
  34942. mdash: "—",
  34943. middot: "·",
  34944. lsquo: "‘",
  34945. rsquo: "’",
  34946. ldquo: "“",
  34947. rdquo: "”",
  34948. bull: "•",
  34949. hellip: "…",
  34950. larr: "←",
  34951. uarr: "↑",
  34952. rarr: "→",
  34953. darr: "↓"
  34954. },
  34955. // 默认的标签样式
  34956. tagStyle: {
  34957. address: "font-style:italic",
  34958. big: "display:inline;font-size:1.2em",
  34959. caption: "display:table-caption;text-align:center",
  34960. center: "text-align:center",
  34961. cite: "font-style:italic",
  34962. dd: "margin-left:40px",
  34963. mark: "background-color:yellow",
  34964. pre: "font-family:monospace;white-space:pre",
  34965. s: "text-decoration:line-through",
  34966. small: "display:inline;font-size:0.8em",
  34967. strike: "text-decoration:line-through",
  34968. u: "text-decoration:underline"
  34969. },
  34970. // svg 大小写对照表
  34971. svgDict: {
  34972. animatetransform: "animateTransform",
  34973. lineargradient: "linearGradient",
  34974. viewbox: "viewBox",
  34975. attributename: "attributeName",
  34976. repeatcount: "repeatCount",
  34977. repeatdur: "repeatDur"
  34978. }
  34979. };
  34980. const tagSelector = {};
  34981. const {
  34982. windowWidth
  34983. } = uni.getSystemInfoSync();
  34984. const blankChar = makeMap(" ,\r,\n, ,\f");
  34985. let idIndex = 0;
  34986. config.ignoreTags.iframe = void 0;
  34987. config.trustTags.iframe = true;
  34988. config.ignoreTags.embed = void 0;
  34989. config.trustTags.embed = true;
  34990. function makeMap(str) {
  34991. const map = /* @__PURE__ */ Object.create(null);
  34992. const list2 = str.split(",");
  34993. for (let i = list2.length; i--; ) {
  34994. map[list2[i]] = true;
  34995. }
  34996. return map;
  34997. }
  34998. function decodeEntity(str, amp) {
  34999. let i = str.indexOf("&");
  35000. while (i !== -1) {
  35001. const j = str.indexOf(";", i + 3);
  35002. let code2;
  35003. if (j === -1)
  35004. break;
  35005. if (str[i + 1] === "#") {
  35006. code2 = parseInt((str[i + 2] === "x" ? "0" : "") + str.substring(i + 2, j));
  35007. if (!isNaN(code2)) {
  35008. str = str.substr(0, i) + String.fromCharCode(code2) + str.substr(j + 1);
  35009. }
  35010. } else {
  35011. code2 = str.substring(i + 1, j);
  35012. if (config.entities[code2] || code2 === "amp" && amp) {
  35013. str = str.substr(0, i) + (config.entities[code2] || "&") + str.substr(j + 1);
  35014. }
  35015. }
  35016. i = str.indexOf("&", i + 1);
  35017. }
  35018. return str;
  35019. }
  35020. function mergeNodes(nodes) {
  35021. let i = nodes.length - 1;
  35022. for (let j = i; j >= -1; j--) {
  35023. if (j === -1 || nodes[j].c || !nodes[j].name || nodes[j].name !== "div" && nodes[j].name !== "p" && nodes[j].name[0] !== "h" || (nodes[j].attrs.style || "").includes("inline")) {
  35024. if (i - j >= 5) {
  35025. nodes.splice(j + 1, i - j, {
  35026. name: "div",
  35027. attrs: {},
  35028. children: nodes.slice(j + 1, i + 1)
  35029. });
  35030. }
  35031. i = j - 1;
  35032. }
  35033. }
  35034. }
  35035. function Parser(vm) {
  35036. this.options = vm || {};
  35037. this.tagStyle = Object.assign({}, config.tagStyle, this.options.tagStyle);
  35038. this.imgList = vm.imgList || [];
  35039. this.imgList._unloadimgs = 0;
  35040. this.plugins = vm.plugins || [];
  35041. this.attrs = /* @__PURE__ */ Object.create(null);
  35042. this.stack = [];
  35043. this.nodes = [];
  35044. this.pre = (this.options.containerStyle || "").includes("white-space") && this.options.containerStyle.includes("pre") ? 2 : 0;
  35045. }
  35046. Parser.prototype.parse = function(content) {
  35047. for (let i = this.plugins.length; i--; ) {
  35048. if (this.plugins[i].onUpdate) {
  35049. content = this.plugins[i].onUpdate(content, config) || content;
  35050. }
  35051. }
  35052. new Lexer(this).parse(content);
  35053. while (this.stack.length) {
  35054. this.popNode();
  35055. }
  35056. if (this.nodes.length > 50) {
  35057. mergeNodes(this.nodes);
  35058. }
  35059. return this.nodes;
  35060. };
  35061. Parser.prototype.expose = function() {
  35062. for (let i = this.stack.length; i--; ) {
  35063. const item = this.stack[i];
  35064. if (item.c || item.name === "a" || item.name === "video" || item.name === "audio")
  35065. return;
  35066. item.c = 1;
  35067. }
  35068. };
  35069. Parser.prototype.hook = function(node2) {
  35070. for (let i = this.plugins.length; i--; ) {
  35071. if (this.plugins[i].onParse && this.plugins[i].onParse(node2, this) === false) {
  35072. return false;
  35073. }
  35074. }
  35075. return true;
  35076. };
  35077. Parser.prototype.getUrl = function(url2) {
  35078. const domain = this.options.domain;
  35079. if (url2[0] === "/") {
  35080. if (url2[1] === "/") {
  35081. url2 = (domain ? domain.split("://")[0] : "http") + ":" + url2;
  35082. } else if (domain) {
  35083. url2 = domain + url2;
  35084. } else {
  35085. url2 = plus.io.convertLocalFileSystemURL(url2);
  35086. }
  35087. } else if (!url2.includes("data:") && !url2.includes("://")) {
  35088. if (domain) {
  35089. url2 = domain + "/" + url2;
  35090. } else {
  35091. url2 = plus.io.convertLocalFileSystemURL(url2);
  35092. }
  35093. }
  35094. return url2;
  35095. };
  35096. Parser.prototype.parseStyle = function(node2) {
  35097. const attrs = node2.attrs;
  35098. const list2 = (this.tagStyle[node2.name] || "").split(";").concat((attrs.style || "").split(";"));
  35099. const styleObj = {};
  35100. let tmp = "";
  35101. if (attrs.id && !this.xml) {
  35102. if (this.options.useAnchor) {
  35103. this.expose();
  35104. } else if (node2.name !== "img" && node2.name !== "a" && node2.name !== "video" && node2.name !== "audio") {
  35105. attrs.id = void 0;
  35106. }
  35107. }
  35108. if (attrs.width) {
  35109. styleObj.width = parseFloat(attrs.width) + (attrs.width.includes("%") ? "%" : "px");
  35110. attrs.width = void 0;
  35111. }
  35112. if (attrs.height) {
  35113. styleObj.height = parseFloat(attrs.height) + (attrs.height.includes("%") ? "%" : "px");
  35114. attrs.height = void 0;
  35115. }
  35116. for (let i = 0, len = list2.length; i < len; i++) {
  35117. const info = list2[i].split(":");
  35118. if (info.length < 2)
  35119. continue;
  35120. const key = info.shift().trim().toLowerCase();
  35121. let value = info.join(":").trim();
  35122. if (value[0] === "-" && value.lastIndexOf("-") > 0 || value.includes("safe")) {
  35123. tmp += `;${key}:${value}`;
  35124. } else if (!styleObj[key] || value.includes("import") || !styleObj[key].includes("import")) {
  35125. if (value.includes("url")) {
  35126. let j = value.indexOf("(") + 1;
  35127. if (j) {
  35128. while (value[j] === '"' || value[j] === "'" || blankChar[value[j]]) {
  35129. j++;
  35130. }
  35131. value = value.substr(0, j) + this.getUrl(value.substr(j));
  35132. }
  35133. } else if (value.includes("rpx")) {
  35134. value = value.replace(/[0-9.]+\s*rpx/g, ($) => parseFloat($) * windowWidth / 750 + "px");
  35135. }
  35136. styleObj[key] = value;
  35137. }
  35138. }
  35139. node2.attrs.style = tmp;
  35140. return styleObj;
  35141. };
  35142. Parser.prototype.onTagName = function(name) {
  35143. this.tagName = this.xml ? name : name.toLowerCase();
  35144. if (this.tagName === "svg") {
  35145. this.xml = (this.xml || 0) + 1;
  35146. config.ignoreTags.style = void 0;
  35147. }
  35148. };
  35149. Parser.prototype.onAttrName = function(name) {
  35150. name = this.xml ? name : name.toLowerCase();
  35151. if (name.substr(0, 5) === "data-") {
  35152. if (name === "data-src" && !this.attrs.src) {
  35153. this.attrName = "src";
  35154. } else if (this.tagName === "img" || this.tagName === "a") {
  35155. this.attrName = name;
  35156. } else {
  35157. this.attrName = void 0;
  35158. }
  35159. } else {
  35160. this.attrName = name;
  35161. this.attrs[name] = "T";
  35162. }
  35163. };
  35164. Parser.prototype.onAttrVal = function(val) {
  35165. const name = this.attrName || "";
  35166. if (name === "style" || name === "href") {
  35167. this.attrs[name] = decodeEntity(val, true);
  35168. } else if (name.includes("src")) {
  35169. this.attrs[name] = this.getUrl(decodeEntity(val, true));
  35170. } else if (name) {
  35171. this.attrs[name] = val;
  35172. }
  35173. };
  35174. Parser.prototype.onOpenTag = function(selfClose) {
  35175. const node2 = /* @__PURE__ */ Object.create(null);
  35176. node2.name = this.tagName;
  35177. node2.attrs = this.attrs;
  35178. if (this.options.nodes.length) {
  35179. node2.type = "node";
  35180. }
  35181. this.attrs = /* @__PURE__ */ Object.create(null);
  35182. const attrs = node2.attrs;
  35183. const parent = this.stack[this.stack.length - 1];
  35184. const siblings = parent ? parent.children : this.nodes;
  35185. const close = this.xml ? selfClose : config.voidTags[node2.name];
  35186. if (tagSelector[node2.name]) {
  35187. attrs.class = tagSelector[node2.name] + (attrs.class ? " " + attrs.class : "");
  35188. }
  35189. if (node2.name === "embed") {
  35190. this.expose();
  35191. }
  35192. if (node2.name === "video" || node2.name === "audio") {
  35193. if (node2.name === "video" && !attrs.id) {
  35194. attrs.id = "v" + idIndex++;
  35195. }
  35196. if (!attrs.controls && !attrs.autoplay) {
  35197. attrs.controls = "T";
  35198. }
  35199. node2.src = [];
  35200. if (attrs.src) {
  35201. node2.src.push(attrs.src);
  35202. attrs.src = void 0;
  35203. }
  35204. this.expose();
  35205. }
  35206. if (close) {
  35207. if (!this.hook(node2) || config.ignoreTags[node2.name]) {
  35208. if (node2.name === "base" && !this.options.domain) {
  35209. this.options.domain = attrs.href;
  35210. } else if (node2.name === "source" && parent && (parent.name === "video" || parent.name === "audio") && attrs.src) {
  35211. parent.src.push(attrs.src);
  35212. }
  35213. return;
  35214. }
  35215. const styleObj = this.parseStyle(node2);
  35216. if (node2.name === "img") {
  35217. if (attrs.src) {
  35218. if (attrs.src.includes("webp")) {
  35219. node2.webp = "T";
  35220. }
  35221. if (attrs.src.includes("data:") && !attrs["original-src"]) {
  35222. attrs.ignore = "T";
  35223. }
  35224. if (!attrs.ignore || node2.webp || attrs.src.includes("cloud://")) {
  35225. for (let i = this.stack.length; i--; ) {
  35226. const item = this.stack[i];
  35227. if (item.name === "a") {
  35228. node2.a = item.attrs;
  35229. }
  35230. if (item.name === "table" && !node2.webp && !attrs.src.includes("cloud://")) {
  35231. if (!styleObj.display || styleObj.display.includes("inline")) {
  35232. node2.t = "inline-block";
  35233. } else {
  35234. node2.t = styleObj.display;
  35235. }
  35236. styleObj.display = void 0;
  35237. }
  35238. item.c = 1;
  35239. }
  35240. attrs.i = this.imgList.length.toString();
  35241. let src = attrs["original-src"] || attrs.src;
  35242. this.imgList.push(src);
  35243. if (!node2.t) {
  35244. this.imgList._unloadimgs += 1;
  35245. }
  35246. if (this.options.lazyLoad) {
  35247. attrs["data-src"] = attrs.src;
  35248. attrs.src = void 0;
  35249. }
  35250. }
  35251. }
  35252. if (styleObj.display === "inline") {
  35253. styleObj.display = "";
  35254. }
  35255. if (attrs.ignore) {
  35256. styleObj["max-width"] = styleObj["max-width"] || "100%";
  35257. attrs.style += ";-webkit-touch-callout:none";
  35258. }
  35259. if (parseInt(styleObj.width) > windowWidth) {
  35260. styleObj.height = void 0;
  35261. }
  35262. if (!isNaN(parseInt(styleObj.width))) {
  35263. node2.w = "T";
  35264. }
  35265. if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes("%") || parent && (parent.attrs.style || "").includes("height"))) {
  35266. node2.h = "T";
  35267. }
  35268. } else if (node2.name === "svg") {
  35269. siblings.push(node2);
  35270. this.stack.push(node2);
  35271. this.popNode();
  35272. return;
  35273. }
  35274. for (const key in styleObj) {
  35275. if (styleObj[key]) {
  35276. attrs.style += `;${key}:${styleObj[key].replace(" !important", "")}`;
  35277. }
  35278. }
  35279. attrs.style = attrs.style.substr(1) || void 0;
  35280. } else {
  35281. if ((node2.name === "pre" || (attrs.style || "").includes("white-space") && attrs.style.includes("pre")) && this.pre !== 2) {
  35282. this.pre = node2.pre = 1;
  35283. }
  35284. node2.children = [];
  35285. this.stack.push(node2);
  35286. }
  35287. siblings.push(node2);
  35288. };
  35289. Parser.prototype.onCloseTag = function(name) {
  35290. name = this.xml ? name : name.toLowerCase();
  35291. let i;
  35292. for (i = this.stack.length; i--; ) {
  35293. if (this.stack[i].name === name)
  35294. break;
  35295. }
  35296. if (i !== -1) {
  35297. while (this.stack.length > i) {
  35298. this.popNode();
  35299. }
  35300. } else if (name === "p" || name === "br") {
  35301. const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes;
  35302. siblings.push({
  35303. name,
  35304. attrs: {
  35305. class: tagSelector[name] || "",
  35306. style: this.tagStyle[name] || ""
  35307. }
  35308. });
  35309. }
  35310. };
  35311. Parser.prototype.popNode = function() {
  35312. const node2 = this.stack.pop();
  35313. let attrs = node2.attrs;
  35314. const children = node2.children;
  35315. const parent = this.stack[this.stack.length - 1];
  35316. const siblings = parent ? parent.children : this.nodes;
  35317. if (!this.hook(node2) || config.ignoreTags[node2.name]) {
  35318. if (node2.name === "title" && children.length && children[0].type === "text" && this.options.setTitle) {
  35319. uni.setNavigationBarTitle({
  35320. title: children[0].text
  35321. });
  35322. }
  35323. siblings.pop();
  35324. return;
  35325. }
  35326. if (node2.pre && this.pre !== 2) {
  35327. this.pre = node2.pre = void 0;
  35328. for (let i = this.stack.length; i--; ) {
  35329. if (this.stack[i].pre) {
  35330. this.pre = 1;
  35331. }
  35332. }
  35333. }
  35334. const styleObj = {};
  35335. if (node2.name === "svg") {
  35336. if (this.xml > 1) {
  35337. this.xml--;
  35338. return;
  35339. }
  35340. let src = "";
  35341. const style = attrs.style;
  35342. attrs.style = "";
  35343. attrs.xmlns = "http://www.w3.org/2000/svg";
  35344. (function traversal(node3) {
  35345. if (node3.type === "text") {
  35346. src += node3.text;
  35347. return;
  35348. }
  35349. const name = config.svgDict[node3.name] || node3.name;
  35350. src += "<" + name;
  35351. for (const item in node3.attrs) {
  35352. const val = node3.attrs[item];
  35353. if (val) {
  35354. src += ` ${config.svgDict[item] || item}="${val}"`;
  35355. }
  35356. }
  35357. if (!node3.children) {
  35358. src += "/>";
  35359. } else {
  35360. src += ">";
  35361. for (let i = 0; i < node3.children.length; i++) {
  35362. traversal(node3.children[i]);
  35363. }
  35364. src += "</" + name + ">";
  35365. }
  35366. })(node2);
  35367. node2.name = "img";
  35368. node2.attrs = {
  35369. src: "data:image/svg+xml;utf8," + src.replace(/#/g, "%23"),
  35370. style,
  35371. ignore: "T"
  35372. };
  35373. node2.children = void 0;
  35374. this.xml = false;
  35375. config.ignoreTags.style = true;
  35376. return;
  35377. }
  35378. if (attrs.align) {
  35379. if (node2.name === "table") {
  35380. if (attrs.align === "center") {
  35381. styleObj["margin-inline-start"] = styleObj["margin-inline-end"] = "auto";
  35382. } else {
  35383. styleObj.float = attrs.align;
  35384. }
  35385. } else {
  35386. styleObj["text-align"] = attrs.align;
  35387. }
  35388. attrs.align = void 0;
  35389. }
  35390. if (attrs.dir) {
  35391. styleObj.direction = attrs.dir;
  35392. attrs.dir = void 0;
  35393. }
  35394. if (node2.name === "font") {
  35395. if (attrs.color) {
  35396. styleObj.color = attrs.color;
  35397. attrs.color = void 0;
  35398. }
  35399. if (attrs.face) {
  35400. styleObj["font-family"] = attrs.face;
  35401. attrs.face = void 0;
  35402. }
  35403. if (attrs.size) {
  35404. let size = parseInt(attrs.size);
  35405. if (!isNaN(size)) {
  35406. if (size < 1) {
  35407. size = 1;
  35408. } else if (size > 7) {
  35409. size = 7;
  35410. }
  35411. styleObj["font-size"] = ["x-small", "small", "medium", "large", "x-large", "xx-large", "xxx-large"][size - 1];
  35412. }
  35413. attrs.size = void 0;
  35414. }
  35415. }
  35416. if ((attrs.class || "").includes("align-center")) {
  35417. styleObj["text-align"] = "center";
  35418. }
  35419. Object.assign(styleObj, this.parseStyle(node2));
  35420. if (node2.name !== "table" && parseInt(styleObj.width) > windowWidth) {
  35421. styleObj["max-width"] = "100%";
  35422. styleObj["box-sizing"] = "border-box";
  35423. }
  35424. if (config.blockTags[node2.name]) {
  35425. node2.name = "div";
  35426. } else if (!config.trustTags[node2.name] && !this.xml) {
  35427. node2.name = "span";
  35428. }
  35429. if (node2.name === "a" || node2.name === "ad" || node2.name === "iframe") {
  35430. this.expose();
  35431. } else if (node2.name === "video") {
  35432. if ((styleObj.height || "").includes("auto")) {
  35433. styleObj.height = void 0;
  35434. }
  35435. let str = '<video style="width:100%;height:100%"';
  35436. for (const item in attrs) {
  35437. if (attrs[item]) {
  35438. str += " " + item + '="' + attrs[item] + '"';
  35439. }
  35440. }
  35441. if (this.options.pauseVideo) {
  35442. str += ` onplay="this.dispatchEvent(new CustomEvent('vplay',{bubbles:!0}));for(var e=document.getElementsByTagName('video'),t=0;t<e.length;t++)e[t]!=this&&e[t].pause()"`;
  35443. }
  35444. str += ">";
  35445. for (let i = 0; i < node2.src.length; i++) {
  35446. str += '<source src="' + node2.src[i] + '">';
  35447. }
  35448. str += "</video>";
  35449. node2.html = str;
  35450. } else if ((node2.name === "ul" || node2.name === "ol") && node2.c) {
  35451. const types2 = {
  35452. a: "lower-alpha",
  35453. A: "upper-alpha",
  35454. i: "lower-roman",
  35455. I: "upper-roman"
  35456. };
  35457. if (types2[attrs.type]) {
  35458. attrs.style += ";list-style-type:" + types2[attrs.type];
  35459. attrs.type = void 0;
  35460. }
  35461. for (let i = children.length; i--; ) {
  35462. if (children[i].name === "li") {
  35463. children[i].c = 1;
  35464. }
  35465. }
  35466. } else if (node2.name === "table") {
  35467. let padding = parseFloat(attrs.cellpadding);
  35468. let spacing = parseFloat(attrs.cellspacing);
  35469. const border = parseFloat(attrs.border);
  35470. const bordercolor = styleObj["border-color"];
  35471. const borderstyle = styleObj["border-style"];
  35472. if (node2.c) {
  35473. if (isNaN(padding)) {
  35474. padding = 2;
  35475. }
  35476. if (isNaN(spacing)) {
  35477. spacing = 2;
  35478. }
  35479. }
  35480. if (border) {
  35481. attrs.style += `;border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"}`;
  35482. }
  35483. if (node2.flag && node2.c) {
  35484. styleObj.display = "grid";
  35485. if (spacing) {
  35486. styleObj["grid-gap"] = spacing + "px";
  35487. styleObj.padding = spacing + "px";
  35488. } else if (border) {
  35489. attrs.style += ";border-left:0;border-top:0";
  35490. }
  35491. const width = [];
  35492. const trList = [];
  35493. const cells = [];
  35494. const map = {};
  35495. (function traversal(nodes) {
  35496. for (let i = 0; i < nodes.length; i++) {
  35497. if (nodes[i].name === "tr") {
  35498. trList.push(nodes[i]);
  35499. } else {
  35500. traversal(nodes[i].children || []);
  35501. }
  35502. }
  35503. })(children);
  35504. for (let row = 1; row <= trList.length; row++) {
  35505. let col = 1;
  35506. for (let j = 0; j < trList[row - 1].children.length; j++) {
  35507. const td = trList[row - 1].children[j];
  35508. if (td.name === "td" || td.name === "th") {
  35509. while (map[row + "." + col]) {
  35510. col++;
  35511. }
  35512. let style = td.attrs.style || "";
  35513. let start = style.indexOf("width") ? style.indexOf(";width") : 0;
  35514. if (start !== -1) {
  35515. let end = style.indexOf(";", start + 6);
  35516. if (end === -1) {
  35517. end = style.length;
  35518. }
  35519. if (!td.attrs.colspan) {
  35520. width[col] = style.substring(start ? start + 7 : 6, end);
  35521. }
  35522. style = style.substr(0, start) + style.substr(end);
  35523. }
  35524. style += ";display:flex";
  35525. start = style.indexOf("vertical-align");
  35526. if (start !== -1) {
  35527. const val = style.substr(start + 15, 10);
  35528. if (val.includes("middle")) {
  35529. style += ";align-items:center";
  35530. } else if (val.includes("bottom")) {
  35531. style += ";align-items:flex-end";
  35532. }
  35533. } else {
  35534. style += ";align-items:center";
  35535. }
  35536. start = style.indexOf("text-align");
  35537. if (start !== -1) {
  35538. const val = style.substr(start + 11, 10);
  35539. if (val.includes("center")) {
  35540. style += ";justify-content: center";
  35541. } else if (val.includes("right")) {
  35542. style += ";justify-content: right";
  35543. }
  35544. }
  35545. style = (border ? `;border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"}` + (spacing ? "" : ";border-right:0;border-bottom:0") : "") + (padding ? `;padding:${padding}px` : "") + ";" + style;
  35546. if (td.attrs.colspan) {
  35547. style += `;grid-column-start:${col};grid-column-end:${col + parseInt(td.attrs.colspan)}`;
  35548. if (!td.attrs.rowspan) {
  35549. style += `;grid-row-start:${row};grid-row-end:${row + 1}`;
  35550. }
  35551. col += parseInt(td.attrs.colspan) - 1;
  35552. }
  35553. if (td.attrs.rowspan) {
  35554. style += `;grid-row-start:${row};grid-row-end:${row + parseInt(td.attrs.rowspan)}`;
  35555. if (!td.attrs.colspan) {
  35556. style += `;grid-column-start:${col};grid-column-end:${col + 1}`;
  35557. }
  35558. for (let rowspan = 1; rowspan < td.attrs.rowspan; rowspan++) {
  35559. for (let colspan = 0; colspan < (td.attrs.colspan || 1); colspan++) {
  35560. map[row + rowspan + "." + (col - colspan)] = 1;
  35561. }
  35562. }
  35563. }
  35564. if (style) {
  35565. td.attrs.style = style;
  35566. }
  35567. cells.push(td);
  35568. col++;
  35569. }
  35570. }
  35571. if (row === 1) {
  35572. let temp = "";
  35573. for (let i = 1; i < col; i++) {
  35574. temp += (width[i] ? width[i] : "auto") + " ";
  35575. }
  35576. styleObj["grid-template-columns"] = temp;
  35577. }
  35578. }
  35579. node2.children = cells;
  35580. } else {
  35581. if (node2.c) {
  35582. styleObj.display = "table";
  35583. }
  35584. if (!isNaN(spacing)) {
  35585. styleObj["border-spacing"] = spacing + "px";
  35586. }
  35587. if (border || padding) {
  35588. (function traversal(nodes) {
  35589. for (let i = 0; i < nodes.length; i++) {
  35590. const td = nodes[i];
  35591. if (td.name === "th" || td.name === "td") {
  35592. if (border) {
  35593. td.attrs.style = `border:${border}px ${borderstyle || "solid"} ${bordercolor || "gray"};${td.attrs.style || ""}`;
  35594. }
  35595. if (padding) {
  35596. td.attrs.style = `padding:${padding}px;${td.attrs.style || ""}`;
  35597. }
  35598. } else if (td.children) {
  35599. traversal(td.children);
  35600. }
  35601. }
  35602. })(children);
  35603. }
  35604. }
  35605. if (this.options.scrollTable && !(attrs.style || "").includes("inline")) {
  35606. const table = Object.assign({}, node2);
  35607. node2.name = "div";
  35608. node2.attrs = {
  35609. style: "overflow:auto"
  35610. };
  35611. node2.children = [table];
  35612. attrs = table.attrs;
  35613. }
  35614. } else if ((node2.name === "td" || node2.name === "th") && (attrs.colspan || attrs.rowspan)) {
  35615. for (let i = this.stack.length; i--; ) {
  35616. if (this.stack[i].name === "table") {
  35617. this.stack[i].flag = 1;
  35618. break;
  35619. }
  35620. }
  35621. } else if (node2.name === "ruby") {
  35622. node2.name = "span";
  35623. for (let i = 0; i < children.length - 1; i++) {
  35624. if (children[i].type === "text" && children[i + 1].name === "rt") {
  35625. children[i] = {
  35626. name: "div",
  35627. attrs: {
  35628. style: "display:inline-block;text-align:center"
  35629. },
  35630. children: [{
  35631. name: "div",
  35632. attrs: {
  35633. style: "font-size:50%;" + (children[i + 1].attrs.style || "")
  35634. },
  35635. children: children[i + 1].children
  35636. }, children[i]]
  35637. };
  35638. children.splice(i + 1, 1);
  35639. }
  35640. }
  35641. } else if (node2.c) {
  35642. (function traversal(node3) {
  35643. node3.c = 2;
  35644. for (let i = node3.children.length; i--; ) {
  35645. const child = node3.children[i];
  35646. if (child.name && (config.inlineTags[child.name] || (child.attrs.style || "").includes("inline") && child.children) && !child.c) {
  35647. traversal(child);
  35648. }
  35649. if (!child.c || child.name === "table") {
  35650. node3.c = 1;
  35651. }
  35652. }
  35653. })(node2);
  35654. }
  35655. if ((styleObj.display || "").includes("flex") && !node2.c) {
  35656. for (let i = children.length; i--; ) {
  35657. const item = children[i];
  35658. if (item.f) {
  35659. item.attrs.style = (item.attrs.style || "") + item.f;
  35660. item.f = void 0;
  35661. }
  35662. }
  35663. }
  35664. const flex = parent && ((parent.attrs.style || "").includes("flex") || (parent.attrs.style || "").includes("grid")) && !node2.c;
  35665. if (flex) {
  35666. node2.f = ";max-width:100%";
  35667. }
  35668. if (children.length >= 50 && node2.c && !(styleObj.display || "").includes("flex")) {
  35669. mergeNodes(children);
  35670. }
  35671. for (const key in styleObj) {
  35672. if (styleObj[key]) {
  35673. const val = `;${key}:${styleObj[key].replace(" !important", "")}`;
  35674. if (flex && (key.includes("flex") && key !== "flex-direction" || key === "align-self" || key.includes("grid") || styleObj[key][0] === "-" || key.includes("width") && val.includes("%"))) {
  35675. node2.f += val;
  35676. if (key === "width") {
  35677. attrs.style += ";width:100%";
  35678. }
  35679. } else {
  35680. attrs.style += val;
  35681. }
  35682. }
  35683. }
  35684. attrs.style = attrs.style.substr(1) || void 0;
  35685. };
  35686. Parser.prototype.onText = function(text) {
  35687. if (!this.pre) {
  35688. let trim2 = "";
  35689. let flag2;
  35690. for (let i = 0, len = text.length; i < len; i++) {
  35691. if (!blankChar[text[i]]) {
  35692. trim2 += text[i];
  35693. } else {
  35694. if (trim2[trim2.length - 1] !== " ") {
  35695. trim2 += " ";
  35696. }
  35697. if (text[i] === "\n" && !flag2) {
  35698. flag2 = true;
  35699. }
  35700. }
  35701. }
  35702. if (trim2 === " ") {
  35703. if (flag2)
  35704. return;
  35705. else {
  35706. const parent = this.stack[this.stack.length - 1];
  35707. if (parent && parent.name[0] === "t")
  35708. return;
  35709. }
  35710. }
  35711. text = trim2;
  35712. }
  35713. const node2 = /* @__PURE__ */ Object.create(null);
  35714. node2.type = "text";
  35715. node2.text = decodeEntity(text);
  35716. if (this.hook(node2)) {
  35717. const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes;
  35718. siblings.push(node2);
  35719. }
  35720. };
  35721. function Lexer(handler) {
  35722. this.handler = handler;
  35723. }
  35724. Lexer.prototype.parse = function(content) {
  35725. this.content = content || "";
  35726. this.i = 0;
  35727. this.start = 0;
  35728. this.state = this.text;
  35729. for (let len = this.content.length; this.i !== -1 && this.i < len; ) {
  35730. this.state();
  35731. }
  35732. };
  35733. Lexer.prototype.checkClose = function(method2) {
  35734. const selfClose = this.content[this.i] === "/";
  35735. if (this.content[this.i] === ">" || selfClose && this.content[this.i + 1] === ">") {
  35736. if (method2) {
  35737. this.handler[method2](this.content.substring(this.start, this.i));
  35738. }
  35739. this.i += selfClose ? 2 : 1;
  35740. this.start = this.i;
  35741. this.handler.onOpenTag(selfClose);
  35742. if (this.handler.tagName === "script") {
  35743. this.i = this.content.indexOf("</", this.i);
  35744. if (this.i !== -1) {
  35745. this.i += 2;
  35746. this.start = this.i;
  35747. }
  35748. this.state = this.endTag;
  35749. } else {
  35750. this.state = this.text;
  35751. }
  35752. return true;
  35753. }
  35754. return false;
  35755. };
  35756. Lexer.prototype.text = function() {
  35757. this.i = this.content.indexOf("<", this.i);
  35758. if (this.i === -1) {
  35759. if (this.start < this.content.length) {
  35760. this.handler.onText(this.content.substring(this.start, this.content.length));
  35761. }
  35762. return;
  35763. }
  35764. const c2 = this.content[this.i + 1];
  35765. if (c2 >= "a" && c2 <= "z" || c2 >= "A" && c2 <= "Z") {
  35766. if (this.start !== this.i) {
  35767. this.handler.onText(this.content.substring(this.start, this.i));
  35768. }
  35769. this.start = ++this.i;
  35770. this.state = this.tagName;
  35771. } else if (c2 === "/" || c2 === "!" || c2 === "?") {
  35772. if (this.start !== this.i) {
  35773. this.handler.onText(this.content.substring(this.start, this.i));
  35774. }
  35775. const next = this.content[this.i + 2];
  35776. if (c2 === "/" && (next >= "a" && next <= "z" || next >= "A" && next <= "Z")) {
  35777. this.i += 2;
  35778. this.start = this.i;
  35779. this.state = this.endTag;
  35780. return;
  35781. }
  35782. let end = "-->";
  35783. if (c2 !== "!" || this.content[this.i + 2] !== "-" || this.content[this.i + 3] !== "-") {
  35784. end = ">";
  35785. }
  35786. this.i = this.content.indexOf(end, this.i);
  35787. if (this.i !== -1) {
  35788. this.i += end.length;
  35789. this.start = this.i;
  35790. }
  35791. } else {
  35792. this.i++;
  35793. }
  35794. };
  35795. Lexer.prototype.tagName = function() {
  35796. if (blankChar[this.content[this.i]]) {
  35797. this.handler.onTagName(this.content.substring(this.start, this.i));
  35798. while (blankChar[this.content[++this.i]])
  35799. ;
  35800. if (this.i < this.content.length && !this.checkClose()) {
  35801. this.start = this.i;
  35802. this.state = this.attrName;
  35803. }
  35804. } else if (!this.checkClose("onTagName")) {
  35805. this.i++;
  35806. }
  35807. };
  35808. Lexer.prototype.attrName = function() {
  35809. let c2 = this.content[this.i];
  35810. if (blankChar[c2] || c2 === "=") {
  35811. this.handler.onAttrName(this.content.substring(this.start, this.i));
  35812. let needVal = c2 === "=";
  35813. const len = this.content.length;
  35814. while (++this.i < len) {
  35815. c2 = this.content[this.i];
  35816. if (!blankChar[c2]) {
  35817. if (this.checkClose())
  35818. return;
  35819. if (needVal) {
  35820. this.start = this.i;
  35821. this.state = this.attrVal;
  35822. return;
  35823. }
  35824. if (this.content[this.i] === "=") {
  35825. needVal = true;
  35826. } else {
  35827. this.start = this.i;
  35828. this.state = this.attrName;
  35829. return;
  35830. }
  35831. }
  35832. }
  35833. } else if (!this.checkClose("onAttrName")) {
  35834. this.i++;
  35835. }
  35836. };
  35837. Lexer.prototype.attrVal = function() {
  35838. const c2 = this.content[this.i];
  35839. const len = this.content.length;
  35840. if (c2 === '"' || c2 === "'") {
  35841. this.start = ++this.i;
  35842. this.i = this.content.indexOf(c2, this.i);
  35843. if (this.i === -1)
  35844. return;
  35845. this.handler.onAttrVal(this.content.substring(this.start, this.i));
  35846. } else {
  35847. for (; this.i < len; this.i++) {
  35848. if (blankChar[this.content[this.i]]) {
  35849. this.handler.onAttrVal(this.content.substring(this.start, this.i));
  35850. break;
  35851. } else if (this.checkClose("onAttrVal"))
  35852. return;
  35853. }
  35854. }
  35855. while (blankChar[this.content[++this.i]])
  35856. ;
  35857. if (this.i < len && !this.checkClose()) {
  35858. this.start = this.i;
  35859. this.state = this.attrName;
  35860. }
  35861. };
  35862. Lexer.prototype.endTag = function() {
  35863. const c2 = this.content[this.i];
  35864. if (blankChar[c2] || c2 === ">" || c2 === "/") {
  35865. this.handler.onCloseTag(this.content.substring(this.start, this.i));
  35866. if (c2 !== ">") {
  35867. this.i = this.content.indexOf(">", this.i);
  35868. if (this.i === -1)
  35869. return;
  35870. }
  35871. this.start = ++this.i;
  35872. this.state = this.text;
  35873. } else {
  35874. this.i++;
  35875. }
  35876. };
  35877. const plugins = [];
  35878. const _sfc_main$H = {
  35879. name: "uv-parse",
  35880. data() {
  35881. return {
  35882. nodes: []
  35883. };
  35884. },
  35885. props: {
  35886. containerStyle: {
  35887. type: String,
  35888. default: ""
  35889. },
  35890. content: {
  35891. type: String,
  35892. default: ""
  35893. },
  35894. copyLink: {
  35895. type: [Boolean, String],
  35896. default: true
  35897. },
  35898. domain: String,
  35899. errorImg: {
  35900. type: String,
  35901. default: ""
  35902. },
  35903. lazyLoad: {
  35904. type: [Boolean, String],
  35905. default: false
  35906. },
  35907. loadingImg: {
  35908. type: String,
  35909. default: ""
  35910. },
  35911. pauseVideo: {
  35912. type: [Boolean, String],
  35913. default: true
  35914. },
  35915. previewImg: {
  35916. type: [Boolean, String],
  35917. default: true
  35918. },
  35919. scrollTable: [Boolean, String],
  35920. selectable: [Boolean, String],
  35921. setTitle: {
  35922. type: [Boolean, String],
  35923. default: true
  35924. },
  35925. showImgMenu: {
  35926. type: [Boolean, String],
  35927. default: true
  35928. },
  35929. tagStyle: Object,
  35930. useAnchor: [Boolean, Number]
  35931. },
  35932. emits: ["load", "ready", "imgtap", "linktap", "play", "error"],
  35933. components: {
  35934. node
  35935. },
  35936. watch: {
  35937. content(content) {
  35938. this.setContent(content);
  35939. }
  35940. },
  35941. created() {
  35942. this.plugins = [];
  35943. for (let i = plugins.length; i--; ) {
  35944. this.plugins.push(new plugins[i](this));
  35945. }
  35946. },
  35947. mounted() {
  35948. if (this.content && !this.nodes.length) {
  35949. this.setContent(this.content);
  35950. }
  35951. },
  35952. beforeDestroy() {
  35953. this._hook("onDetached");
  35954. },
  35955. methods: {
  35956. /**
  35957. * @description 将锚点跳转的范围限定在一个 scroll-view 内
  35958. * @param {Object} page scroll-view 所在页面的示例
  35959. * @param {String} selector scroll-view 的选择器
  35960. * @param {String} scrollTop scroll-view scroll-top 属性绑定的变量名
  35961. */
  35962. in(page, selector, scrollTop) {
  35963. if (page && selector && scrollTop) {
  35964. this._in = {
  35965. page,
  35966. selector,
  35967. scrollTop
  35968. };
  35969. }
  35970. },
  35971. /**
  35972. * @description 锚点跳转
  35973. * @param {String} id 要跳转的锚点 id
  35974. * @param {Number} offset 跳转位置的偏移量
  35975. * @returns {Promise}
  35976. */
  35977. navigateTo(id, offset) {
  35978. return new Promise((resolve2, reject) => {
  35979. if (!this.useAnchor) {
  35980. reject(Error("Anchor is disabled"));
  35981. return;
  35982. }
  35983. offset = offset || parseInt(this.useAnchor) || 0;
  35984. let deep = " ";
  35985. const selector = uni.createSelectorQuery().in(this._in ? this._in.page : this).select((this._in ? this._in.selector : "._root") + (id ? `${deep}#${id}` : "")).boundingClientRect();
  35986. if (this._in) {
  35987. selector.select(this._in.selector).scrollOffset().select(this._in.selector).boundingClientRect();
  35988. } else {
  35989. selector.selectViewport().scrollOffset();
  35990. }
  35991. selector.exec((res) => {
  35992. if (!res[0]) {
  35993. reject(Error("Label not found"));
  35994. return;
  35995. }
  35996. const scrollTop = res[1].scrollTop + res[0].top - (res[2] ? res[2].top : 0) + offset;
  35997. if (this._in) {
  35998. this._in.page[this._in.scrollTop] = scrollTop;
  35999. } else {
  36000. uni.pageScrollTo({
  36001. scrollTop,
  36002. duration: 300
  36003. });
  36004. }
  36005. resolve2();
  36006. });
  36007. });
  36008. },
  36009. /**
  36010. * @description 获取文本内容
  36011. * @return {String}
  36012. */
  36013. getText(nodes) {
  36014. let text = "";
  36015. (function traversal(nodes2) {
  36016. for (let i = 0; i < nodes2.length; i++) {
  36017. const node2 = nodes2[i];
  36018. if (node2.type === "text") {
  36019. text += node2.text.replace(/&amp;/g, "&");
  36020. } else if (node2.name === "br") {
  36021. text += "\n";
  36022. } else {
  36023. const isBlock = node2.name === "p" || node2.name === "div" || node2.name === "tr" || node2.name === "li" || node2.name[0] === "h" && node2.name[1] > "0" && node2.name[1] < "7";
  36024. if (isBlock && text && text[text.length - 1] !== "\n") {
  36025. text += "\n";
  36026. }
  36027. if (node2.children) {
  36028. traversal(node2.children);
  36029. }
  36030. if (isBlock && text[text.length - 1] !== "\n") {
  36031. text += "\n";
  36032. } else if (node2.name === "td" || node2.name === "th") {
  36033. text += " ";
  36034. }
  36035. }
  36036. }
  36037. })(nodes || this.nodes);
  36038. return text;
  36039. },
  36040. /**
  36041. * @description 获取内容大小和位置
  36042. * @return {Promise}
  36043. */
  36044. getRect() {
  36045. return new Promise((resolve2, reject) => {
  36046. uni.createSelectorQuery().in(this).select("#_root").boundingClientRect().exec((res) => res[0] ? resolve2(res[0]) : reject(Error("Root label not found")));
  36047. });
  36048. },
  36049. /**
  36050. * @description 暂停播放媒体
  36051. */
  36052. pauseMedia() {
  36053. for (let i = (this._videos || []).length; i--; ) {
  36054. this._videos[i].pause();
  36055. }
  36056. const command = 'for(var e=document.getElementsByTagName("video"),i=e.length;i--;)e[i].pause()';
  36057. let page = this.$parent;
  36058. while (!page.$scope)
  36059. page = page.$parent;
  36060. page.$scope.$getAppWebview().evalJS(command);
  36061. },
  36062. /**
  36063. * @description 设置媒体播放速率
  36064. * @param {Number} rate 播放速率
  36065. */
  36066. setPlaybackRate(rate) {
  36067. this.playbackRate = rate;
  36068. for (let i = (this._videos || []).length; i--; ) {
  36069. this._videos[i].playbackRate(rate);
  36070. }
  36071. const command = 'for(var e=document.getElementsByTagName("video"),i=e.length;i--;)e[i].playbackRate=' + rate;
  36072. let page = this.$parent;
  36073. while (!page.$scope)
  36074. page = page.$parent;
  36075. page.$scope.$getAppWebview().evalJS(command);
  36076. },
  36077. /**
  36078. * @description 设置内容
  36079. * @param {String} content html 内容
  36080. * @param {Boolean} append 是否在尾部追加
  36081. */
  36082. setContent(content, append) {
  36083. if (!append || !this.imgList) {
  36084. this.imgList = [];
  36085. }
  36086. const nodes = new Parser(this).parse(content);
  36087. this.$set(this, "nodes", append ? (this.nodes || []).concat(nodes) : nodes);
  36088. this._videos = [];
  36089. this.$nextTick(() => {
  36090. this._hook("onLoad");
  36091. this.$emit("load");
  36092. });
  36093. if (this.lazyLoad || this.imgList._unloadimgs < this.imgList.length / 2) {
  36094. let height = 0;
  36095. const callback = (rect) => {
  36096. if (!rect || !rect.height)
  36097. rect = {};
  36098. if (rect.height === height) {
  36099. this.$emit("ready", rect);
  36100. } else {
  36101. height = rect.height;
  36102. setTimeout(() => {
  36103. this.getRect().then(callback).catch(callback);
  36104. }, 350);
  36105. }
  36106. };
  36107. this.getRect().then(callback).catch(callback);
  36108. } else {
  36109. if (!this.imgList._unloadimgs) {
  36110. this.getRect().then((rect) => {
  36111. this.$emit("ready", rect);
  36112. }).catch(() => {
  36113. this.$emit("ready", {});
  36114. });
  36115. }
  36116. }
  36117. },
  36118. /**
  36119. * @description 调用插件钩子函数
  36120. */
  36121. _hook(name) {
  36122. for (let i = plugins.length; i--; ) {
  36123. if (this.plugins[i][name]) {
  36124. this.plugins[i][name]();
  36125. }
  36126. }
  36127. }
  36128. }
  36129. };
  36130. function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
  36131. const _component_node = vue.resolveComponent("node");
  36132. return vue.openBlock(), vue.createElementBlock(
  36133. "view",
  36134. {
  36135. id: "_root",
  36136. class: vue.normalizeClass(($props.selectable ? "_select " : "") + "_root"),
  36137. style: vue.normalizeStyle($props.containerStyle)
  36138. },
  36139. [
  36140. !$data.nodes[0] ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }, void 0, true) : (vue.openBlock(), vue.createBlock(_component_node, {
  36141. key: 1,
  36142. childs: $data.nodes,
  36143. opts: [$props.lazyLoad, $props.loadingImg, $props.errorImg, $props.showImgMenu, $props.selectable],
  36144. name: "span"
  36145. }, null, 8, ["childs", "opts"]))
  36146. ],
  36147. 6
  36148. /* CLASS, STYLE */
  36149. );
  36150. }
  36151. const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["render", _sfc_render$G], ["__scopeId", "data-v-73e89447"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/uni_modules/uv-parse/components/uv-parse/uv-parse.vue"]]);
  36152. const _sfc_main$G = {
  36153. __name: "index",
  36154. setup(__props, { expose: __expose }) {
  36155. __expose();
  36156. const route2 = useRoute();
  36157. const richViewStore = useRichViewStore();
  36158. const richViewProps = vue.computed(() => ({
  36159. ...route2.query,
  36160. content: richViewStore.content
  36161. }));
  36162. vue.watchEffect(() => {
  36163. if (richViewProps.value.title) {
  36164. uni.setNavigationBarTitle({
  36165. title: decodeURIComponent(richViewProps.value.title)
  36166. });
  36167. }
  36168. });
  36169. const __returned__ = { route: route2, richViewStore, richViewProps };
  36170. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  36171. return __returned__;
  36172. }
  36173. };
  36174. function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
  36175. const _component_uv_parse = resolveEasycom(vue.resolveDynamicComponent("uv-parse"), __easycom_0);
  36176. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  36177. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  36178. default: vue.withCtx(() => [
  36179. vue.createElementVNode("view", { class: "p-4" }, [
  36180. vue.createVNode(_component_uv_parse, {
  36181. content: $setup.richViewProps.content
  36182. }, null, 8, ["content"])
  36183. ])
  36184. ]),
  36185. _: 1
  36186. /* STABLE */
  36187. });
  36188. }
  36189. const PagesCommonRichViewIndex = /* @__PURE__ */ _export_sfc(_sfc_main$G, [["render", _sfc_render$F], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/rich-view/index.vue"]]);
  36190. const _sfc_main$F = {
  36191. __name: "index",
  36192. setup(__props, { expose: __expose }) {
  36193. __expose();
  36194. const resultInfo = vue.ref({
  36195. title: "操作成功",
  36196. description: "你已通过路由中间件校验",
  36197. details: [],
  36198. showProgress: false,
  36199. shareable: false,
  36200. footerTip: ""
  36201. });
  36202. const __returned__ = { resultInfo };
  36203. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  36204. return __returned__;
  36205. }
  36206. };
  36207. function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
  36208. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  36209. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  36210. default: vue.withCtx(() => [
  36211. vue.createElementVNode("view", { class: "h-full flex flex-col bg-gray-50" }, [
  36212. vue.createElementVNode("view", { class: "flex flex-1 flex-col items-center justify-center px-6 py-8" }, [
  36213. vue.createElementVNode("view", { class: "success-icon-container mb-8" }, [
  36214. vue.createElementVNode("view", { class: "relative" }, [
  36215. vue.createElementVNode("view", { class: "h-32 w-32 flex items-center justify-center rounded-full bg-green-500 shadow-lg" }, [
  36216. vue.createElementVNode("view", { class: "i-carbon-checkmark size-16 animate-bounce text-white" })
  36217. ]),
  36218. vue.createElementVNode("view", { class: "absolute inset-0 h-32 w-32 animate-ping border-4 border-green-200 rounded-full" }),
  36219. vue.createElementVNode("view", { class: "absolute h-36 w-36 border-2 border-green-100 rounded-full opacity-50 -inset-2" })
  36220. ])
  36221. ]),
  36222. vue.createElementVNode("view", { class: "success-info mb-8 text-center" }, [
  36223. vue.createElementVNode(
  36224. "view",
  36225. { class: "mb-3 text-2xl text-gray-800 font-bold" },
  36226. vue.toDisplayString($setup.resultInfo.title),
  36227. 1
  36228. /* TEXT */
  36229. ),
  36230. vue.createElementVNode(
  36231. "view",
  36232. { class: "max-w-sm text-base text-gray-600 leading-relaxed" },
  36233. vue.toDisplayString($setup.resultInfo.description),
  36234. 1
  36235. /* TEXT */
  36236. )
  36237. ]),
  36238. $setup.resultInfo.details && $setup.resultInfo.details.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  36239. key: 0,
  36240. class: "details-card mb-8 max-w-sm w-full"
  36241. }, [
  36242. vue.createElementVNode("view", { class: "rounded-xl bg-white p-5 shadow-sm" }, [
  36243. vue.createElementVNode("view", { class: "mb-4 flex items-center text-lg text-gray-800 font-semibold" }, [
  36244. vue.createElementVNode("view", { class: "i-carbon-information mr-2 text-lg text-primary-500" }),
  36245. vue.createTextVNode(" 详细信息 ")
  36246. ]),
  36247. vue.createElementVNode("view", { class: "space-y-3" }, [
  36248. (vue.openBlock(true), vue.createElementBlock(
  36249. vue.Fragment,
  36250. null,
  36251. vue.renderList($setup.resultInfo.details, (detail, index) => {
  36252. return vue.openBlock(), vue.createElementBlock(
  36253. "view",
  36254. {
  36255. key: index,
  36256. class: vue.normalizeClass(["flex items-center justify-between py-2", index !== $setup.resultInfo.details.length - 1 ? "border-b border-gray-100" : ""])
  36257. },
  36258. [
  36259. vue.createElementVNode(
  36260. "view",
  36261. { class: "text-sm text-gray-600" },
  36262. vue.toDisplayString(detail.label),
  36263. 1
  36264. /* TEXT */
  36265. ),
  36266. vue.createElementVNode(
  36267. "view",
  36268. { class: "text-sm text-gray-800 font-medium" },
  36269. vue.toDisplayString(detail.value),
  36270. 1
  36271. /* TEXT */
  36272. )
  36273. ],
  36274. 2
  36275. /* CLASS */
  36276. );
  36277. }),
  36278. 128
  36279. /* KEYED_FRAGMENT */
  36280. ))
  36281. ])
  36282. ])
  36283. ])) : vue.createCommentVNode("v-if", true)
  36284. ])
  36285. ])
  36286. ]),
  36287. _: 1
  36288. /* STABLE */
  36289. });
  36290. }
  36291. const PagesTipsMiddlewareIndex = /* @__PURE__ */ _export_sfc(_sfc_main$F, [["render", _sfc_render$E], ["__scopeId", "data-v-3c93bb86"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/tips/middleware/index.vue"]]);
  36292. const _sfc_main$E = {
  36293. __name: "index",
  36294. setup(__props, { expose: __expose }) {
  36295. __expose();
  36296. const pagingRef = vue.ref(null);
  36297. const dataList = vue.ref([]);
  36298. const currentPage = vue.ref(1);
  36299. const pageSize = vue.ref(10);
  36300. const total = vue.ref(0);
  36301. const isLoading = vue.ref(false);
  36302. const stats = vue.computed(() => ({
  36303. loaded: dataList.value.length,
  36304. total: total.value,
  36305. pages: Math.ceil(total.value / pageSize.value),
  36306. currentPage: currentPage.value
  36307. }));
  36308. const mockDataTypes = [
  36309. {
  36310. type: "article",
  36311. icon: "i-carbon-document",
  36312. color: "from-blue-400 to-blue-600",
  36313. titles: [
  36314. "Vue 3 Composition API 最佳实践",
  36315. "UniApp 跨平台开发指南",
  36316. "前端性能优化技巧分享",
  36317. "TypeScript 进阶使用技巧",
  36318. "移动端适配解决方案"
  36319. ]
  36320. },
  36321. {
  36322. type: "video",
  36323. icon: "i-carbon-video",
  36324. color: "from-red-400 to-red-600",
  36325. titles: [
  36326. "深入理解 JavaScript 异步编程",
  36327. "CSS Grid 布局完全指南",
  36328. "React Hooks 实战教程",
  36329. "Webpack 配置优化实践",
  36330. "Node.js 后端开发入门"
  36331. ]
  36332. },
  36333. {
  36334. type: "project",
  36335. icon: "i-carbon-code",
  36336. color: "from-green-400 to-green-600",
  36337. titles: [
  36338. "开源组件库设计与实现",
  36339. "微前端架构实践案例",
  36340. "全栈项目开发经验",
  36341. "DevOps 自动化部署",
  36342. "数据可视化项目实战"
  36343. ]
  36344. },
  36345. {
  36346. type: "tutorial",
  36347. icon: "i-carbon-education",
  36348. color: "from-purple-400 to-purple-600",
  36349. titles: [
  36350. "Git 版本控制进阶教程",
  36351. "Docker 容器化部署指南",
  36352. "API 设计最佳实践",
  36353. "代码重构技巧与方法",
  36354. "软件架构设计原则"
  36355. ]
  36356. }
  36357. ];
  36358. const mockTags = [
  36359. "前端开发",
  36360. "后端开发",
  36361. "UI设计",
  36362. "产品设计",
  36363. "数据分析",
  36364. "人工智能",
  36365. "云计算",
  36366. "微服务",
  36367. "区块链",
  36368. "物联网"
  36369. ];
  36370. function generateMockData(page, size) {
  36371. const data = [];
  36372. const startIndex = (page - 1) * size;
  36373. for (let i = 0; i < size; i++) {
  36374. const index = startIndex + i;
  36375. const dataType = mockDataTypes[index % mockDataTypes.length];
  36376. const title = dataType.titles[index % dataType.titles.length];
  36377. data.push({
  36378. id: index + 1,
  36379. type: dataType.type,
  36380. icon: dataType.icon,
  36381. color: dataType.color,
  36382. title: `${title} #${index + 1}`,
  36383. description: `这是第 ${index + 1} 条内容的详细描述,展示了丰富的功能特性和优秀的用户体验设计。内容包含了最新的技术趋势和实践经验分享。`,
  36384. tags: [
  36385. mockTags[index % mockTags.length],
  36386. mockTags[(index + 1) % mockTags.length]
  36387. ],
  36388. stats: {
  36389. views: Math.floor(Math.random() * 9999) + 100,
  36390. likes: Math.floor(Math.random() * 999) + 10,
  36391. comments: Math.floor(Math.random() * 99) + 1,
  36392. shares: Math.floor(Math.random() * 50) + 1
  36393. },
  36394. publishTime: new Date(Date.now() - Math.random() * 30 * 24 * 60 * 60 * 1e3).toLocaleDateString(),
  36395. readTime: `${Math.floor(Math.random() * 15) + 1} 分钟`,
  36396. isLiked: Math.random() > 0.7,
  36397. isBookmarked: Math.random() > 0.8,
  36398. difficulty: ["入门", "进阶", "高级"][Math.floor(Math.random() * 3)],
  36399. status: Math.random() > 0.9 ? "hot" : Math.random() > 0.7 ? "new" : "normal"
  36400. });
  36401. }
  36402. return data;
  36403. }
  36404. async function mockRequest(page, size = 10) {
  36405. await sleep(800 + Math.random() * 1200);
  36406. const totalItems = 156;
  36407. const data = generateMockData(page, size);
  36408. const hasMore = page * size < totalItems;
  36409. if (Math.random() < 0.05) {
  36410. throw new Error("网络连接异常,请稍后重试");
  36411. }
  36412. return {
  36413. code: 200,
  36414. data,
  36415. total: totalItems,
  36416. page,
  36417. pageSize: size,
  36418. hasMore,
  36419. message: "success"
  36420. };
  36421. }
  36422. async function onQuery(pageNo, pageSize2) {
  36423. try {
  36424. isLoading.value = true;
  36425. currentPage.value = pageNo;
  36426. const result = await mockRequest(pageNo, pageSize2);
  36427. if (result.code === 200) {
  36428. total.value = result.total;
  36429. if (pageNo === 1) {
  36430. dataList.value = result.data;
  36431. } else {
  36432. dataList.value.push(...result.data);
  36433. }
  36434. pagingRef.value.complete(result.data);
  36435. if (!result.hasMore) {
  36436. pagingRef.value.completeByNoMore(result.data);
  36437. }
  36438. } else {
  36439. throw new Error(result.message || "数据加载失败");
  36440. }
  36441. } catch (error) {
  36442. formatAppLog("error", "at pages/template/paging/index.vue:171", "数据加载失败:", error);
  36443. uni.showToast({
  36444. title: error.message || "加载失败",
  36445. icon: "none",
  36446. duration: 2e3
  36447. });
  36448. pagingRef.value.complete(false);
  36449. } finally {
  36450. isLoading.value = false;
  36451. }
  36452. }
  36453. function onRefresh() {
  36454. onQuery(1, pageSize.value);
  36455. }
  36456. function toggleLike(item) {
  36457. var _a2;
  36458. item.isLiked = !item.isLiked;
  36459. if (item.isLiked) {
  36460. item.stats.likes++;
  36461. } else {
  36462. item.stats.likes--;
  36463. }
  36464. (_a2 = uni.vibrateShort) == null ? void 0 : _a2.call(uni);
  36465. }
  36466. function handleItemClick(item) {
  36467. uni.showToast({
  36468. title: `查看: ${item.title}`,
  36469. icon: "none"
  36470. });
  36471. }
  36472. function formatNumber(num) {
  36473. if (num >= 1e4) {
  36474. return `${(num / 1e4).toFixed(1)}w`;
  36475. } else if (num >= 1e3) {
  36476. return `${(num / 1e3).toFixed(1)}k`;
  36477. }
  36478. return num.toString();
  36479. }
  36480. const __returned__ = { pagingRef, dataList, currentPage, pageSize, total, isLoading, stats, mockDataTypes, mockTags, generateMockData, mockRequest, onQuery, onRefresh, toggleLike, handleItemClick, formatNumber, get sleep() {
  36481. return sleep;
  36482. } };
  36483. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  36484. return __returned__;
  36485. }
  36486. };
  36487. function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
  36488. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  36489. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  36490. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  36491. default: vue.withCtx(() => [
  36492. vue.createElementVNode("view", { class: "h-full" }, [
  36493. vue.createVNode(_component_z_paging, {
  36494. ref: "pagingRef",
  36495. modelValue: $setup.dataList,
  36496. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.dataList = $event),
  36497. class: "flex-1",
  36498. "refresher-enabled": true,
  36499. "refresher-threshold": 80,
  36500. "refresher-default-text": "下拉刷新数据",
  36501. "refresher-pulling-text": "释放立即刷新",
  36502. "refresher-refreshing-text": "正在刷新...",
  36503. "refresher-complete-text": "刷新完成",
  36504. "loading-more-enabled": true,
  36505. "loading-more-text": ["点击加载更多", "正在加载...", "已全部加载"],
  36506. "empty-view-text": "暂无内容数据",
  36507. "auto-show-back-to-top": true,
  36508. "back-to-top-threshold": 300,
  36509. onQuery: $setup.onQuery,
  36510. onOnRefresh: $setup.onRefresh
  36511. }, {
  36512. refresher: vue.withCtx(() => [
  36513. vue.createElementVNode("view", { class: "flex flex-col items-center justify-center bg-white/80 py-6 backdrop-blur-sm" }, [
  36514. vue.createElementVNode("view", { class: "mb-2 h-8 w-8 animate-spin border-3 border-blue-500 border-t-transparent rounded-full" }),
  36515. vue.createElementVNode("text", { class: "text-sm text-blue-600 font-medium" }, " 正在刷新内容... ")
  36516. ])
  36517. ]),
  36518. loadingMore: vue.withCtx(() => [
  36519. vue.createElementVNode("view", { class: "flex flex-col items-center justify-center py-8" }, [
  36520. vue.createElementVNode("view", { class: "mb-2 h-6 w-6 animate-spin border-2 border-gray-300 border-t-blue-500 rounded-full" }),
  36521. vue.createElementVNode("text", { class: "text-sm text-gray-500" }, " 正在加载更多内容... ")
  36522. ])
  36523. ]),
  36524. noMore: vue.withCtx(() => [
  36525. vue.createElementVNode("view", { class: "flex flex-col items-center justify-center py-8" }, [
  36526. vue.createElementVNode("view", { class: "i-carbon-checkmark-filled mb-2 h-8 w-8 text-green-500" }),
  36527. vue.createElementVNode("text", { class: "text-sm text-gray-500" }, " 已加载全部内容 "),
  36528. vue.createElementVNode(
  36529. "text",
  36530. { class: "mt-1 text-xs text-gray-400" },
  36531. " 共 " + vue.toDisplayString($setup.stats.total) + " 条数据 ",
  36532. 1
  36533. /* TEXT */
  36534. )
  36535. ])
  36536. ]),
  36537. empty: vue.withCtx(() => [
  36538. vue.createElementVNode("view", { class: "flex flex-col items-center justify-center py-16" }, [
  36539. vue.createElementVNode("view", { class: "i-carbon-document-blank mb-4 h-16 w-16 text-gray-300" }),
  36540. vue.createElementVNode("text", { class: "mb-2 text-base text-gray-500 font-medium" }, " 暂无内容 "),
  36541. vue.createElementVNode("text", { class: "mb-6 text-sm text-gray-400" }, " 下拉刷新试试看 "),
  36542. vue.createElementVNode("button", {
  36543. class: "rounded-lg bg-blue-500 px-6 py-2 text-sm text-white font-medium transition-transform active:scale-95",
  36544. onClick: $setup.onRefresh
  36545. }, " 立即刷新 ")
  36546. ])
  36547. ]),
  36548. default: vue.withCtx(() => [
  36549. vue.createElementVNode("view", { class: "px-4 py-2 space-y-4" }, [
  36550. (vue.openBlock(true), vue.createElementBlock(
  36551. vue.Fragment,
  36552. null,
  36553. vue.renderList($setup.dataList, (item, index) => {
  36554. return vue.openBlock(), vue.createElementBlock("view", {
  36555. key: item.id,
  36556. class: "overflow-hidden border border-gray-100 rounded-2xl bg-white shadow-sm transition-all duration-200 active:scale-98",
  36557. onClick: ($event) => $setup.handleItemClick(item)
  36558. }, [
  36559. vue.createElementVNode("view", { class: "p-4 pb-3" }, [
  36560. vue.createElementVNode("view", { class: "mb-3 flex items-start justify-between" }, [
  36561. vue.createElementVNode("view", { class: "flex flex-1 items-center space-x-3" }, [
  36562. vue.createElementVNode(
  36563. "view",
  36564. {
  36565. class: vue.normalizeClass(["h-10 w-10 flex items-center justify-center rounded-xl text-white", `bg-gradient-to-r ${item.color}`])
  36566. },
  36567. [
  36568. vue.createElementVNode(
  36569. "view",
  36570. {
  36571. class: vue.normalizeClass(`${item.icon} w-5 h-5`)
  36572. },
  36573. null,
  36574. 2
  36575. /* CLASS */
  36576. )
  36577. ],
  36578. 2
  36579. /* CLASS */
  36580. ),
  36581. vue.createElementVNode("view", { class: "min-w-0 flex-1" }, [
  36582. vue.createElementVNode("view", { class: "mb-1 flex items-center space-x-2" }, [
  36583. vue.createElementVNode(
  36584. "text",
  36585. { class: "truncate text-base text-gray-900 font-semibold leading-tight" },
  36586. vue.toDisplayString(item.title),
  36587. 1
  36588. /* TEXT */
  36589. )
  36590. ]),
  36591. vue.createElementVNode(
  36592. "text",
  36593. { class: "line-clamp-2 text-sm text-gray-600 leading-relaxed" },
  36594. vue.toDisplayString(item.description),
  36595. 1
  36596. /* TEXT */
  36597. )
  36598. ])
  36599. ])
  36600. ]),
  36601. vue.createElementVNode("view", { class: "mb-3 flex items-center space-x-2" }, [
  36602. (vue.openBlock(true), vue.createElementBlock(
  36603. vue.Fragment,
  36604. null,
  36605. vue.renderList(item.tags, (tag) => {
  36606. return vue.openBlock(), vue.createElementBlock(
  36607. "view",
  36608. {
  36609. key: tag,
  36610. class: "rounded-md bg-blue-50 px-2 py-1 text-xs text-blue-700 font-medium"
  36611. },
  36612. vue.toDisplayString(tag),
  36613. 1
  36614. /* TEXT */
  36615. );
  36616. }),
  36617. 128
  36618. /* KEYED_FRAGMENT */
  36619. )),
  36620. vue.createElementVNode(
  36621. "view",
  36622. { class: "rounded-md bg-gray-100 px-2 py-1 text-xs text-gray-600" },
  36623. vue.toDisplayString(item.difficulty),
  36624. 1
  36625. /* TEXT */
  36626. )
  36627. ])
  36628. ]),
  36629. vue.createElementVNode("view", { class: "border-t border-gray-100 bg-gray-50 px-4 py-3" }, [
  36630. vue.createElementVNode("view", { class: "flex items-center justify-between" }, [
  36631. vue.createElementVNode("view", { class: "flex items-center space-x-4" }, [
  36632. vue.createElementVNode("view", { class: "flex items-center text-gray-500 space-x-1" }, [
  36633. vue.createElementVNode("view", { class: "i-carbon-view h-4 w-4" }),
  36634. vue.createElementVNode(
  36635. "text",
  36636. { class: "text-sm" },
  36637. vue.toDisplayString($setup.formatNumber(item.stats.views)),
  36638. 1
  36639. /* TEXT */
  36640. )
  36641. ]),
  36642. vue.createElementVNode("button", {
  36643. class: vue.normalizeClass(["flex items-center transition-colors duration-200 active:scale-95 space-x-1", item.isLiked ? "text-red-500" : "text-gray-500"]),
  36644. onClick: vue.withModifiers(($event) => $setup.toggleLike(item), ["stop"])
  36645. }, [
  36646. vue.createElementVNode(
  36647. "view",
  36648. {
  36649. class: vue.normalizeClass([item.isLiked ? "i-carbon-favorite-filled" : "i-carbon-favorite", "h-4 w-4"])
  36650. },
  36651. null,
  36652. 2
  36653. /* CLASS */
  36654. ),
  36655. vue.createElementVNode(
  36656. "text",
  36657. { class: "text-sm" },
  36658. vue.toDisplayString($setup.formatNumber(item.stats.likes)),
  36659. 1
  36660. /* TEXT */
  36661. )
  36662. ], 10, ["onClick"]),
  36663. vue.createElementVNode("view", { class: "flex items-center text-gray-500 space-x-1" }, [
  36664. vue.createElementVNode("view", { class: "i-carbon-chat h-4 w-4" }),
  36665. vue.createElementVNode(
  36666. "text",
  36667. { class: "text-sm" },
  36668. vue.toDisplayString($setup.formatNumber(item.stats.comments)),
  36669. 1
  36670. /* TEXT */
  36671. )
  36672. ])
  36673. ]),
  36674. vue.createElementVNode("view", { class: "flex items-center space-x-2" }, [
  36675. vue.createElementVNode("button", { class: "p-2 text-gray-400 transition-all active:scale-95 hover:text-gray-600" }, [
  36676. vue.createElementVNode("view", { class: "i-carbon-share h-4 w-4" })
  36677. ]),
  36678. vue.createElementVNode("button", { class: "p-2 text-gray-400 transition-all active:scale-95 hover:text-gray-600" }, [
  36679. vue.createElementVNode("view", { class: "i-carbon-overflow-menu-horizontal h-4 w-4" })
  36680. ])
  36681. ])
  36682. ])
  36683. ])
  36684. ], 8, ["onClick"]);
  36685. }),
  36686. 128
  36687. /* KEYED_FRAGMENT */
  36688. ))
  36689. ])
  36690. ]),
  36691. _: 1
  36692. /* STABLE */
  36693. }, 8, ["modelValue", "loading-more-text"])
  36694. ])
  36695. ]),
  36696. _: 1
  36697. /* STABLE */
  36698. });
  36699. }
  36700. const PagesTemplatePagingIndex = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["render", _sfc_render$D], ["__scopeId", "data-v-588af3ed"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/template/paging/index.vue"]]);
  36701. const _imports_0$1 = "/assets/avatar-default.d890a8c4.png";
  36702. const _sfc_main$D = {
  36703. __name: "index",
  36704. setup(__props, { expose: __expose }) {
  36705. __expose();
  36706. const userStore = useUserStore();
  36707. const userInfo = vue.computed(() => userStore.userInfo);
  36708. const genderText = vue.computed(() => {
  36709. const genderMap = {
  36710. 0: "未设置",
  36711. 1: "男",
  36712. 2: "女"
  36713. };
  36714. return genderMap[userInfo.value.gender] || "未设置";
  36715. });
  36716. function formatPhone(phone) {
  36717. if (!phone)
  36718. return "未设置";
  36719. return phone.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
  36720. }
  36721. function changeAvatar() {
  36722. uni.chooseImage({
  36723. count: 1,
  36724. sizeType: ["compressed"],
  36725. sourceType: ["album", "camera"],
  36726. success: (res) => {
  36727. userInfo.value.avatar = res.tempFilePaths[0];
  36728. showToast2("头像已更新");
  36729. }
  36730. });
  36731. }
  36732. function editField(field) {
  36733. showToast2("编辑基本信息");
  36734. }
  36735. function changePassword() {
  36736. showToast2("修改密码");
  36737. }
  36738. function privacySettings() {
  36739. showToast2("隐私设置");
  36740. }
  36741. function deleteAccount2() {
  36742. uni.showModal({
  36743. title: "警告",
  36744. content: "注销账户将永久删除您的所有数据,此操作不可恢复。确定要继续吗?",
  36745. confirmText: "确定注销",
  36746. cancelText: "取消",
  36747. confirmColor: "#ef4444",
  36748. success: (res) => {
  36749. if (res.confirm) {
  36750. showToast2("账户注销功能暂未开放", "none");
  36751. }
  36752. }
  36753. });
  36754. }
  36755. async function saveProfile() {
  36756. try {
  36757. await new Promise((resolve2) => setTimeout(resolve2, 1e3));
  36758. showToast2("保存成功");
  36759. } catch (error) {
  36760. showToast2("保存失败,请重试", "none");
  36761. }
  36762. }
  36763. function showToast2(title, icon = "success") {
  36764. uni.showToast({
  36765. title,
  36766. icon
  36767. });
  36768. }
  36769. const __returned__ = { userStore, userInfo, genderText, formatPhone, changeAvatar, editField, changePassword, privacySettings, deleteAccount: deleteAccount2, saveProfile, showToast: showToast2 };
  36770. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  36771. return __returned__;
  36772. }
  36773. };
  36774. function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) {
  36775. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  36776. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  36777. default: vue.withCtx(() => [
  36778. vue.createElementVNode("view", { class: "profile-edit-page h-full flex flex-col bg-gray-50" }, [
  36779. vue.createElementVNode("view", { class: "header-section relative" }, [
  36780. vue.createElementVNode("view", { class: "relative h-40 overflow-hidden bg-primary-400" }, [
  36781. vue.createElementVNode("view", { class: "absolute h-32 w-32 rounded-full bg-white opacity-10 -right-8 -top-8" }),
  36782. vue.createElementVNode("view", { class: "absolute bottom-4 right-16 h-16 w-16 rounded-full bg-white opacity-10" })
  36783. ]),
  36784. vue.createElementVNode("view", { class: "absolute bottom-0 left-1/2 translate-y-1/2 transform -translate-x-1/2" }, [
  36785. vue.createElementVNode("view", { class: "relative" }, [
  36786. vue.createElementVNode("view", {
  36787. class: "h-24 w-24 overflow-hidden border-4 border-white rounded-full shadow-lg",
  36788. onClick: $setup.changeAvatar
  36789. }, [
  36790. $setup.userInfo.avatar ? (vue.openBlock(), vue.createElementBlock("image", {
  36791. key: 0,
  36792. src: $setup.userInfo.avatar,
  36793. class: "size-full",
  36794. mode: "aspectFill"
  36795. }, null, 8, ["src"])) : (vue.openBlock(), vue.createElementBlock("image", {
  36796. key: 1,
  36797. src: _imports_0$1,
  36798. class: "size-full",
  36799. mode: "aspectFill"
  36800. }))
  36801. ]),
  36802. vue.createElementVNode("view", { class: "absolute bottom-0 right-0 h-7 w-7 flex items-center justify-center border-2 border-white rounded-full bg-primary-500" }, [
  36803. vue.createElementVNode("view", { class: "i-carbon-edit text-sm text-white" })
  36804. ])
  36805. ])
  36806. ])
  36807. ]),
  36808. vue.createElementVNode("view", { class: "content-section flex-1 px-4 pb-4 pt-16" }, [
  36809. vue.createElementVNode("view", { class: "info-card mb-4 overflow-hidden rounded-xl bg-white shadow-sm" }, [
  36810. vue.createElementVNode("view", { class: "card-header" }, [
  36811. vue.createElementVNode("view", { class: "i-carbon-user text-lg text-primary-500" }),
  36812. vue.createElementVNode("view", { class: "card-title" }, " 基本信息 ")
  36813. ]),
  36814. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  36815. vue.createElementVNode("view", {
  36816. class: "info-item",
  36817. onClick: _cache[0] || (_cache[0] = ($event) => $setup.editField("username"))
  36818. }, [
  36819. vue.createElementVNode("view", { class: "info-label" }, [
  36820. vue.createElementVNode("view", { class: "i-carbon-user-identification text-lg text-gray-400" }),
  36821. vue.createElementVNode("text", null, "用户名")
  36822. ]),
  36823. vue.createElementVNode("view", { class: "info-value" }, [
  36824. vue.createElementVNode(
  36825. "text",
  36826. null,
  36827. vue.toDisplayString($setup.userInfo.username || "未设置"),
  36828. 1
  36829. /* TEXT */
  36830. ),
  36831. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36832. ])
  36833. ]),
  36834. vue.createElementVNode("view", {
  36835. class: "info-item",
  36836. onClick: _cache[1] || (_cache[1] = ($event) => $setup.editField("realName"))
  36837. }, [
  36838. vue.createElementVNode("view", { class: "info-label" }, [
  36839. vue.createElementVNode("view", { class: "i-carbon-identification text-lg text-gray-400" }),
  36840. vue.createElementVNode("text", null, "真实姓名")
  36841. ]),
  36842. vue.createElementVNode("view", { class: "info-value" }, [
  36843. vue.createElementVNode(
  36844. "text",
  36845. null,
  36846. vue.toDisplayString($setup.userInfo.realName || "未设置"),
  36847. 1
  36848. /* TEXT */
  36849. ),
  36850. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36851. ])
  36852. ]),
  36853. vue.createElementVNode("view", {
  36854. class: "info-item",
  36855. onClick: _cache[2] || (_cache[2] = ($event) => $setup.editField("gender"))
  36856. }, [
  36857. vue.createElementVNode("view", { class: "info-label" }, [
  36858. vue.createElementVNode("view", { class: "i-carbon-gender-male text-lg text-gray-400" }),
  36859. vue.createElementVNode("text", null, "性别")
  36860. ]),
  36861. vue.createElementVNode("view", { class: "info-value" }, [
  36862. vue.createElementVNode(
  36863. "text",
  36864. null,
  36865. vue.toDisplayString($setup.genderText),
  36866. 1
  36867. /* TEXT */
  36868. ),
  36869. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36870. ])
  36871. ]),
  36872. vue.createElementVNode("view", {
  36873. class: "info-item",
  36874. onClick: _cache[3] || (_cache[3] = ($event) => $setup.editField("birthday"))
  36875. }, [
  36876. vue.createElementVNode("view", { class: "info-label" }, [
  36877. vue.createElementVNode("view", { class: "i-carbon-calendar text-lg text-gray-400" }),
  36878. vue.createElementVNode("text", null, "生日")
  36879. ]),
  36880. vue.createElementVNode("view", { class: "info-value" }, [
  36881. vue.createElementVNode(
  36882. "text",
  36883. null,
  36884. vue.toDisplayString($setup.userInfo.birthday || "未设置"),
  36885. 1
  36886. /* TEXT */
  36887. ),
  36888. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36889. ])
  36890. ])
  36891. ])
  36892. ]),
  36893. vue.createElementVNode("view", { class: "info-card mb-4 overflow-hidden rounded-xl bg-white shadow-sm" }, [
  36894. vue.createElementVNode("view", { class: "card-header" }, [
  36895. vue.createElementVNode("view", { class: "i-carbon-phone text-lg text-primary-500" }),
  36896. vue.createElementVNode("view", { class: "card-title" }, " 联系方式 ")
  36897. ]),
  36898. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  36899. vue.createElementVNode("view", {
  36900. class: "info-item",
  36901. onClick: _cache[4] || (_cache[4] = ($event) => $setup.editField("phone"))
  36902. }, [
  36903. vue.createElementVNode("view", { class: "info-label" }, [
  36904. vue.createElementVNode("view", { class: "i-carbon-mobile text-lg text-gray-400" }),
  36905. vue.createElementVNode("text", null, "手机号")
  36906. ]),
  36907. vue.createElementVNode("view", { class: "info-value" }, [
  36908. vue.createElementVNode(
  36909. "text",
  36910. null,
  36911. vue.toDisplayString($setup.formatPhone($setup.userInfo.phone)),
  36912. 1
  36913. /* TEXT */
  36914. ),
  36915. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36916. ])
  36917. ]),
  36918. vue.createElementVNode("view", {
  36919. class: "info-item",
  36920. onClick: _cache[5] || (_cache[5] = ($event) => $setup.editField("email"))
  36921. }, [
  36922. vue.createElementVNode("view", { class: "info-label" }, [
  36923. vue.createElementVNode("view", { class: "i-carbon-email text-lg text-gray-400" }),
  36924. vue.createElementVNode("text", null, "邮箱地址")
  36925. ]),
  36926. vue.createElementVNode("view", { class: "info-value" }, [
  36927. vue.createElementVNode(
  36928. "text",
  36929. null,
  36930. vue.toDisplayString($setup.userInfo.email || "未设置"),
  36931. 1
  36932. /* TEXT */
  36933. ),
  36934. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36935. ])
  36936. ]),
  36937. vue.createElementVNode("view", {
  36938. class: "info-item",
  36939. onClick: _cache[6] || (_cache[6] = ($event) => $setup.editField("wechat"))
  36940. }, [
  36941. vue.createElementVNode("view", { class: "info-label" }, [
  36942. vue.createElementVNode("view", { class: "i-carbon-logo-wechat text-lg text-gray-400" }),
  36943. vue.createElementVNode("text", null, "微信号")
  36944. ]),
  36945. vue.createElementVNode("view", { class: "info-value" }, [
  36946. vue.createElementVNode(
  36947. "text",
  36948. null,
  36949. vue.toDisplayString($setup.userInfo.wechat || "未设置"),
  36950. 1
  36951. /* TEXT */
  36952. ),
  36953. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36954. ])
  36955. ])
  36956. ])
  36957. ]),
  36958. vue.createElementVNode("view", { class: "info-card mb-4 overflow-hidden rounded-xl bg-white shadow-sm" }, [
  36959. vue.createElementVNode("view", { class: "card-header" }, [
  36960. vue.createElementVNode("view", { class: "i-carbon-location text-lg text-primary-500" }),
  36961. vue.createElementVNode("view", { class: "card-title" }, " 地址信息 ")
  36962. ]),
  36963. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  36964. vue.createElementVNode("view", {
  36965. class: "info-item",
  36966. onClick: _cache[7] || (_cache[7] = ($event) => $setup.editField("region"))
  36967. }, [
  36968. vue.createElementVNode("view", { class: "info-label" }, [
  36969. vue.createElementVNode("view", { class: "i-carbon-earth text-lg text-gray-400" }),
  36970. vue.createElementVNode("text", null, "所在地区")
  36971. ]),
  36972. vue.createElementVNode("view", { class: "info-value" }, [
  36973. vue.createElementVNode(
  36974. "text",
  36975. null,
  36976. vue.toDisplayString($setup.userInfo.region || "未设置"),
  36977. 1
  36978. /* TEXT */
  36979. ),
  36980. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  36981. ])
  36982. ]),
  36983. vue.createElementVNode("view", {
  36984. class: "info-item",
  36985. onClick: _cache[8] || (_cache[8] = ($event) => $setup.editField("address"))
  36986. }, [
  36987. vue.createElementVNode("view", { class: "info-label" }, [
  36988. vue.createElementVNode("view", { class: "i-carbon-map text-lg text-gray-400" }),
  36989. vue.createElementVNode("text", null, "详细地址")
  36990. ]),
  36991. vue.createElementVNode("view", { class: "info-value" }, [
  36992. vue.createElementVNode(
  36993. "text",
  36994. null,
  36995. vue.toDisplayString($setup.userInfo.address || "未设置"),
  36996. 1
  36997. /* TEXT */
  36998. ),
  36999. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37000. ])
  37001. ])
  37002. ])
  37003. ]),
  37004. vue.createElementVNode("view", { class: "info-card mb-4 overflow-hidden rounded-xl bg-white shadow-sm" }, [
  37005. vue.createElementVNode("view", { class: "card-header" }, [
  37006. vue.createElementVNode("view", { class: "i-carbon-settings text-lg text-primary-500" }),
  37007. vue.createElementVNode("view", { class: "card-title" }, " 账户设置 ")
  37008. ]),
  37009. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  37010. vue.createElementVNode("view", {
  37011. class: "info-item",
  37012. onClick: $setup.changePassword
  37013. }, [
  37014. vue.createElementVNode("view", { class: "info-label" }, [
  37015. vue.createElementVNode("view", { class: "i-carbon-password text-lg text-gray-400" }),
  37016. vue.createElementVNode("text", null, "修改密码")
  37017. ]),
  37018. vue.createElementVNode("view", { class: "info-value" }, [
  37019. vue.createElementVNode("text", { class: "text-gray-400" }, " 点击修改 "),
  37020. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37021. ])
  37022. ]),
  37023. vue.createElementVNode("view", {
  37024. class: "info-item",
  37025. onClick: $setup.privacySettings
  37026. }, [
  37027. vue.createElementVNode("view", { class: "info-label" }, [
  37028. vue.createElementVNode("view", { class: "i-carbon-security text-lg text-gray-400" }),
  37029. vue.createElementVNode("text", null, "隐私设置")
  37030. ]),
  37031. vue.createElementVNode("view", { class: "info-value" }, [
  37032. vue.createElementVNode("text", { class: "text-gray-400" }, " 管理隐私 "),
  37033. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37034. ])
  37035. ]),
  37036. vue.createElementVNode("view", {
  37037. class: "info-item",
  37038. onClick: $setup.deleteAccount
  37039. }, [
  37040. vue.createElementVNode("view", { class: "info-label" }, [
  37041. vue.createElementVNode("view", { class: "i-carbon-user-x text-lg text-red-400" }),
  37042. vue.createElementVNode("text", { class: "text-red-500" }, " 注销账户 ")
  37043. ]),
  37044. vue.createElementVNode("view", { class: "info-value" }, [
  37045. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37046. ])
  37047. ])
  37048. ])
  37049. ])
  37050. ]),
  37051. vue.createElementVNode("view", { class: "action-section px-4 pb-8 pt-4" }, [
  37052. vue.createElementVNode("button", {
  37053. class: "w-full flex items-center justify-center rounded-lg bg-primary-500 py-3 text-white font-medium transition-colors duration-200 active:bg-primary-600",
  37054. "hover-class": "bg-primary-600",
  37055. onClick: $setup.saveProfile
  37056. }, [
  37057. vue.createElementVNode("view", { class: "i-carbon-save mr-2 text-lg" }),
  37058. vue.createTextVNode(" 保存修改 ")
  37059. ])
  37060. ])
  37061. ])
  37062. ]),
  37063. _: 1
  37064. /* STABLE */
  37065. });
  37066. }
  37067. const PagesOldPagePersonalIndex = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["render", _sfc_render$C], ["__scopeId", "data-v-ac070472"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/oldPage/personal/index.vue"]]);
  37068. const wechatImage = "/assets/image-wechat.067dc3d4.png";
  37069. const _imports_0 = "/assets/image-banner.11e6c99c.jpg";
  37070. const _sfc_main$C = {
  37071. __name: "index",
  37072. setup(__props, { expose: __expose }) {
  37073. __expose();
  37074. function handleCopy(text) {
  37075. uni.setClipboardData({
  37076. data: text,
  37077. success: () => {
  37078. showToast2("复制成功");
  37079. }
  37080. });
  37081. }
  37082. function handleCall(phone) {
  37083. uni.makePhoneCall({
  37084. phoneNumber: phone,
  37085. fail: () => {
  37086. showToast2("拨打电话失败");
  37087. }
  37088. });
  37089. }
  37090. function previewImage(url2) {
  37091. uni.previewImage({
  37092. urls: [url2],
  37093. current: url2
  37094. });
  37095. }
  37096. function handleSaveQrCode() {
  37097. uni.saveImageToPhotosAlbum({
  37098. filePath: wechatImage,
  37099. success: () => {
  37100. showToast2("保存成功");
  37101. },
  37102. fail: () => {
  37103. showToast2("保存失败,请检查权限设置", "none");
  37104. }
  37105. });
  37106. }
  37107. function showToast2(title, icon = "success") {
  37108. uni.showToast({
  37109. title,
  37110. icon
  37111. });
  37112. }
  37113. const __returned__ = { handleCopy, handleCall, previewImage, handleSaveQrCode, showToast: showToast2, get wechatImage() {
  37114. return wechatImage;
  37115. }, get appExtra() {
  37116. return appExtra;
  37117. } };
  37118. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  37119. return __returned__;
  37120. }
  37121. };
  37122. function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
  37123. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  37124. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  37125. default: vue.withCtx(() => [
  37126. vue.createElementVNode("view", { class: "contact-page h-full flex flex-col bg-gray-50" }, [
  37127. vue.createElementVNode("view", { class: "header-section relative" }, [
  37128. vue.createElementVNode("image", {
  37129. src: _imports_0,
  37130. mode: "aspectFill",
  37131. class: "h-50 w-full rounded-b-3xl object-cover shadow-md"
  37132. }),
  37133. vue.createElementVNode("view", { class: "absolute inset-0 rounded-b-3xl from-black/0 to-black/60 bg-gradient-to-b" }),
  37134. vue.createElementVNode("view", { class: "absolute bottom-4 left-0 w-full p-6 text-white" }, [
  37135. vue.createElementVNode("view", { class: "mb-1 text-2xl font-bold" }, " 联系我们 "),
  37136. vue.createElementVNode("view", { class: "text-sm text-white/80" }, " 为您提供有限的帮助与支持 ")
  37137. ])
  37138. ]),
  37139. vue.createElementVNode("view", { class: "contact-cards relative z-10 px-4 -mt-4" }, [
  37140. vue.createElementVNode("view", { class: "overflow-hidden rounded-xl bg-white shadow-lg" }, [
  37141. vue.createElementVNode("view", { class: "border-b border-gray-100 px-5 py-4" }, [
  37142. vue.createElementVNode("view", { class: "text-lg text-gray-800 font-bold" }, " 联系方式 ")
  37143. ]),
  37144. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  37145. vue.createElementVNode("view", {
  37146. class: "contact-item",
  37147. onClick: _cache[0] || (_cache[0] = ($event) => $setup.handleCopy($setup.appExtra.email))
  37148. }, [
  37149. vue.createElementVNode("view", { class: "icon-container" }, [
  37150. vue.createElementVNode("view", { class: "i-carbon-email size-6 text-primary-500" })
  37151. ]),
  37152. vue.createElementVNode("view", { class: "info-container" }, [
  37153. vue.createElementVNode("view", { class: "label" }, " 电子邮箱 "),
  37154. vue.createElementVNode(
  37155. "view",
  37156. { class: "value" },
  37157. vue.toDisplayString($setup.appExtra.email),
  37158. 1
  37159. /* TEXT */
  37160. )
  37161. ]),
  37162. vue.createElementVNode("view", { class: "action-container" }, [
  37163. vue.createElementVNode("view", { class: "copy-button" }, " 复制 ")
  37164. ])
  37165. ]),
  37166. vue.createElementVNode("view", {
  37167. class: "contact-item",
  37168. onClick: _cache[1] || (_cache[1] = ($event) => $setup.handleCopy($setup.appExtra.wechat))
  37169. }, [
  37170. vue.createElementVNode("view", { class: "icon-container" }, [
  37171. vue.createElementVNode("view", { class: "i-carbon-logo-wechat size-6 text-primary-500" })
  37172. ]),
  37173. vue.createElementVNode("view", { class: "info-container" }, [
  37174. vue.createElementVNode("view", { class: "label" }, " 微信号 "),
  37175. vue.createElementVNode(
  37176. "view",
  37177. { class: "value" },
  37178. vue.toDisplayString($setup.appExtra.wechat),
  37179. 1
  37180. /* TEXT */
  37181. )
  37182. ]),
  37183. vue.createElementVNode("view", { class: "action-container" }, [
  37184. vue.createElementVNode("view", { class: "copy-button" }, " 复制 ")
  37185. ])
  37186. ])
  37187. ])
  37188. ]),
  37189. vue.createElementVNode("view", { class: "mt-4 overflow-hidden rounded-xl bg-white shadow-lg" }, [
  37190. vue.createElementVNode("view", { class: "border-b border-gray-100 px-5 py-4" }, [
  37191. vue.createElementVNode("view", { class: "text-lg text-gray-800 font-bold" }, " 微信二维码 ")
  37192. ]),
  37193. vue.createElementVNode("view", { class: "flex flex-col items-center p-5" }, [
  37194. vue.createElementVNode("image", {
  37195. src: $setup.wechatImage,
  37196. mode: "aspectFit",
  37197. class: "h-50 w-50 border border-gray-100 rounded-lg",
  37198. onClick: _cache[2] || (_cache[2] = ($event) => $setup.previewImage($setup.wechatImage))
  37199. }, null, 8, ["src"]),
  37200. vue.createElementVNode("view", { class: "mt-3 text-sm text-gray-500" }, " 点击二维码可放大查看 "),
  37201. vue.createElementVNode("button", {
  37202. class: "mt-4 w-full rounded-lg bg-primary-500 py-1 text-white font-medium transition-colors duration-200 active:bg-primary-600",
  37203. "hover-class": "bg-primary-600",
  37204. onClick: $setup.handleSaveQrCode
  37205. }, " 保存二维码到相册 ")
  37206. ])
  37207. ])
  37208. ]),
  37209. vue.createElementVNode("view", { class: "footer-section mt-auto p-4 text-center text-xs text-gray-400" }, [
  37210. vue.createElementVNode(
  37211. "view",
  37212. { class: "mt-1" },
  37213. " © " + vue.toDisplayString((/* @__PURE__ */ new Date()).getFullYear()) + " " + vue.toDisplayString($setup.appExtra.name) + " 版权所有 ",
  37214. 1
  37215. /* TEXT */
  37216. )
  37217. ])
  37218. ])
  37219. ]),
  37220. _: 1
  37221. /* STABLE */
  37222. });
  37223. }
  37224. const PagesOldPageContactIndex = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["render", _sfc_render$B], ["__scopeId", "data-v-813728b9"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/oldPage/contact/index.vue"]]);
  37225. const useAppStore = defineStore(
  37226. "app",
  37227. () => {
  37228. const themeModel = {
  37229. primary: { color: primaryColor, name: "默认" }
  37230. };
  37231. const currentTheme2 = vue.ref("primary");
  37232. const currentThemeInfo = vue.computed(() => themeModel[currentTheme2.value] || themeModel.primary);
  37233. const primaryColor$1 = vue.computed(() => {
  37234. var _a2;
  37235. return ((_a2 = currentThemeInfo.value) == null ? void 0 : _a2.color) || primaryColor;
  37236. });
  37237. return {
  37238. themeModel,
  37239. currentTheme: currentTheme2,
  37240. currentThemeInfo,
  37241. primaryColor: primaryColor$1
  37242. };
  37243. },
  37244. {
  37245. persist: true
  37246. }
  37247. );
  37248. const _sfc_main$B = {
  37249. __name: "index",
  37250. setup(__props, { expose: __expose }) {
  37251. __expose();
  37252. const appStore = useAppStore();
  37253. const router2 = useRouter();
  37254. const settings = vue.ref({
  37255. darkMode: false,
  37256. themeColor: "blue",
  37257. fontSize: "medium",
  37258. pushNotification: true,
  37259. soundAlert: true,
  37260. vibration: true,
  37261. biometric: false,
  37262. autoClean: true
  37263. });
  37264. const storageUsed = vue.ref("2.3GB");
  37265. const storageTotal = vue.ref("64GB");
  37266. const cacheSize = vue.ref("156MB");
  37267. const hasUpdate = vue.ref(false);
  37268. const fontSizes = {
  37269. small: "小",
  37270. medium: "中",
  37271. large: "大"
  37272. };
  37273. const autoLockOptions = {
  37274. 1: "1分钟",
  37275. 5: "5分钟",
  37276. 10: "10分钟",
  37277. 30: "30分钟",
  37278. 0: "从不"
  37279. };
  37280. const currentThemeColor = vue.computed(() => appStore.primaryColor);
  37281. const currentThemeText = vue.computed(() => {
  37282. var _a2;
  37283. return ((_a2 = appStore.currentThemeInfo) == null ? void 0 : _a2.name) || "默认";
  37284. });
  37285. const fontSizeText = vue.computed(() => fontSizes[settings.value.fontSize] || "中");
  37286. const autoLockText = vue.computed(() => autoLockOptions[settings.value.autoLock] || "5分钟");
  37287. function resetSettings() {
  37288. uni.showModal({
  37289. title: "重置设置",
  37290. content: "确定要将所有设置恢复为默认值吗?",
  37291. confirmText: "重置",
  37292. cancelText: "取消",
  37293. success: (res) => {
  37294. if (res.confirm) {
  37295. settings.value = {
  37296. darkMode: false,
  37297. themeColor: "blue",
  37298. fontSize: "medium",
  37299. pushNotification: true,
  37300. soundAlert: true,
  37301. vibration: true,
  37302. biometric: false,
  37303. autoLock: 5,
  37304. autoClean: true
  37305. };
  37306. showToast2("设置已重置");
  37307. }
  37308. }
  37309. });
  37310. }
  37311. function toggleSetting(key) {
  37312. settings.value[key] = !settings.value[key];
  37313. if (settings.value.vibration) {
  37314. uni.vibrateShort();
  37315. }
  37316. saveSettings();
  37317. }
  37318. function selectThemeColor() {
  37319. const items = Object.entries(appStore.themeModel).map(([key, value]) => value.name);
  37320. uni.showActionSheet({
  37321. itemList: items,
  37322. success: (res) => {
  37323. const colorKeys = Object.keys(appStore.themeModel);
  37324. appStore.currentTheme = colorKeys[res.tapIndex];
  37325. showToast2("主题已更换");
  37326. }
  37327. });
  37328. }
  37329. function adjustFontSize() {
  37330. const items = Object.values(fontSizes);
  37331. uni.showActionSheet({
  37332. itemList: items,
  37333. success: (res) => {
  37334. const sizeKeys = Object.keys(fontSizes);
  37335. settings.value.fontSize = sizeKeys[res.tapIndex];
  37336. saveSettings();
  37337. showToast2("字体大小已调整");
  37338. }
  37339. });
  37340. }
  37341. function setAutoLock() {
  37342. const items = Object.values(autoLockOptions);
  37343. uni.showActionSheet({
  37344. itemList: items,
  37345. success: (res) => {
  37346. const lockKeys = Object.keys(autoLockOptions);
  37347. settings.value.autoLock = Number.parseInt(lockKeys[res.tapIndex]);
  37348. saveSettings();
  37349. showToast2("自动锁屏时间已设置");
  37350. }
  37351. });
  37352. }
  37353. function clearCache() {
  37354. uni.showModal({
  37355. title: "清除缓存",
  37356. content: `确定要清除 ${cacheSize.value} 的缓存数据吗?`,
  37357. confirmText: "清除",
  37358. cancelText: "取消",
  37359. success: (res) => {
  37360. if (res.confirm) {
  37361. uni.showLoading({
  37362. title: "清除中..."
  37363. });
  37364. setTimeout(() => {
  37365. uni.hideLoading();
  37366. cacheSize.value = "0MB";
  37367. showToast2("缓存清除成功");
  37368. }, 2e3);
  37369. }
  37370. }
  37371. });
  37372. }
  37373. function viewStorageInfo() {
  37374. showToast2("存储空间");
  37375. }
  37376. function viewPrivacyPolicy() {
  37377. showToast2("隐私政策");
  37378. }
  37379. function checkUpdate() {
  37380. uni.showLoading({
  37381. title: "检查中..."
  37382. });
  37383. setTimeout(() => {
  37384. uni.hideLoading();
  37385. if (hasUpdate.value) {
  37386. uni.showModal({
  37387. title: "发现新版本",
  37388. content: "发现新版本 1.3.0,是否立即更新?",
  37389. confirmText: "更新",
  37390. cancelText: "稍后",
  37391. success: (res) => {
  37392. if (res.confirm) {
  37393. showToast2("开始下载更新");
  37394. }
  37395. }
  37396. });
  37397. } else {
  37398. showToast2("已是最新版本");
  37399. }
  37400. }, 1500);
  37401. }
  37402. function openHelpCenter() {
  37403. router2.push("/contact");
  37404. }
  37405. function submitFeedback() {
  37406. router2.push("/contact");
  37407. }
  37408. function aboutUs() {
  37409. router2.push("/contact");
  37410. }
  37411. function saveSettings() {
  37412. uni.setStorageSync("app_settings", settings.value);
  37413. }
  37414. function showToast2(title, icon = "success") {
  37415. uni.showToast({
  37416. title,
  37417. icon
  37418. });
  37419. }
  37420. function loadSettings() {
  37421. try {
  37422. const savedSettings = uni.getStorageSync("app_settings");
  37423. if (savedSettings) {
  37424. settings.value = { ...settings.value, ...savedSettings };
  37425. }
  37426. } catch (error) {
  37427. formatAppLog("log", "at pages/oldPage/preference/index.vue:208", "读取设置失败:", error);
  37428. }
  37429. }
  37430. loadSettings();
  37431. const __returned__ = { appStore, router: router2, settings, storageUsed, storageTotal, cacheSize, hasUpdate, fontSizes, autoLockOptions, currentThemeColor, currentThemeText, fontSizeText, autoLockText, resetSettings, toggleSetting, selectThemeColor, adjustFontSize, setAutoLock, clearCache, viewStorageInfo, viewPrivacyPolicy, checkUpdate, openHelpCenter, submitFeedback, aboutUs, saveSettings, showToast: showToast2, loadSettings, get appVersion() {
  37432. return appVersion;
  37433. } };
  37434. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  37435. return __returned__;
  37436. }
  37437. };
  37438. function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
  37439. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  37440. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  37441. default: vue.withCtx(() => [
  37442. vue.createElementVNode("view", { class: "p-4" }, [
  37443. vue.createElementVNode("view", { class: "pb-4 text-center text-gray-500" }, " 以下部分内容仅为组件演示,暂无实际功能。 "),
  37444. vue.createElementVNode("view", { class: "settings-card" }, [
  37445. vue.createElementVNode("view", { class: "card-header" }, [
  37446. vue.createElementVNode("view", { class: "i-carbon-paint-brush text-lg text-primary-500" }),
  37447. vue.createElementVNode("view", { class: "card-title" }, " 显示与主题 ")
  37448. ]),
  37449. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  37450. vue.createElementVNode("view", { class: "setting-item" }, [
  37451. vue.createElementVNode("view", { class: "setting-label" }, [
  37452. vue.createElementVNode("view", { class: "i-carbon-moon text-lg text-gray-400" }),
  37453. vue.createElementVNode("view", { class: "setting-info" }, [
  37454. vue.createElementVNode("text", { class: "setting-title" }, " 深色模式 "),
  37455. vue.createElementVNode("text", { class: "setting-desc" }, " 开启后界面将使用深色主题 ")
  37456. ])
  37457. ]),
  37458. vue.createElementVNode("view", { class: "setting-control" }, [
  37459. vue.createElementVNode("switch", {
  37460. checked: $setup.settings.darkMode,
  37461. color: $setup.currentThemeColor,
  37462. onChange: _cache[0] || (_cache[0] = ($event) => $setup.toggleSetting("darkMode"))
  37463. }, null, 40, ["checked", "color"])
  37464. ])
  37465. ]),
  37466. vue.createElementVNode("view", {
  37467. class: "setting-item",
  37468. onClick: $setup.selectThemeColor
  37469. }, [
  37470. vue.createElementVNode("view", { class: "setting-label" }, [
  37471. vue.createElementVNode("view", { class: "i-carbon-color-palette text-lg text-gray-400" }),
  37472. vue.createElementVNode("view", { class: "setting-info" }, [
  37473. vue.createElementVNode("text", { class: "setting-title" }, " 主题色彩 "),
  37474. vue.createElementVNode(
  37475. "text",
  37476. { class: "setting-desc" },
  37477. vue.toDisplayString($setup.currentThemeText),
  37478. 1
  37479. /* TEXT */
  37480. )
  37481. ])
  37482. ]),
  37483. vue.createElementVNode("view", { class: "setting-control" }, [
  37484. vue.createElementVNode(
  37485. "view",
  37486. {
  37487. class: "h-6 w-6 border-2 border-gray-200 rounded-full",
  37488. style: vue.normalizeStyle({ backgroundColor: $setup.currentThemeColor })
  37489. },
  37490. null,
  37491. 4
  37492. /* STYLE */
  37493. ),
  37494. vue.createElementVNode("view", { class: "i-carbon-chevron-right ml-2 text-sm text-gray-400" })
  37495. ])
  37496. ]),
  37497. vue.createElementVNode("view", {
  37498. class: "setting-item",
  37499. onClick: $setup.adjustFontSize
  37500. }, [
  37501. vue.createElementVNode("view", { class: "setting-label" }, [
  37502. vue.createElementVNode("view", { class: "i-carbon-text-font text-lg text-gray-400" }),
  37503. vue.createElementVNode("view", { class: "setting-info" }, [
  37504. vue.createElementVNode("text", { class: "setting-title" }, " 字体大小 "),
  37505. vue.createElementVNode(
  37506. "text",
  37507. { class: "setting-desc" },
  37508. vue.toDisplayString($setup.fontSizeText),
  37509. 1
  37510. /* TEXT */
  37511. )
  37512. ])
  37513. ]),
  37514. vue.createElementVNode("view", { class: "setting-control" }, [
  37515. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37516. ])
  37517. ])
  37518. ])
  37519. ]),
  37520. vue.createElementVNode("view", { class: "settings-card" }, [
  37521. vue.createElementVNode("view", { class: "card-header" }, [
  37522. vue.createElementVNode("view", { class: "i-carbon-notification text-lg text-primary-500" }),
  37523. vue.createElementVNode("view", { class: "card-title" }, " 通知设置 ")
  37524. ]),
  37525. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  37526. vue.createElementVNode("view", { class: "setting-item" }, [
  37527. vue.createElementVNode("view", { class: "setting-label" }, [
  37528. vue.createElementVNode("view", { class: "i-carbon-notification-new text-lg text-gray-400" }),
  37529. vue.createElementVNode("view", { class: "setting-info" }, [
  37530. vue.createElementVNode("text", { class: "setting-title" }, " 推送通知 "),
  37531. vue.createElementVNode("text", { class: "setting-desc" }, " 接收应用推送消息 ")
  37532. ])
  37533. ]),
  37534. vue.createElementVNode("view", { class: "setting-control" }, [
  37535. vue.createElementVNode("switch", {
  37536. checked: $setup.settings.pushNotification,
  37537. color: $setup.currentThemeColor,
  37538. onChange: _cache[1] || (_cache[1] = ($event) => $setup.toggleSetting("pushNotification"))
  37539. }, null, 40, ["checked", "color"])
  37540. ])
  37541. ]),
  37542. vue.createElementVNode("view", { class: "setting-item" }, [
  37543. vue.createElementVNode("view", { class: "setting-label" }, [
  37544. vue.createElementVNode("view", { class: "i-carbon-volume-up text-lg text-gray-400" }),
  37545. vue.createElementVNode("view", { class: "setting-info" }, [
  37546. vue.createElementVNode("text", { class: "setting-title" }, " 声音提醒 "),
  37547. vue.createElementVNode("text", { class: "setting-desc" }, " 消息到达时播放提示音 ")
  37548. ])
  37549. ]),
  37550. vue.createElementVNode("view", { class: "setting-control" }, [
  37551. vue.createElementVNode("switch", {
  37552. checked: $setup.settings.soundAlert,
  37553. color: $setup.currentThemeColor,
  37554. onChange: _cache[2] || (_cache[2] = ($event) => $setup.toggleSetting("soundAlert"))
  37555. }, null, 40, ["checked", "color"])
  37556. ])
  37557. ]),
  37558. vue.createElementVNode("view", { class: "setting-item" }, [
  37559. vue.createElementVNode("view", { class: "setting-label" }, [
  37560. vue.createElementVNode("view", { class: "i-carbon-phone-vibrate text-lg text-gray-400" }),
  37561. vue.createElementVNode("view", { class: "setting-info" }, [
  37562. vue.createElementVNode("text", { class: "setting-title" }, " 震动反馈 "),
  37563. vue.createElementVNode("text", { class: "setting-desc" }, " 操作时提供震动反馈 ")
  37564. ])
  37565. ]),
  37566. vue.createElementVNode("view", { class: "setting-control" }, [
  37567. vue.createElementVNode("switch", {
  37568. checked: $setup.settings.vibration,
  37569. color: $setup.currentThemeColor,
  37570. onChange: _cache[3] || (_cache[3] = ($event) => $setup.toggleSetting("vibration"))
  37571. }, null, 40, ["checked", "color"])
  37572. ])
  37573. ])
  37574. ])
  37575. ]),
  37576. vue.createElementVNode("view", { class: "settings-card" }, [
  37577. vue.createElementVNode("view", { class: "card-header" }, [
  37578. vue.createElementVNode("view", { class: "i-carbon-security text-lg text-primary-500" }),
  37579. vue.createElementVNode("view", { class: "card-title" }, " 隐私与安全 ")
  37580. ]),
  37581. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  37582. vue.createElementVNode("view", { class: "setting-item" }, [
  37583. vue.createElementVNode("view", { class: "setting-label" }, [
  37584. vue.createElementVNode("view", { class: "i-carbon-fingerprint-recognition text-lg text-gray-400" }),
  37585. vue.createElementVNode("view", { class: "setting-info" }, [
  37586. vue.createElementVNode("text", { class: "setting-title" }, " 生物识别 "),
  37587. vue.createElementVNode("text", { class: "setting-desc" }, " 使用指纹或面容解锁 ")
  37588. ])
  37589. ]),
  37590. vue.createElementVNode("view", { class: "setting-control" }, [
  37591. vue.createElementVNode("switch", {
  37592. checked: $setup.settings.biometric,
  37593. color: $setup.currentThemeColor,
  37594. onChange: _cache[4] || (_cache[4] = ($event) => $setup.toggleSetting("biometric"))
  37595. }, null, 40, ["checked", "color"])
  37596. ])
  37597. ]),
  37598. vue.createElementVNode("view", {
  37599. class: "setting-item",
  37600. onClick: $setup.setAutoLock
  37601. }, [
  37602. vue.createElementVNode("view", { class: "setting-label" }, [
  37603. vue.createElementVNode("view", { class: "i-carbon-locked text-lg text-gray-400" }),
  37604. vue.createElementVNode("view", { class: "setting-info" }, [
  37605. vue.createElementVNode("text", { class: "setting-title" }, " 自动锁屏 "),
  37606. vue.createElementVNode(
  37607. "text",
  37608. { class: "setting-desc" },
  37609. vue.toDisplayString($setup.autoLockText),
  37610. 1
  37611. /* TEXT */
  37612. )
  37613. ])
  37614. ]),
  37615. vue.createElementVNode("view", { class: "setting-control" }, [
  37616. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37617. ])
  37618. ]),
  37619. vue.createElementVNode("view", {
  37620. class: "setting-item",
  37621. onClick: $setup.viewPrivacyPolicy
  37622. }, [
  37623. vue.createElementVNode("view", { class: "setting-label" }, [
  37624. vue.createElementVNode("view", { class: "i-carbon-document text-lg text-gray-400" }),
  37625. vue.createElementVNode("view", { class: "setting-info" }, [
  37626. vue.createElementVNode("text", { class: "setting-title" }, " 隐私协议 "),
  37627. vue.createElementVNode("text", { class: "setting-desc" }, " 查看隐私政策和用户协议 ")
  37628. ])
  37629. ]),
  37630. vue.createElementVNode("view", { class: "setting-control" }, [
  37631. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37632. ])
  37633. ])
  37634. ])
  37635. ]),
  37636. vue.createElementVNode("view", { class: "settings-card" }, [
  37637. vue.createElementVNode("view", { class: "card-header" }, [
  37638. vue.createElementVNode("view", { class: "i-carbon-data-base text-lg text-primary-500" }),
  37639. vue.createElementVNode("view", { class: "card-title" }, " 存储与缓存 ")
  37640. ]),
  37641. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  37642. vue.createElementVNode("view", {
  37643. class: "setting-item",
  37644. onClick: $setup.viewStorageInfo
  37645. }, [
  37646. vue.createElementVNode("view", { class: "setting-label" }, [
  37647. vue.createElementVNode("view", { class: "i-carbon-data-volume text-lg text-gray-400" }),
  37648. vue.createElementVNode("view", { class: "setting-info" }, [
  37649. vue.createElementVNode("text", { class: "setting-title" }, " 存储空间 "),
  37650. vue.createElementVNode(
  37651. "text",
  37652. { class: "setting-desc" },
  37653. " 已使用 " + vue.toDisplayString($setup.storageUsed) + ",共 " + vue.toDisplayString($setup.storageTotal),
  37654. 1
  37655. /* TEXT */
  37656. )
  37657. ])
  37658. ]),
  37659. vue.createElementVNode("view", { class: "setting-control" }, [
  37660. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37661. ])
  37662. ]),
  37663. vue.createElementVNode("view", {
  37664. class: "setting-item",
  37665. onClick: $setup.clearCache
  37666. }, [
  37667. vue.createElementVNode("view", { class: "setting-label" }, [
  37668. vue.createElementVNode("view", { class: "i-carbon-clean text-lg text-gray-400" }),
  37669. vue.createElementVNode("view", { class: "setting-info" }, [
  37670. vue.createElementVNode("text", { class: "setting-title" }, " 清除缓存 "),
  37671. vue.createElementVNode(
  37672. "text",
  37673. { class: "setting-desc" },
  37674. " 缓存大小:" + vue.toDisplayString($setup.cacheSize),
  37675. 1
  37676. /* TEXT */
  37677. )
  37678. ])
  37679. ]),
  37680. vue.createElementVNode("view", { class: "setting-control" }, [
  37681. vue.createElementVNode("view", { class: "rounded-full bg-red-50 px-3 py-1 text-sm text-red-500" }, " 清除 ")
  37682. ])
  37683. ]),
  37684. vue.createElementVNode("view", { class: "setting-item" }, [
  37685. vue.createElementVNode("view", { class: "setting-label" }, [
  37686. vue.createElementVNode("view", { class: "i-carbon-automatic text-lg text-gray-400" }),
  37687. vue.createElementVNode("view", { class: "setting-info" }, [
  37688. vue.createElementVNode("text", { class: "setting-title" }, " 自动清理 "),
  37689. vue.createElementVNode("text", { class: "setting-desc" }, " 定期自动清理临时文件 ")
  37690. ])
  37691. ]),
  37692. vue.createElementVNode("view", { class: "setting-control" }, [
  37693. vue.createElementVNode("switch", {
  37694. checked: $setup.settings.autoClean,
  37695. color: $setup.currentThemeColor,
  37696. onChange: _cache[5] || (_cache[5] = ($event) => $setup.toggleSetting("autoClean"))
  37697. }, null, 40, ["checked", "color"])
  37698. ])
  37699. ])
  37700. ])
  37701. ]),
  37702. vue.createElementVNode("view", { class: "settings-card" }, [
  37703. vue.createElementVNode("view", { class: "card-header" }, [
  37704. vue.createElementVNode("view", { class: "i-carbon-information text-lg text-primary-500" }),
  37705. vue.createElementVNode("view", { class: "card-title" }, " 关于与帮助 ")
  37706. ]),
  37707. vue.createElementVNode("view", { class: "divide-y divide-gray-100" }, [
  37708. vue.createElementVNode("view", {
  37709. class: "setting-item",
  37710. onClick: $setup.checkUpdate
  37711. }, [
  37712. vue.createElementVNode("view", { class: "setting-label" }, [
  37713. vue.createElementVNode("view", { class: "i-carbon-application text-lg text-gray-400" }),
  37714. vue.createElementVNode("view", { class: "setting-info" }, [
  37715. vue.createElementVNode("text", { class: "setting-title" }, " 版本信息 "),
  37716. vue.createElementVNode(
  37717. "text",
  37718. { class: "setting-desc" },
  37719. " 当前版本 " + vue.toDisplayString($setup.appVersion),
  37720. 1
  37721. /* TEXT */
  37722. )
  37723. ])
  37724. ]),
  37725. vue.createElementVNode("view", { class: "setting-control" }, [
  37726. $setup.hasUpdate ? (vue.openBlock(), vue.createElementBlock("view", {
  37727. key: 0,
  37728. class: "rounded-full bg-red-500 px-2 py-1 text-xs text-white"
  37729. }, " 有更新 ")) : vue.createCommentVNode("v-if", true),
  37730. vue.createElementVNode("view", { class: "i-carbon-chevron-right ml-2 text-sm text-gray-400" })
  37731. ])
  37732. ]),
  37733. vue.createElementVNode("view", {
  37734. class: "setting-item",
  37735. onClick: $setup.openHelpCenter
  37736. }, [
  37737. vue.createElementVNode("view", { class: "setting-label" }, [
  37738. vue.createElementVNode("view", { class: "i-carbon-help text-lg text-gray-400" }),
  37739. vue.createElementVNode("view", { class: "setting-info" }, [
  37740. vue.createElementVNode("text", { class: "setting-title" }, " 帮助中心 "),
  37741. vue.createElementVNode("text", { class: "setting-desc" }, " 常见问题和使用指南 ")
  37742. ])
  37743. ]),
  37744. vue.createElementVNode("view", { class: "setting-control" }, [
  37745. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37746. ])
  37747. ]),
  37748. vue.createElementVNode("view", {
  37749. class: "setting-item",
  37750. onClick: $setup.submitFeedback
  37751. }, [
  37752. vue.createElementVNode("view", { class: "setting-label" }, [
  37753. vue.createElementVNode("view", { class: "i-carbon-chat text-lg text-gray-400" }),
  37754. vue.createElementVNode("view", { class: "setting-info" }, [
  37755. vue.createElementVNode("text", { class: "setting-title" }, " 意见反馈 "),
  37756. vue.createElementVNode("text", { class: "setting-desc" }, " 向我们反馈问题和建议 ")
  37757. ])
  37758. ]),
  37759. vue.createElementVNode("view", { class: "setting-control" }, [
  37760. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37761. ])
  37762. ]),
  37763. vue.createElementVNode("view", {
  37764. class: "setting-item",
  37765. onClick: $setup.aboutUs
  37766. }, [
  37767. vue.createElementVNode("view", { class: "setting-label" }, [
  37768. vue.createElementVNode("view", { class: "i-carbon-favorite text-lg text-gray-400" }),
  37769. vue.createElementVNode("view", { class: "setting-info" }, [
  37770. vue.createElementVNode("text", { class: "setting-title" }, " 关于我们 "),
  37771. vue.createElementVNode("text", { class: "setting-desc" }, " 了解更多关于我们的信息 ")
  37772. ])
  37773. ]),
  37774. vue.createElementVNode("view", { class: "setting-control" }, [
  37775. vue.createElementVNode("view", { class: "i-carbon-chevron-right text-sm text-gray-400" })
  37776. ])
  37777. ])
  37778. ])
  37779. ]),
  37780. vue.createElementVNode("view", { class: "mt-4" }, [
  37781. vue.createElementVNode("button", {
  37782. class: "w-full flex items-center justify-center rounded-lg bg-primary-400 py-3 text-white font-medium transition-colors duration-200 active:bg-primary-600",
  37783. "hover-class": "bg-primary-600",
  37784. onClick: $setup.resetSettings
  37785. }, [
  37786. vue.createElementVNode("view", { class: "i-carbon-reset mr-2 text-lg" }),
  37787. vue.createTextVNode(" 重置设置 ")
  37788. ])
  37789. ])
  37790. ])
  37791. ]),
  37792. _: 1
  37793. /* STABLE */
  37794. });
  37795. }
  37796. const PagesOldPagePreferenceIndex = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["render", _sfc_render$A], ["__scopeId", "data-v-48f00c31"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/oldPage/preference/index.vue"]]);
  37797. const maxLength = 500;
  37798. const _sfc_main$A = {
  37799. __name: "index",
  37800. setup(__props, { expose: __expose }) {
  37801. __expose();
  37802. const feedbackForm = vue.ref({
  37803. type: "功能建议",
  37804. content: "",
  37805. contact: ""
  37806. });
  37807. const feedbackTypes = [
  37808. { label: "功能建议", value: "功能建议" },
  37809. { label: "问题反馈", value: "问题反馈" },
  37810. { label: "其他", value: "其他" }
  37811. ];
  37812. const isSubmitting = vue.ref(false);
  37813. function selectFeedbackType(type2) {
  37814. feedbackForm.value.type = type2;
  37815. }
  37816. async function submitFeedback() {
  37817. if (!feedbackForm.value.content.trim()) {
  37818. await showToast({
  37819. title: "请填写反馈内容",
  37820. icon: "none"
  37821. });
  37822. return;
  37823. }
  37824. if (feedbackForm.value.content.trim().length < 10) {
  37825. await showToast({
  37826. title: "反馈内容至少需要10个字符",
  37827. icon: "none"
  37828. });
  37829. return;
  37830. }
  37831. try {
  37832. isSubmitting.value = true;
  37833. await new Promise((resolve2) => setTimeout(resolve2, 1500));
  37834. await showToast({
  37835. title: "反馈提交成功",
  37836. icon: "success"
  37837. });
  37838. feedbackForm.value = {
  37839. type: "功能建议",
  37840. content: "",
  37841. contact: ""
  37842. };
  37843. setTimeout(() => {
  37844. uni.navigateBack();
  37845. }, 1500);
  37846. } catch (error) {
  37847. await showToast({
  37848. title: "提交失败,请重试",
  37849. icon: "error"
  37850. });
  37851. } finally {
  37852. isSubmitting.value = false;
  37853. }
  37854. }
  37855. const contentLength = vue.computed(() => feedbackForm.value.content.length);
  37856. const __returned__ = { feedbackForm, feedbackTypes, isSubmitting, selectFeedbackType, submitFeedback, contentLength, maxLength, get showToast() {
  37857. return showToast;
  37858. } };
  37859. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  37860. return __returned__;
  37861. }
  37862. };
  37863. function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
  37864. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  37865. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  37866. default: vue.withCtx(() => [
  37867. vue.createElementVNode("view", { class: "feedback-page h-full flex flex-col bg-gray-50" }, [
  37868. vue.createCommentVNode(" 页面头部 "),
  37869. vue.createElementVNode("view", { class: "header-section relative" }, [
  37870. vue.createElementVNode("view", { class: "h-32 from-primary-400 to-primary-500 bg-gradient-to-br" }),
  37871. vue.createElementVNode("view", { class: "absolute inset-0 flex items-center justify-center" }, [
  37872. vue.createElementVNode("view", { class: "text-center text-white" }, [
  37873. vue.createElementVNode("view", { class: "mb-2 text-2xl font-bold" }, " 意见反馈 "),
  37874. vue.createElementVNode("view", { class: "text-sm text-white/80" }, " 您的建议是我们前进的动力 ")
  37875. ])
  37876. ])
  37877. ]),
  37878. vue.createCommentVNode(" 表单内容 "),
  37879. vue.createElementVNode("view", { class: "form-section relative z-10 flex-1 px-4 -mt-4" }, [
  37880. vue.createElementVNode("view", { class: "overflow-hidden rounded-xl bg-white shadow-lg" }, [
  37881. vue.createCommentVNode(" 反馈类型选择 "),
  37882. vue.createElementVNode("view", { class: "border-b border-gray-100 px-5 py-4" }, [
  37883. vue.createElementVNode("view", { class: "mb-3 text-base text-gray-800 font-medium" }, " 反馈类型 "),
  37884. vue.createElementVNode("view", { class: "flex space-x-3" }, [
  37885. (vue.openBlock(), vue.createElementBlock(
  37886. vue.Fragment,
  37887. null,
  37888. vue.renderList($setup.feedbackTypes, (type2) => {
  37889. return vue.createElementVNode("view", {
  37890. key: type2.value,
  37891. class: vue.normalizeClass(["flex-1 rounded-lg border-2 px-3 py-2 text-center text-sm font-medium transition-all duration-200", [
  37892. $setup.feedbackForm.type === type2.value ? "border-primary-500 bg-primary-50 text-primary-600" : "border-gray-200 bg-gray-50 text-gray-600 active:bg-gray-100"
  37893. ]]),
  37894. onClick: ($event) => $setup.selectFeedbackType(type2.value)
  37895. }, vue.toDisplayString(type2.label), 11, ["onClick"]);
  37896. }),
  37897. 64
  37898. /* STABLE_FRAGMENT */
  37899. ))
  37900. ])
  37901. ]),
  37902. vue.createCommentVNode(" 反馈内容 "),
  37903. vue.createElementVNode("view", { class: "border-b border-gray-100 px-5 py-4" }, [
  37904. vue.createElementVNode("view", { class: "mb-3 flex items-center justify-between" }, [
  37905. vue.createElementVNode("view", { class: "text-base text-gray-800 font-medium" }, [
  37906. vue.createTextVNode(" 反馈内容 "),
  37907. vue.createElementVNode("text", { class: "text-red-500" }, " * ")
  37908. ]),
  37909. vue.createElementVNode(
  37910. "view",
  37911. { class: "text-xs text-gray-400" },
  37912. vue.toDisplayString($setup.contentLength) + "/" + vue.toDisplayString($setup.maxLength),
  37913. 1
  37914. /* TEXT */
  37915. )
  37916. ]),
  37917. vue.withDirectives(vue.createElementVNode(
  37918. "textarea",
  37919. {
  37920. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.feedbackForm.content = $event),
  37921. class: "w-full resize-none rounded-lg border border-gray-200 bg-gray-50 px-3 py-3 text-sm text-gray-700 placeholder-gray-400 transition-colors duration-200 focus:border-primary-500 focus:bg-white focus:outline-none",
  37922. placeholder: "请详细描述您的问题或建议,我们会认真对待每一条反馈...",
  37923. maxlength: $setup.maxLength,
  37924. rows: "6"
  37925. },
  37926. null,
  37927. 512
  37928. /* NEED_PATCH */
  37929. ), [
  37930. [vue.vModelText, $setup.feedbackForm.content]
  37931. ])
  37932. ]),
  37933. vue.createCommentVNode(" 联系方式 "),
  37934. vue.createElementVNode("view", { class: "px-5 py-4" }, [
  37935. vue.createElementVNode("view", { class: "mb-3 text-base text-gray-800 font-medium" }, [
  37936. vue.createTextVNode(" 联系方式 "),
  37937. vue.createElementVNode("text", { class: "text-xs text-gray-400 font-normal" }, " (选填) ")
  37938. ]),
  37939. vue.withDirectives(vue.createElementVNode(
  37940. "input",
  37941. {
  37942. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.feedbackForm.contact = $event),
  37943. class: "w-full h-9 rounded-lg border border-gray-200 bg-gray-50 px-3 text-sm text-gray-700 placeholder-gray-400 transition-colors duration-200 focus:border-primary-500 focus:bg-white focus:outline-none",
  37944. placeholder: "请输入联系方式",
  37945. type: "text"
  37946. },
  37947. null,
  37948. 512
  37949. /* NEED_PATCH */
  37950. ), [
  37951. [vue.vModelText, $setup.feedbackForm.contact]
  37952. ])
  37953. ])
  37954. ]),
  37955. vue.createCommentVNode(" 提交按钮 "),
  37956. vue.createElementVNode("view", { class: "mt-6 px-2" }, [
  37957. vue.createElementVNode("button", {
  37958. class: vue.normalizeClass(["w-full rounded-xl from-primary-500 to-primary-400 bg-gradient-to-r px-6 py-4 font-semibold shadow-lg transition-all duration-200 active:scale-98 disabled:cursor-not-allowed !text-white disabled:opacity-70", { "shadow-xl": !$setup.isSubmitting }]),
  37959. disabled: $setup.isSubmitting || !$setup.feedbackForm.content.trim(),
  37960. onClick: $setup.submitFeedback
  37961. }, [
  37962. vue.createElementVNode("view", { class: "flex items-center justify-center space-x-2" }, [
  37963. $setup.isSubmitting ? (vue.openBlock(), vue.createElementBlock("view", {
  37964. key: 0,
  37965. class: "i-carbon-fade h-5 w-5 animate-spin"
  37966. })) : (vue.openBlock(), vue.createElementBlock("view", {
  37967. key: 1,
  37968. class: "i-carbon-send h-5 w-5"
  37969. })),
  37970. vue.createElementVNode(
  37971. "text",
  37972. null,
  37973. vue.toDisplayString($setup.isSubmitting ? "提交中..." : "提交反馈"),
  37974. 1
  37975. /* TEXT */
  37976. )
  37977. ])
  37978. ], 10, ["disabled"])
  37979. ]),
  37980. vue.createCommentVNode(" 温馨提示 "),
  37981. vue.createElementVNode("view", { class: "mt-4 rounded-lg bg-blue-50 p-4" }, [
  37982. vue.createElementVNode("view", { class: "flex items-start space-x-2" }, [
  37983. vue.createElementVNode("view", { class: "i-carbon-information mt-0.5 h-4 w-4 flex-shrink-0 text-primary-500" }),
  37984. vue.createElementVNode("view", { class: "text-xs text-primary-600 leading-relaxed" }, [
  37985. vue.createElementVNode("view", { class: "mb-1 font-medium" }, " 温馨提示: "),
  37986. vue.createElementVNode("view", null, "• 我们会在1-3个工作日内回复您的反馈"),
  37987. vue.createElementVNode("view", null, '• 如需紧急处理,请通过"联系我们"页面联系客服'),
  37988. vue.createElementVNode("view", null, "• 您的隐私信息将得到严格保护")
  37989. ])
  37990. ])
  37991. ])
  37992. ])
  37993. ])
  37994. ]),
  37995. _: 1
  37996. /* STABLE */
  37997. });
  37998. }
  37999. const PagesOldPageFeedbackIndex = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$z], ["__scopeId", "data-v-ef1844d7"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/oldPage/feedback/index.vue"]]);
  38000. const _sfc_main$z = {
  38001. __name: "index",
  38002. setup(__props, { expose: __expose }) {
  38003. __expose();
  38004. const { t: t2 } = useI18n();
  38005. const dataList = vue.ref([]);
  38006. const loading = vue.ref(true);
  38007. function onQuery() {
  38008. loading.value = true;
  38009. getActivity({ type: 3 }).then((res) => {
  38010. dataList.value = res.data.list || [];
  38011. loading.value = false;
  38012. }).catch((err) => {
  38013. formatAppLog("error", "at pages/WorkModule/my/promotion/index.vue:69", "获取活动失败", err);
  38014. dataList.value = [];
  38015. loading.value = false;
  38016. });
  38017. }
  38018. function goDetail(item) {
  38019. uni.navigateTo({
  38020. url: `/pages/WorkModule/my/promotion/detail/index?id=${item.id}`
  38021. });
  38022. }
  38023. vue.onMounted(() => {
  38024. onQuery();
  38025. });
  38026. const __returned__ = { t: t2, dataList, loading, onQuery, goDetail, get useI18n() {
  38027. return useI18n;
  38028. }, get getActivity() {
  38029. return getActivity;
  38030. }, onMounted: vue.onMounted, ref: vue.ref };
  38031. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  38032. return __returned__;
  38033. }
  38034. };
  38035. function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
  38036. const _component_u_skeleton = __unplugin_components_0$3;
  38037. const _component_u_image = __unplugin_components_1$1;
  38038. const _component_PageContainer = PageContainer;
  38039. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  38040. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  38041. default: vue.withCtx(() => [
  38042. vue.createVNode(_component_PageContainer, { "nav-title": "优惠活动" }, {
  38043. default: vue.withCtx(() => [
  38044. vue.createElementVNode("view", { style: { "padding": "10px", "box-sizing": "border-box" } }, [
  38045. vue.createElementVNode(
  38046. "scroll-view",
  38047. {
  38048. "scroll-y": "",
  38049. onTouchmove: _cache[0] || (_cache[0] = vue.withModifiers(() => {
  38050. }, ["stop", "prevent"])),
  38051. style: { "height": "calc(100vh - 100px - env(safe-area-inset-bottom) - env(safe-area-inset-top))" }
  38052. },
  38053. [
  38054. vue.createCommentVNode(" 骨架屏 - 加载中显示多个卡片骨架 "),
  38055. $setup.loading ? (vue.openBlock(), vue.createElementBlock(
  38056. vue.Fragment,
  38057. { key: 0 },
  38058. vue.renderList(6, (n) => {
  38059. return vue.createElementVNode("view", {
  38060. class: "promotion-item",
  38061. key: n
  38062. }, [
  38063. vue.createVNode(_component_u_skeleton, {
  38064. loading: true,
  38065. animate: true,
  38066. rows: "1",
  38067. title: "",
  38068. "title-width": 260,
  38069. "title-height": 18
  38070. })
  38071. ]);
  38072. }),
  38073. 64
  38074. /* STABLE_FRAGMENT */
  38075. )) : (vue.openBlock(), vue.createElementBlock(
  38076. vue.Fragment,
  38077. { key: 1 },
  38078. [
  38079. vue.createCommentVNode(" 真实内容 "),
  38080. (vue.openBlock(true), vue.createElementBlock(
  38081. vue.Fragment,
  38082. null,
  38083. vue.renderList($setup.dataList, (item, index) => {
  38084. return vue.openBlock(), vue.createElementBlock("view", {
  38085. class: "promotion-item",
  38086. key: index,
  38087. onClick: ($event) => $setup.goDetail(item)
  38088. }, [
  38089. vue.createVNode(_component_u_image, {
  38090. class: "rounded-lg",
  38091. src: item.detail_image,
  38092. width: "100%",
  38093. height: "100%",
  38094. mode: "aspectFill",
  38095. "lazy-load": true,
  38096. fade: true
  38097. }, null, 8, ["src"])
  38098. ], 8, ["onClick"]);
  38099. }),
  38100. 128
  38101. /* KEYED_FRAGMENT */
  38102. )),
  38103. vue.createElementVNode("view", { style: { "height": "50px" } })
  38104. ],
  38105. 64
  38106. /* STABLE_FRAGMENT */
  38107. ))
  38108. ],
  38109. 32
  38110. /* NEED_HYDRATION */
  38111. )
  38112. ])
  38113. ]),
  38114. _: 1
  38115. /* STABLE */
  38116. })
  38117. ]),
  38118. _: 1
  38119. /* STABLE */
  38120. });
  38121. }
  38122. const PagesWorkModuleMyPromotionIndex = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["render", _sfc_render$y], ["__scopeId", "data-v-e55816c5"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/promotion/index.vue"]]);
  38123. const _sfc_main$y = {
  38124. __name: "index",
  38125. setup(__props, { expose: __expose }) {
  38126. __expose();
  38127. const content = vue.ref();
  38128. const id = vue.ref();
  38129. onLoad((val) => {
  38130. id.value = val.id;
  38131. getActivityDetail({ id: id.value }).then((res) => {
  38132. content.value = res.data.content.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&quot;/g, '"').replace(/<\/?p[^>]*>/gi, "").replace(/<\/?br[^>]*>/gi, "");
  38133. });
  38134. });
  38135. const __returned__ = { content, id, get getActivityDetail() {
  38136. return getActivityDetail;
  38137. } };
  38138. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  38139. return __returned__;
  38140. }
  38141. };
  38142. function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) {
  38143. const _component_PageContainer = PageContainer;
  38144. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  38145. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  38146. default: vue.withCtx(() => [
  38147. vue.createVNode(_component_PageContainer, { "nav-title": "优惠活动详情" }, {
  38148. default: vue.withCtx(() => [
  38149. vue.createElementVNode("view", { style: { "overflow-y": "auto", "height": "100%" } }, [
  38150. vue.createElementVNode("view", { innerHTML: $setup.content }, null, 8, ["innerHTML"])
  38151. ])
  38152. ]),
  38153. _: 1
  38154. /* STABLE */
  38155. })
  38156. ]),
  38157. _: 1
  38158. /* STABLE */
  38159. });
  38160. }
  38161. const PagesWorkModuleMyPromotionDetailIndex = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["render", _sfc_render$x], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/promotion/detail/index.vue"]]);
  38162. const routes = [
  38163. {
  38164. "path": "/pages/Tabbar/Home/index",
  38165. "aliasPath": "/",
  38166. "name": "index"
  38167. },
  38168. {
  38169. "path": "/pages/Tabbar/RollingBall/index",
  38170. "aliasPath": "/RollingBall",
  38171. "name": "RollingBall"
  38172. },
  38173. {
  38174. "path": "/pages/Tabbar/SportsBetting/index",
  38175. "aliasPath": "/SportsBetting",
  38176. "name": "SportsBetting"
  38177. },
  38178. {
  38179. "path": "/pages/Tabbar/WorldCup/index",
  38180. "aliasPath": "/WorldCup",
  38181. "name": "WorldCup"
  38182. },
  38183. {
  38184. "path": "/pages/Tabbar/Entertainment/index",
  38185. "aliasPath": "/Entertainment",
  38186. "name": "Entertainment"
  38187. },
  38188. {
  38189. "path": "/pages/Tabbar/BettingHistory/index",
  38190. "aliasPath": "/BettingHistory",
  38191. "name": "BettingHistory"
  38192. },
  38193. {
  38194. "path": "/pages/Tabbar/My/index",
  38195. "aliasPath": "/My",
  38196. "name": "My"
  38197. },
  38198. {
  38199. "path": "/pages/Tabbar/Entertainment/components/Digital/detail",
  38200. "aliasPath": "/DigitalDetail",
  38201. "name": "DigitalDetail"
  38202. },
  38203. {
  38204. "path": "/pages/login/index",
  38205. "aliasPath": "/login",
  38206. "name": "login"
  38207. },
  38208. {
  38209. "path": "/pages/register/index",
  38210. "aliasPath": "/register",
  38211. "name": "register"
  38212. },
  38213. {
  38214. "path": "/pages/setAccount/index",
  38215. "aliasPath": "/setAccount",
  38216. "name": "setAccount"
  38217. },
  38218. {
  38219. "path": "/pages/index/example/index",
  38220. "aliasPath": "/example",
  38221. "name": "example"
  38222. },
  38223. {
  38224. "path": "/pages/index/user/index",
  38225. "aliasPath": "/user",
  38226. "name": "user"
  38227. },
  38228. {
  38229. "path": "/pages/common/web-view/index",
  38230. "aliasPath": "/web-view",
  38231. "name": "web-view"
  38232. },
  38233. {
  38234. "path": "/pages/common/rich-view/index",
  38235. "aliasPath": "/rich-view",
  38236. "name": "rich-view"
  38237. },
  38238. {
  38239. "path": "/pages/tips/middleware/index",
  38240. "aliasPath": "/tips-middleware",
  38241. "name": "tips-middleware",
  38242. "meta": {
  38243. "middleware": [
  38244. "test"
  38245. ]
  38246. }
  38247. },
  38248. {
  38249. "path": "/pages/template/paging/index",
  38250. "aliasPath": "/template-paging",
  38251. "name": "template-paging"
  38252. },
  38253. {
  38254. "path": "/pages/oldPage/personal/index",
  38255. "aliasPath": "/personal",
  38256. "name": "personal"
  38257. },
  38258. {
  38259. "path": "/pages/oldPage/contact/index",
  38260. "aliasPath": "/contact",
  38261. "name": "contact"
  38262. },
  38263. {
  38264. "path": "/pages/oldPage/preference/index",
  38265. "aliasPath": "/preference",
  38266. "name": "preference"
  38267. },
  38268. {
  38269. "path": "/pages/oldPage/feedback/index",
  38270. "aliasPath": "/feedback",
  38271. "name": "feedback"
  38272. },
  38273. {
  38274. "path": "/pages/WorkModule/my/promotion/index",
  38275. "aliasPath": "/promotion",
  38276. "name": "promotion"
  38277. },
  38278. {
  38279. "path": "/pages/WorkModule/my/promotion/detail/index",
  38280. "aliasPath": "/promotionDetail",
  38281. "name": "promotionDetail"
  38282. },
  38283. {
  38284. "path": "/pages/WorkModule/my/safety/index",
  38285. "aliasPath": "/safety",
  38286. "name": "safety"
  38287. },
  38288. {
  38289. "path": "/pages/WorkModule/my/userInfo/index",
  38290. "aliasPath": "/userInfo",
  38291. "name": "userInfo"
  38292. },
  38293. {
  38294. "path": "/pages/WorkModule/my/topUp/index",
  38295. "aliasPath": "/topUp",
  38296. "name": "topUp"
  38297. },
  38298. {
  38299. "path": "/pages/WorkModule/my/rechargeRecord/index",
  38300. "aliasPath": "/rechargeRecord",
  38301. "name": "rechargeRecord"
  38302. },
  38303. {
  38304. "path": "/pages/WorkModule/my/withdraw/index",
  38305. "aliasPath": "/withdraw",
  38306. "name": "withdraw"
  38307. },
  38308. {
  38309. "path": "/pages/WorkModule/my/withdrawalHistory/index",
  38310. "aliasPath": "/withdrawalHistory",
  38311. "name": "withdrawalHistory"
  38312. },
  38313. {
  38314. "path": "/pages/WorkModule/my/Yuebao/index",
  38315. "aliasPath": "/Yuebao",
  38316. "name": "Yuebao"
  38317. },
  38318. {
  38319. "path": "/pages/WorkModule/my/Yuebao/itemList",
  38320. "aliasPath": "/YuebaoItemList",
  38321. "name": "YuebaoItemList"
  38322. },
  38323. {
  38324. "path": "/pages/WorkModule/my/WalletManagement/index",
  38325. "aliasPath": "/WalletManagement",
  38326. "name": "WalletManagement"
  38327. },
  38328. {
  38329. "path": "/pages/WorkModule/my/changePassword/index",
  38330. "aliasPath": "/changePassword",
  38331. "name": "changePassword"
  38332. },
  38333. {
  38334. "path": "/pages/WorkModule/my/changeFundPassword/index",
  38335. "aliasPath": "/changeFundPassword",
  38336. "name": "changeFundPassword"
  38337. },
  38338. {
  38339. "path": "/pages/WorkModule/my/fundRecord/index",
  38340. "aliasPath": "/fundRecord",
  38341. "name": "fundRecord"
  38342. },
  38343. {
  38344. "path": "/pages/common/betSlip/index",
  38345. "aliasPath": "/betSlip",
  38346. "name": "betSlip"
  38347. },
  38348. {
  38349. "path": "/pages/common/customerService/index",
  38350. "aliasPath": "/customerService",
  38351. "name": "customerService"
  38352. },
  38353. {
  38354. "path": "/pages/WorkModule/bettingHistory/bettingDetail/index",
  38355. "aliasPath": "/bettingDetail",
  38356. "name": "bettingDetail"
  38357. },
  38358. {
  38359. "path": "/pages/common/sportDetail/index",
  38360. "aliasPath": "/sportDetail",
  38361. "name": "sportDetail"
  38362. },
  38363. {
  38364. "path": "/pages/Tabbar/Entertainment/view/PC28/index",
  38365. "aliasPath": "/PC28",
  38366. "name": "PC28"
  38367. },
  38368. {
  38369. "path": "/pages/Tabbar/Entertainment/view/ExtremeSpeed28/index",
  38370. "aliasPath": "/ExtremeSpeed28",
  38371. "name": "ExtremeSpeed28"
  38372. },
  38373. {
  38374. "path": "/pages/Tabbar/Entertainment/view/Digital/index",
  38375. "aliasPath": "/Digital",
  38376. "name": "Digital"
  38377. },
  38378. {
  38379. "path": "/pages/Tabbar/Entertainment/view/NewDigital/index",
  38380. "aliasPath": "/NewDigital",
  38381. "name": "NewDigital"
  38382. },
  38383. {
  38384. "path": "/pages/Tabbar/Entertainment/view/SpeedDigital/index",
  38385. "aliasPath": "/SpeedDigital",
  38386. "name": "SpeedDigital"
  38387. },
  38388. {
  38389. "path": "/pages/Tabbar/Entertainment/view/HKDigital/index",
  38390. "aliasPath": "/HKDigital",
  38391. "name": "HKDigital"
  38392. },
  38393. {
  38394. "path": "/pages/Tabbar/Entertainment/view/history/index",
  38395. "aliasPath": "/history",
  38396. "name": "history"
  38397. },
  38398. {
  38399. "path": "/pages/Tabbar/Entertainment/view/Pc28BettingHistory/index",
  38400. "aliasPath": "/Pc28BettingHistory",
  38401. "name": "Pc28BettingHistory"
  38402. },
  38403. {
  38404. "path": "/pages/common/AllHistory/index",
  38405. "aliasPath": "/AllHistory",
  38406. "name": "AllHistory"
  38407. },
  38408. {
  38409. "path": "/pages/common/PC28Rule/index",
  38410. "aliasPath": "/PC28Rule",
  38411. "name": "PC28Rule"
  38412. },
  38413. {
  38414. "path": "/pages/WorkModule/Entertainment/Detail/index",
  38415. "aliasPath": "/EntertainmentDetail",
  38416. "name": "EntertainmentDetail"
  38417. }
  38418. ];
  38419. function login(router2) {
  38420. router2.beforeEach((to, from, next) => {
  38421. next();
  38422. });
  38423. router2.afterEach(() => {
  38424. });
  38425. }
  38426. function test(router2) {
  38427. router2.beforeEach((to, from, next) => {
  38428. uni.showModal({
  38429. title: "提示",
  38430. content: "触发了路由中间件,是否允许通过?",
  38431. success: (res) => {
  38432. if (res.cancel) {
  38433. next(false);
  38434. } else {
  38435. next();
  38436. }
  38437. }
  38438. });
  38439. });
  38440. router2.afterEach(() => {
  38441. });
  38442. }
  38443. function permission(router2) {
  38444. login(router2);
  38445. defineMiddleware("test", test, { router: router2 });
  38446. }
  38447. const router = createRouter({
  38448. routes: [...routes]
  38449. });
  38450. permission(router);
  38451. const _sfc_main$x = {
  38452. __name: "index",
  38453. setup(__props, { expose: __expose }) {
  38454. __expose();
  38455. const showModal2 = vue.ref(false);
  38456. const handleConfirmDelete = () => {
  38457. deleteAccount().then(() => {
  38458. showModal2.value = false;
  38459. uni.clearStorageSync();
  38460. router.replaceAll({ name: "login" });
  38461. }).catch(() => {
  38462. showModal2.value = false;
  38463. });
  38464. };
  38465. const goPage = (name) => {
  38466. router.push({ name });
  38467. };
  38468. const __returned__ = { showModal: showModal2, handleConfirmDelete, goPage, ref: vue.ref, get deleteAccount() {
  38469. return deleteAccount;
  38470. }, get router() {
  38471. return router;
  38472. } };
  38473. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  38474. return __returned__;
  38475. }
  38476. };
  38477. function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) {
  38478. const _component_u_cell_item = __unplugin_components_3;
  38479. const _component_u_cell_group = __unplugin_components_4$1;
  38480. const _component_u_modal = __unplugin_components_4$3;
  38481. const _component_PageContainer = PageContainer;
  38482. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  38483. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  38484. default: vue.withCtx(() => [
  38485. vue.createVNode(_component_PageContainer, { "nav-title": "安全" }, {
  38486. default: vue.withCtx(() => [
  38487. vue.createElementVNode("view", { class: "content" }, [
  38488. vue.createVNode(_component_u_cell_group, { border: false }, {
  38489. default: vue.withCtx(() => [
  38490. vue.createCommentVNode(" 修改密码 "),
  38491. vue.createVNode(_component_u_cell_item, {
  38492. title: _ctx.$t("修改密码"),
  38493. icon: "lock",
  38494. onClick: _cache[0] || (_cache[0] = ($event) => $setup.goPage("changePassword"))
  38495. }, null, 8, ["title"]),
  38496. vue.createCommentVNode(" 修改资金密码 "),
  38497. vue.createVNode(_component_u_cell_item, {
  38498. title: _ctx.$t("修改资金密码"),
  38499. icon: "lock",
  38500. onClick: _cache[1] || (_cache[1] = ($event) => $setup.goPage("changeFundPassword"))
  38501. }, null, 8, ["title"]),
  38502. vue.createCommentVNode(" 注销账号 "),
  38503. vue.createVNode(_component_u_cell_item, {
  38504. title: _ctx.$t("注销账号"),
  38505. icon: "man-add-fill",
  38506. onClick: _cache[2] || (_cache[2] = ($event) => $setup.showModal = true)
  38507. }, null, 8, ["title"])
  38508. ]),
  38509. _: 1
  38510. /* STABLE */
  38511. }),
  38512. vue.createCommentVNode(" 注销确认模态框 "),
  38513. vue.createVNode(_component_u_modal, {
  38514. modelValue: $setup.showModal,
  38515. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.showModal = $event),
  38516. title: _ctx.$t("提示"),
  38517. content: _ctx.$t("是否注销账户,注销账户后,系统将删除清空账户"),
  38518. "show-cancel-button": true,
  38519. "confirm-text": _ctx.$t("确认"),
  38520. "cancel-text": _ctx.$t("取消"),
  38521. "confirm-color": "#f8b932",
  38522. "async-close": true,
  38523. onConfirm: $setup.handleConfirmDelete
  38524. }, null, 8, ["modelValue", "title", "content", "confirm-text", "cancel-text"])
  38525. ])
  38526. ]),
  38527. _: 1
  38528. /* STABLE */
  38529. })
  38530. ]),
  38531. _: 1
  38532. /* STABLE */
  38533. });
  38534. }
  38535. const PagesWorkModuleMySafetyIndex = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["render", _sfc_render$w], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/safety/index.vue"]]);
  38536. const _sfc_main$w = {
  38537. __name: "index",
  38538. setup(__props, { expose: __expose }) {
  38539. __expose();
  38540. const userInfo = vue.ref({});
  38541. const showModal2 = vue.ref(false);
  38542. const submitLoading = vue.ref(false);
  38543. const editForm = vue.ref({
  38544. phone: "",
  38545. email: ""
  38546. });
  38547. const btnStyle = {
  38548. color: "#333",
  38549. fontWeight: "600"
  38550. };
  38551. onShow(() => {
  38552. fetchUserData();
  38553. });
  38554. const fetchUserData = async () => {
  38555. try {
  38556. const res = await getUserInfo();
  38557. if (res.code === 1) {
  38558. const data = res.data;
  38559. userInfo.value = data;
  38560. }
  38561. } catch (error) {
  38562. formatAppLog("error", "at pages/WorkModule/my/userInfo/index.vue:166", "获取用户信息失败", error);
  38563. }
  38564. };
  38565. const openEditModal = () => {
  38566. editForm.value.phone = userInfo.value.phone || "";
  38567. editForm.value.email = userInfo.value.email || "";
  38568. showModal2.value = true;
  38569. };
  38570. const closeModal = () => {
  38571. showModal2.value = false;
  38572. };
  38573. const handleConfirm = async () => {
  38574. if (submitLoading.value)
  38575. return;
  38576. submitLoading.value = true;
  38577. const params = {
  38578. phone: editForm.value.phone,
  38579. email: editForm.value.email
  38580. };
  38581. try {
  38582. const res = await updateUserInfo(params);
  38583. if (res.code === 1) {
  38584. showModal2.value = false;
  38585. fetchUserData();
  38586. } else {
  38587. }
  38588. } catch (error) {
  38589. } finally {
  38590. submitLoading.value = false;
  38591. }
  38592. };
  38593. const copyText = (text) => {
  38594. if (!text)
  38595. return;
  38596. uni.setClipboardData({
  38597. data: text,
  38598. success: () => {
  38599. uni.showToast({ title: "复制成功", icon: "none" });
  38600. }
  38601. });
  38602. };
  38603. const __returned__ = { userInfo, showModal: showModal2, submitLoading, editForm, btnStyle, fetchUserData, openEditModal, closeModal, handleConfirm, copyText, ref: vue.ref, get onShow() {
  38604. return onShow;
  38605. }, get getUserInfo() {
  38606. return getUserInfo;
  38607. }, get updateUserInfo() {
  38608. return updateUserInfo;
  38609. } };
  38610. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  38611. return __returned__;
  38612. }
  38613. };
  38614. function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
  38615. const _component_u_icon = __unplugin_components_0$5;
  38616. const _component_u_button = __unplugin_components_2$1;
  38617. const _component_u_input = __unplugin_components_3$2;
  38618. const _component_u_popup = __unplugin_components_2$3;
  38619. const _component_PageContainer = PageContainer;
  38620. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  38621. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  38622. default: vue.withCtx(() => [
  38623. vue.createVNode(_component_PageContainer, { "nav-title": "个人资料" }, {
  38624. navBarRight: vue.withCtx(() => [
  38625. vue.createElementVNode("view", {
  38626. class: "nav-btn",
  38627. onClick: $setup.openEditModal
  38628. }, [
  38629. vue.createVNode(_component_u_icon, {
  38630. name: "edit-pen",
  38631. size: "28"
  38632. })
  38633. ])
  38634. ]),
  38635. default: vue.withCtx(() => [
  38636. vue.createElementVNode("view", { class: "profile-page" }, [
  38637. vue.createCommentVNode(" 1. 账户卡片 "),
  38638. vue.createElementVNode("view", { class: "info-card" }, [
  38639. vue.createElementVNode(
  38640. "view",
  38641. { class: "card-title" },
  38642. vue.toDisplayString(_ctx.$t("账户")),
  38643. 1
  38644. /* TEXT */
  38645. ),
  38646. vue.createElementVNode("view", { class: "info-row" }, [
  38647. vue.createElementVNode(
  38648. "text",
  38649. { class: "label" },
  38650. vue.toDisplayString(_ctx.$t("名称")),
  38651. 1
  38652. /* TEXT */
  38653. ),
  38654. vue.createElementVNode(
  38655. "text",
  38656. { class: "value" },
  38657. vue.toDisplayString($setup.userInfo.first_name || "-"),
  38658. 1
  38659. /* TEXT */
  38660. )
  38661. ]),
  38662. vue.createElementVNode("view", { class: "info-row" }, [
  38663. vue.createElementVNode(
  38664. "text",
  38665. { class: "label" },
  38666. vue.toDisplayString(_ctx.$t("性别")),
  38667. 1
  38668. /* TEXT */
  38669. ),
  38670. vue.createElementVNode(
  38671. "text",
  38672. { class: "value" },
  38673. vue.toDisplayString($setup.userInfo.sex === 2 ? _ctx.$t("未知") : $setup.userInfo.sex === 1 ? _ctx.$t("男") : _ctx.$t("女")),
  38674. 1
  38675. /* TEXT */
  38676. )
  38677. ]),
  38678. vue.createElementVNode("view", { class: "info-row" }, [
  38679. vue.createElementVNode(
  38680. "text",
  38681. { class: "label" },
  38682. vue.toDisplayString(_ctx.$t("账户号码")),
  38683. 1
  38684. /* TEXT */
  38685. ),
  38686. vue.createElementVNode("view", {
  38687. class: "value-box",
  38688. onClick: _cache[0] || (_cache[0] = ($event) => $setup.copyText($setup.userInfo.account))
  38689. }, [
  38690. vue.createVNode(_component_u_icon, {
  38691. name: "file-text-fill",
  38692. color: "#666",
  38693. class: "m-r-10"
  38694. }),
  38695. vue.createElementVNode(
  38696. "text",
  38697. { class: "value bold" },
  38698. vue.toDisplayString($setup.userInfo.account || "-"),
  38699. 1
  38700. /* TEXT */
  38701. )
  38702. ])
  38703. ]),
  38704. vue.createElementVNode("view", { class: "info-row" }, [
  38705. vue.createElementVNode(
  38706. "text",
  38707. { class: "label" },
  38708. vue.toDisplayString(_ctx.$t("您的密码")),
  38709. 1
  38710. /* TEXT */
  38711. ),
  38712. vue.createElementVNode(
  38713. "text",
  38714. { class: "value" },
  38715. vue.toDisplayString($setup.userInfo.has_password ? "********" : _ctx.$t("未设置")),
  38716. 1
  38717. /* TEXT */
  38718. )
  38719. ])
  38720. ]),
  38721. vue.createCommentVNode(" 2. 联系方式 "),
  38722. vue.createElementVNode("view", { class: "info-card" }, [
  38723. vue.createElementVNode(
  38724. "view",
  38725. { class: "card-title" },
  38726. vue.toDisplayString(_ctx.$t("联系方式")),
  38727. 1
  38728. /* TEXT */
  38729. ),
  38730. vue.createCommentVNode(" 电话 "),
  38731. vue.createElementVNode("view", { class: "info-row" }, [
  38732. vue.createElementVNode("view", { class: "label-box" }, [
  38733. vue.createElementVNode(
  38734. "text",
  38735. { class: "label" },
  38736. vue.toDisplayString(_ctx.$t("电话")),
  38737. 1
  38738. /* TEXT */
  38739. ),
  38740. !$setup.userInfo.phone ? (vue.openBlock(), vue.createElementBlock(
  38741. "text",
  38742. {
  38743. key: 0,
  38744. class: "not-provided"
  38745. },
  38746. "(" + vue.toDisplayString(_ctx.$t("未提供")) + ")",
  38747. 1
  38748. /* TEXT */
  38749. )) : vue.createCommentVNode("v-if", true)
  38750. ]),
  38751. vue.createElementVNode("view", { class: "value-box" }, [
  38752. $setup.userInfo.phone ? (vue.openBlock(), vue.createElementBlock(
  38753. "text",
  38754. {
  38755. key: 0,
  38756. class: "value m-r-10"
  38757. },
  38758. vue.toDisplayString($setup.userInfo.phone),
  38759. 1
  38760. /* TEXT */
  38761. )) : vue.createCommentVNode("v-if", true),
  38762. vue.createVNode(_component_u_icon, {
  38763. name: "edit-pen",
  38764. size: "28",
  38765. color: "#999"
  38766. })
  38767. ])
  38768. ]),
  38769. vue.createCommentVNode(" 邮箱 "),
  38770. vue.createElementVNode("view", { class: "info-row" }, [
  38771. vue.createElementVNode("view", { class: "label-box" }, [
  38772. vue.createElementVNode(
  38773. "text",
  38774. { class: "label" },
  38775. vue.toDisplayString(_ctx.$t("电子邮箱")),
  38776. 1
  38777. /* TEXT */
  38778. ),
  38779. !$setup.userInfo.email ? (vue.openBlock(), vue.createElementBlock(
  38780. "text",
  38781. {
  38782. key: 0,
  38783. class: "not-provided"
  38784. },
  38785. "(" + vue.toDisplayString(_ctx.$t("未提供")) + ")",
  38786. 1
  38787. /* TEXT */
  38788. )) : vue.createCommentVNode("v-if", true)
  38789. ]),
  38790. vue.createElementVNode("view", { class: "value-box" }, [
  38791. $setup.userInfo.email ? (vue.openBlock(), vue.createElementBlock(
  38792. "text",
  38793. {
  38794. key: 0,
  38795. class: "value m-r-10"
  38796. },
  38797. vue.toDisplayString($setup.userInfo.email),
  38798. 1
  38799. /* TEXT */
  38800. )) : vue.createCommentVNode("v-if", true),
  38801. vue.createVNode(_component_u_icon, {
  38802. name: "edit-pen",
  38803. size: "28",
  38804. color: "#999"
  38805. })
  38806. ])
  38807. ])
  38808. ]),
  38809. vue.createCommentVNode(" 3. 个人信息 "),
  38810. vue.createCommentVNode(` <view class="info-card">
  38811. <view class="card-title">{{ $t('个人信息') }}</view>
  38812. <view class="info-row">
  38813. <text class="label">{{ $t('名字') }}</text>
  38814. <text class="value">{{ userInfo.first_name || '-' }}</text>
  38815. </view>
  38816. </view> `),
  38817. vue.createCommentVNode(" 底部操作按钮 "),
  38818. vue.createElementVNode("view", { class: "bottom-action" }, [
  38819. vue.createVNode(_component_u_button, {
  38820. type: "primary",
  38821. "custom-style": $setup.btnStyle,
  38822. onClick: $setup.openEditModal
  38823. }, {
  38824. default: vue.withCtx(() => [
  38825. vue.createTextVNode(
  38826. vue.toDisplayString(_ctx.$t("编辑")),
  38827. 1
  38828. /* TEXT */
  38829. )
  38830. ]),
  38831. _: 1
  38832. /* STABLE */
  38833. })
  38834. ]),
  38835. vue.createCommentVNode(" 编辑弹窗修正版 "),
  38836. vue.createCommentVNode(" 1. 使用 v-model 绑定显示状态 "),
  38837. vue.createCommentVNode(" 2. 使用 border-radius 设置圆角 "),
  38838. vue.createCommentVNode(" 3. 使用 width 设置宽度 "),
  38839. vue.createVNode(_component_u_popup, {
  38840. modelValue: $setup.showModal,
  38841. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.showModal = $event),
  38842. mode: "center",
  38843. "border-radius": "24",
  38844. width: "620rpx",
  38845. closeable: true,
  38846. onClose: $setup.closeModal
  38847. }, {
  38848. default: vue.withCtx(() => [
  38849. vue.createElementVNode("view", { class: "edit-popup" }, [
  38850. vue.createElementVNode(
  38851. "view",
  38852. { class: "popup-title" },
  38853. vue.toDisplayString(_ctx.$t("修改联系方式")),
  38854. 1
  38855. /* TEXT */
  38856. ),
  38857. vue.createElementVNode("view", { class: "form-item" }, [
  38858. vue.createElementVNode(
  38859. "text",
  38860. { class: "form-label" },
  38861. vue.toDisplayString(_ctx.$t("电话")),
  38862. 1
  38863. /* TEXT */
  38864. ),
  38865. vue.createVNode(_component_u_input, {
  38866. modelValue: $setup.editForm.phone,
  38867. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.editForm.phone = $event),
  38868. placeholder: _ctx.$t("请输入电话号码"),
  38869. clearable: "",
  38870. border: ""
  38871. }, null, 8, ["modelValue", "placeholder"])
  38872. ]),
  38873. vue.createElementVNode("view", { class: "form-item" }, [
  38874. vue.createElementVNode(
  38875. "text",
  38876. { class: "form-label" },
  38877. vue.toDisplayString(_ctx.$t("电子邮箱")),
  38878. 1
  38879. /* TEXT */
  38880. ),
  38881. vue.createVNode(_component_u_input, {
  38882. modelValue: $setup.editForm.email,
  38883. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.editForm.email = $event),
  38884. placeholder: _ctx.$t("请输入电子邮箱"),
  38885. border: "",
  38886. clearable: ""
  38887. }, null, 8, ["modelValue", "placeholder"])
  38888. ]),
  38889. vue.createElementVNode("view", { class: "popup-btns" }, [
  38890. vue.createVNode(_component_u_button, {
  38891. class: "cancel-btn",
  38892. onClick: $setup.closeModal
  38893. }, {
  38894. default: vue.withCtx(() => [
  38895. vue.createTextVNode(
  38896. vue.toDisplayString(_ctx.$t("取消")),
  38897. 1
  38898. /* TEXT */
  38899. )
  38900. ]),
  38901. _: 1
  38902. /* STABLE */
  38903. }),
  38904. vue.createVNode(_component_u_button, {
  38905. class: "confirm-btn",
  38906. type: "primary",
  38907. color: "#f8b932",
  38908. loading: $setup.submitLoading,
  38909. onClick: $setup.handleConfirm
  38910. }, {
  38911. default: vue.withCtx(() => [
  38912. vue.createTextVNode(
  38913. vue.toDisplayString(_ctx.$t("保存")),
  38914. 1
  38915. /* TEXT */
  38916. )
  38917. ]),
  38918. _: 1
  38919. /* STABLE */
  38920. }, 8, ["loading"])
  38921. ])
  38922. ])
  38923. ]),
  38924. _: 1
  38925. /* STABLE */
  38926. }, 8, ["modelValue"])
  38927. ])
  38928. ]),
  38929. _: 1
  38930. /* STABLE */
  38931. })
  38932. ]),
  38933. _: 1
  38934. /* STABLE */
  38935. });
  38936. }
  38937. const PagesWorkModuleMyUserInfoIndex = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render$v], ["__scopeId", "data-v-fa4f7792"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/userInfo/index.vue"]]);
  38938. const _sfc_main$v = {
  38939. __name: "index",
  38940. setup(__props, { expose: __expose }) {
  38941. __expose();
  38942. const { t: t2, locale } = useI18n();
  38943. const router2 = useRouter();
  38944. const CUploadImageRef = vue.ref();
  38945. const channelList = vue.ref([]);
  38946. const currentChannel = vue.ref(null);
  38947. const amount2 = vue.ref("");
  38948. const uploadFileUrl = vue.ref("");
  38949. const payResult = vue.ref(null);
  38950. const usdtRate = vue.ref("");
  38951. const trc20Address = vue.ref("");
  38952. const erc20Address = vue.ref("");
  38953. const showThirdPayment = vue.ref("0");
  38954. const selectedNetwork = vue.ref("");
  38955. const usdtQrcode = vue.ref("");
  38956. const usdtAddress = vue.ref("");
  38957. const receivingType = vue.ref("");
  38958. const rgczMethods = [
  38959. { label: "微信", value: 1 },
  38960. { label: "支付宝", value: 2 },
  38961. { label: "银行卡", value: 3 }
  38962. ];
  38963. const selectedRgczMethod = vue.ref("");
  38964. const changeImg = (e) => {
  38965. uploadFileUrl.value = Array.isArray(e) ? e[0] : e;
  38966. };
  38967. const selectChannel = (item) => {
  38968. currentChannel.value = item;
  38969. amount2.value = "";
  38970. selectedNetwork.value = "";
  38971. usdtQrcode.value = "";
  38972. usdtAddress.value = "";
  38973. uploadFileUrl.value = "";
  38974. payResult.value = null;
  38975. selectedRgczMethod.value = "";
  38976. if (item.isUsdt) {
  38977. if (trc20Address.value) {
  38978. selectNetwork("trc20");
  38979. } else if (erc20Address.value) {
  38980. selectNetwork("erc20");
  38981. }
  38982. }
  38983. };
  38984. const selectFixedAmount = (val) => {
  38985. amount2.value = val;
  38986. };
  38987. const selectNetwork = (network) => {
  38988. selectedNetwork.value = network;
  38989. getScanQrcode();
  38990. };
  38991. const copyAddress = () => {
  38992. if (!usdtAddress.value)
  38993. return;
  38994. uni.setClipboardData({
  38995. data: usdtAddress.value,
  38996. success: () => {
  38997. uni.showToast({ title: t2("复制成功"), icon: "none" });
  38998. }
  38999. });
  39000. };
  39001. const copyPayUrl = (url2) => {
  39002. if (!url2)
  39003. return;
  39004. uni.setClipboardData({
  39005. data: url2,
  39006. success: () => {
  39007. uni.showToast({ title: t2("复制成功"), icon: "none" });
  39008. }
  39009. });
  39010. };
  39011. const openPayUrl = (url2) => {
  39012. if (!url2)
  39013. return;
  39014. router2.push({ name: "web-view", query: { src: url2 } });
  39015. };
  39016. const submitRecharge = async () => {
  39017. if (!currentChannel.value)
  39018. return uni.showToast({ title: t2("请选择支付方式"), icon: "none" });
  39019. if (currentChannel.value.isUsdt) {
  39020. if (!amount2.value)
  39021. return uni.showToast({ title: t2("请输入充值数量"), icon: "none" });
  39022. if (!selectedNetwork.value)
  39023. return uni.showToast({ title: t2("请选择网络类型"), icon: "none" });
  39024. if (!uploadFileUrl.value)
  39025. return uni.showToast({ title: t2("请上传支付凭证"), icon: "none" });
  39026. uni.showLoading({ title: t2("提交中...") });
  39027. uni.request({
  39028. url: apiUrl + "wallet/recharge",
  39029. method: "POST",
  39030. data: {
  39031. amount: amount2.value,
  39032. image: uploadFileUrl.value,
  39033. net: selectedNetwork.value,
  39034. toAddress: selectedNetwork.value === "trc20" ? trc20Address.value : erc20Address.value
  39035. },
  39036. header: {
  39037. Authorization: uni.getStorageSync("token"),
  39038. lang: locale.value
  39039. },
  39040. success: (res) => {
  39041. uni.hideLoading();
  39042. if (res.data.code === 0) {
  39043. uni.showToast({ title: res.data.msg || t2("提交成功"), icon: "success" });
  39044. amount2.value = "";
  39045. selectedNetwork.value = "";
  39046. uploadFileUrl.value = "";
  39047. usdtQrcode.value = "";
  39048. usdtAddress.value = "";
  39049. CUploadImageRef.value.clear();
  39050. } else {
  39051. uni.showToast({ title: res.data.msg || t2("提交失败"), icon: "none" });
  39052. }
  39053. },
  39054. fail: (err) => {
  39055. uni.hideLoading();
  39056. uni.showToast({ title: t2("网络错误"), icon: "none" });
  39057. }
  39058. });
  39059. return;
  39060. }
  39061. if (currentChannel.value.value === "rgcz") {
  39062. if (!amount2.value)
  39063. return uni.showToast({ title: t2("请输入或选择充值金额"), icon: "none" });
  39064. if (!selectedRgczMethod.value)
  39065. return uni.showToast({ title: t2("请选择支付方式"), icon: "none" });
  39066. uni.showLoading({ title: t2("提交中...") });
  39067. uni.request({
  39068. url: apiUrl + "wallet/paymentOrder",
  39069. method: "POST",
  39070. data: {
  39071. payment_type: selectedRgczMethod.value,
  39072. amount: amount2.value
  39073. },
  39074. header: {
  39075. Authorization: uni.getStorageSync("token"),
  39076. lang: locale.value
  39077. },
  39078. success: (res) => {
  39079. uni.hideLoading();
  39080. if (res.data.code === 0) {
  39081. uni.showToast({ title: res.data.msg || t2("提交成功"), icon: "success" });
  39082. amount2.value = "";
  39083. selectedRgczMethod.value = "";
  39084. } else {
  39085. uni.showToast({ title: res.data.msg || t2("提交失败"), icon: "none" });
  39086. }
  39087. },
  39088. fail: (err) => {
  39089. uni.hideLoading();
  39090. uni.showToast({ title: t2("网络错误"), icon: "none" });
  39091. }
  39092. });
  39093. return;
  39094. }
  39095. if (!amount2.value)
  39096. return uni.showToast({ title: t2("请输入或选择充值金额"), icon: "none" });
  39097. uni.showLoading({ title: t2("提交中...") });
  39098. uni.request({
  39099. url: apiUrl + "wallet/createPay",
  39100. method: "POST",
  39101. data: {
  39102. payment_type: currentChannel.value.config.type,
  39103. amount: amount2.value
  39104. },
  39105. header: {
  39106. Authorization: uni.getStorageSync("token"),
  39107. lang: locale.value
  39108. },
  39109. success: (res) => {
  39110. uni.hideLoading();
  39111. if (res.data.code === 0) {
  39112. uni.showToast({ title: res.data.msg || t2("提交成功"), icon: "success" });
  39113. payResult.value = res.data.data;
  39114. } else {
  39115. uni.showToast({ title: res.data.msg || t2("提交失败"), icon: "none" });
  39116. }
  39117. },
  39118. fail: (err) => {
  39119. uni.hideLoading();
  39120. uni.showToast({ title: t2("网络错误"), icon: "none" });
  39121. }
  39122. });
  39123. };
  39124. const getData = async () => {
  39125. try {
  39126. const configData = await getConfigIndex();
  39127. if (configData && configData.data) {
  39128. formatAppLog("log", "at pages/WorkModule/my/topUp/index.vue:377", configData, 266);
  39129. configData.data.forEach((item) => {
  39130. if (item.field === "exchange_rate_rmb")
  39131. usdtRate.value = item.val;
  39132. if (item.field === "receiving_address")
  39133. trc20Address.value = item.val;
  39134. if (item.field === "receiving_address_erc20")
  39135. erc20Address.value = item.val;
  39136. if (item.field === "three_payment_switch")
  39137. showThirdPayment.value = item.val;
  39138. if (item.field === "receiving_type")
  39139. receivingType.value = item.val;
  39140. });
  39141. }
  39142. channelList.value = [];
  39143. const res = await getChannel();
  39144. if (res && res.data && res.data.list) {
  39145. channelList.value = res.data.list.map((item) => {
  39146. if (item.value === "usdt" || item.type === "usdt" || item.isUsdt) {
  39147. item.isUsdt = true;
  39148. }
  39149. return item;
  39150. });
  39151. }
  39152. if (channelList.value.length > 0) {
  39153. selectChannel(channelList.value[0]);
  39154. }
  39155. } catch (error) {
  39156. formatAppLog("error", "at pages/WorkModule/my/topUp/index.vue:405", error);
  39157. }
  39158. };
  39159. function getChannel() {
  39160. return new Promise((resolve2, reject) => {
  39161. uni.request({
  39162. url: apiUrl + "wallet/channel",
  39163. method: "GET",
  39164. success: (res) => resolve2(res.data),
  39165. fail: (err) => reject(err),
  39166. header: {
  39167. Authorization: uni.getStorageSync("token"),
  39168. lang: locale.value
  39169. }
  39170. });
  39171. });
  39172. }
  39173. function getScanQrcode() {
  39174. uni.showLoading({ title: t2("获取中...") });
  39175. uni.request({
  39176. url: apiUrl + "wallet/scan",
  39177. method: "GET",
  39178. data: {
  39179. type: selectedNetwork.value
  39180. },
  39181. header: {
  39182. Authorization: uni.getStorageSync("token"),
  39183. lang: locale.value
  39184. },
  39185. success: (res) => {
  39186. uni.hideLoading();
  39187. if (res.data && res.data.code === 0 && res.data.data) {
  39188. usdtQrcode.value = res.data.data.qrcode;
  39189. usdtAddress.value = res.data.data.address;
  39190. } else {
  39191. uni.showToast({ title: res.data.msg || t2("获取二维码失败"), icon: "none" });
  39192. }
  39193. },
  39194. fail: (err) => {
  39195. var _a2;
  39196. uni.hideLoading();
  39197. uni.showToast({ title: ((_a2 = err.data) == null ? void 0 : _a2.msg) || t2("网络错误"), icon: "none" });
  39198. }
  39199. });
  39200. }
  39201. onLoad(() => {
  39202. getData();
  39203. });
  39204. const __returned__ = { t: t2, locale, router: router2, CUploadImageRef, channelList, currentChannel, amount: amount2, uploadFileUrl, payResult, usdtRate, trc20Address, erc20Address, showThirdPayment, selectedNetwork, usdtQrcode, usdtAddress, receivingType, rgczMethods, selectedRgczMethod, changeImg, selectChannel, selectFixedAmount, selectNetwork, copyAddress, copyPayUrl, openPayUrl, submitRecharge, getData, getChannel, getScanQrcode, ref: vue.ref, watch: vue.watch, reactive: vue.reactive, get useI18n() {
  39205. return useI18n;
  39206. }, get onLoad() {
  39207. return onLoad;
  39208. }, get recharge() {
  39209. return recharge;
  39210. }, get getConfigIndex() {
  39211. return getConfigIndex;
  39212. }, CUploadImage, get apiUrl() {
  39213. return apiUrl;
  39214. } };
  39215. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  39216. return __returned__;
  39217. }
  39218. };
  39219. function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
  39220. const _component_u_icon = __unplugin_components_0$5;
  39221. const _component_u_button = __unplugin_components_2$1;
  39222. const _component_PageContainer = PageContainer;
  39223. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  39224. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  39225. default: vue.withCtx(() => [
  39226. vue.createVNode(_component_PageContainer, { "nav-title": "充值" }, {
  39227. navBarRight: vue.withCtx(() => [
  39228. vue.createElementVNode("view", {
  39229. class: "nav-btn",
  39230. onClick: _cache[0] || (_cache[0] = ($event) => $setup.router.push({ name: "rechargeRecord" }))
  39231. }, [
  39232. vue.createVNode(_component_u_icon, {
  39233. name: "clock",
  39234. size: "36"
  39235. })
  39236. ])
  39237. ]),
  39238. default: vue.withCtx(() => {
  39239. var _a2;
  39240. return [
  39241. vue.createElementVNode("view", { class: "page-body" }, [
  39242. vue.createElementVNode("scroll-view", {
  39243. "scroll-y": "",
  39244. class: "main-scroll",
  39245. style: { "height": "100%" }
  39246. }, [
  39247. !$setup.payResult ? (vue.openBlock(), vue.createElementBlock(
  39248. vue.Fragment,
  39249. { key: 0 },
  39250. [
  39251. vue.createElementVNode("view", { class: "section" }, [
  39252. vue.createElementVNode(
  39253. "view",
  39254. { class: "section-title" },
  39255. vue.toDisplayString(_ctx.$t("选择支付方式")),
  39256. 1
  39257. /* TEXT */
  39258. ),
  39259. vue.createElementVNode("view", { class: "channel-list" }, [
  39260. (vue.openBlock(true), vue.createElementBlock(
  39261. vue.Fragment,
  39262. null,
  39263. vue.renderList($setup.channelList, (item, index) => {
  39264. var _a3;
  39265. return vue.openBlock(), vue.createElementBlock("view", {
  39266. key: index,
  39267. class: vue.normalizeClass(["channel-item", { active: ((_a3 = $setup.currentChannel) == null ? void 0 : _a3.value) === item.value }]),
  39268. onClick: ($event) => $setup.selectChannel(item)
  39269. }, vue.toDisplayString(item.label), 11, ["onClick"]);
  39270. }),
  39271. 128
  39272. /* KEYED_FRAGMENT */
  39273. ))
  39274. ])
  39275. ]),
  39276. $setup.currentChannel && $setup.currentChannel.isUsdt ? (vue.openBlock(), vue.createElementBlock("view", {
  39277. key: 0,
  39278. class: "section"
  39279. }, [
  39280. $setup.receivingType !== "1" ? (vue.openBlock(), vue.createElementBlock(
  39281. vue.Fragment,
  39282. { key: 0 },
  39283. [
  39284. vue.createElementVNode(
  39285. "view",
  39286. { class: "section-title" },
  39287. vue.toDisplayString(_ctx.$t("充值金额")),
  39288. 1
  39289. /* TEXT */
  39290. ),
  39291. vue.createElementVNode("view", {
  39292. class: "amount-input-box",
  39293. style: { "margin-bottom": "20rpx" }
  39294. }, [
  39295. vue.createElementVNode("text", { class: "currency" }, "$"),
  39296. vue.withDirectives(vue.createElementVNode("input", {
  39297. type: "digit",
  39298. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.amount = $event),
  39299. class: "amount-input",
  39300. placeholder: _ctx.$t("请输入充值数量")
  39301. }, null, 8, ["placeholder"]), [
  39302. [vue.vModelText, $setup.amount]
  39303. ])
  39304. ])
  39305. ],
  39306. 64
  39307. /* STABLE_FRAGMENT */
  39308. )) : vue.createCommentVNode("v-if", true),
  39309. $setup.usdtRate ? (vue.openBlock(), vue.createElementBlock(
  39310. "view",
  39311. {
  39312. key: 1,
  39313. class: "rate-tip"
  39314. },
  39315. vue.toDisplayString(_ctx.$t("当前汇率 (USDT/RMB)")) + ": " + vue.toDisplayString($setup.usdtRate),
  39316. 1
  39317. /* TEXT */
  39318. )) : vue.createCommentVNode("v-if", true),
  39319. vue.createElementVNode("view", { class: "network-section" }, [
  39320. vue.createElementVNode(
  39321. "view",
  39322. { class: "network-title" },
  39323. vue.toDisplayString(_ctx.$t("网络类型")),
  39324. 1
  39325. /* TEXT */
  39326. ),
  39327. vue.createElementVNode("view", { class: "network-list" }, [
  39328. $setup.trc20Address ? (vue.openBlock(), vue.createElementBlock(
  39329. "view",
  39330. {
  39331. key: 0,
  39332. class: vue.normalizeClass(["network-item", { active: $setup.selectedNetwork === "trc20" }]),
  39333. onClick: _cache[2] || (_cache[2] = ($event) => $setup.selectNetwork("trc20"))
  39334. },
  39335. " TRC20 ",
  39336. 2
  39337. /* CLASS */
  39338. )) : vue.createCommentVNode("v-if", true),
  39339. $setup.erc20Address ? (vue.openBlock(), vue.createElementBlock(
  39340. "view",
  39341. {
  39342. key: 1,
  39343. class: vue.normalizeClass(["network-item", { active: $setup.selectedNetwork === "erc20" }]),
  39344. onClick: _cache[3] || (_cache[3] = ($event) => $setup.selectNetwork("erc20"))
  39345. },
  39346. " ERC20 ",
  39347. 2
  39348. /* CLASS */
  39349. )) : vue.createCommentVNode("v-if", true)
  39350. ])
  39351. ]),
  39352. $setup.usdtQrcode ? (vue.openBlock(), vue.createElementBlock(
  39353. vue.Fragment,
  39354. { key: 2 },
  39355. [
  39356. vue.createElementVNode("view", { class: "qrcode-box" }, [
  39357. vue.createElementVNode("image", {
  39358. src: $setup.usdtQrcode,
  39359. mode: "aspectFit",
  39360. class: "qrcode-img"
  39361. }, null, 8, ["src"])
  39362. ]),
  39363. $setup.usdtAddress ? (vue.openBlock(), vue.createElementBlock("view", {
  39364. key: 0,
  39365. class: "address-box"
  39366. }, [
  39367. vue.createElementVNode(
  39368. "text",
  39369. { class: "address-text" },
  39370. vue.toDisplayString($setup.usdtAddress),
  39371. 1
  39372. /* TEXT */
  39373. ),
  39374. vue.createElementVNode(
  39375. "view",
  39376. {
  39377. class: "copy-btn",
  39378. onClick: $setup.copyAddress
  39379. },
  39380. vue.toDisplayString(_ctx.$t("复制")),
  39381. 1
  39382. /* TEXT */
  39383. )
  39384. ])) : vue.createCommentVNode("v-if", true)
  39385. ],
  39386. 64
  39387. /* STABLE_FRAGMENT */
  39388. )) : vue.createCommentVNode("v-if", true),
  39389. $setup.receivingType !== "1" ? (vue.openBlock(), vue.createElementBlock("view", {
  39390. key: 3,
  39391. class: "network-section",
  39392. style: { "margin-top": "40rpx" }
  39393. }, [
  39394. vue.createElementVNode(
  39395. "view",
  39396. { class: "network-title" },
  39397. vue.toDisplayString(_ctx.$t("上传支付凭证")),
  39398. 1
  39399. /* TEXT */
  39400. ),
  39401. vue.createVNode(
  39402. $setup["CUploadImage"],
  39403. {
  39404. ref: "CUploadImageRef",
  39405. onChange: $setup.changeImg
  39406. },
  39407. null,
  39408. 512
  39409. /* NEED_PATCH */
  39410. )
  39411. ])) : vue.createCommentVNode("v-if", true)
  39412. ])) : vue.createCommentVNode("v-if", true),
  39413. $setup.currentChannel && !$setup.currentChannel.isUsdt ? (vue.openBlock(), vue.createElementBlock("view", {
  39414. key: 1,
  39415. class: "section"
  39416. }, [
  39417. vue.createElementVNode(
  39418. "view",
  39419. { class: "section-title" },
  39420. vue.toDisplayString(_ctx.$t("充值金额")),
  39421. 1
  39422. /* TEXT */
  39423. ),
  39424. $setup.currentChannel.config.fixed ? (vue.openBlock(), vue.createElementBlock("view", {
  39425. key: 0,
  39426. class: "amount-list"
  39427. }, [
  39428. (vue.openBlock(true), vue.createElementBlock(
  39429. vue.Fragment,
  39430. null,
  39431. vue.renderList($setup.currentChannel.config.fixed, (val, index) => {
  39432. return vue.openBlock(), vue.createElementBlock("view", {
  39433. key: index,
  39434. class: vue.normalizeClass(["amount-item", { active: $setup.amount === val }]),
  39435. onClick: ($event) => $setup.selectFixedAmount(val)
  39436. }, " ¥" + vue.toDisplayString(val), 11, ["onClick"]);
  39437. }),
  39438. 128
  39439. /* KEYED_FRAGMENT */
  39440. ))
  39441. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  39442. key: 1,
  39443. class: "amount-input-box"
  39444. }, [
  39445. vue.createElementVNode("text", { class: "currency" }, "¥"),
  39446. vue.withDirectives(vue.createElementVNode("input", {
  39447. type: "digit",
  39448. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.amount = $event),
  39449. class: "amount-input",
  39450. placeholder: _ctx.$t("限额") + ` ${$setup.currentChannel.config.min} - ${$setup.currentChannel.config.max}`
  39451. }, null, 8, ["placeholder"]), [
  39452. [vue.vModelText, $setup.amount]
  39453. ])
  39454. ])),
  39455. $setup.currentChannel.value === "rgcz" ? (vue.openBlock(), vue.createElementBlock("view", {
  39456. key: 2,
  39457. class: "network-section"
  39458. }, [
  39459. vue.createElementVNode(
  39460. "view",
  39461. { class: "network-title" },
  39462. vue.toDisplayString(_ctx.$t("支付方式")),
  39463. 1
  39464. /* TEXT */
  39465. ),
  39466. vue.createElementVNode("view", { class: "network-list" }, [
  39467. (vue.openBlock(), vue.createElementBlock(
  39468. vue.Fragment,
  39469. null,
  39470. vue.renderList($setup.rgczMethods, (method2) => {
  39471. return vue.createElementVNode("view", {
  39472. key: method2.value,
  39473. class: vue.normalizeClass(["network-item", { active: $setup.selectedRgczMethod === method2.value }]),
  39474. onClick: ($event) => $setup.selectedRgczMethod = method2.value
  39475. }, vue.toDisplayString(method2.label), 11, ["onClick"]);
  39476. }),
  39477. 64
  39478. /* STABLE_FRAGMENT */
  39479. ))
  39480. ])
  39481. ])) : vue.createCommentVNode("v-if", true)
  39482. ])) : vue.createCommentVNode("v-if", true)
  39483. ],
  39484. 64
  39485. /* STABLE_FRAGMENT */
  39486. )) : vue.createCommentVNode("v-if", true),
  39487. $setup.payResult ? (vue.openBlock(), vue.createElementBlock("view", {
  39488. key: 1,
  39489. class: "section result-section"
  39490. }, [
  39491. vue.createElementVNode("view", {
  39492. class: "qrcode-box",
  39493. style: { "margin-top": "0", "margin-bottom": "40rpx" }
  39494. }, [
  39495. vue.createElementVNode("image", {
  39496. src: $setup.payResult.image,
  39497. mode: "aspectFit",
  39498. class: "qrcode-img"
  39499. }, null, 8, ["src"])
  39500. ]),
  39501. vue.createElementVNode("view", { class: "result-text-box" }, [
  39502. vue.createElementVNode(
  39503. "view",
  39504. { class: "result-line" },
  39505. vue.toDisplayString($setup.currentChannel.label) + "扫码充值确认",
  39506. 1
  39507. /* TEXT */
  39508. ),
  39509. vue.createElementVNode("view", { class: "result-line" }, "请使用浏览器扫码或者复制支付地址到浏览器打开"),
  39510. vue.createElementVNode("view", {
  39511. class: "result-line",
  39512. style: { "display": "flex", "align-items": "center", "justify-content": "space-between" }
  39513. }, [
  39514. vue.createElementVNode("view", { style: { "flex": "1" } }, [
  39515. vue.createTextVNode(" 支付地址:"),
  39516. vue.createElementVNode(
  39517. "text",
  39518. {
  39519. class: "link-text",
  39520. onClick: _cache[5] || (_cache[5] = ($event) => $setup.openPayUrl($setup.payResult.url))
  39521. },
  39522. vue.toDisplayString($setup.payResult.url),
  39523. 1
  39524. /* TEXT */
  39525. )
  39526. ]),
  39527. vue.createElementVNode(
  39528. "view",
  39529. {
  39530. class: "copy-btn",
  39531. style: { "margin-left": "20rpx", "flex-shrink": "0" },
  39532. onClick: _cache[6] || (_cache[6] = ($event) => $setup.copyPayUrl($setup.payResult.url))
  39533. },
  39534. vue.toDisplayString(_ctx.$t("复制")),
  39535. 1
  39536. /* TEXT */
  39537. )
  39538. ]),
  39539. vue.createElementVNode(
  39540. "view",
  39541. { class: "result-line" },
  39542. "支付金额:" + vue.toDisplayString($setup.amount) + " RMB",
  39543. 1
  39544. /* TEXT */
  39545. ),
  39546. vue.createElementVNode("view", { class: "result-line" }, "请按实际支付金额进行付款,否则影响到账"),
  39547. vue.createElementVNode("view", { class: "result-line" }, "支付完成后请耐心等待,支付到账会第一时间通知您!")
  39548. ])
  39549. ])) : vue.createCommentVNode("v-if", true),
  39550. vue.createElementVNode("view", { class: "bottom-placeholder" })
  39551. ]),
  39552. !$setup.payResult && !(((_a2 = $setup.currentChannel) == null ? void 0 : _a2.isUsdt) && $setup.receivingType === "1") ? (vue.openBlock(), vue.createElementBlock("view", {
  39553. key: 0,
  39554. class: "fixed-submit-section"
  39555. }, [
  39556. vue.createVNode(_component_u_button, {
  39557. type: "primary",
  39558. onClick: $setup.submitRecharge,
  39559. class: "submit-btn",
  39560. "custom-style": { backgroundColor: "#f8b932", borderColor: "#f8b932", color: "#000", fontWeight: "bold", height: "90rpx" }
  39561. }, {
  39562. default: vue.withCtx(() => [
  39563. vue.createTextVNode(
  39564. vue.toDisplayString(_ctx.$t("确认充值")),
  39565. 1
  39566. /* TEXT */
  39567. )
  39568. ]),
  39569. _: 1
  39570. /* STABLE */
  39571. })
  39572. ])) : vue.createCommentVNode("v-if", true)
  39573. ])
  39574. ];
  39575. }),
  39576. _: 1
  39577. /* STABLE */
  39578. })
  39579. ]),
  39580. _: 1
  39581. /* STABLE */
  39582. });
  39583. }
  39584. const PagesWorkModuleMyTopUpIndex = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["render", _sfc_render$u], ["__scopeId", "data-v-61af56f2"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/topUp/index.vue"]]);
  39585. const _sfc_main$u = {
  39586. __name: "index",
  39587. props: {
  39588. visible: {
  39589. type: Boolean,
  39590. default: false
  39591. },
  39592. item: {
  39593. type: Object,
  39594. default: () => ({})
  39595. }
  39596. },
  39597. emits: ["update:visible", "recharge-confirm"],
  39598. setup(__props, { expose: __expose, emit: __emit }) {
  39599. __expose();
  39600. const { t: t2, locale } = useI18n();
  39601. const props = __props;
  39602. const emit = __emit;
  39603. const CUploadImageRef = vue.ref();
  39604. const dataRef = vue.ref({});
  39605. const dataParams = vue.reactive({
  39606. id: "",
  39607. image: ""
  39608. });
  39609. const payment_type_text = vue.ref(["微信", "支付宝", "银行卡"]);
  39610. vue.watch(() => props.visible, (newVal) => {
  39611. if (newVal && props.item && props.item.pay_data) {
  39612. dataParams.id = props.item.id;
  39613. dataRef.value = JSON.parse(props.item.pay_data);
  39614. }
  39615. });
  39616. const handleConfirm = () => {
  39617. uni.request({
  39618. url: apiUrl + "wallet/submitImage",
  39619. method: "POST",
  39620. data: dataParams,
  39621. header: {
  39622. Authorization: uni.getStorageSync("token"),
  39623. lang: locale.value
  39624. },
  39625. success: (res) => {
  39626. uni.hideLoading();
  39627. if (res.data.code === 0) {
  39628. uni.showToast({ title: res.data.msg || t2("提交成功"), icon: "success" });
  39629. dataParams.id = "";
  39630. dataParams.image = "";
  39631. CUploadImageRef.value.clear();
  39632. emit("recharge-confirm");
  39633. } else {
  39634. uni.showToast({ title: res.data.msg || t2("提交失败"), icon: "none" });
  39635. }
  39636. },
  39637. fail: (err) => {
  39638. uni.hideLoading();
  39639. uni.showToast({ title: t2("网络错误"), icon: "none" });
  39640. }
  39641. });
  39642. emit("update:visible", false);
  39643. };
  39644. const handleCancel = () => {
  39645. emit("update:visible", false);
  39646. };
  39647. const changeImg = (e) => {
  39648. dataParams.image = Array.isArray(e) ? e[0] : e;
  39649. };
  39650. const __returned__ = { t: t2, locale, props, emit, CUploadImageRef, dataRef, dataParams, payment_type_text, handleConfirm, handleCancel, changeImg, ref: vue.ref, reactive: vue.reactive, watch: vue.watch, get apiUrl() {
  39651. return apiUrl;
  39652. }, get useI18n() {
  39653. return useI18n;
  39654. }, CUploadImage };
  39655. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  39656. return __returned__;
  39657. }
  39658. };
  39659. function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
  39660. const _component_u_button = __unplugin_components_2$1;
  39661. return $props.visible ? (vue.openBlock(), vue.createElementBlock(
  39662. "view",
  39663. {
  39664. key: 0,
  39665. class: "recharge-modal",
  39666. onTouchmove: vue.withModifiers(() => {
  39667. }, ["stop", "prevent"])
  39668. },
  39669. [
  39670. vue.createElementVNode("view", { class: "recharge-box" }, [
  39671. vue.createElementVNode(
  39672. "view",
  39673. { class: "modal-header" },
  39674. vue.toDisplayString(_ctx.$t("充值确认")),
  39675. 1
  39676. /* TEXT */
  39677. ),
  39678. $setup.dataRef ? (vue.openBlock(), vue.createElementBlock("view", {
  39679. key: 0,
  39680. class: "info-container"
  39681. }, [
  39682. vue.createElementVNode("view", { class: "info-item" }, [
  39683. vue.createElementVNode(
  39684. "text",
  39685. { class: "label" },
  39686. vue.toDisplayString(_ctx.$t("充值类型")),
  39687. 1
  39688. /* TEXT */
  39689. ),
  39690. $props.item && $props.item.payment_type ? (vue.openBlock(), vue.createElementBlock(
  39691. "text",
  39692. {
  39693. key: 0,
  39694. class: "value"
  39695. },
  39696. vue.toDisplayString($setup.payment_type_text[Number($props.item.payment_type) - 1]),
  39697. 1
  39698. /* TEXT */
  39699. )) : vue.createCommentVNode("v-if", true)
  39700. ]),
  39701. vue.createElementVNode("view", { class: "info-item" }, [
  39702. vue.createElementVNode(
  39703. "text",
  39704. { class: "label" },
  39705. vue.toDisplayString(_ctx.$t("收款人姓名")),
  39706. 1
  39707. /* TEXT */
  39708. ),
  39709. vue.createElementVNode(
  39710. "text",
  39711. { class: "value" },
  39712. vue.toDisplayString($setup.dataRef.payName),
  39713. 1
  39714. /* TEXT */
  39715. )
  39716. ]),
  39717. vue.createElementVNode("view", { class: "info-item" }, [
  39718. vue.createElementVNode(
  39719. "text",
  39720. { class: "label" },
  39721. vue.toDisplayString(_ctx.$t("收款账号")),
  39722. 1
  39723. /* TEXT */
  39724. ),
  39725. vue.createElementVNode(
  39726. "text",
  39727. { class: "value" },
  39728. vue.toDisplayString($setup.dataRef.payAccount),
  39729. 1
  39730. /* TEXT */
  39731. )
  39732. ]),
  39733. $props.item.payment_type == "3" && $setup.dataRef.bankName ? (vue.openBlock(), vue.createElementBlock("view", {
  39734. key: 0,
  39735. class: "info-item"
  39736. }, [
  39737. vue.createElementVNode(
  39738. "text",
  39739. { class: "label" },
  39740. vue.toDisplayString(_ctx.$t("开户行")),
  39741. 1
  39742. /* TEXT */
  39743. ),
  39744. vue.createElementVNode(
  39745. "text",
  39746. { class: "value" },
  39747. vue.toDisplayString($setup.dataRef.bankName),
  39748. 1
  39749. /* TEXT */
  39750. )
  39751. ])) : vue.createCommentVNode("v-if", true),
  39752. $props.item.payment_type != "3" && $setup.dataRef.payQrCode ? (vue.openBlock(), vue.createElementBlock("view", {
  39753. key: 1,
  39754. class: "qr-wrapper"
  39755. }, [
  39756. vue.createElementVNode("image", {
  39757. class: "qr-code",
  39758. src: $setup.dataRef.payQrCode,
  39759. mode: "aspectFit"
  39760. }, null, 8, ["src"]),
  39761. vue.createElementVNode(
  39762. "text",
  39763. { class: "qr-tip" },
  39764. vue.toDisplayString(_ctx.$t("收款码")),
  39765. 1
  39766. /* TEXT */
  39767. )
  39768. ])) : vue.createCommentVNode("v-if", true),
  39769. vue.createElementVNode("view", { class: "qr-wrapper" }, [
  39770. vue.createVNode(
  39771. $setup["CUploadImage"],
  39772. {
  39773. onChange: $setup.changeImg,
  39774. maxCount: 1,
  39775. ref: "CUploadImageRef"
  39776. },
  39777. null,
  39778. 512
  39779. /* NEED_PATCH */
  39780. ),
  39781. vue.createElementVNode(
  39782. "text",
  39783. { class: "qr-tip" },
  39784. vue.toDisplayString(_ctx.$t("上传支付凭证")),
  39785. 1
  39786. /* TEXT */
  39787. )
  39788. ])
  39789. ])) : vue.createCommentVNode("v-if", true),
  39790. vue.createElementVNode("view", { class: "action-btns" }, [
  39791. vue.createVNode(_component_u_button, {
  39792. type: "error",
  39793. onClick: $setup.handleCancel,
  39794. class: "btn"
  39795. }, {
  39796. default: vue.withCtx(() => [
  39797. vue.createTextVNode(
  39798. vue.toDisplayString(_ctx.$t("取消")),
  39799. 1
  39800. /* TEXT */
  39801. )
  39802. ]),
  39803. _: 1
  39804. /* STABLE */
  39805. }),
  39806. vue.createVNode(_component_u_button, {
  39807. type: "primary",
  39808. onClick: $setup.handleConfirm,
  39809. class: "btn"
  39810. }, {
  39811. default: vue.withCtx(() => [
  39812. vue.createTextVNode(
  39813. vue.toDisplayString(_ctx.$t("提交")),
  39814. 1
  39815. /* TEXT */
  39816. )
  39817. ]),
  39818. _: 1
  39819. /* STABLE */
  39820. })
  39821. ])
  39822. ])
  39823. ],
  39824. 32
  39825. /* NEED_HYDRATION */
  39826. )) : vue.createCommentVNode("v-if", true);
  39827. }
  39828. const RechargeModal = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["render", _sfc_render$t], ["__scopeId", "data-v-3fbb0aca"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/rechargeRecord/components/rechargeModal/index.vue"]]);
  39829. const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
  39830. __name: "index",
  39831. setup(__props, { expose: __expose }) {
  39832. __expose();
  39833. const { t: t2 } = useI18n();
  39834. const pagingRef = vue.ref(null);
  39835. const moneyLogList = vue.ref([]);
  39836. const isModalVisible = vue.ref(false);
  39837. const currentRechargeItem = vue.ref({});
  39838. const typePickerShow = vue.ref(false);
  39839. const calendarShow = vue.ref(false);
  39840. const dateRange = vue.ref("");
  39841. const startTime = vue.ref("");
  39842. const endTime = vue.ref("");
  39843. const rechargeType = vue.ref("rmb");
  39844. const typeColumns = vue.computed(() => [
  39845. { label: t2("RMB充值"), value: "rmb" },
  39846. { label: t2("加密货币充值"), value: "crypto_coin" }
  39847. ]);
  39848. const rechargeTypeText = vue.computed(() => {
  39849. const target = typeColumns.value.find((item) => item.value === rechargeType.value);
  39850. return target ? target.label : t2("RMB充值");
  39851. });
  39852. async function onQuery(pageNo, pageSize) {
  39853. try {
  39854. const params = {
  39855. type: rechargeType.value,
  39856. // 充值类型直接传 type
  39857. page: pageNo,
  39858. limit: pageSize,
  39859. start_time: startTime.value,
  39860. end_time: endTime.value
  39861. };
  39862. const res = await getRecharge(params);
  39863. if (res.code === 1) {
  39864. pagingRef.value.complete(res.data.list);
  39865. } else {
  39866. pagingRef.value.complete(false);
  39867. }
  39868. } catch (e) {
  39869. pagingRef.value.complete(false);
  39870. }
  39871. }
  39872. function onCalendarChange(e) {
  39873. const range2 = e;
  39874. if (range2.startDate && range2.endDate) {
  39875. startTime.value = range2.startDate;
  39876. endTime.value = range2.endDate;
  39877. dateRange.value = `${range2.startDate} ~ ${range2.endDate}`;
  39878. handleQuery2();
  39879. }
  39880. }
  39881. function onTypeConfirm(e) {
  39882. rechargeType.value = e[0].value;
  39883. handleQuery2();
  39884. }
  39885. function handleUploadVoucher(item) {
  39886. formatAppLog("log", "at pages/WorkModule/my/rechargeRecord/index.vue:271", "上传凭证", item);
  39887. openRechargeModal(item);
  39888. }
  39889. function handleQuery2() {
  39890. pagingRef.value.reload();
  39891. }
  39892. function handleReset() {
  39893. dateRange.value = "";
  39894. startTime.value = "";
  39895. endTime.value = "";
  39896. rechargeType.value = "rmb";
  39897. pagingRef.value.reload();
  39898. }
  39899. function getStatusText(status, channel) {
  39900. let statusMap = { 0: t2("待处理"), 1: t2("处理中"), 2: t2("成功"), 3: t2("失败"), 4: t2("待用户提交凭证"), 5: t2("待审核") };
  39901. if (channel === "rgcz") {
  39902. statusMap = { 0: t2("待人工处理"), 1: t2("处理中"), 2: t2("成功"), 3: t2("审核驳回"), 4: t2("待用户提交凭证"), 5: t2("待审核") };
  39903. }
  39904. return statusMap[status] || t2("未知");
  39905. }
  39906. function getStatusClass(status) {
  39907. const classMap = { 0: "status-pending", 1: "status-processing", 2: "status-success", 3: "status-error", 4: "status-pending", 5: "status-pending" };
  39908. return classMap[status] || "";
  39909. }
  39910. function previewImage(url2) {
  39911. uni.previewImage({
  39912. urls: [url2]
  39913. });
  39914. }
  39915. function handleDetail(item) {
  39916. }
  39917. const openRechargeModal = (item) => {
  39918. currentRechargeItem.value = item;
  39919. isModalVisible.value = true;
  39920. };
  39921. const handleRechargeSuccess = () => {
  39922. formatAppLog("log", "at pages/WorkModule/my/rechargeRecord/index.vue:322", "支付凭证提交成功!");
  39923. handleQuery2();
  39924. };
  39925. const __returned__ = { t: t2, pagingRef, moneyLogList, isModalVisible, currentRechargeItem, typePickerShow, calendarShow, dateRange, startTime, endTime, rechargeType, typeColumns, rechargeTypeText, onQuery, onCalendarChange, onTypeConfirm, handleUploadVoucher, handleQuery: handleQuery2, handleReset, getStatusText, getStatusClass, previewImage, handleDetail, openRechargeModal, handleRechargeSuccess, RechargeModal };
  39926. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  39927. return __returned__;
  39928. }
  39929. });
  39930. function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
  39931. const _component_u_icon = __unplugin_components_0$5;
  39932. const _component_u_button = __unplugin_components_2$1;
  39933. const _component_u_empty = __unplugin_components_4$2;
  39934. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  39935. const _component_u_select = __unplugin_components_5$1;
  39936. const _component_u_calendar = __unplugin_components_6;
  39937. const _component_PageContainer = PageContainer;
  39938. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  39939. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  39940. default: vue.withCtx(() => [
  39941. vue.createVNode(_component_PageContainer, {
  39942. "nav-title": $setup.t("充值记录")
  39943. }, {
  39944. default: vue.withCtx(() => [
  39945. vue.createElementVNode("view", { class: "page-content" }, [
  39946. vue.createVNode(_component_z_paging, {
  39947. ref: "pagingRef",
  39948. modelValue: $setup.moneyLogList,
  39949. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.moneyLogList = $event),
  39950. onQuery: $setup.onQuery,
  39951. fixed: false,
  39952. "refresher-enabled": true,
  39953. "loading-more-enabled": true,
  39954. "auto-show-back-to-top": true,
  39955. "back-to-top-threshold": 300,
  39956. loadingMoreLoadingText: $setup.t("正在加载"),
  39957. loadingMoreNoMoreText: $setup.t("没有更多了"),
  39958. loadingMoreDefaultText: $setup.t("点击加载更多")
  39959. }, {
  39960. top: vue.withCtx(() => [
  39961. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  39962. vue.createElementVNode("view", { class: "filter-card" }, [
  39963. vue.createElementVNode("view", { class: "filter-header" }, [
  39964. vue.createElementVNode("view", { class: "title-line" }, [
  39965. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  39966. vue.createElementVNode(
  39967. "text",
  39968. { class: "title-text" },
  39969. vue.toDisplayString($setup.t("条件筛选")),
  39970. 1
  39971. /* TEXT */
  39972. )
  39973. ]),
  39974. vue.createElementVNode(
  39975. "text",
  39976. {
  39977. class: "reset-link",
  39978. onClick: $setup.handleReset
  39979. },
  39980. vue.toDisplayString($setup.t("重置全部")),
  39981. 1
  39982. /* TEXT */
  39983. )
  39984. ]),
  39985. vue.createElementVNode("view", { class: "filter-body" }, [
  39986. vue.createCommentVNode(" 将筛选和日期并排 "),
  39987. vue.createElementVNode("view", { class: "filter-row" }, [
  39988. vue.createCommentVNode(" 充值类型筛选 "),
  39989. vue.createElementVNode("view", {
  39990. class: "filter-item type-item",
  39991. onClick: _cache[0] || (_cache[0] = ($event) => $setup.typePickerShow = true)
  39992. }, [
  39993. vue.createVNode(_component_u_icon, {
  39994. name: "list-dot",
  39995. size: "32",
  39996. color: _ctx.$mainColor
  39997. }, null, 8, ["color"]),
  39998. vue.createElementVNode("view", { class: "filter-content" }, [
  39999. vue.createElementVNode(
  40000. "text",
  40001. { class: "filter-value" },
  40002. vue.toDisplayString($setup.rechargeTypeText),
  40003. 1
  40004. /* TEXT */
  40005. )
  40006. ]),
  40007. vue.createVNode(_component_u_icon, {
  40008. name: "arrow-down",
  40009. size: "14",
  40010. color: "#ccc"
  40011. })
  40012. ]),
  40013. vue.createCommentVNode(" 日期筛选 "),
  40014. vue.createElementVNode("view", {
  40015. class: "date-selector",
  40016. onClick: _cache[1] || (_cache[1] = ($event) => $setup.calendarShow = true)
  40017. }, [
  40018. vue.createVNode(_component_u_icon, {
  40019. name: "calendar",
  40020. size: "32",
  40021. color: _ctx.$mainColor
  40022. }, null, 8, ["color"]),
  40023. vue.createElementVNode("view", { class: "date-content" }, [
  40024. $setup.dateRange ? (vue.openBlock(), vue.createElementBlock(
  40025. "text",
  40026. {
  40027. key: 0,
  40028. class: "date-value"
  40029. },
  40030. vue.toDisplayString($setup.dateRange),
  40031. 1
  40032. /* TEXT */
  40033. )) : (vue.openBlock(), vue.createElementBlock(
  40034. "text",
  40035. {
  40036. key: 1,
  40037. class: "date-placeholder"
  40038. },
  40039. vue.toDisplayString($setup.t("请选择日期")),
  40040. 1
  40041. /* TEXT */
  40042. ))
  40043. ]),
  40044. vue.createVNode(_component_u_icon, {
  40045. name: "arrow-right",
  40046. size: "14",
  40047. color: "#ccc"
  40048. })
  40049. ])
  40050. ]),
  40051. vue.createElementVNode("view", { class: "button-group" }, [
  40052. vue.createVNode(_component_u_button, {
  40053. type: "primary",
  40054. shape: "circle",
  40055. class: "search-btn",
  40056. onClick: $setup.handleQuery
  40057. }, {
  40058. default: vue.withCtx(() => [
  40059. vue.createVNode(_component_u_icon, {
  40060. name: "search",
  40061. size: "32",
  40062. color: "#fff",
  40063. class: "mr-1"
  40064. }),
  40065. vue.createTextVNode(
  40066. " " + vue.toDisplayString($setup.t("立即查询")),
  40067. 1
  40068. /* TEXT */
  40069. )
  40070. ]),
  40071. _: 1
  40072. /* STABLE */
  40073. })
  40074. ])
  40075. ])
  40076. ])
  40077. ])
  40078. ]),
  40079. refresher: vue.withCtx(() => [
  40080. vue.createElementVNode("view", { class: "refresher-ui" }, [
  40081. vue.createElementVNode("view", { class: "spin-loader" }),
  40082. vue.createElementVNode(
  40083. "text",
  40084. { class: "refresher-text" },
  40085. vue.toDisplayString($setup.t("更新数据中...")),
  40086. 1
  40087. /* TEXT */
  40088. )
  40089. ])
  40090. ]),
  40091. empty: vue.withCtx(() => [
  40092. vue.createElementVNode("view", { class: "empty-ui" }, [
  40093. vue.createVNode(_component_u_empty, {
  40094. text: $setup.t("没有发现相关记录"),
  40095. mode: "search",
  40096. "icon-size": "120"
  40097. }, null, 8, ["text"])
  40098. ])
  40099. ]),
  40100. default: vue.withCtx(() => [
  40101. vue.createElementVNode("view", { class: "money-log-list" }, [
  40102. (vue.openBlock(true), vue.createElementBlock(
  40103. vue.Fragment,
  40104. null,
  40105. vue.renderList($setup.moneyLogList, (item) => {
  40106. return vue.openBlock(), vue.createElementBlock("view", {
  40107. key: item.id,
  40108. class: "log-card",
  40109. onClick: ($event) => $setup.handleDetail(item)
  40110. }, [
  40111. vue.createElementVNode("view", { class: "card-header" }, [
  40112. vue.createElementVNode("view", { class: "type-badge" }, [
  40113. vue.createElementVNode("view", { class: "dot" }),
  40114. vue.createElementVNode(
  40115. "text",
  40116. null,
  40117. vue.toDisplayString($setup.t("充值")),
  40118. 1
  40119. /* TEXT */
  40120. )
  40121. ]),
  40122. vue.createCommentVNode(" 兼容 order_no "),
  40123. vue.createElementVNode(
  40124. "text",
  40125. { class: "order-no" },
  40126. "NO." + vue.toDisplayString(item.txid || item.order_no || item.id),
  40127. 1
  40128. /* TEXT */
  40129. )
  40130. ]),
  40131. vue.createElementVNode("view", { class: "card-main" }, [
  40132. vue.createElementVNode("view", { class: "amount-box" }, [
  40133. vue.createElementVNode("text", { class: "amount-symbol" }, "+"),
  40134. vue.createCommentVNode(" 兼容没有 actual_received 的情况,直接取 amount "),
  40135. vue.createElementVNode(
  40136. "text",
  40137. { class: "amount-val" },
  40138. vue.toDisplayString(parseFloat(item.actual_received || item.amount)),
  40139. 1
  40140. /* TEXT */
  40141. ),
  40142. vue.createCommentVNode(" 兼容货币单位显示 "),
  40143. vue.createElementVNode(
  40144. "text",
  40145. { class: "currency" },
  40146. vue.toDisplayString($setup.rechargeType === "rmb" ? "RMB" : _ctx.$currency),
  40147. 1
  40148. /* TEXT */
  40149. )
  40150. ]),
  40151. vue.createElementVNode("view", { class: "status-box" }, [
  40152. vue.createElementVNode(
  40153. "text",
  40154. {
  40155. class: vue.normalizeClass(["status-text", $setup.getStatusClass(item.status)])
  40156. },
  40157. vue.toDisplayString($setup.getStatusText(item.status, item.channel)),
  40158. 3
  40159. /* TEXT, CLASS */
  40160. )
  40161. ])
  40162. ]),
  40163. vue.createElementVNode("view", { class: "card-footer" }, [
  40164. vue.createElementVNode("view", { class: "info-row" }, [
  40165. vue.createElementVNode(
  40166. "text",
  40167. { class: "info-label" },
  40168. vue.toDisplayString($setup.t("充值金额")),
  40169. 1
  40170. /* TEXT */
  40171. ),
  40172. vue.createCommentVNode(" 兼容没有 coin 的情况 "),
  40173. vue.createElementVNode(
  40174. "text",
  40175. { class: "info-value" },
  40176. vue.toDisplayString(parseFloat(item.amount || 0)) + " " + vue.toDisplayString(item.coin || ($setup.rechargeType === "rmb" ? "RMB" : "")),
  40177. 1
  40178. /* TEXT */
  40179. )
  40180. ]),
  40181. vue.createElementVNode("view", { class: "info-row" }, [
  40182. vue.createCommentVNode(" 兼容银行名称或渠道标识,如果是RMB则显示充值渠道,否则显示网络类型 "),
  40183. vue.createElementVNode(
  40184. "text",
  40185. { class: "info-label" },
  40186. vue.toDisplayString(item.bank_name || item.channel_text ? $setup.t("充值渠道") : $setup.t("网络类型")),
  40187. 1
  40188. /* TEXT */
  40189. ),
  40190. vue.createElementVNode(
  40191. "text",
  40192. { class: "info-value" },
  40193. vue.toDisplayString(item.bank_name || item.channel_text || item.net || "--"),
  40194. 1
  40195. /* TEXT */
  40196. )
  40197. ]),
  40198. item.exchange_rate ? (vue.openBlock(), vue.createElementBlock("view", {
  40199. key: 0,
  40200. class: "info-row"
  40201. }, [
  40202. vue.createElementVNode(
  40203. "text",
  40204. { class: "info-label" },
  40205. vue.toDisplayString($setup.t("汇率")),
  40206. 1
  40207. /* TEXT */
  40208. ),
  40209. vue.createElementVNode(
  40210. "text",
  40211. { class: "info-value" },
  40212. vue.toDisplayString(parseFloat(item.exchange_rate)),
  40213. 1
  40214. /* TEXT */
  40215. )
  40216. ])) : vue.createCommentVNode("v-if", true),
  40217. item.from_address ? (vue.openBlock(), vue.createElementBlock("view", {
  40218. key: 1,
  40219. class: "info-row"
  40220. }, [
  40221. vue.createElementVNode(
  40222. "text",
  40223. { class: "info-label" },
  40224. vue.toDisplayString($setup.t("来源地址")),
  40225. 1
  40226. /* TEXT */
  40227. ),
  40228. vue.createElementVNode(
  40229. "text",
  40230. { class: "info-value address-text" },
  40231. vue.toDisplayString(item.from_address),
  40232. 1
  40233. /* TEXT */
  40234. )
  40235. ])) : vue.createCommentVNode("v-if", true),
  40236. vue.createElementVNode("view", { class: "info-row" }, [
  40237. vue.createElementVNode(
  40238. "text",
  40239. { class: "info-label" },
  40240. vue.toDisplayString($setup.t("创建时间")),
  40241. 1
  40242. /* TEXT */
  40243. ),
  40244. vue.createElementVNode(
  40245. "text",
  40246. { class: "info-value" },
  40247. vue.toDisplayString(item.created_at),
  40248. 1
  40249. /* TEXT */
  40250. )
  40251. ]),
  40252. item.image ? (vue.openBlock(), vue.createElementBlock("view", {
  40253. key: 2,
  40254. class: "info-row"
  40255. }, [
  40256. vue.createElementVNode(
  40257. "text",
  40258. { class: "info-label" },
  40259. vue.toDisplayString($setup.t("支付凭证")),
  40260. 1
  40261. /* TEXT */
  40262. ),
  40263. vue.createElementVNode("text", {
  40264. class: "info-value highlighted",
  40265. onClick: vue.withModifiers(($event) => $setup.previewImage(item.image), ["stop"])
  40266. }, vue.toDisplayString($setup.t("查看凭证")), 9, ["onClick"])
  40267. ])) : vue.createCommentVNode("v-if", true),
  40268. item.status === 3 && item.remark ? (vue.openBlock(), vue.createElementBlock("view", {
  40269. key: 3,
  40270. class: "info-row"
  40271. }, [
  40272. vue.createElementVNode(
  40273. "text",
  40274. { class: "info-label" },
  40275. vue.toDisplayString($setup.t("驳回原因")),
  40276. 1
  40277. /* TEXT */
  40278. ),
  40279. vue.createElementVNode(
  40280. "text",
  40281. {
  40282. class: "info-value",
  40283. style: { "color": "#ef4444" }
  40284. },
  40285. vue.toDisplayString(item.remark),
  40286. 1
  40287. /* TEXT */
  40288. )
  40289. ])) : vue.createCommentVNode("v-if", true),
  40290. $setup.rechargeType === "rmb" && item.pay_data && item.status === 4 ? (vue.openBlock(), vue.createElementBlock("view", {
  40291. key: 4,
  40292. class: "info-row"
  40293. }, [
  40294. vue.createElementVNode(
  40295. "text",
  40296. { class: "info-label" },
  40297. vue.toDisplayString($setup.t("操作")),
  40298. 1
  40299. /* TEXT */
  40300. ),
  40301. vue.createElementVNode("text", {
  40302. class: "info-value highlighted",
  40303. onClick: vue.withModifiers(($event) => $setup.handleUploadVoucher(item), ["stop"])
  40304. }, vue.toDisplayString($setup.t("上传凭证")), 9, ["onClick"])
  40305. ])) : vue.createCommentVNode("v-if", true)
  40306. ])
  40307. ], 8, ["onClick"]);
  40308. }),
  40309. 128
  40310. /* KEYED_FRAGMENT */
  40311. ))
  40312. ])
  40313. ]),
  40314. _: 1
  40315. /* STABLE */
  40316. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])
  40317. ]),
  40318. vue.createVNode(_component_u_select, {
  40319. modelValue: $setup.typePickerShow,
  40320. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.typePickerShow = $event),
  40321. mode: "single-column",
  40322. list: $setup.typeColumns,
  40323. "confirm-color": _ctx.$mainColor,
  40324. onConfirm: $setup.onTypeConfirm
  40325. }, null, 8, ["modelValue", "list", "confirm-color"]),
  40326. vue.createVNode(_component_u_calendar, {
  40327. modelValue: $setup.calendarShow,
  40328. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.calendarShow = $event),
  40329. mode: "range",
  40330. "active-bg-color": _ctx.$mainColor,
  40331. "range-color": _ctx.$mainColor,
  40332. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  40333. "start-text": $setup.t("开始"),
  40334. "end-text": $setup.t("结束"),
  40335. "btn-type": "primary",
  40336. "tool-tip": $setup.t("请选择记录查询区间"),
  40337. onChange: $setup.onCalendarChange
  40338. }, null, 8, ["modelValue", "active-bg-color", "range-color", "start-text", "end-text", "tool-tip"]),
  40339. vue.createVNode($setup["RechargeModal"], {
  40340. visible: $setup.isModalVisible,
  40341. "onUpdate:visible": _cache[5] || (_cache[5] = ($event) => $setup.isModalVisible = $event),
  40342. item: $setup.currentRechargeItem,
  40343. onRechargeConfirm: $setup.handleRechargeSuccess
  40344. }, null, 8, ["visible", "item"])
  40345. ]),
  40346. _: 1
  40347. /* STABLE */
  40348. }, 8, ["nav-title"])
  40349. ]),
  40350. _: 1
  40351. /* STABLE */
  40352. });
  40353. }
  40354. const PagesWorkModuleMyRechargeRecordIndex = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["render", _sfc_render$s], ["__scopeId", "data-v-7364c036"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/rechargeRecord/index.vue"]]);
  40355. const _sfc_main$s = {
  40356. __name: "index",
  40357. setup(__props, { expose: __expose }) {
  40358. __expose();
  40359. const { t: t2, locale } = useI18n();
  40360. const router2 = useRouter();
  40361. const customRequest = (path, method2 = "GET", data = {}) => {
  40362. return new Promise((resolve2, reject) => {
  40363. uni.request({
  40364. url: apiUrl + path,
  40365. method: method2,
  40366. data,
  40367. header: {
  40368. "Authorization": uni.getStorageSync("token") || "",
  40369. "lang": locale.value
  40370. },
  40371. success: (res) => resolve2(res.data),
  40372. fail: (err) => reject(err)
  40373. });
  40374. });
  40375. };
  40376. const channelList = vue.ref([]);
  40377. const activeChannelIndex = vue.ref(0);
  40378. const submitLoading = vue.ref(false);
  40379. const isFetchingAccounts = vue.ref(false);
  40380. const bankList = vue.ref([]);
  40381. const addressList = vue.ref([]);
  40382. const showAccountPopup = vue.ref(false);
  40383. const selectedAccount = vue.ref(null);
  40384. const formData = vue.reactive({
  40385. amount: "",
  40386. safe_word: ""
  40387. });
  40388. const currentChannel = vue.computed(() => channelList.value[activeChannelIndex.value] || {});
  40389. const isUSDT = vue.computed(() => {
  40390. var _a2;
  40391. return ((_a2 = currentChannel.value) == null ? void 0 : _a2.value) === "USDT";
  40392. });
  40393. const availableAccounts = vue.computed(() => {
  40394. if (isUSDT.value) {
  40395. return addressList.value;
  40396. } else {
  40397. return bankList.value.filter((b) => b.channel === currentChannel.value.value);
  40398. }
  40399. });
  40400. vue.onMounted(() => {
  40401. fetchChannels();
  40402. fetchAllAccounts();
  40403. });
  40404. const fetchChannels = async () => {
  40405. try {
  40406. const res = await customRequest("wallet/withdrawChannel", "GET");
  40407. if (res.code === 0 && res.data && Array.isArray(res.data)) {
  40408. channelList.value = res.data;
  40409. } else {
  40410. uni.showToast({ title: res.msg || t2("获取提现渠道失败"), icon: "none" });
  40411. }
  40412. } catch (error) {
  40413. formatAppLog("error", "at pages/WorkModule/my/withdraw/index.vue:214", "Fetch Channels Error:", error);
  40414. }
  40415. };
  40416. const fetchAllAccounts = async () => {
  40417. var _a2, _b2;
  40418. isFetchingAccounts.value = true;
  40419. try {
  40420. const [bankRes, addressRes] = await Promise.all([
  40421. customRequest("wallet/bankList", "GET"),
  40422. customRequest("wallet/address", "GET")
  40423. ]);
  40424. if (bankRes.code === 0 || bankRes.code === 1) {
  40425. bankList.value = ((_a2 = bankRes.data) == null ? void 0 : _a2.list) || [];
  40426. }
  40427. if (addressRes.code === 0 || addressRes.code === 1) {
  40428. addressList.value = ((_b2 = addressRes.data) == null ? void 0 : _b2.list) || [];
  40429. }
  40430. autoSelectAccount();
  40431. } catch (error) {
  40432. formatAppLog("error", "at pages/WorkModule/my/withdraw/index.vue:237", "Fetch Accounts Error:", error);
  40433. } finally {
  40434. isFetchingAccounts.value = false;
  40435. }
  40436. };
  40437. vue.watch(activeChannelIndex, () => {
  40438. autoSelectAccount();
  40439. });
  40440. const autoSelectAccount = () => {
  40441. if (availableAccounts.value.length > 0) {
  40442. selectedAccount.value = availableAccounts.value[0];
  40443. } else {
  40444. selectedAccount.value = null;
  40445. }
  40446. };
  40447. const switchChannel = (index) => {
  40448. if (activeChannelIndex.value === index)
  40449. return;
  40450. activeChannelIndex.value = index;
  40451. };
  40452. const handleSelectAccount = (item) => {
  40453. selectedAccount.value = item;
  40454. showAccountPopup.value = false;
  40455. };
  40456. const goWalletManage = () => {
  40457. showAccountPopup.value = false;
  40458. router2.push({ name: "WalletManagement" });
  40459. };
  40460. const handleSubmit = async () => {
  40461. if (!selectedAccount.value) {
  40462. return uni.showToast({ title: t2("请选择收款账户"), icon: "none" });
  40463. }
  40464. if (!formData.amount || Number(formData.amount) <= 0) {
  40465. return uni.showToast({ title: t2("请输入有效的提现金额"), icon: "none" });
  40466. }
  40467. if (!formData.safe_word) {
  40468. return uni.showToast({ title: t2("请输入资金密码"), icon: "none" });
  40469. }
  40470. submitLoading.value = true;
  40471. try {
  40472. let res;
  40473. if (isUSDT.value) {
  40474. const payload = {
  40475. address: selectedAccount.value.address,
  40476. amount: String(formData.amount),
  40477. safe_word: formData.safe_word
  40478. };
  40479. res = await customRequest("wallet/withdraw", "POST", payload);
  40480. } else {
  40481. const payload = {
  40482. account: selectedAccount.value.account,
  40483. amount: String(formData.amount),
  40484. bank_name: selectedAccount.value.bank_name,
  40485. card_no: selectedAccount.value.card_no,
  40486. channel: currentChannel.value.value,
  40487. safe_word: formData.safe_word
  40488. };
  40489. res = await customRequest("wallet/payout", "POST", payload);
  40490. }
  40491. if (res.code === 0 || res.code === 1) {
  40492. uni.showToast({ title: res.msg || t2("提现申请提交成功"), icon: "none" });
  40493. formData.amount = "";
  40494. formData.safe_word = "";
  40495. } else {
  40496. uni.showToast({ title: res.msg || t2("提现失败,请重试"), icon: "none" });
  40497. }
  40498. } catch (error) {
  40499. formatAppLog("error", "at pages/WorkModule/my/withdraw/index.vue:316", "Withdraw Submit Error:", error);
  40500. uni.showToast({ title: t2("网络异常,请稍后再试"), icon: "none" });
  40501. } finally {
  40502. submitLoading.value = false;
  40503. }
  40504. };
  40505. const formatCardNo = (no) => {
  40506. if (!no)
  40507. return "";
  40508. if (no.length > 8) {
  40509. return no.substring(0, 4) + " **** **** " + no.substring(no.length - 4);
  40510. }
  40511. return no;
  40512. };
  40513. const __returned__ = { t: t2, locale, router: router2, customRequest, channelList, activeChannelIndex, submitLoading, isFetchingAccounts, bankList, addressList, showAccountPopup, selectedAccount, formData, currentChannel, isUSDT, availableAccounts, fetchChannels, fetchAllAccounts, autoSelectAccount, switchChannel, handleSelectAccount, goWalletManage, handleSubmit, formatCardNo, ref: vue.ref, computed: vue.computed, reactive: vue.reactive, onMounted: vue.onMounted, watch: vue.watch, get useI18n() {
  40514. return useI18n;
  40515. }, get apiUrl() {
  40516. return apiUrl;
  40517. } };
  40518. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  40519. return __returned__;
  40520. }
  40521. };
  40522. function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
  40523. const _component_u_icon = __unplugin_components_0$5;
  40524. const _component_u_loading = __unplugin_components_3$3;
  40525. const _component_u_button = __unplugin_components_2$1;
  40526. const _component_u_empty = __unplugin_components_4$2;
  40527. const _component_u_popup = __unplugin_components_2$3;
  40528. const _component_PageContainer = PageContainer;
  40529. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  40530. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  40531. default: vue.withCtx(() => [
  40532. vue.createVNode(_component_PageContainer, {
  40533. "nav-title": $setup.t("提现")
  40534. }, {
  40535. navBarRight: vue.withCtx(() => [
  40536. vue.createElementVNode("view", {
  40537. class: "nav-btn",
  40538. onClick: _cache[0] || (_cache[0] = ($event) => $setup.router.push({ name: "withdrawalHistory" }))
  40539. }, [
  40540. vue.createVNode(_component_u_icon, {
  40541. name: "clock",
  40542. size: "36"
  40543. })
  40544. ])
  40545. ]),
  40546. default: vue.withCtx(() => [
  40547. vue.createElementVNode("view", { class: "withdraw-container" }, [
  40548. vue.createElementVNode("view", { class: "section-title" }, [
  40549. vue.createElementVNode("view", { class: "stick" }),
  40550. vue.createElementVNode(
  40551. "text",
  40552. null,
  40553. vue.toDisplayString($setup.t("选择提现方式")),
  40554. 1
  40555. /* TEXT */
  40556. )
  40557. ]),
  40558. $setup.channelList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  40559. key: 0,
  40560. class: "channel-list"
  40561. }, [
  40562. (vue.openBlock(true), vue.createElementBlock(
  40563. vue.Fragment,
  40564. null,
  40565. vue.renderList($setup.channelList, (item, index) => {
  40566. return vue.openBlock(), vue.createElementBlock("view", {
  40567. class: vue.normalizeClass(["channel-item", { "is-active": $setup.activeChannelIndex === index }]),
  40568. key: item.value,
  40569. onClick: ($event) => $setup.switchChannel(index)
  40570. }, [
  40571. vue.createElementVNode(
  40572. "text",
  40573. { class: "channel-name" },
  40574. vue.toDisplayString(item.label),
  40575. 1
  40576. /* TEXT */
  40577. ),
  40578. $setup.activeChannelIndex === index ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  40579. key: 0,
  40580. name: "checkbox-mark",
  40581. color: "#fff",
  40582. size: "24",
  40583. class: "check-icon"
  40584. })) : vue.createCommentVNode("v-if", true)
  40585. ], 10, ["onClick"]);
  40586. }),
  40587. 128
  40588. /* KEYED_FRAGMENT */
  40589. ))
  40590. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  40591. key: 1,
  40592. class: "loading-channels"
  40593. }, [
  40594. vue.createVNode(_component_u_loading, {
  40595. mode: "circle",
  40596. color: "#f8b932"
  40597. }),
  40598. vue.createElementVNode(
  40599. "text",
  40600. { style: { "margin-left": "8px", "color": "#999", "font-size": "12px" } },
  40601. vue.toDisplayString($setup.t("加载提现渠道中...")),
  40602. 1
  40603. /* TEXT */
  40604. )
  40605. ])),
  40606. $setup.channelList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  40607. key: 2,
  40608. class: "form-card"
  40609. }, [
  40610. vue.createElementVNode("view", { class: "form-group amount-group" }, [
  40611. vue.createElementVNode(
  40612. "text",
  40613. { class: "label" },
  40614. vue.toDisplayString($setup.t("提现金额")),
  40615. 1
  40616. /* TEXT */
  40617. ),
  40618. vue.createElementVNode("view", { class: "input-box" }, [
  40619. vue.createElementVNode(
  40620. "text",
  40621. { class: "currency-symbol" },
  40622. vue.toDisplayString($setup.isUSDT ? "$" : "¥"),
  40623. 1
  40624. /* TEXT */
  40625. ),
  40626. vue.withDirectives(vue.createElementVNode("input", {
  40627. type: "digit",
  40628. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.formData.amount = $event),
  40629. class: "amount-input",
  40630. placeholder: $setup.t("请输入提现金额")
  40631. }, null, 8, ["placeholder"]), [
  40632. [vue.vModelText, $setup.formData.amount]
  40633. ])
  40634. ])
  40635. ]),
  40636. vue.createElementVNode("view", { class: "divider" }),
  40637. vue.createElementVNode("view", { class: "form-group" }, [
  40638. vue.createElementVNode(
  40639. "text",
  40640. { class: "label" },
  40641. vue.toDisplayString($setup.t("收款账户")),
  40642. 1
  40643. /* TEXT */
  40644. ),
  40645. vue.createElementVNode("view", {
  40646. class: "account-selector",
  40647. onClick: _cache[2] || (_cache[2] = ($event) => $setup.showAccountPopup = true)
  40648. }, [
  40649. $setup.selectedAccount ? (vue.openBlock(), vue.createElementBlock(
  40650. vue.Fragment,
  40651. { key: 0 },
  40652. [
  40653. $setup.isUSDT ? (vue.openBlock(), vue.createElementBlock("view", {
  40654. key: 0,
  40655. class: "account-info"
  40656. }, [
  40657. vue.createElementVNode(
  40658. "text",
  40659. { class: "a-name" },
  40660. vue.toDisplayString($setup.selectedAccount.alias || "USDT地址"),
  40661. 1
  40662. /* TEXT */
  40663. ),
  40664. vue.createElementVNode(
  40665. "text",
  40666. { class: "a-desc" },
  40667. vue.toDisplayString($setup.selectedAccount.address),
  40668. 1
  40669. /* TEXT */
  40670. )
  40671. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  40672. key: 1,
  40673. class: "account-info"
  40674. }, [
  40675. vue.createElementVNode(
  40676. "text",
  40677. { class: "a-name" },
  40678. vue.toDisplayString($setup.selectedAccount.bank_name) + " (" + vue.toDisplayString($setup.selectedAccount.account) + ")",
  40679. 1
  40680. /* TEXT */
  40681. ),
  40682. vue.createElementVNode(
  40683. "text",
  40684. { class: "a-desc" },
  40685. vue.toDisplayString($setup.formatCardNo($setup.selectedAccount.card_no)),
  40686. 1
  40687. /* TEXT */
  40688. )
  40689. ]))
  40690. ],
  40691. 64
  40692. /* STABLE_FRAGMENT */
  40693. )) : (vue.openBlock(), vue.createElementBlock(
  40694. "text",
  40695. {
  40696. key: 1,
  40697. class: "placeholder"
  40698. },
  40699. vue.toDisplayString($setup.t("请选择收款账户")),
  40700. 1
  40701. /* TEXT */
  40702. )),
  40703. vue.createVNode(_component_u_icon, {
  40704. name: "arrow-right",
  40705. color: "#cbd5e1",
  40706. size: "20"
  40707. })
  40708. ])
  40709. ]),
  40710. vue.createElementVNode("view", {
  40711. class: "form-group",
  40712. style: { "margin-top": "20px" }
  40713. }, [
  40714. vue.createElementVNode(
  40715. "text",
  40716. { class: "label" },
  40717. vue.toDisplayString($setup.t("资金密码")),
  40718. 1
  40719. /* TEXT */
  40720. ),
  40721. vue.withDirectives(vue.createElementVNode("input", {
  40722. type: "password",
  40723. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.formData.safe_word = $event),
  40724. class: "std-input",
  40725. placeholder: $setup.t("请输入资金密码")
  40726. }, null, 8, ["placeholder"]), [
  40727. [vue.vModelText, $setup.formData.safe_word]
  40728. ])
  40729. ])
  40730. ])) : vue.createCommentVNode("v-if", true),
  40731. $setup.channelList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  40732. key: 3,
  40733. class: "submit-action"
  40734. }, [
  40735. vue.createVNode(_component_u_button, {
  40736. type: "primary",
  40737. shape: "circle",
  40738. loading: $setup.submitLoading,
  40739. "custom-style": { height: "44px", fontSize: "16px", fontWeight: "bold" },
  40740. onClick: $setup.handleSubmit
  40741. }, {
  40742. default: vue.withCtx(() => [
  40743. vue.createTextVNode(
  40744. vue.toDisplayString($setup.t("确认提现")),
  40745. 1
  40746. /* TEXT */
  40747. )
  40748. ]),
  40749. _: 1
  40750. /* STABLE */
  40751. }, 8, ["loading"])
  40752. ])) : vue.createCommentVNode("v-if", true)
  40753. ]),
  40754. vue.createVNode(_component_u_popup, {
  40755. modelValue: $setup.showAccountPopup,
  40756. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.showAccountPopup = $event),
  40757. mode: "bottom",
  40758. round: "16",
  40759. onClose: _cache[5] || (_cache[5] = ($event) => $setup.showAccountPopup = false),
  40760. closeable: true
  40761. }, {
  40762. default: vue.withCtx(() => [
  40763. vue.createElementVNode("view", { class: "popup-container" }, [
  40764. vue.createElementVNode(
  40765. "view",
  40766. { class: "popup-header" },
  40767. vue.toDisplayString($setup.t("选择收款账户")),
  40768. 1
  40769. /* TEXT */
  40770. ),
  40771. vue.createElementVNode("scroll-view", {
  40772. "scroll-y": "",
  40773. class: "popup-list"
  40774. }, [
  40775. $setup.isFetchingAccounts ? (vue.openBlock(), vue.createElementBlock("view", {
  40776. key: 0,
  40777. class: "loading-state"
  40778. }, [
  40779. vue.createVNode(_component_u_loading, {
  40780. mode: "circle",
  40781. color: "#f8b932"
  40782. }),
  40783. vue.createElementVNode(
  40784. "text",
  40785. null,
  40786. vue.toDisplayString($setup.t("加载中...")),
  40787. 1
  40788. /* TEXT */
  40789. )
  40790. ])) : (vue.openBlock(), vue.createElementBlock(
  40791. vue.Fragment,
  40792. { key: 1 },
  40793. [
  40794. $setup.availableAccounts.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  40795. key: 0,
  40796. class: "empty-account"
  40797. }, [
  40798. vue.createVNode(_component_u_empty, {
  40799. text: $setup.t("暂无可用账户"),
  40800. mode: "list"
  40801. }, null, 8, ["text"]),
  40802. vue.createVNode(_component_u_button, {
  40803. type: "primary",
  40804. shape: "circle",
  40805. plain: "",
  40806. style: { "margin-top": "20px", "width": "160px" },
  40807. onClick: $setup.goWalletManage
  40808. }, {
  40809. default: vue.withCtx(() => [
  40810. vue.createTextVNode(
  40811. vue.toDisplayString($setup.t("去添加账户")),
  40812. 1
  40813. /* TEXT */
  40814. )
  40815. ]),
  40816. _: 1
  40817. /* STABLE */
  40818. })
  40819. ])) : (vue.openBlock(true), vue.createElementBlock(
  40820. vue.Fragment,
  40821. { key: 1 },
  40822. vue.renderList($setup.availableAccounts, (item) => {
  40823. return vue.openBlock(), vue.createElementBlock("view", {
  40824. class: vue.normalizeClass(["account-item", { "is-active": $setup.selectedAccount && $setup.selectedAccount.id === item.id }]),
  40825. key: item.id,
  40826. onClick: ($event) => $setup.handleSelectAccount(item)
  40827. }, [
  40828. $setup.isUSDT ? (vue.openBlock(), vue.createElementBlock("view", {
  40829. key: 0,
  40830. class: "item-content"
  40831. }, [
  40832. vue.createElementVNode(
  40833. "text",
  40834. { class: "title" },
  40835. vue.toDisplayString(item.alias || "USDT地址"),
  40836. 1
  40837. /* TEXT */
  40838. ),
  40839. vue.createElementVNode(
  40840. "text",
  40841. { class: "desc" },
  40842. vue.toDisplayString(item.address),
  40843. 1
  40844. /* TEXT */
  40845. )
  40846. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  40847. key: 1,
  40848. class: "item-content"
  40849. }, [
  40850. vue.createElementVNode(
  40851. "text",
  40852. { class: "title" },
  40853. vue.toDisplayString(item.bank_name) + " (" + vue.toDisplayString(item.account) + ")",
  40854. 1
  40855. /* TEXT */
  40856. ),
  40857. vue.createElementVNode(
  40858. "text",
  40859. { class: "desc" },
  40860. vue.toDisplayString($setup.formatCardNo(item.card_no)),
  40861. 1
  40862. /* TEXT */
  40863. )
  40864. ])),
  40865. $setup.selectedAccount && $setup.selectedAccount.id === item.id ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  40866. key: 2,
  40867. name: "checkbox-mark",
  40868. color: "#f8b932",
  40869. size: "24"
  40870. })) : vue.createCommentVNode("v-if", true)
  40871. ], 10, ["onClick"]);
  40872. }),
  40873. 128
  40874. /* KEYED_FRAGMENT */
  40875. ))
  40876. ],
  40877. 64
  40878. /* STABLE_FRAGMENT */
  40879. ))
  40880. ])
  40881. ])
  40882. ]),
  40883. _: 1
  40884. /* STABLE */
  40885. }, 8, ["modelValue"])
  40886. ]),
  40887. _: 1
  40888. /* STABLE */
  40889. }, 8, ["nav-title"])
  40890. ]),
  40891. _: 1
  40892. /* STABLE */
  40893. });
  40894. }
  40895. const PagesWorkModuleMyWithdrawIndex = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["render", _sfc_render$r], ["__scopeId", "data-v-a81f47eb"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/withdraw/index.vue"]]);
  40896. const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
  40897. __name: "index",
  40898. setup(__props, { expose: __expose }) {
  40899. __expose();
  40900. const { t: t2 } = useI18n();
  40901. const pagingRef = vue.ref(null);
  40902. const moneyLogList = vue.ref([]);
  40903. const calendarShow = vue.ref(false);
  40904. const typePickerShow = vue.ref(false);
  40905. const dateRange = vue.ref("");
  40906. const startTime = vue.ref("");
  40907. const endTime = vue.ref("");
  40908. const withdrawType = vue.ref("rmb");
  40909. const typeColumns = vue.computed(() => [
  40910. { label: t2("RMB提现"), value: "rmb" },
  40911. { label: t2("加密货币提现"), value: "crypto_coin" }
  40912. ]);
  40913. const withdrawTypeText = vue.computed(() => {
  40914. const target = typeColumns.value.find((item) => item.value === withdrawType.value);
  40915. return target ? target.label : t2("RMB提现");
  40916. });
  40917. async function onQuery(pageNo, pageSize) {
  40918. try {
  40919. const params = {
  40920. type: withdrawType.value,
  40921. // rmb 或 crypto_coin
  40922. page: pageNo,
  40923. limit: pageSize,
  40924. start_time: startTime.value,
  40925. end_time: endTime.value
  40926. };
  40927. const res = await getWithdrawHistory(params);
  40928. if (res.code === 1) {
  40929. pagingRef.value.complete(res.data.list);
  40930. } else {
  40931. pagingRef.value.complete(false);
  40932. }
  40933. } catch (e) {
  40934. pagingRef.value.complete(false);
  40935. }
  40936. }
  40937. function onTypeConfirm(e) {
  40938. withdrawType.value = e[0].value;
  40939. handleQuery2();
  40940. }
  40941. function onCalendarChange(e) {
  40942. const range2 = e;
  40943. if (range2.startDate && range2.endDate) {
  40944. startTime.value = range2.startDate;
  40945. endTime.value = range2.endDate;
  40946. dateRange.value = `${range2.startDate} ~ ${range2.endDate}`;
  40947. handleQuery2();
  40948. }
  40949. }
  40950. function handleQuery2() {
  40951. pagingRef.value.reload();
  40952. }
  40953. function handleReset() {
  40954. withdrawType.value = "rmb";
  40955. dateRange.value = "";
  40956. startTime.value = "";
  40957. endTime.value = "";
  40958. pagingRef.value.reload();
  40959. }
  40960. function getStatusText(status, type2) {
  40961. let statusMap = {};
  40962. if (type2 === "crypto_coin") {
  40963. statusMap = { 0: t2("待处理"), 1: t2("成功"), 2: t2("失败") };
  40964. } else {
  40965. statusMap = { 0: t2("待处理"), 1: t2("处理中"), 2: t2("成功"), 3: t2("失败") };
  40966. }
  40967. return statusMap[status] || t2("未知");
  40968. }
  40969. function getStatusClass(status, type2) {
  40970. let classMap = {};
  40971. if (type2 === "crypto_coin") {
  40972. classMap = { 0: "status-pending", 1: "status-success", 2: "status-error" };
  40973. } else {
  40974. classMap = { 0: "status-pending", 1: "status-processing", 2: "status-success", 3: "status-error" };
  40975. }
  40976. return classMap[status] || "";
  40977. }
  40978. function getCryptoActualReceived(item) {
  40979. const amount2 = Number(item.amount) || 0;
  40980. const rate = item.exchange_rate ? Number(item.exchange_rate) : 1;
  40981. return parseFloat((amount2 * rate).toFixed(4));
  40982. }
  40983. function getBankActualReceived(item) {
  40984. const amount2 = parseFloat(item.amount || 0);
  40985. const fee = parseFloat(item.fee || 0);
  40986. const actual = amount2 - fee > 0 ? amount2 - fee : 0;
  40987. return parseFloat(actual.toFixed(2));
  40988. }
  40989. const __returned__ = { t: t2, pagingRef, moneyLogList, calendarShow, typePickerShow, dateRange, startTime, endTime, withdrawType, typeColumns, withdrawTypeText, onQuery, onTypeConfirm, onCalendarChange, handleQuery: handleQuery2, handleReset, getStatusText, getStatusClass, getCryptoActualReceived, getBankActualReceived };
  40990. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  40991. return __returned__;
  40992. }
  40993. });
  40994. function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
  40995. const _component_u_icon = __unplugin_components_0$5;
  40996. const _component_u_button = __unplugin_components_2$1;
  40997. const _component_u_empty = __unplugin_components_4$2;
  40998. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  40999. const _component_u_select = __unplugin_components_5$1;
  41000. const _component_u_calendar = __unplugin_components_6;
  41001. const _component_PageContainer = PageContainer;
  41002. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  41003. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  41004. default: vue.withCtx(() => [
  41005. vue.createVNode(_component_PageContainer, {
  41006. "nav-title": $setup.t("提现记录")
  41007. }, {
  41008. default: vue.withCtx(() => [
  41009. vue.createElementVNode("view", { class: "page-content" }, [
  41010. vue.createVNode(_component_z_paging, {
  41011. ref: "pagingRef",
  41012. modelValue: $setup.moneyLogList,
  41013. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.moneyLogList = $event),
  41014. onQuery: $setup.onQuery,
  41015. fixed: false,
  41016. "refresher-enabled": true,
  41017. "loading-more-enabled": true,
  41018. "auto-show-back-to-top": true,
  41019. "back-to-top-threshold": 300,
  41020. loadingMoreLoadingText: $setup.t("正在加载"),
  41021. loadingMoreNoMoreText: $setup.t("没有更多了"),
  41022. loadingMoreDefaultText: $setup.t("点击加载更多")
  41023. }, {
  41024. top: vue.withCtx(() => [
  41025. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  41026. vue.createElementVNode("view", { class: "filter-card" }, [
  41027. vue.createElementVNode("view", { class: "filter-header" }, [
  41028. vue.createElementVNode("view", { class: "title-line" }, [
  41029. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  41030. vue.createElementVNode(
  41031. "text",
  41032. { class: "title-text" },
  41033. vue.toDisplayString($setup.t("条件筛选")),
  41034. 1
  41035. /* TEXT */
  41036. )
  41037. ]),
  41038. vue.createElementVNode(
  41039. "text",
  41040. {
  41041. class: "reset-link",
  41042. onClick: $setup.handleReset
  41043. },
  41044. vue.toDisplayString($setup.t("重置全部")),
  41045. 1
  41046. /* TEXT */
  41047. )
  41048. ]),
  41049. vue.createElementVNode("view", { class: "filter-body" }, [
  41050. vue.createElementVNode("view", { class: "filter-row" }, [
  41051. vue.createElementVNode("view", {
  41052. class: "filter-item type-item",
  41053. onClick: _cache[0] || (_cache[0] = ($event) => $setup.typePickerShow = true)
  41054. }, [
  41055. vue.createVNode(_component_u_icon, {
  41056. name: "list-dot",
  41057. size: "32",
  41058. color: _ctx.$mainColor
  41059. }, null, 8, ["color"]),
  41060. vue.createElementVNode("view", { class: "filter-content" }, [
  41061. vue.createElementVNode(
  41062. "text",
  41063. { class: "filter-value" },
  41064. vue.toDisplayString($setup.withdrawTypeText),
  41065. 1
  41066. /* TEXT */
  41067. )
  41068. ]),
  41069. vue.createVNode(_component_u_icon, {
  41070. name: "arrow-down",
  41071. size: "14",
  41072. color: "#ccc"
  41073. })
  41074. ]),
  41075. vue.createElementVNode("view", {
  41076. class: "filter-item date-item",
  41077. onClick: _cache[1] || (_cache[1] = ($event) => $setup.calendarShow = true)
  41078. }, [
  41079. vue.createVNode(_component_u_icon, {
  41080. name: "calendar",
  41081. size: "32",
  41082. color: _ctx.$mainColor
  41083. }, null, 8, ["color"]),
  41084. vue.createElementVNode("view", { class: "filter-content" }, [
  41085. $setup.dateRange ? (vue.openBlock(), vue.createElementBlock(
  41086. "text",
  41087. {
  41088. key: 0,
  41089. class: "filter-value"
  41090. },
  41091. vue.toDisplayString($setup.dateRange),
  41092. 1
  41093. /* TEXT */
  41094. )) : (vue.openBlock(), vue.createElementBlock(
  41095. "text",
  41096. {
  41097. key: 1,
  41098. class: "filter-placeholder"
  41099. },
  41100. vue.toDisplayString($setup.t("日期区间")),
  41101. 1
  41102. /* TEXT */
  41103. ))
  41104. ]),
  41105. vue.createVNode(_component_u_icon, {
  41106. name: "arrow-down",
  41107. size: "14",
  41108. color: "#ccc"
  41109. })
  41110. ])
  41111. ]),
  41112. vue.createElementVNode("view", { class: "button-group" }, [
  41113. vue.createVNode(_component_u_button, {
  41114. type: "primary",
  41115. shape: "circle",
  41116. class: "search-btn",
  41117. onClick: $setup.handleQuery
  41118. }, {
  41119. default: vue.withCtx(() => [
  41120. vue.createVNode(_component_u_icon, {
  41121. name: "search",
  41122. size: "32",
  41123. color: "#fff",
  41124. class: "mr-1"
  41125. }),
  41126. vue.createTextVNode(
  41127. " " + vue.toDisplayString($setup.t("立即查询")),
  41128. 1
  41129. /* TEXT */
  41130. )
  41131. ]),
  41132. _: 1
  41133. /* STABLE */
  41134. })
  41135. ])
  41136. ])
  41137. ])
  41138. ])
  41139. ]),
  41140. refresher: vue.withCtx(() => [
  41141. vue.createElementVNode("view", { class: "refresher-ui" }, [
  41142. vue.createElementVNode("view", { class: "spin-loader" }),
  41143. vue.createElementVNode(
  41144. "text",
  41145. { class: "refresher-text" },
  41146. vue.toDisplayString($setup.t("更新数据中...")),
  41147. 1
  41148. /* TEXT */
  41149. )
  41150. ])
  41151. ]),
  41152. empty: vue.withCtx(() => [
  41153. vue.createElementVNode("view", { class: "empty-ui" }, [
  41154. vue.createVNode(_component_u_empty, {
  41155. text: $setup.t("没有发现相关记录"),
  41156. mode: "search",
  41157. "icon-size": "120"
  41158. }, null, 8, ["text"])
  41159. ])
  41160. ]),
  41161. default: vue.withCtx(() => [
  41162. vue.createElementVNode("view", { class: "money-log-list" }, [
  41163. (vue.openBlock(true), vue.createElementBlock(
  41164. vue.Fragment,
  41165. null,
  41166. vue.renderList($setup.moneyLogList, (item) => {
  41167. return vue.openBlock(), vue.createElementBlock("view", {
  41168. key: item.id,
  41169. class: "log-card"
  41170. }, [
  41171. vue.createElementVNode("view", { class: "card-header" }, [
  41172. vue.createElementVNode(
  41173. "view",
  41174. {
  41175. class: vue.normalizeClass(["type-badge", "withdraw", $setup.withdrawType === "rmb" ? "badge-rmb" : "badge-crypto"])
  41176. },
  41177. [
  41178. vue.createElementVNode("view", { class: "dot" }),
  41179. vue.createElementVNode(
  41180. "text",
  41181. null,
  41182. vue.toDisplayString($setup.withdrawType === "rmb" ? $setup.t("RMB提现") : $setup.t("加密货币提现")),
  41183. 1
  41184. /* TEXT */
  41185. )
  41186. ],
  41187. 2
  41188. /* CLASS */
  41189. ),
  41190. vue.createElementVNode(
  41191. "text",
  41192. { class: "order-no" },
  41193. "NO." + vue.toDisplayString(item.order_no || item.id),
  41194. 1
  41195. /* TEXT */
  41196. )
  41197. ]),
  41198. vue.createElementVNode("view", { class: "card-main" }, [
  41199. vue.createElementVNode("view", { class: "amount-box" }, [
  41200. vue.createElementVNode(
  41201. "text",
  41202. { class: "amount-val" },
  41203. vue.toDisplayString(item.amount),
  41204. 1
  41205. /* TEXT */
  41206. ),
  41207. vue.createElementVNode(
  41208. "text",
  41209. { class: "currency" },
  41210. vue.toDisplayString(item.currency || ($setup.withdrawType === "rmb" ? "CNY" : "USDT")),
  41211. 1
  41212. /* TEXT */
  41213. )
  41214. ]),
  41215. vue.createElementVNode("view", { class: "status-box" }, [
  41216. vue.createElementVNode(
  41217. "text",
  41218. {
  41219. class: vue.normalizeClass(["status-text", $setup.getStatusClass(item.status, $setup.withdrawType)])
  41220. },
  41221. vue.toDisplayString($setup.getStatusText(item.status, $setup.withdrawType)),
  41222. 3
  41223. /* TEXT, CLASS */
  41224. )
  41225. ])
  41226. ]),
  41227. vue.createElementVNode("view", { class: "card-footer" }, [
  41228. vue.createElementVNode("view", { class: "info-row" }, [
  41229. vue.createElementVNode(
  41230. "text",
  41231. { class: "info-label" },
  41232. vue.toDisplayString($setup.t("到账金额")),
  41233. 1
  41234. /* TEXT */
  41235. ),
  41236. vue.createElementVNode("text", { class: "info-value" }, [
  41237. vue.createTextVNode(
  41238. vue.toDisplayString($setup.withdrawType === "crypto_coin" ? item.to_account : item.amount) + " ",
  41239. 1
  41240. /* TEXT */
  41241. ),
  41242. vue.createElementVNode(
  41243. "text",
  41244. { class: "currency" },
  41245. vue.toDisplayString(item.currency || ($setup.withdrawType === "rmb" ? "CNY" : "USDT")),
  41246. 1
  41247. /* TEXT */
  41248. )
  41249. ])
  41250. ]),
  41251. $setup.withdrawType === "crypto_coin" ? (vue.openBlock(), vue.createElementBlock("view", {
  41252. key: 0,
  41253. class: "info-row"
  41254. }, [
  41255. vue.createElementVNode(
  41256. "text",
  41257. { class: "info-label" },
  41258. vue.toDisplayString($setup.t("汇率")),
  41259. 1
  41260. /* TEXT */
  41261. ),
  41262. vue.createElementVNode(
  41263. "text",
  41264. { class: "info-value highlighted" },
  41265. vue.toDisplayString(item.exchange_rate || "--"),
  41266. 1
  41267. /* TEXT */
  41268. )
  41269. ])) : vue.createCommentVNode("v-if", true),
  41270. vue.createElementVNode("view", { class: "info-row" }, [
  41271. vue.createElementVNode(
  41272. "text",
  41273. { class: "info-label" },
  41274. vue.toDisplayString($setup.t("手续费")),
  41275. 1
  41276. /* TEXT */
  41277. ),
  41278. vue.createElementVNode(
  41279. "text",
  41280. { class: "info-value" },
  41281. vue.toDisplayString($setup.withdrawType === "crypto_coin" ? item.service_charge : item.fee) + " " + vue.toDisplayString(item.currency || ($setup.withdrawType === "rmb" ? "CNY" : "USDT")),
  41282. 1
  41283. /* TEXT */
  41284. )
  41285. ]),
  41286. $setup.withdrawType === "rmb" ? (vue.openBlock(), vue.createElementBlock(
  41287. vue.Fragment,
  41288. { key: 1 },
  41289. [
  41290. vue.createElementVNode("view", { class: "info-row" }, [
  41291. vue.createElementVNode(
  41292. "text",
  41293. { class: "info-label" },
  41294. vue.toDisplayString($setup.t("提现渠道")),
  41295. 1
  41296. /* TEXT */
  41297. ),
  41298. vue.createElementVNode(
  41299. "text",
  41300. { class: "info-value" },
  41301. vue.toDisplayString(item.channel_text || item.bank_name || "--"),
  41302. 1
  41303. /* TEXT */
  41304. )
  41305. ]),
  41306. vue.createElementVNode("view", { class: "info-row" }, [
  41307. vue.createElementVNode(
  41308. "text",
  41309. { class: "info-label" },
  41310. vue.toDisplayString($setup.t("收款人")),
  41311. 1
  41312. /* TEXT */
  41313. ),
  41314. vue.createElementVNode(
  41315. "text",
  41316. { class: "info-value" },
  41317. vue.toDisplayString(item.account || "--"),
  41318. 1
  41319. /* TEXT */
  41320. )
  41321. ]),
  41322. vue.createElementVNode("view", { class: "info-row" }, [
  41323. vue.createElementVNode(
  41324. "text",
  41325. { class: "info-label" },
  41326. vue.toDisplayString($setup.t("收款账号")),
  41327. 1
  41328. /* TEXT */
  41329. ),
  41330. vue.createElementVNode(
  41331. "text",
  41332. { class: "info-value address-value" },
  41333. vue.toDisplayString(item.card_no || "--"),
  41334. 1
  41335. /* TEXT */
  41336. )
  41337. ])
  41338. ],
  41339. 64
  41340. /* STABLE_FRAGMENT */
  41341. )) : (vue.openBlock(), vue.createElementBlock("view", {
  41342. key: 2,
  41343. class: "info-row"
  41344. }, [
  41345. vue.createElementVNode(
  41346. "text",
  41347. { class: "info-label" },
  41348. vue.toDisplayString($setup.t("提现地址")),
  41349. 1
  41350. /* TEXT */
  41351. ),
  41352. vue.createElementVNode(
  41353. "text",
  41354. { class: "info-value address-value" },
  41355. vue.toDisplayString(item.address || "--"),
  41356. 1
  41357. /* TEXT */
  41358. )
  41359. ])),
  41360. vue.createElementVNode("view", { class: "info-row" }, [
  41361. vue.createElementVNode(
  41362. "text",
  41363. { class: "info-label" },
  41364. vue.toDisplayString($setup.t("申请时间")),
  41365. 1
  41366. /* TEXT */
  41367. ),
  41368. vue.createElementVNode(
  41369. "text",
  41370. { class: "info-value" },
  41371. vue.toDisplayString(item.created_at),
  41372. 1
  41373. /* TEXT */
  41374. )
  41375. ]),
  41376. ($setup.withdrawType === "crypto_coin" && item.status === 2 || $setup.withdrawType === "rmb" && item.status === 3) && (item.admin_note || item.remark) ? (vue.openBlock(), vue.createElementBlock("view", {
  41377. key: 3,
  41378. class: "reject-box"
  41379. }, [
  41380. vue.createElementVNode(
  41381. "text",
  41382. { class: "reject-label" },
  41383. vue.toDisplayString($setup.t("失败原因")) + ":",
  41384. 1
  41385. /* TEXT */
  41386. ),
  41387. vue.createElementVNode(
  41388. "text",
  41389. { class: "reject-value" },
  41390. vue.toDisplayString(item.admin_note || item.remark),
  41391. 1
  41392. /* TEXT */
  41393. )
  41394. ])) : vue.createCommentVNode("v-if", true)
  41395. ])
  41396. ]);
  41397. }),
  41398. 128
  41399. /* KEYED_FRAGMENT */
  41400. ))
  41401. ])
  41402. ]),
  41403. _: 1
  41404. /* STABLE */
  41405. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])
  41406. ]),
  41407. vue.createVNode(_component_u_select, {
  41408. modelValue: $setup.typePickerShow,
  41409. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.typePickerShow = $event),
  41410. mode: "single-column",
  41411. list: $setup.typeColumns,
  41412. "confirm-color": _ctx.$mainColor,
  41413. onConfirm: $setup.onTypeConfirm
  41414. }, null, 8, ["modelValue", "list", "confirm-color"]),
  41415. vue.createVNode(_component_u_calendar, {
  41416. modelValue: $setup.calendarShow,
  41417. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.calendarShow = $event),
  41418. mode: "range",
  41419. "active-bg-color": _ctx.$mainColor,
  41420. "range-color": _ctx.$mainColor,
  41421. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  41422. "start-text": $setup.t("开始"),
  41423. "end-text": $setup.t("结束"),
  41424. "btn-type": "primary",
  41425. "tool-tip": $setup.t("请选择记录查询区间"),
  41426. onChange: $setup.onCalendarChange
  41427. }, null, 8, ["modelValue", "active-bg-color", "range-color", "start-text", "end-text", "tool-tip"])
  41428. ]),
  41429. _: 1
  41430. /* STABLE */
  41431. }, 8, ["nav-title"])
  41432. ]),
  41433. _: 1
  41434. /* STABLE */
  41435. });
  41436. }
  41437. const PagesWorkModuleMyWithdrawalHistoryIndex = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["render", _sfc_render$q], ["__scopeId", "data-v-9e36bfa3"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/withdrawalHistory/index.vue"]]);
  41438. const _sfc_main$q = {
  41439. __name: "index",
  41440. setup(__props, { expose: __expose }) {
  41441. __expose();
  41442. const { t: t2 } = useI18n();
  41443. const router2 = useRouter();
  41444. const yuebaoBalance = vue.ref("0.00");
  41445. const yuebaoInterest = vue.ref("0.00");
  41446. const tableData = vue.ref([]);
  41447. const queryParams2 = vue.reactive({
  41448. page: 1,
  41449. limit: 15,
  41450. status: "",
  41451. start_time: "",
  41452. end_time: ""
  41453. });
  41454. const total = vue.ref(0);
  41455. const isRefreshing = vue.ref(false);
  41456. const loadStatus = vue.ref("more");
  41457. const loadStatusText = vue.computed(() => {
  41458. if (loadStatus.value === "loading")
  41459. return t2("正在加载...");
  41460. if (loadStatus.value === "noMore")
  41461. return t2("没有更多记录了");
  41462. return t2("上拉加载更多");
  41463. });
  41464. const statusOptions = vue.computed(() => [
  41465. { label: t2("全部"), value: "" },
  41466. { label: t2("持仓中"), value: 1 },
  41467. { label: t2("已取出"), value: 2 }
  41468. ]);
  41469. const showModal2 = vue.ref(false);
  41470. const modalType = vue.ref("add");
  41471. const amount2 = vue.ref("");
  41472. const submitLoading = vue.ref(false);
  41473. const showCalendar = vue.ref(false);
  41474. vue.onMounted(() => {
  41475. fetchBalance();
  41476. fetchData(true);
  41477. });
  41478. onShow(() => {
  41479. fetchBalance();
  41480. });
  41481. const fetchBalance = async () => {
  41482. try {
  41483. const res = await getBalance();
  41484. if (res && res.code === 1 && res.data) {
  41485. yuebaoBalance.value = res.data.yuebao || "0.00";
  41486. yuebaoInterest.value = res.data.yuebao_invest || "0.00";
  41487. }
  41488. } catch (error) {
  41489. formatAppLog("error", "at pages/WorkModule/my/Yuebao/index.vue:223", "获取余额失败", error);
  41490. }
  41491. };
  41492. const fetchData = async (isRefresh = false) => {
  41493. if (isRefresh) {
  41494. queryParams2.page = 1;
  41495. loadStatus.value = "loading";
  41496. } else {
  41497. if (loadStatus.value === "noMore")
  41498. return;
  41499. loadStatus.value = "loading";
  41500. }
  41501. try {
  41502. const res = await getYuebaoItemList(queryParams2);
  41503. if (res && res.code === 1) {
  41504. const list2 = res.data.list || res.data.data || [];
  41505. const resTotal = res.data.total || 0;
  41506. if (isRefresh) {
  41507. tableData.value = list2;
  41508. } else {
  41509. tableData.value = [...tableData.value, ...list2];
  41510. }
  41511. total.value = resTotal;
  41512. if (tableData.value.length >= total.value || list2.length < queryParams2.limit) {
  41513. loadStatus.value = "noMore";
  41514. } else {
  41515. loadStatus.value = "more";
  41516. }
  41517. } else {
  41518. if (isRefresh)
  41519. tableData.value = [];
  41520. loadStatus.value = "noMore";
  41521. }
  41522. } catch (error) {
  41523. formatAppLog("error", "at pages/WorkModule/my/Yuebao/index.vue:260", "获取列表失败", error);
  41524. loadStatus.value = "more";
  41525. } finally {
  41526. isRefreshing.value = false;
  41527. }
  41528. };
  41529. const handleCalendarChange = (e) => {
  41530. queryParams2.start_time = e.startDate;
  41531. queryParams2.end_time = e.endDate;
  41532. };
  41533. const onRefresh = () => {
  41534. isRefreshing.value = true;
  41535. fetchBalance();
  41536. fetchData(true);
  41537. };
  41538. const loadMore = () => {
  41539. if (loadStatus.value === "loading" || loadStatus.value === "noMore")
  41540. return;
  41541. queryParams2.page += 1;
  41542. fetchData(false);
  41543. };
  41544. const handleTabChange = (val) => {
  41545. if (queryParams2.status === val)
  41546. return;
  41547. queryParams2.status = val;
  41548. fetchData(true);
  41549. };
  41550. const openModal = (type2) => {
  41551. modalType.value = type2;
  41552. amount2.value = "";
  41553. showModal2.value = true;
  41554. };
  41555. const closeModal = () => {
  41556. showModal2.value = false;
  41557. };
  41558. const handleSubmit = async () => {
  41559. if (!amount2.value || Number(amount2.value) <= 0) {
  41560. return uni.showToast({ title: t2("请输入有效金额"), icon: "none" });
  41561. }
  41562. if (modalType.value === "add" && Number(amount2.value) < 1) {
  41563. return uni.showToast({ title: t2("转入金额最小为 1"), icon: "none" });
  41564. }
  41565. submitLoading.value = true;
  41566. try {
  41567. const apiCall = modalType.value === "add" ? addYuebao : withdrawYuebao;
  41568. const res = await apiCall({ amount: String(amount2.value) });
  41569. if (res.code === 1 || res.code === 0) {
  41570. uni.showToast({ title: res.msg || t2("操作成功"), icon: "success" });
  41571. closeModal();
  41572. onRefresh();
  41573. } else {
  41574. uni.showToast({ title: res.msg || t2("操作失败"), icon: "none" });
  41575. }
  41576. } catch (error) {
  41577. formatAppLog("error", "at pages/WorkModule/my/Yuebao/index.vue:324", error);
  41578. } finally {
  41579. submitLoading.value = false;
  41580. }
  41581. };
  41582. const formatMoney = (val) => {
  41583. if (!val && val !== 0)
  41584. return "0.00";
  41585. return Number(val).toFixed(2);
  41586. };
  41587. const getStatusText = (status) => {
  41588. if (Number(status) === 1)
  41589. return t2("持仓中");
  41590. if (Number(status) === 2)
  41591. return t2("已取出");
  41592. return t2("未知");
  41593. };
  41594. const __returned__ = { t: t2, router: router2, yuebaoBalance, yuebaoInterest, tableData, queryParams: queryParams2, total, isRefreshing, loadStatus, loadStatusText, statusOptions, showModal: showModal2, modalType, amount: amount2, submitLoading, showCalendar, fetchBalance, fetchData, handleCalendarChange, onRefresh, loadMore, handleTabChange, openModal, closeModal, handleSubmit, formatMoney, getStatusText, ref: vue.ref, reactive: vue.reactive, computed: vue.computed, onMounted: vue.onMounted, get onShow() {
  41595. return onShow;
  41596. }, get useI18n() {
  41597. return useI18n;
  41598. }, get addYuebao() {
  41599. return addYuebao;
  41600. }, get withdrawYuebao() {
  41601. return withdrawYuebao;
  41602. }, get getYuebaoItemList() {
  41603. return getYuebaoItemList;
  41604. }, get getBalance() {
  41605. return getBalance;
  41606. } };
  41607. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  41608. return __returned__;
  41609. }
  41610. };
  41611. function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
  41612. const _component_u_icon = __unplugin_components_0$5;
  41613. const _component_u_loading = __unplugin_components_3$3;
  41614. const _component_u_empty = __unplugin_components_4$2;
  41615. const _component_u_button = __unplugin_components_2$1;
  41616. const _component_u_popup = __unplugin_components_2$3;
  41617. const _component_u_calendar = __unplugin_components_6;
  41618. const _component_PageContainer = PageContainer;
  41619. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  41620. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  41621. default: vue.withCtx(() => [
  41622. vue.createVNode(_component_PageContainer, {
  41623. "nav-title": $setup.t("余额宝")
  41624. }, {
  41625. navBarRight: vue.withCtx(() => [
  41626. vue.createElementVNode(
  41627. "view",
  41628. {
  41629. class: "tmc",
  41630. onClick: _cache[0] || (_cache[0] = ($event) => $setup.router.push({ name: "YuebaoItemList" }))
  41631. },
  41632. vue.toDisplayString($setup.t("明细")),
  41633. 1
  41634. /* TEXT */
  41635. )
  41636. ]),
  41637. default: vue.withCtx(() => [
  41638. vue.createElementVNode("view", { class: "yuebao-page" }, [
  41639. vue.createElementVNode(
  41640. "view",
  41641. {
  41642. class: "dashboard-card",
  41643. onTouchmove: _cache[3] || (_cache[3] = vue.withModifiers(() => {
  41644. }, ["stop", "prevent"]))
  41645. },
  41646. [
  41647. vue.createElementVNode("view", { class: "dashboard-header" }, [
  41648. vue.createElementVNode("view", { class: "decorate-bar" }),
  41649. vue.createElementVNode(
  41650. "text",
  41651. { class: "title" },
  41652. vue.toDisplayString($setup.t("灵活存取,稳健收益")),
  41653. 1
  41654. /* TEXT */
  41655. )
  41656. ]),
  41657. vue.createElementVNode("view", { class: "assets-box" }, [
  41658. vue.createElementVNode("view", { class: "asset-item" }, [
  41659. vue.createElementVNode(
  41660. "text",
  41661. { class: "asset-label" },
  41662. vue.toDisplayString($setup.t("余额宝总额(元)")),
  41663. 1
  41664. /* TEXT */
  41665. ),
  41666. vue.createElementVNode(
  41667. "text",
  41668. { class: "asset-value text-gold" },
  41669. vue.toDisplayString($setup.yuebaoBalance),
  41670. 1
  41671. /* TEXT */
  41672. )
  41673. ]),
  41674. vue.createElementVNode("view", { class: "divider" }),
  41675. vue.createElementVNode("view", { class: "asset-item" }, [
  41676. vue.createElementVNode(
  41677. "text",
  41678. { class: "asset-label" },
  41679. vue.toDisplayString($setup.t("累计收益(元)")),
  41680. 1
  41681. /* TEXT */
  41682. ),
  41683. vue.createElementVNode(
  41684. "text",
  41685. { class: "asset-value" },
  41686. vue.toDisplayString($setup.yuebaoInterest),
  41687. 1
  41688. /* TEXT */
  41689. )
  41690. ])
  41691. ]),
  41692. vue.createElementVNode("view", { class: "action-group" }, [
  41693. vue.createElementVNode("view", {
  41694. class: "action-btn primary",
  41695. onClick: _cache[1] || (_cache[1] = ($event) => $setup.openModal("add"))
  41696. }, [
  41697. vue.createElementVNode(
  41698. "text",
  41699. null,
  41700. vue.toDisplayString($setup.t("转入")),
  41701. 1
  41702. /* TEXT */
  41703. )
  41704. ]),
  41705. vue.createElementVNode("view", {
  41706. class: "action-btn",
  41707. onClick: _cache[2] || (_cache[2] = ($event) => $setup.openModal("out")),
  41708. style: { "border": "2px solid #999" }
  41709. }, [
  41710. vue.createVNode(_component_u_icon, {
  41711. name: "upload",
  41712. color: "#333",
  41713. size: "18",
  41714. class: "mr-1"
  41715. }),
  41716. vue.createElementVNode(
  41717. "text",
  41718. null,
  41719. vue.toDisplayString($setup.t("转出")),
  41720. 1
  41721. /* TEXT */
  41722. )
  41723. ])
  41724. ])
  41725. ],
  41726. 32
  41727. /* NEED_HYDRATION */
  41728. ),
  41729. vue.createElementVNode(
  41730. "view",
  41731. {
  41732. class: "search-filter-section",
  41733. onTouchmove: _cache[5] || (_cache[5] = vue.withModifiers(() => {
  41734. }, ["stop", "prevent"]))
  41735. },
  41736. [
  41737. vue.createElementVNode("view", { class: "filter-tabs" }, [
  41738. (vue.openBlock(true), vue.createElementBlock(
  41739. vue.Fragment,
  41740. null,
  41741. vue.renderList($setup.statusOptions, (item, index) => {
  41742. return vue.openBlock(), vue.createElementBlock("view", {
  41743. class: vue.normalizeClass(["tab-item", { "is-active": $setup.queryParams.status === item.value }]),
  41744. key: index,
  41745. onClick: ($event) => $setup.handleTabChange(item.value)
  41746. }, [
  41747. vue.createElementVNode(
  41748. "text",
  41749. null,
  41750. vue.toDisplayString(item.label),
  41751. 1
  41752. /* TEXT */
  41753. ),
  41754. $setup.queryParams.status === item.value ? (vue.openBlock(), vue.createElementBlock("view", {
  41755. key: 0,
  41756. class: "tab-line"
  41757. })) : vue.createCommentVNode("v-if", true)
  41758. ], 10, ["onClick"]);
  41759. }),
  41760. 128
  41761. /* KEYED_FRAGMENT */
  41762. ))
  41763. ]),
  41764. vue.createElementVNode("view", { class: "date-search-box" }, [
  41765. vue.createElementVNode("view", {
  41766. class: "date-input-group",
  41767. onClick: _cache[4] || (_cache[4] = ($event) => $setup.showCalendar = true)
  41768. }, [
  41769. vue.createElementVNode(
  41770. "view",
  41771. { class: "date-picker-btn" },
  41772. vue.toDisplayString($setup.queryParams.start_time || $setup.t("开始日期")),
  41773. 1
  41774. /* TEXT */
  41775. ),
  41776. vue.createElementVNode("text", { class: "date-sep" }, "-"),
  41777. vue.createElementVNode(
  41778. "view",
  41779. { class: "date-picker-btn" },
  41780. vue.toDisplayString($setup.queryParams.end_time || $setup.t("结束日期")),
  41781. 1
  41782. /* TEXT */
  41783. )
  41784. ]),
  41785. vue.createElementVNode(
  41786. "view",
  41787. {
  41788. class: "search-btn-mini",
  41789. onClick: $setup.onRefresh
  41790. },
  41791. vue.toDisplayString($setup.t("搜索")),
  41792. 1
  41793. /* TEXT */
  41794. )
  41795. ])
  41796. ],
  41797. 32
  41798. /* NEED_HYDRATION */
  41799. ),
  41800. vue.createElementVNode("scroll-view", {
  41801. class: "list-scroll-view",
  41802. "scroll-y": "",
  41803. "refresher-enabled": true,
  41804. "refresher-triggered": $setup.isRefreshing,
  41805. onRefresherrefresh: $setup.onRefresh,
  41806. onScrolltolower: $setup.loadMore
  41807. }, [
  41808. $setup.tableData.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  41809. key: 0,
  41810. class: "list-container"
  41811. }, [
  41812. (vue.openBlock(true), vue.createElementBlock(
  41813. vue.Fragment,
  41814. null,
  41815. vue.renderList($setup.tableData, (item, index) => {
  41816. return vue.openBlock(), vue.createElementBlock("view", {
  41817. class: "record-card",
  41818. key: item.id || index
  41819. }, [
  41820. vue.createElementVNode("view", { class: "card-header" }, [
  41821. vue.createElementVNode(
  41822. "text",
  41823. { class: "time-text" },
  41824. vue.toDisplayString(item.create_time),
  41825. 1
  41826. /* TEXT */
  41827. ),
  41828. vue.createElementVNode(
  41829. "view",
  41830. {
  41831. class: vue.normalizeClass(["status-tag", "status-" + item.status])
  41832. },
  41833. vue.toDisplayString($setup.getStatusText(item.status)),
  41834. 3
  41835. /* TEXT, CLASS */
  41836. )
  41837. ]),
  41838. vue.createElementVNode("view", { class: "card-body" }, [
  41839. vue.createElementVNode("view", { class: "main-row" }, [
  41840. vue.createElementVNode("view", { class: "info-item" }, [
  41841. vue.createElementVNode(
  41842. "text",
  41843. { class: "label" },
  41844. vue.toDisplayString($setup.t("本金")),
  41845. 1
  41846. /* TEXT */
  41847. ),
  41848. vue.createElementVNode(
  41849. "text",
  41850. { class: "val text-gold" },
  41851. "¥" + vue.toDisplayString($setup.formatMoney(item.principal)),
  41852. 1
  41853. /* TEXT */
  41854. )
  41855. ]),
  41856. vue.createElementVNode("view", { class: "info-item" }, [
  41857. vue.createElementVNode(
  41858. "text",
  41859. { class: "label" },
  41860. vue.toDisplayString($setup.t("预估收益")),
  41861. 1
  41862. /* TEXT */
  41863. ),
  41864. vue.createElementVNode(
  41865. "text",
  41866. { class: "val text-gold" },
  41867. "¥" + vue.toDisplayString($setup.formatMoney(item.estimated_interest)),
  41868. 1
  41869. /* TEXT */
  41870. )
  41871. ])
  41872. ]),
  41873. vue.createElementVNode("view", { class: "sub-row" }, [
  41874. vue.createElementVNode("view", { class: "info-item" }, [
  41875. vue.createElementVNode(
  41876. "text",
  41877. { class: "label" },
  41878. vue.toDisplayString($setup.t("剩余本金")),
  41879. 1
  41880. /* TEXT */
  41881. ),
  41882. vue.createElementVNode(
  41883. "text",
  41884. { class: "val" },
  41885. "¥" + vue.toDisplayString($setup.formatMoney(item.surplus_principal)),
  41886. 1
  41887. /* TEXT */
  41888. )
  41889. ]),
  41890. vue.createElementVNode("view", { class: "info-item" }, [
  41891. vue.createElementVNode(
  41892. "text",
  41893. { class: "label" },
  41894. vue.toDisplayString($setup.t("日利率")),
  41895. 1
  41896. /* TEXT */
  41897. ),
  41898. vue.createElementVNode(
  41899. "text",
  41900. { class: "val" },
  41901. vue.toDisplayString(item.daily_interest_rate || "0.00") + "%",
  41902. 1
  41903. /* TEXT */
  41904. )
  41905. ])
  41906. ])
  41907. ])
  41908. ]);
  41909. }),
  41910. 128
  41911. /* KEYED_FRAGMENT */
  41912. )),
  41913. vue.createElementVNode("view", { class: "load-more-tip" }, [
  41914. $setup.loadStatus === "loading" ? (vue.openBlock(), vue.createBlock(_component_u_loading, { key: 0 })) : vue.createCommentVNode("v-if", true),
  41915. vue.createElementVNode(
  41916. "text",
  41917. { class: "tip-text" },
  41918. vue.toDisplayString($setup.loadStatusText),
  41919. 1
  41920. /* TEXT */
  41921. )
  41922. ])
  41923. ])) : !$setup.isRefreshing && $setup.loadStatus !== "loading" ? (vue.openBlock(), vue.createElementBlock("view", {
  41924. key: 1,
  41925. class: "empty-box"
  41926. }, [
  41927. vue.createVNode(_component_u_empty, {
  41928. text: $setup.t("暂无持仓记录"),
  41929. mode: "list"
  41930. }, null, 8, ["text"])
  41931. ])) : vue.createCommentVNode("v-if", true)
  41932. ], 40, ["refresher-triggered"]),
  41933. vue.createVNode(_component_u_popup, {
  41934. modelValue: $setup.showModal,
  41935. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.showModal = $event),
  41936. mode: "bottom",
  41937. round: "16",
  41938. onClose: $setup.closeModal,
  41939. closeable: true
  41940. }, {
  41941. default: vue.withCtx(() => [
  41942. vue.createElementVNode("view", { class: "modal-content" }, [
  41943. vue.createElementVNode(
  41944. "view",
  41945. { class: "modal-title" },
  41946. vue.toDisplayString($setup.modalType === "add" ? $setup.t("转入余额宝") : $setup.t("转出余额宝")),
  41947. 1
  41948. /* TEXT */
  41949. ),
  41950. vue.createElementVNode("view", { class: "modal-body" }, [
  41951. vue.createElementVNode(
  41952. "text",
  41953. { class: "input-label" },
  41954. vue.toDisplayString($setup.modalType === "add" ? $setup.t("转入金额") : $setup.t("转出金额")),
  41955. 1
  41956. /* TEXT */
  41957. ),
  41958. vue.createElementVNode("view", { class: "input-box" }, [
  41959. vue.createElementVNode("text", { class: "currency" }, "¥"),
  41960. vue.withDirectives(vue.createElementVNode("input", {
  41961. type: "digit",
  41962. "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.amount = $event),
  41963. class: "amount-input",
  41964. placeholder: $setup.modalType === "add" ? $setup.t("请输入转入金额,最小为 1") : $setup.t("请输入转出金额")
  41965. }, null, 8, ["placeholder"]), [
  41966. [vue.vModelText, $setup.amount]
  41967. ])
  41968. ])
  41969. ]),
  41970. vue.createElementVNode("view", { class: "modal-footer" }, [
  41971. vue.createVNode(_component_u_button, {
  41972. type: "primary",
  41973. shape: "circle",
  41974. loading: $setup.submitLoading,
  41975. onClick: $setup.handleSubmit,
  41976. "custom-style": { height: "48px", fontSize: "16px", fontWeight: "bold" }
  41977. }, {
  41978. default: vue.withCtx(() => [
  41979. vue.createTextVNode(
  41980. vue.toDisplayString($setup.modalType === "add" ? $setup.t("确认转入") : $setup.t("确认转出")),
  41981. 1
  41982. /* TEXT */
  41983. )
  41984. ]),
  41985. _: 1
  41986. /* STABLE */
  41987. }, 8, ["loading"])
  41988. ])
  41989. ])
  41990. ]),
  41991. _: 1
  41992. /* STABLE */
  41993. }, 8, ["modelValue"]),
  41994. vue.createVNode(_component_u_calendar, {
  41995. modelValue: $setup.showCalendar,
  41996. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.showCalendar = $event),
  41997. mode: "range",
  41998. "start-text": $setup.t("开始"),
  41999. "end-text": $setup.t("结束"),
  42000. onChange: $setup.handleCalendarChange
  42001. }, null, 8, ["modelValue", "start-text", "end-text"])
  42002. ])
  42003. ]),
  42004. _: 1
  42005. /* STABLE */
  42006. }, 8, ["nav-title"])
  42007. ]),
  42008. _: 1
  42009. /* STABLE */
  42010. });
  42011. }
  42012. const PagesWorkModuleMyYuebaoIndex = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$p], ["__scopeId", "data-v-5183df57"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/Yuebao/index.vue"]]);
  42013. const _sfc_main$p = {
  42014. __name: "itemList",
  42015. setup(__props, { expose: __expose }) {
  42016. __expose();
  42017. const { t: t2 } = useI18n();
  42018. const logList = vue.ref([]);
  42019. const queryParams2 = vue.reactive({
  42020. page: 1,
  42021. limit: 20
  42022. });
  42023. const total = vue.ref(0);
  42024. const isRefreshing = vue.ref(false);
  42025. const loadStatus = vue.ref("more");
  42026. const loadStatusText = vue.computed(() => {
  42027. if (loadStatus.value === "loading")
  42028. return t2("正在加载...");
  42029. if (loadStatus.value === "noMore")
  42030. return t2("没有更多记录了");
  42031. return t2("上拉加载更多");
  42032. });
  42033. vue.onMounted(() => {
  42034. fetchData(true);
  42035. });
  42036. const fetchData = async (isRefresh = false) => {
  42037. if (isRefresh) {
  42038. queryParams2.page = 1;
  42039. loadStatus.value = "loading";
  42040. } else {
  42041. if (loadStatus.value === "noMore")
  42042. return;
  42043. loadStatus.value = "loading";
  42044. }
  42045. try {
  42046. const res = await getYuebaoLogList(queryParams2);
  42047. if (res && res.code === 1 && res.data) {
  42048. const list2 = res.data.list || [];
  42049. const resTotal = res.data.count || 0;
  42050. if (isRefresh) {
  42051. logList.value = list2;
  42052. } else {
  42053. logList.value = [...logList.value, ...list2];
  42054. }
  42055. total.value = resTotal;
  42056. if (logList.value.length >= total.value || list2.length < queryParams2.limit) {
  42057. loadStatus.value = "noMore";
  42058. } else {
  42059. loadStatus.value = "more";
  42060. }
  42061. } else {
  42062. if (isRefresh)
  42063. logList.value = [];
  42064. loadStatus.value = "noMore";
  42065. }
  42066. } catch (error) {
  42067. formatAppLog("error", "at pages/WorkModule/my/Yuebao/itemList.vue:118", "获取余额宝明细失败", error);
  42068. loadStatus.value = "more";
  42069. } finally {
  42070. isRefreshing.value = false;
  42071. }
  42072. };
  42073. const onRefresh = () => {
  42074. isRefreshing.value = true;
  42075. fetchData(true);
  42076. };
  42077. const loadMore = () => {
  42078. if (loadStatus.value === "loading" || loadStatus.value === "noMore")
  42079. return;
  42080. queryParams2.page += 1;
  42081. fetchData(false);
  42082. };
  42083. const formatMoney = (val) => {
  42084. if (!val && val !== 0)
  42085. return "0.00";
  42086. return Number(val).toFixed(2);
  42087. };
  42088. const formatHoldTime = (hours) => {
  42089. const h = Number(hours);
  42090. if (isNaN(h) || h === 0)
  42091. return `0${t2("小时")}`;
  42092. if (h < 24)
  42093. return `${h}${t2("小时")}`;
  42094. const days = Math.floor(h / 24);
  42095. const remainHours = h % 24;
  42096. return remainHours > 0 ? `${days}${t2("天")}${remainHours}${t2("小时")}` : `${days}${t2("天")}`;
  42097. };
  42098. const getTypeText = (type2) => {
  42099. if (type2 === 1)
  42100. return t2("转入");
  42101. if (type2 === 2)
  42102. return t2("转出");
  42103. return t2("其他");
  42104. };
  42105. const getAmountSign = (type2) => {
  42106. if (type2 === 1)
  42107. return "+";
  42108. if (type2 === 2)
  42109. return "-";
  42110. return "";
  42111. };
  42112. const getAmountClass = (type2) => {
  42113. if (type2 === 1)
  42114. return "text-in";
  42115. if (type2 === 2)
  42116. return "text-out";
  42117. return "";
  42118. };
  42119. const __returned__ = { t: t2, logList, queryParams: queryParams2, total, isRefreshing, loadStatus, loadStatusText, fetchData, onRefresh, loadMore, formatMoney, formatHoldTime, getTypeText, getAmountSign, getAmountClass, ref: vue.ref, reactive: vue.reactive, computed: vue.computed, onMounted: vue.onMounted, get useI18n() {
  42120. return useI18n;
  42121. }, get getYuebaoLogList() {
  42122. return getYuebaoLogList;
  42123. } };
  42124. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  42125. return __returned__;
  42126. }
  42127. };
  42128. function _sfc_render$o(_ctx, _cache, $props, $setup, $data, $options) {
  42129. const _component_u_tag = __unplugin_components_2$2;
  42130. const _component_u_loading = __unplugin_components_3$3;
  42131. const _component_u_empty = __unplugin_components_4$2;
  42132. const _component_PageContainer = PageContainer;
  42133. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  42134. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  42135. default: vue.withCtx(() => [
  42136. vue.createVNode(_component_PageContainer, {
  42137. "nav-title": $setup.t("余额宝明细")
  42138. }, {
  42139. default: vue.withCtx(() => [
  42140. vue.createElementVNode("view", { class: "yuebao-log-page" }, [
  42141. vue.createElementVNode("scroll-view", {
  42142. class: "log-scroll-view",
  42143. "scroll-y": "",
  42144. "refresher-enabled": true,
  42145. "refresher-triggered": $setup.isRefreshing,
  42146. onRefresherrefresh: $setup.onRefresh,
  42147. onScrolltolower: $setup.loadMore
  42148. }, [
  42149. $setup.logList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  42150. key: 0,
  42151. class: "log-list"
  42152. }, [
  42153. (vue.openBlock(true), vue.createElementBlock(
  42154. vue.Fragment,
  42155. null,
  42156. vue.renderList($setup.logList, (item) => {
  42157. return vue.openBlock(), vue.createElementBlock("view", {
  42158. class: "log-item",
  42159. key: item.id
  42160. }, [
  42161. vue.createElementVNode("view", { class: "item-left" }, [
  42162. vue.createElementVNode("view", { class: "type-wrap" }, [
  42163. vue.createVNode(_component_u_tag, {
  42164. text: $setup.getTypeText(item.type),
  42165. type: item.type === 1 ? "success" : "error",
  42166. size: "mini",
  42167. mode: "light"
  42168. }, null, 8, ["text", "type"])
  42169. ]),
  42170. vue.createElementVNode(
  42171. "text",
  42172. { class: "item-time" },
  42173. vue.toDisplayString(item.create_time),
  42174. 1
  42175. /* TEXT */
  42176. ),
  42177. item.hold_hours !== void 0 && item.hold_hours !== null ? (vue.openBlock(), vue.createElementBlock(
  42178. "text",
  42179. {
  42180. key: 0,
  42181. class: "item-hold"
  42182. },
  42183. vue.toDisplayString($setup.t("持仓时间")) + ": " + vue.toDisplayString($setup.formatHoldTime(item.hold_hours)),
  42184. 1
  42185. /* TEXT */
  42186. )) : vue.createCommentVNode("v-if", true)
  42187. ]),
  42188. vue.createElementVNode("view", { class: "item-right" }, [
  42189. vue.createElementVNode(
  42190. "text",
  42191. {
  42192. class: vue.normalizeClass(["item-amount", $setup.getAmountClass(item.type)])
  42193. },
  42194. vue.toDisplayString($setup.getAmountSign(item.type)) + vue.toDisplayString($setup.formatMoney(item.amount)),
  42195. 3
  42196. /* TEXT, CLASS */
  42197. ),
  42198. Number(item.interest) > 0 ? (vue.openBlock(), vue.createElementBlock("text", {
  42199. key: 0,
  42200. class: "item-interest"
  42201. }, [
  42202. vue.createTextVNode(
  42203. vue.toDisplayString($setup.t("收益")) + ": ",
  42204. 1
  42205. /* TEXT */
  42206. ),
  42207. vue.createElementVNode(
  42208. "text",
  42209. { class: "text-gold" },
  42210. "+" + vue.toDisplayString($setup.formatMoney(item.interest)),
  42211. 1
  42212. /* TEXT */
  42213. )
  42214. ])) : vue.createCommentVNode("v-if", true)
  42215. ])
  42216. ]);
  42217. }),
  42218. 128
  42219. /* KEYED_FRAGMENT */
  42220. )),
  42221. vue.createElementVNode("view", { class: "loading-more" }, [
  42222. $setup.loadStatus === "loading" ? (vue.openBlock(), vue.createBlock(_component_u_loading, {
  42223. key: 0,
  42224. color: "#f8b932",
  42225. size: "16"
  42226. })) : vue.createCommentVNode("v-if", true),
  42227. vue.createElementVNode(
  42228. "text",
  42229. { class: "tip-text" },
  42230. vue.toDisplayString($setup.loadStatusText),
  42231. 1
  42232. /* TEXT */
  42233. )
  42234. ])
  42235. ])) : !$setup.isRefreshing && $setup.loadStatus !== "loading" ? (vue.openBlock(), vue.createElementBlock("view", {
  42236. key: 1,
  42237. class: "empty-box"
  42238. }, [
  42239. vue.createVNode(_component_u_empty, {
  42240. text: $setup.t("暂无明细记录"),
  42241. mode: "list"
  42242. }, null, 8, ["text"])
  42243. ])) : vue.createCommentVNode("v-if", true)
  42244. ], 40, ["refresher-triggered"])
  42245. ])
  42246. ]),
  42247. _: 1
  42248. /* STABLE */
  42249. }, 8, ["nav-title"])
  42250. ]),
  42251. _: 1
  42252. /* STABLE */
  42253. });
  42254. }
  42255. const PagesWorkModuleMyYuebaoItemList = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$o], ["__scopeId", "data-v-f2d05e0d"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/Yuebao/itemList.vue"]]);
  42256. const _sfc_main$o = {
  42257. __name: "index",
  42258. setup(__props, { expose: __expose }) {
  42259. __expose();
  42260. const { t: t2, locale } = useI18n();
  42261. const loading = vue.ref(true);
  42262. const submitLoading = vue.ref(false);
  42263. const channelList = vue.ref([]);
  42264. const activeChannel = vue.ref("");
  42265. const bankList = vue.ref([]);
  42266. const addressList = vue.ref([]);
  42267. const showModal2 = vue.ref(false);
  42268. const form = vue.reactive({
  42269. id: "",
  42270. address: "",
  42271. bank_name: "",
  42272. card_no: "",
  42273. account: "",
  42274. alias: ""
  42275. });
  42276. const isUSDT = vue.computed(() => activeChannel.value === "USDT");
  42277. const currentAccountList = vue.computed(() => {
  42278. if (isUSDT.value) {
  42279. return addressList.value;
  42280. }
  42281. return bankList.value.filter((item) => item.channel === activeChannel.value);
  42282. });
  42283. vue.onMounted(() => {
  42284. initData();
  42285. });
  42286. const customRequest = (path, method2 = "GET", data = {}) => {
  42287. return new Promise((resolve2, reject) => {
  42288. uni.request({
  42289. url: apiUrl + path,
  42290. method: method2,
  42291. data,
  42292. header: {
  42293. "Authorization": uni.getStorageSync("token") || "",
  42294. "lang": locale.value
  42295. },
  42296. success: (res) => resolve2(res.data),
  42297. fail: (err) => reject(err)
  42298. });
  42299. });
  42300. };
  42301. const initData = async () => {
  42302. loading.value = true;
  42303. try {
  42304. const channelRes = await customRequest("wallet/withdrawChannel", "GET");
  42305. if (channelRes.code === 0 || channelRes.code === 1) {
  42306. channelList.value = channelRes.data || [];
  42307. if (channelList.value.length > 0) {
  42308. activeChannel.value = channelList.value[0].value;
  42309. }
  42310. }
  42311. await fetchAllAccounts();
  42312. } catch (error) {
  42313. formatAppLog("error", "at pages/WorkModule/my/WalletManagement/index.vue:215", "初始化失败", error);
  42314. } finally {
  42315. loading.value = false;
  42316. }
  42317. };
  42318. const fetchAllAccounts = async () => {
  42319. var _a2, _b2;
  42320. try {
  42321. const [bankRes, addressRes] = await Promise.all([
  42322. customRequest("wallet/bankList", "GET"),
  42323. customRequest("wallet/address", "GET")
  42324. ]);
  42325. if (bankRes.code === 0 || bankRes.code === 1) {
  42326. bankList.value = ((_a2 = bankRes.data) == null ? void 0 : _a2.list) || [];
  42327. }
  42328. if (addressRes.code === 0 || addressRes.code === 1) {
  42329. addressList.value = ((_b2 = addressRes.data) == null ? void 0 : _b2.list) || [];
  42330. }
  42331. } catch (error) {
  42332. formatAppLog("error", "at pages/WorkModule/my/WalletManagement/index.vue:234", "获取账户失败", error);
  42333. }
  42334. };
  42335. const switchChannel = (val) => {
  42336. if (activeChannel.value === val)
  42337. return;
  42338. activeChannel.value = val;
  42339. };
  42340. const getChannelLabel = (value) => {
  42341. const target = channelList.value.find((item) => item.value === value);
  42342. return target ? target.label : value;
  42343. };
  42344. const getBankNamePlaceholder = () => {
  42345. const current = channelList.value.find((c2) => c2.value === activeChannel.value);
  42346. if (current && current.label === "支付宝")
  42347. return t2("例如:支付宝");
  42348. return t2("请输入银行名称或平台名");
  42349. };
  42350. const openModal = (item = null) => {
  42351. if (item) {
  42352. form.id = item.id;
  42353. form.address = item.address || "";
  42354. form.bank_name = item.bank_name || "";
  42355. form.card_no = item.card_no || "";
  42356. form.account = item.account || "";
  42357. form.alias = item.alias || "";
  42358. } else {
  42359. form.id = "";
  42360. form.address = "";
  42361. form.bank_name = "";
  42362. form.card_no = "";
  42363. form.account = "";
  42364. form.alias = "";
  42365. }
  42366. showModal2.value = true;
  42367. };
  42368. const submitForm = async () => {
  42369. if (isUSDT.value) {
  42370. if (!form.address)
  42371. return uni.showToast({ title: t2("请输入提现地址"), icon: "none" });
  42372. } else {
  42373. if (!form.bank_name || !form.card_no || !form.account) {
  42374. return uni.showToast({ title: t2("请填写所有带 * 的必填项"), icon: "none" });
  42375. }
  42376. }
  42377. submitLoading.value = true;
  42378. try {
  42379. let res;
  42380. if (isUSDT.value) {
  42381. const payload = { address: form.address, alias: form.alias };
  42382. if (form.id)
  42383. payload.id = form.id;
  42384. res = await customRequest("wallet/addAddress", "POST", payload);
  42385. } else {
  42386. const payload = {
  42387. channel: activeChannel.value,
  42388. bank_name: form.bank_name,
  42389. card_no: form.card_no,
  42390. account: form.account,
  42391. alias: form.alias
  42392. };
  42393. if (form.id)
  42394. payload.id = form.id;
  42395. res = await customRequest("wallet/addBank", "POST", payload);
  42396. }
  42397. if (res.code === 0 || res.code === 1) {
  42398. uni.showToast({ title: res.msg || t2("保存成功"), icon: "success" });
  42399. showModal2.value = false;
  42400. uni.showLoading({ title: t2("刷新中..."), mask: true });
  42401. await fetchAllAccounts();
  42402. uni.hideLoading();
  42403. } else {
  42404. uni.showToast({ title: res.msg || t2("保存失败"), icon: "none" });
  42405. }
  42406. } catch (error) {
  42407. formatAppLog("error", "at pages/WorkModule/my/WalletManagement/index.vue:318", error);
  42408. uni.showToast({ title: t2("网络异常,请稍后再试"), icon: "none" });
  42409. } finally {
  42410. submitLoading.value = false;
  42411. }
  42412. };
  42413. const handleDelete = (id) => {
  42414. uni.showModal({
  42415. title: t2("提示"),
  42416. content: t2("确认要删除这条账户记录吗?"),
  42417. confirmText: t2("确定"),
  42418. cancelText: t2("取消"),
  42419. success: async (result) => {
  42420. if (result.confirm) {
  42421. uni.showLoading({ title: t2("删除中..."), mask: true });
  42422. try {
  42423. let res;
  42424. if (isUSDT.value) {
  42425. res = await customRequest("wallet/delAddress", "GET", { id });
  42426. } else {
  42427. res = await customRequest("wallet/delBank", "GET", { id });
  42428. }
  42429. if (res.code === 0 || res.code === 1) {
  42430. uni.showToast({ title: res.msg || t2("删除成功"), icon: "success" });
  42431. await fetchAllAccounts();
  42432. } else {
  42433. uni.showToast({ title: res.msg || t2("删除失败"), icon: "none" });
  42434. }
  42435. } catch (error) {
  42436. formatAppLog("error", "at pages/WorkModule/my/WalletManagement/index.vue:349", error);
  42437. } finally {
  42438. uni.hideLoading();
  42439. }
  42440. }
  42441. }
  42442. });
  42443. };
  42444. const formatCardNo = (no) => {
  42445. if (!no)
  42446. return "";
  42447. if (no.length > 8) {
  42448. return no.substring(0, 4) + " **** **** " + no.substring(no.length - 4);
  42449. }
  42450. return no;
  42451. };
  42452. const getCardSkin = (channelVal) => {
  42453. if (channelVal === "USDT")
  42454. return "usdt-card";
  42455. if (channelVal === "DF002")
  42456. return "bank-card-alipay";
  42457. if (channelVal === "DF005")
  42458. return "bank-card-rmb";
  42459. return "bank-card-default";
  42460. };
  42461. const __returned__ = { t: t2, locale, loading, submitLoading, channelList, activeChannel, bankList, addressList, showModal: showModal2, form, isUSDT, currentAccountList, customRequest, initData, fetchAllAccounts, switchChannel, getChannelLabel, getBankNamePlaceholder, openModal, submitForm, handleDelete, formatCardNo, getCardSkin, ref: vue.ref, reactive: vue.reactive, computed: vue.computed, onMounted: vue.onMounted, get useI18n() {
  42462. return useI18n;
  42463. }, get apiUrl() {
  42464. return apiUrl;
  42465. } };
  42466. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  42467. return __returned__;
  42468. }
  42469. };
  42470. function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) {
  42471. const _component_u_icon = __unplugin_components_0$5;
  42472. const _component_u_loading = __unplugin_components_3$3;
  42473. const _component_u_empty = __unplugin_components_4$2;
  42474. const _component_u_button = __unplugin_components_2$1;
  42475. const _component_u_popup = __unplugin_components_2$3;
  42476. const _component_PageContainer = PageContainer;
  42477. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  42478. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  42479. default: vue.withCtx(() => [
  42480. vue.createVNode(_component_PageContainer, {
  42481. "nav-title": $setup.t("钱包管理")
  42482. }, {
  42483. default: vue.withCtx(() => [
  42484. vue.createElementVNode("view", { class: "wallet-manage-page" }, [
  42485. vue.createElementVNode("view", { class: "section-title" }, [
  42486. vue.createElementVNode("view", { class: "stick" }),
  42487. vue.createElementVNode(
  42488. "text",
  42489. null,
  42490. vue.toDisplayString($setup.t("选择提现方式")),
  42491. 1
  42492. /* TEXT */
  42493. )
  42494. ]),
  42495. vue.createElementVNode("view", { class: "channel-list-container" }, [
  42496. $setup.channelList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  42497. key: 0,
  42498. class: "channel-list"
  42499. }, [
  42500. (vue.openBlock(true), vue.createElementBlock(
  42501. vue.Fragment,
  42502. null,
  42503. vue.renderList($setup.channelList, (ch) => {
  42504. return vue.openBlock(), vue.createElementBlock("view", {
  42505. class: vue.normalizeClass(["channel-item", { "is-active": $setup.activeChannel === ch.value }]),
  42506. key: ch.value,
  42507. onClick: ($event) => $setup.switchChannel(ch.value)
  42508. }, [
  42509. vue.createElementVNode(
  42510. "text",
  42511. { class: "channel-name" },
  42512. vue.toDisplayString(ch.label),
  42513. 1
  42514. /* TEXT */
  42515. ),
  42516. $setup.activeChannel === ch.value ? (vue.openBlock(), vue.createElementBlock("view", {
  42517. key: 0,
  42518. class: "check-ribbon"
  42519. }, [
  42520. vue.createVNode(_component_u_icon, {
  42521. name: "checkbox-mark",
  42522. color: "#fff",
  42523. size: "18",
  42524. class: "check-icon"
  42525. })
  42526. ])) : vue.createCommentVNode("v-if", true)
  42527. ], 10, ["onClick"]);
  42528. }),
  42529. 128
  42530. /* KEYED_FRAGMENT */
  42531. ))
  42532. ])) : vue.createCommentVNode("v-if", true)
  42533. ]),
  42534. vue.createElementVNode("view", { class: "list-content" }, [
  42535. $setup.loading ? (vue.openBlock(), vue.createElementBlock("view", {
  42536. key: 0,
  42537. class: "loading-wrap"
  42538. }, [
  42539. vue.createVNode(_component_u_loading, {
  42540. color: "#f8b932",
  42541. size: "24"
  42542. }),
  42543. vue.createElementVNode(
  42544. "text",
  42545. { class: "loading-text" },
  42546. vue.toDisplayString($setup.t("加载中...")),
  42547. 1
  42548. /* TEXT */
  42549. )
  42550. ])) : (vue.openBlock(), vue.createElementBlock(
  42551. vue.Fragment,
  42552. { key: 1 },
  42553. [
  42554. vue.createElementVNode("view", {
  42555. class: "add-btn-card",
  42556. onClick: _cache[0] || (_cache[0] = ($event) => $setup.openModal(null))
  42557. }, [
  42558. vue.createVNode(_component_u_icon, {
  42559. name: "plus",
  42560. size: "28",
  42561. color: "#666"
  42562. }),
  42563. vue.createElementVNode(
  42564. "text",
  42565. { class: "add-text" },
  42566. vue.toDisplayString($setup.t("添加账户")),
  42567. 1
  42568. /* TEXT */
  42569. )
  42570. ]),
  42571. $setup.currentAccountList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  42572. key: 0,
  42573. class: "cards-grid"
  42574. }, [
  42575. (vue.openBlock(true), vue.createElementBlock(
  42576. vue.Fragment,
  42577. null,
  42578. vue.renderList($setup.currentAccountList, (item) => {
  42579. return vue.openBlock(), vue.createElementBlock(
  42580. "view",
  42581. {
  42582. class: vue.normalizeClass(["wallet-card", $setup.getCardSkin($setup.activeChannel)]),
  42583. key: item.id
  42584. },
  42585. [
  42586. vue.createElementVNode("view", { class: "card-header" }, [
  42587. vue.createElementVNode(
  42588. "text",
  42589. { class: "bank-name" },
  42590. vue.toDisplayString($setup.isUSDT ? "USDT" : item.bank_name),
  42591. 1
  42592. /* TEXT */
  42593. ),
  42594. ($setup.isUSDT ? item.alias : item.channel) ? (vue.openBlock(), vue.createElementBlock(
  42595. "view",
  42596. {
  42597. key: 0,
  42598. class: "channel-tag"
  42599. },
  42600. vue.toDisplayString($setup.isUSDT ? item.alias : $setup.getChannelLabel(item.channel)),
  42601. 1
  42602. /* TEXT */
  42603. )) : vue.createCommentVNode("v-if", true)
  42604. ]),
  42605. vue.createElementVNode("view", { class: "card-body" }, [
  42606. $setup.isUSDT ? (vue.openBlock(), vue.createElementBlock(
  42607. "text",
  42608. {
  42609. key: 0,
  42610. class: "address-text"
  42611. },
  42612. vue.toDisplayString(item.address),
  42613. 1
  42614. /* TEXT */
  42615. )) : (vue.openBlock(), vue.createElementBlock(
  42616. "text",
  42617. {
  42618. key: 1,
  42619. class: "card-no"
  42620. },
  42621. vue.toDisplayString($setup.formatCardNo(item.card_no)),
  42622. 1
  42623. /* TEXT */
  42624. ))
  42625. ]),
  42626. vue.createElementVNode("view", { class: "card-footer" }, [
  42627. vue.createElementVNode(
  42628. "text",
  42629. { class: "account-name" },
  42630. vue.toDisplayString($setup.isUSDT ? "" : item.account),
  42631. 1
  42632. /* TEXT */
  42633. ),
  42634. vue.createElementVNode("view", { class: "actions" }, [
  42635. vue.createElementVNode("view", {
  42636. class: "action-icon",
  42637. onClick: ($event) => $setup.openModal(item)
  42638. }, [
  42639. vue.createVNode(_component_u_icon, {
  42640. name: "edit-pen",
  42641. size: "20",
  42642. color: "rgba(255,255,255,0.8)"
  42643. })
  42644. ], 8, ["onClick"]),
  42645. vue.createElementVNode("view", {
  42646. class: "action-icon",
  42647. onClick: ($event) => $setup.handleDelete(item.id)
  42648. }, [
  42649. vue.createVNode(_component_u_icon, {
  42650. name: "trash",
  42651. size: "20",
  42652. color: "rgba(255,255,255,0.8)"
  42653. })
  42654. ], 8, ["onClick"])
  42655. ])
  42656. ])
  42657. ],
  42658. 2
  42659. /* CLASS */
  42660. );
  42661. }),
  42662. 128
  42663. /* KEYED_FRAGMENT */
  42664. ))
  42665. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  42666. key: 1,
  42667. class: "empty-box"
  42668. }, [
  42669. vue.createVNode(_component_u_empty, {
  42670. text: $setup.t("暂无账户记录"),
  42671. mode: "list"
  42672. }, null, 8, ["text"])
  42673. ]))
  42674. ],
  42675. 64
  42676. /* STABLE_FRAGMENT */
  42677. ))
  42678. ]),
  42679. vue.createVNode(_component_u_popup, {
  42680. modelValue: $setup.showModal,
  42681. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.showModal = $event),
  42682. mode: "bottom",
  42683. round: "16",
  42684. onClose: _cache[8] || (_cache[8] = ($event) => $setup.showModal = false),
  42685. closeable: true
  42686. }, {
  42687. default: vue.withCtx(() => [
  42688. vue.createElementVNode("view", { class: "modal-container" }, [
  42689. vue.createElementVNode(
  42690. "view",
  42691. { class: "modal-title" },
  42692. vue.toDisplayString($setup.form.id ? $setup.t("编辑账户") : $setup.t("添加账户")),
  42693. 1
  42694. /* TEXT */
  42695. ),
  42696. vue.createElementVNode("view", { class: "form-body" }, [
  42697. $setup.isUSDT ? (vue.openBlock(), vue.createElementBlock(
  42698. vue.Fragment,
  42699. { key: 0 },
  42700. [
  42701. vue.createElementVNode("view", { class: "form-item" }, [
  42702. vue.createElementVNode("text", { class: "label" }, [
  42703. vue.createTextVNode(
  42704. vue.toDisplayString($setup.t("USDT 提现地址")) + " ",
  42705. 1
  42706. /* TEXT */
  42707. ),
  42708. vue.createElementVNode("text", { class: "req" }, "*")
  42709. ]),
  42710. vue.withDirectives(vue.createElementVNode("input", {
  42711. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.address = $event),
  42712. class: "app-input",
  42713. placeholder: $setup.t("请输入准确的 USDT 地址")
  42714. }, null, 8, ["placeholder"]), [
  42715. [vue.vModelText, $setup.form.address]
  42716. ])
  42717. ]),
  42718. vue.createElementVNode("view", { class: "form-item" }, [
  42719. vue.createElementVNode(
  42720. "text",
  42721. { class: "label" },
  42722. vue.toDisplayString($setup.t("地址别名 (可选)")),
  42723. 1
  42724. /* TEXT */
  42725. ),
  42726. vue.withDirectives(vue.createElementVNode("input", {
  42727. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.form.alias = $event),
  42728. class: "app-input",
  42729. placeholder: $setup.t("如:波场TRC20钱包")
  42730. }, null, 8, ["placeholder"]), [
  42731. [vue.vModelText, $setup.form.alias]
  42732. ])
  42733. ])
  42734. ],
  42735. 64
  42736. /* STABLE_FRAGMENT */
  42737. )) : (vue.openBlock(), vue.createElementBlock(
  42738. vue.Fragment,
  42739. { key: 1 },
  42740. [
  42741. vue.createElementVNode("view", { class: "form-item" }, [
  42742. vue.createElementVNode("text", { class: "label" }, [
  42743. vue.createTextVNode(
  42744. vue.toDisplayString($setup.t("银行名称/平台")) + " ",
  42745. 1
  42746. /* TEXT */
  42747. ),
  42748. vue.createElementVNode("text", { class: "req" }, "*")
  42749. ]),
  42750. vue.withDirectives(vue.createElementVNode("input", {
  42751. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.form.bank_name = $event),
  42752. class: "app-input",
  42753. placeholder: $setup.getBankNamePlaceholder()
  42754. }, null, 8, ["placeholder"]), [
  42755. [vue.vModelText, $setup.form.bank_name]
  42756. ])
  42757. ]),
  42758. vue.createElementVNode("view", { class: "form-item" }, [
  42759. vue.createElementVNode("text", { class: "label" }, [
  42760. vue.createTextVNode(
  42761. vue.toDisplayString($setup.t("收款账号(卡号)")) + " ",
  42762. 1
  42763. /* TEXT */
  42764. ),
  42765. vue.createElementVNode("text", { class: "req" }, "*")
  42766. ]),
  42767. vue.withDirectives(vue.createElementVNode("input", {
  42768. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.form.card_no = $event),
  42769. class: "app-input",
  42770. placeholder: $setup.t("请输入收款账号或银行卡号")
  42771. }, null, 8, ["placeholder"]), [
  42772. [vue.vModelText, $setup.form.card_no]
  42773. ])
  42774. ]),
  42775. vue.createElementVNode("view", { class: "form-item" }, [
  42776. vue.createElementVNode("text", { class: "label" }, [
  42777. vue.createTextVNode(
  42778. vue.toDisplayString($setup.t("真实姓名")) + " ",
  42779. 1
  42780. /* TEXT */
  42781. ),
  42782. vue.createElementVNode("text", { class: "req" }, "*")
  42783. ]),
  42784. vue.withDirectives(vue.createElementVNode("input", {
  42785. "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $setup.form.account = $event),
  42786. class: "app-input",
  42787. placeholder: $setup.t("请输入收款人真实姓名")
  42788. }, null, 8, ["placeholder"]), [
  42789. [vue.vModelText, $setup.form.account]
  42790. ])
  42791. ]),
  42792. vue.createElementVNode("view", { class: "form-item" }, [
  42793. vue.createElementVNode(
  42794. "text",
  42795. { class: "label" },
  42796. vue.toDisplayString($setup.t("别名 (可选)")),
  42797. 1
  42798. /* TEXT */
  42799. ),
  42800. vue.withDirectives(vue.createElementVNode("input", {
  42801. "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.form.alias = $event),
  42802. class: "app-input",
  42803. placeholder: $setup.t("如:我的建行卡")
  42804. }, null, 8, ["placeholder"]), [
  42805. [vue.vModelText, $setup.form.alias]
  42806. ])
  42807. ])
  42808. ],
  42809. 64
  42810. /* STABLE_FRAGMENT */
  42811. ))
  42812. ]),
  42813. vue.createElementVNode("view", { class: "modal-footer" }, [
  42814. vue.createVNode(_component_u_button, {
  42815. type: "primary",
  42816. shape: "circle",
  42817. loading: $setup.submitLoading,
  42818. onClick: $setup.submitForm,
  42819. "custom-style": { height: "48px", fontSize: "16px", fontWeight: "bold" }
  42820. }, {
  42821. default: vue.withCtx(() => [
  42822. vue.createTextVNode(
  42823. vue.toDisplayString($setup.t("保存")),
  42824. 1
  42825. /* TEXT */
  42826. )
  42827. ]),
  42828. _: 1
  42829. /* STABLE */
  42830. }, 8, ["loading"])
  42831. ])
  42832. ])
  42833. ]),
  42834. _: 1
  42835. /* STABLE */
  42836. }, 8, ["modelValue"])
  42837. ])
  42838. ]),
  42839. _: 1
  42840. /* STABLE */
  42841. }, 8, ["nav-title"])
  42842. ]),
  42843. _: 1
  42844. /* STABLE */
  42845. });
  42846. }
  42847. const PagesWorkModuleMyWalletManagementIndex = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$n], ["__scopeId", "data-v-098681d1"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/WalletManagement/index.vue"]]);
  42848. const ToastProps = {
  42849. ...baseProps,
  42850. /** 层级 z-index */
  42851. zIndex: { type: [Number, String], default: zIndex.toast },
  42852. /** 提示类型,success/warning/error/loading 等 */
  42853. type: { type: String, default: "" },
  42854. /** 显示时长,单位ms。设为 0 表示不自动关闭,需手动调用 hide/close 方法 */
  42855. duration: { type: Number, default: 2e3 },
  42856. /** 是否显示图标 */
  42857. icon: { type: Boolean, default: true },
  42858. /** 显示位置,center/top/bottom */
  42859. position: { type: String, default: "center" },
  42860. /** 关闭时的回调函数 */
  42861. callback: { type: Function, default: null },
  42862. /** 是否返回上一页 */
  42863. back: { type: Boolean, default: false },
  42864. /** 是否为tab页面跳转 */
  42865. isTab: { type: Boolean, default: false },
  42866. /** 跳转的url */
  42867. url: { type: String, default: "" },
  42868. /** 跳转参数对象 */
  42869. params: { type: Object, default: () => ({}) },
  42870. /** 是否作为全局根部 toast(通常放在 App.vue 中,给 useToast() 使用) */
  42871. global: { type: Boolean, default: false },
  42872. /** 是否作为页面级 toast(通常放在页面中,给 useToast({ page: true }) 使用) */
  42873. page: { type: Boolean, default: false },
  42874. /** 是否为loading “常驻” */
  42875. loading: { type: Boolean, default: false }
  42876. };
  42877. const __default__$3 = {
  42878. name: "u-toast",
  42879. options: {
  42880. addGlobalClass: true,
  42881. virtualHost: true,
  42882. styleIsolation: "shared"
  42883. }
  42884. };
  42885. const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
  42886. ...__default__$3,
  42887. props: ToastProps,
  42888. setup(__props, { expose: __expose }) {
  42889. const props = __props;
  42890. const isShow = vue.ref(false);
  42891. let timer = null;
  42892. const config2 = vue.computed(() => {
  42893. return {
  42894. zIndex: props.zIndex,
  42895. // z-index值
  42896. type: props.type,
  42897. // 主题类型,primary,success,error,warning,black
  42898. duration: props.duration,
  42899. // 显示的时间,毫秒
  42900. icon: props.icon,
  42901. // 显示的图标
  42902. position: props.position,
  42903. // toast出现的位置
  42904. callback: props.callback,
  42905. // 执行完后的回调函数
  42906. back: props.back,
  42907. // 结束toast是否自动返回上一页
  42908. isTab: props.isTab,
  42909. // 是否跳转tab页面
  42910. url: props.url,
  42911. // toast消失后是否跳转页面,有则跳转,优先级高于back参数
  42912. params: props.params,
  42913. // URL跳转的参数,对象
  42914. loading: props.loading,
  42915. title: ""
  42916. // 显示文本
  42917. };
  42918. });
  42919. const tmpConfig = vue.ref({ ...config2.value });
  42920. const iconName = vue.computed(() => {
  42921. if (["error", "warning", "success", "info"].indexOf(tmpConfig.value.type) >= 0 && tmpConfig.value.icon) {
  42922. let icon = $u.type2icon(tmpConfig.value.type);
  42923. return icon;
  42924. }
  42925. return "";
  42926. });
  42927. const uZIndex = vue.computed(() => {
  42928. return isShow.value ? props.zIndex ? props.zIndex : $u.zIndex.toast : "999999";
  42929. });
  42930. function show(options) {
  42931. tmpConfig.value = $u.deepMerge(config2.value, options);
  42932. if (timer) {
  42933. clearTimeout(timer);
  42934. timer = null;
  42935. }
  42936. isShow.value = true;
  42937. if (tmpConfig.value.duration > 0) {
  42938. timer = setTimeout(() => {
  42939. isShow.value = false;
  42940. clearTimeout(timer);
  42941. timer = null;
  42942. typeof tmpConfig.value.callback === "function" && tmpConfig.value.callback();
  42943. timeEnd();
  42944. }, tmpConfig.value.duration);
  42945. }
  42946. }
  42947. function hide() {
  42948. isShow.value = false;
  42949. if (timer) {
  42950. clearTimeout(timer);
  42951. timer = null;
  42952. }
  42953. }
  42954. function timeEnd() {
  42955. if (tmpConfig.value.url) {
  42956. if (tmpConfig.value.url[0] != "/")
  42957. tmpConfig.value.url = "/" + tmpConfig.value.url;
  42958. if (Object.keys(tmpConfig.value.params).length) {
  42959. let query = "";
  42960. if (/.*\/.*\?.*=.*/.test(tmpConfig.value.url)) {
  42961. query = $u.queryParams(tmpConfig.value.params, false);
  42962. tmpConfig.value.url = tmpConfig.value.url + "&" + query;
  42963. } else {
  42964. query = $u.queryParams(tmpConfig.value.params);
  42965. tmpConfig.value.url += query;
  42966. }
  42967. }
  42968. if (tmpConfig.value.isTab) {
  42969. uni.switchTab({ url: tmpConfig.value.url });
  42970. } else {
  42971. uni.navigateTo({ url: tmpConfig.value.url });
  42972. }
  42973. } else if (tmpConfig.value.back) {
  42974. $u.route({ type: "back" });
  42975. }
  42976. }
  42977. function onServiceShow(payload) {
  42978. show(payload || {});
  42979. }
  42980. function onServiceHide() {
  42981. hide();
  42982. }
  42983. const isGlobal = vue.computed(() => props.global);
  42984. const isPage = vue.computed(() => props.page);
  42985. const showEvent = vue.computed(() => isGlobal.value ? U_TOAST_GLOBAL_EVENT_SHOW : isPage.value ? U_TOAST_EVENT_SHOW : "");
  42986. const hideEvent = vue.computed(() => isGlobal.value ? U_TOAST_GLOBAL_EVENT_HIDE : isPage.value ? U_TOAST_EVENT_HIDE : "");
  42987. vue.onMounted(() => {
  42988. if (showEvent.value) {
  42989. (uni == null ? void 0 : uni.$on) && uni.$on(showEvent.value, onServiceShow);
  42990. }
  42991. if (hideEvent.value) {
  42992. (uni == null ? void 0 : uni.$on) && uni.$on(hideEvent.value, onServiceHide);
  42993. }
  42994. });
  42995. vue.onBeforeUnmount(() => {
  42996. if (showEvent.value) {
  42997. (uni == null ? void 0 : uni.$off) && uni.$off(showEvent.value, onServiceShow);
  42998. }
  42999. if (hideEvent.value) {
  43000. (uni == null ? void 0 : uni.$off) && uni.$off(hideEvent.value, onServiceHide);
  43001. }
  43002. });
  43003. __expose({
  43004. show,
  43005. hide,
  43006. close: hide
  43007. });
  43008. const __returned__ = { props, isShow, get timer() {
  43009. return timer;
  43010. }, set timer(v) {
  43011. timer = v;
  43012. }, config: config2, tmpConfig, iconName, uZIndex, show, hide, timeEnd, onServiceShow, onServiceHide, isGlobal, isPage, showEvent, hideEvent, get $u() {
  43013. return $u;
  43014. } };
  43015. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  43016. return __returned__;
  43017. }
  43018. });
  43019. function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) {
  43020. const _component_u_loading = __unplugin_components_3$3;
  43021. const _component_u_icon = __unplugin_components_0$5;
  43022. const _component_u_mask = __unplugin_components_2$4;
  43023. return vue.openBlock(), vue.createBlock(_component_u_mask, {
  43024. "z-index": $setup.uZIndex,
  43025. show: $setup.isShow,
  43026. "custom-style": "background-color:transparent;"
  43027. }, {
  43028. default: vue.withCtx(() => [
  43029. vue.createElementVNode(
  43030. "view",
  43031. {
  43032. class: vue.normalizeClass(["u-toast", [
  43033. $setup.isShow ? "u-show" : "",
  43034. "u-type-" + $setup.tmpConfig.type,
  43035. "u-position-" + $setup.tmpConfig.position,
  43036. _ctx.customClass
  43037. ]]),
  43038. style: vue.normalizeStyle($setup.$u.toStyle({ zIndex: $setup.uZIndex }, _ctx.customStyle))
  43039. },
  43040. [
  43041. vue.createElementVNode("view", { class: "u-icon-wrap" }, [
  43042. vue.createCommentVNode(" loading 类型走独立的加载动画组件 "),
  43043. $setup.tmpConfig.loading ? (vue.openBlock(), vue.createBlock(_component_u_loading, {
  43044. key: 0,
  43045. mode: "circle",
  43046. "custom-style": "margin-right: 16rpx;",
  43047. color: $setup.$u.color[$setup.tmpConfig.type]
  43048. }, null, 8, ["color"])) : $setup.tmpConfig.icon && $setup.iconName ? (vue.openBlock(), vue.createElementBlock(
  43049. vue.Fragment,
  43050. { key: 1 },
  43051. [
  43052. vue.createCommentVNode(" 其它类型仍然使用图标 "),
  43053. vue.createVNode(_component_u_icon, {
  43054. "custom-class": "u-toast_icon",
  43055. "custom-style": "margin-right: 10rpx;",
  43056. name: $setup.iconName,
  43057. size: 40,
  43058. color: $setup.tmpConfig.type
  43059. }, null, 8, ["name", "color"])
  43060. ],
  43061. 2112
  43062. /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
  43063. )) : vue.createCommentVNode("v-if", true)
  43064. ]),
  43065. vue.createElementVNode(
  43066. "text",
  43067. { class: "u-text" },
  43068. vue.toDisplayString($setup.tmpConfig.title),
  43069. 1
  43070. /* TEXT */
  43071. )
  43072. ],
  43073. 6
  43074. /* CLASS, STYLE */
  43075. )
  43076. ]),
  43077. _: 1
  43078. /* STABLE */
  43079. }, 8, ["z-index", "show"]);
  43080. }
  43081. const __unplugin_components_4 = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render$m], ["__scopeId", "data-v-b09e1691"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-toast/u-toast.vue"]]);
  43082. const FormProps = {
  43083. ...baseProps,
  43084. /** 当前form的需要验证字段的集合 */
  43085. model: { type: Object, default: () => ({}) },
  43086. /** 表单验证规则 */
  43087. rules: { type: Object, default: () => ({}) },
  43088. /** 有错误时的提示方式,message-提示信息,border-如果input设置了边框,变成呈红色,border-bottom-下边框呈现红色,none-无提示 */
  43089. errorType: { type: Array, default: () => ["message", "toast"] },
  43090. /** 是否显示表单域的下划线边框 */
  43091. borderBottom: { type: Boolean, default: true },
  43092. /** label的位置,left-左边,top-上边 */
  43093. labelPosition: { type: String, default: "left" },
  43094. /** label的宽度,单位rpx */
  43095. labelWidth: { type: [String, Number], default: 90 },
  43096. /** label字体的对齐方式 */
  43097. labelAlign: { type: String, default: "left" },
  43098. /** label的样式,对象形式 */
  43099. labelStyle: { type: Object, default: () => ({}) }
  43100. };
  43101. const __default__$2 = {
  43102. name: "u-form",
  43103. options: {
  43104. addGlobalClass: true,
  43105. virtualHost: true,
  43106. styleIsolation: "shared"
  43107. }
  43108. };
  43109. const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
  43110. ...__default__$2,
  43111. props: FormProps,
  43112. setup(__props, { expose: __expose }) {
  43113. const props = __props;
  43114. useParent("u-form");
  43115. const fields = vue.ref([]);
  43116. const rules2 = vue.ref(props.rules);
  43117. function setRules(newRules) {
  43118. rules2.value = newRules;
  43119. }
  43120. function resetFields() {
  43121. fields.value.forEach((field) => {
  43122. field.resetField && field.resetField();
  43123. });
  43124. }
  43125. function validate(callback) {
  43126. return new Promise((resolve2) => {
  43127. let valid = true;
  43128. let count = 0;
  43129. let errorArr = [];
  43130. if (fields.value.length === 0) {
  43131. resolve2(true);
  43132. if (typeof callback === "function")
  43133. callback(true, []);
  43134. return;
  43135. }
  43136. fields.value.forEach((field) => {
  43137. field.validation && field.validation("", (error) => {
  43138. if (error) {
  43139. valid = false;
  43140. errorArr.push({ prop: field.prop, message: error });
  43141. }
  43142. if (++count === fields.value.length) {
  43143. resolve2(valid);
  43144. if (props.errorType.indexOf("none") === -1 && props.errorType.indexOf("toast") >= 0 && errorArr.length > 0) {
  43145. errorArr[0].message && $u.toast(errorArr[0].message);
  43146. }
  43147. if (typeof callback === "function")
  43148. callback(valid, errorArr);
  43149. }
  43150. });
  43151. });
  43152. });
  43153. }
  43154. __expose({
  43155. setRules,
  43156. resetFields,
  43157. validate,
  43158. addField(field) {
  43159. if (!fields.value.includes(field))
  43160. fields.value.push(field);
  43161. },
  43162. removeField(field) {
  43163. fields.value = fields.value.filter((f) => f.prop !== field.prop);
  43164. },
  43165. fields,
  43166. rules: rules2,
  43167. props,
  43168. model: vue.computed(() => props.model)
  43169. });
  43170. const __returned__ = { props, fields, rules: rules2, setRules, resetFields, validate, get $u() {
  43171. return $u;
  43172. } };
  43173. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  43174. return __returned__;
  43175. }
  43176. });
  43177. function _sfc_render$l(_ctx, _cache, $props, $setup, $data, $options) {
  43178. return vue.openBlock(), vue.createElementBlock(
  43179. "view",
  43180. {
  43181. class: vue.normalizeClass(["u-form", _ctx.customClass]),
  43182. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle))
  43183. },
  43184. [
  43185. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  43186. ],
  43187. 6
  43188. /* CLASS, STYLE */
  43189. );
  43190. }
  43191. const __unplugin_components_2 = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$l], ["__scopeId", "data-v-c53c6302"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-form/u-form.vue"]]);
  43192. var define_process_env_default = {};
  43193. function _extends() {
  43194. return (_extends = Object.assign || function(e) {
  43195. for (var r = 1; r < arguments.length; r++) {
  43196. var t2, n = arguments[r];
  43197. for (t2 in n)
  43198. Object.prototype.hasOwnProperty.call(n, t2) && (e[t2] = n[t2]);
  43199. }
  43200. return e;
  43201. }).apply(this, arguments);
  43202. }
  43203. var formatRegExp = /%[sdj%]/g, warning = function() {
  43204. };
  43205. function convertFieldsError(e) {
  43206. if (!e || !e.length)
  43207. return null;
  43208. var t2 = {};
  43209. return e.forEach(function(e2) {
  43210. var r = e2.field;
  43211. t2[r] = t2[r] || [], t2[r].push(e2);
  43212. }), t2;
  43213. }
  43214. function format() {
  43215. for (var e = arguments.length, r = new Array(e), t2 = 0; t2 < e; t2++)
  43216. r[t2] = arguments[t2];
  43217. var n = 1, a = r[0], i = r.length;
  43218. if ("function" == typeof a)
  43219. return a.apply(null, r.slice(1));
  43220. if ("string" != typeof a)
  43221. return a;
  43222. for (var s = String(a).replace(formatRegExp, function(e2) {
  43223. if ("%%" === e2)
  43224. return "%";
  43225. if (i <= n)
  43226. return e2;
  43227. switch (e2) {
  43228. case "%s":
  43229. return String(r[n++]);
  43230. case "%d":
  43231. return Number(r[n++]);
  43232. case "%j":
  43233. try {
  43234. return JSON.stringify(r[n++]);
  43235. } catch (e3) {
  43236. return "[Circular]";
  43237. }
  43238. break;
  43239. default:
  43240. return e2;
  43241. }
  43242. }), u2 = r[n]; n < i; u2 = r[++n])
  43243. s += " " + u2;
  43244. return s;
  43245. }
  43246. function isNativeStringType(e) {
  43247. return "string" === e || "url" === e || "hex" === e || "email" === e || "pattern" === e;
  43248. }
  43249. function isEmptyValue(e, r) {
  43250. return null == e || (!("array" !== r || !Array.isArray(e) || e.length) || !(!isNativeStringType(r) || "string" != typeof e || e));
  43251. }
  43252. function asyncParallelArray(e, r, t2) {
  43253. var n = [], a = 0, i = e.length;
  43254. function s(e2) {
  43255. n.push.apply(n, e2), ++a === i && t2(n);
  43256. }
  43257. e.forEach(function(e2) {
  43258. r(e2, s);
  43259. });
  43260. }
  43261. function asyncSerialArray(t2, n, a) {
  43262. var i = 0, s = t2.length;
  43263. !function e(r) {
  43264. r && r.length ? a(r) : (r = i, i += 1, r < s ? n(t2[r], e) : a([]));
  43265. }([]);
  43266. }
  43267. function flattenObjArr(r) {
  43268. var t2 = [];
  43269. return Object.keys(r).forEach(function(e) {
  43270. t2.push.apply(t2, r[e]);
  43271. }), t2;
  43272. }
  43273. function asyncMap(a, e, i, s) {
  43274. if (e.first) {
  43275. var r = new Promise(function(r2, t2) {
  43276. asyncSerialArray(flattenObjArr(a), i, function(e2) {
  43277. return s(e2), e2.length ? t2({ errors: e2, fields: convertFieldsError(e2) }) : r2();
  43278. });
  43279. });
  43280. return r.catch(function(e2) {
  43281. return e2;
  43282. }), r;
  43283. }
  43284. var u2 = e.firstFields || [];
  43285. true === u2 && (u2 = Object.keys(a));
  43286. var o = Object.keys(a), l = o.length, f = 0, p = [], e = new Promise(function(r2, t2) {
  43287. function n(e2) {
  43288. if (p.push.apply(p, e2), ++f === l)
  43289. return s(p), p.length ? t2({ errors: p, fields: convertFieldsError(p) }) : r2();
  43290. }
  43291. o.length || (s(p), r2()), o.forEach(function(e2) {
  43292. var r3 = a[e2];
  43293. (-1 !== u2.indexOf(e2) ? asyncSerialArray : asyncParallelArray)(r3, i, n);
  43294. });
  43295. });
  43296. return e.catch(function(e2) {
  43297. return e2;
  43298. }), e;
  43299. }
  43300. function complementError(r) {
  43301. return function(e) {
  43302. return e && e.message ? (e.field = e.field || r.fullField, e) : { message: "function" == typeof e ? e() : e, field: e.field || r.fullField };
  43303. };
  43304. }
  43305. function deepMerge(e, r) {
  43306. if (r)
  43307. for (var t2 in r) {
  43308. var n;
  43309. r.hasOwnProperty(t2) && ("object" == typeof (n = r[t2]) && "object" == typeof e[t2] ? e[t2] = _extends({}, e[t2], {}, n) : e[t2] = n);
  43310. }
  43311. return e;
  43312. }
  43313. function required(e, r, t2, n, a, i) {
  43314. !e.required || t2.hasOwnProperty(e.field) && !isEmptyValue(r, i || e.type) || n.push(format(a.messages.required, e.fullField));
  43315. }
  43316. function whitespace(e, r, t2, n, a) {
  43317. !/^\s+$/.test(r) && "" !== r || n.push(format(a.messages.whitespace, e.fullField));
  43318. }
  43319. "undefined" != typeof process && define_process_env_default && true && "undefined" != typeof window && "undefined" != typeof document && (warning = function(e, r) {
  43320. "undefined" != typeof console && console.warn && r.every(function(e2) {
  43321. return "string" == typeof e2;
  43322. }) && console.warn(e, r);
  43323. });
  43324. var pattern = { email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, url: new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", "i"), hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i }, types = { integer: function(e) {
  43325. return types.number(e) && parseInt(e, 10) === e;
  43326. }, float: function(e) {
  43327. return types.number(e) && !types.integer(e);
  43328. }, array: function(e) {
  43329. return Array.isArray(e);
  43330. }, regexp: function(e) {
  43331. if (e instanceof RegExp)
  43332. return true;
  43333. try {
  43334. return !!new RegExp(e);
  43335. } catch (e2) {
  43336. return false;
  43337. }
  43338. }, date: function(e) {
  43339. return "function" == typeof e.getTime && "function" == typeof e.getMonth && "function" == typeof e.getYear;
  43340. }, number: function(e) {
  43341. return !isNaN(e) && "number" == typeof +e;
  43342. }, object: function(e) {
  43343. return "object" == typeof e && !types.array(e);
  43344. }, method: function(e) {
  43345. return "function" == typeof e;
  43346. }, email: function(e) {
  43347. return "string" == typeof e && !!e.match(pattern.email) && e.length < 255;
  43348. }, url: function(e) {
  43349. return "string" == typeof e && !!e.match(pattern.url);
  43350. }, hex: function(e) {
  43351. return "string" == typeof e && !!e.match(pattern.hex);
  43352. } };
  43353. function type(e, r, t2, n, a) {
  43354. e.required && void 0 === r ? required(e, r, t2, n, a) : (t2 = e.type, -1 < ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"].indexOf(t2) ? types[t2](r) || n.push(format(a.messages.types[t2], e.fullField, e.type)) : t2 && typeof r !== e.type && n.push(format(a.messages.types[t2], e.fullField, e.type)));
  43355. }
  43356. function range(e, r, t2, n, a) {
  43357. var i = "number" == typeof e.len, s = "number" == typeof e.min, u2 = "number" == typeof e.max, o = r, l = null, f = "number" == typeof r, p = "string" == typeof r, d = Array.isArray(r);
  43358. if (f ? l = "number" : p ? l = "string" : d && (l = "array"), !l)
  43359. return false;
  43360. d && (o = r.length), p && (o = r.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, "_").length), i ? o !== e.len && n.push(format(a.messages[l].len, e.fullField, e.len)) : s && !u2 && o < e.min ? n.push(format(a.messages[l].min, e.fullField, e.min)) : u2 && !s && o > e.max ? n.push(format(a.messages[l].max, e.fullField, e.max)) : s && u2 && (o < e.min || o > e.max) && n.push(format(a.messages[l].range, e.fullField, e.min, e.max));
  43361. }
  43362. var ENUM = "enum";
  43363. function enumerable(e, r, t2, n, a) {
  43364. e[ENUM] = Array.isArray(e[ENUM]) ? e[ENUM] : [], -1 === e[ENUM].indexOf(r) && n.push(format(a.messages[ENUM], e.fullField, e[ENUM].join(", ")));
  43365. }
  43366. function pattern$1(e, r, t2, n, a) {
  43367. e.pattern && (e.pattern instanceof RegExp ? (e.pattern.lastIndex = 0, e.pattern.test(r) || n.push(format(a.messages.pattern.mismatch, e.fullField, r, e.pattern))) : "string" == typeof e.pattern && (new RegExp(e.pattern).test(r) || n.push(format(a.messages.pattern.mismatch, e.fullField, r, e.pattern))));
  43368. }
  43369. var rules = { required, whitespace, type, range, enum: enumerable, pattern: pattern$1 };
  43370. function string(e, r, t2, n, a) {
  43371. var i = [];
  43372. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43373. if (isEmptyValue(r, "string") && !e.required)
  43374. return t2();
  43375. rules.required(e, r, n, i, a, "string"), isEmptyValue(r, "string") || (rules.type(e, r, n, i, a), rules.range(e, r, n, i, a), rules.pattern(e, r, n, i, a), true === e.whitespace && rules.whitespace(e, r, n, i, a));
  43376. }
  43377. t2(i);
  43378. }
  43379. function method(e, r, t2, n, a) {
  43380. var i = [];
  43381. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43382. if (isEmptyValue(r) && !e.required)
  43383. return t2();
  43384. rules.required(e, r, n, i, a), void 0 !== r && rules.type(e, r, n, i, a);
  43385. }
  43386. t2(i);
  43387. }
  43388. function number(e, r, t2, n, a) {
  43389. var i = [];
  43390. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43391. if ("" === r && (r = void 0), isEmptyValue(r) && !e.required)
  43392. return t2();
  43393. rules.required(e, r, n, i, a), void 0 !== r && (rules.type(e, r, n, i, a), rules.range(e, r, n, i, a));
  43394. }
  43395. t2(i);
  43396. }
  43397. function _boolean(e, r, t2, n, a) {
  43398. var i = [];
  43399. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43400. if (isEmptyValue(r) && !e.required)
  43401. return t2();
  43402. rules.required(e, r, n, i, a), void 0 !== r && rules.type(e, r, n, i, a);
  43403. }
  43404. t2(i);
  43405. }
  43406. function regexp(e, r, t2, n, a) {
  43407. var i = [];
  43408. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43409. if (isEmptyValue(r) && !e.required)
  43410. return t2();
  43411. rules.required(e, r, n, i, a), isEmptyValue(r) || rules.type(e, r, n, i, a);
  43412. }
  43413. t2(i);
  43414. }
  43415. function integer(e, r, t2, n, a) {
  43416. var i = [];
  43417. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43418. if (isEmptyValue(r) && !e.required)
  43419. return t2();
  43420. rules.required(e, r, n, i, a), void 0 !== r && (rules.type(e, r, n, i, a), rules.range(e, r, n, i, a));
  43421. }
  43422. t2(i);
  43423. }
  43424. function floatFn(e, r, t2, n, a) {
  43425. var i = [];
  43426. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43427. if (isEmptyValue(r) && !e.required)
  43428. return t2();
  43429. rules.required(e, r, n, i, a), void 0 !== r && (rules.type(e, r, n, i, a), rules.range(e, r, n, i, a));
  43430. }
  43431. t2(i);
  43432. }
  43433. function array(e, r, t2, n, a) {
  43434. var i = [];
  43435. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43436. if (isEmptyValue(r, "array") && !e.required)
  43437. return t2();
  43438. rules.required(e, r, n, i, a, "array"), isEmptyValue(r, "array") || (rules.type(e, r, n, i, a), rules.range(e, r, n, i, a));
  43439. }
  43440. t2(i);
  43441. }
  43442. function object(e, r, t2, n, a) {
  43443. var i = [];
  43444. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43445. if (isEmptyValue(r) && !e.required)
  43446. return t2();
  43447. rules.required(e, r, n, i, a), void 0 !== r && rules.type(e, r, n, i, a);
  43448. }
  43449. t2(i);
  43450. }
  43451. var ENUM$1 = "enum";
  43452. function enumerable$1(e, r, t2, n, a) {
  43453. var i = [];
  43454. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43455. if (isEmptyValue(r) && !e.required)
  43456. return t2();
  43457. rules.required(e, r, n, i, a), void 0 !== r && rules[ENUM$1](e, r, n, i, a);
  43458. }
  43459. t2(i);
  43460. }
  43461. function pattern$2(e, r, t2, n, a) {
  43462. var i = [];
  43463. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43464. if (isEmptyValue(r, "string") && !e.required)
  43465. return t2();
  43466. rules.required(e, r, n, i, a), isEmptyValue(r, "string") || rules.pattern(e, r, n, i, a);
  43467. }
  43468. t2(i);
  43469. }
  43470. function date(e, r, t2, n, a) {
  43471. var i = [];
  43472. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43473. if (isEmptyValue(r) && !e.required)
  43474. return t2();
  43475. rules.required(e, r, n, i, a), isEmptyValue(r) || (r = "number" == typeof r ? new Date(r) : r, rules.type(e, r, n, i, a), r && rules.range(e, r.getTime(), n, i, a));
  43476. }
  43477. t2(i);
  43478. }
  43479. function required$1(e, r, t2, n, a) {
  43480. var i = [], s = Array.isArray(r) ? "array" : typeof r;
  43481. rules.required(e, r, n, i, a, s), t2(i);
  43482. }
  43483. function type$1(e, r, t2, n, a) {
  43484. var i = e.type, s = [];
  43485. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43486. if (isEmptyValue(r, i) && !e.required)
  43487. return t2();
  43488. rules.required(e, r, n, s, a, i), isEmptyValue(r, i) || rules.type(e, r, n, s, a);
  43489. }
  43490. t2(s);
  43491. }
  43492. function any(e, r, t2, n, a) {
  43493. var i = [];
  43494. if (e.required || !e.required && n.hasOwnProperty(e.field)) {
  43495. if (isEmptyValue(r) && !e.required)
  43496. return t2();
  43497. rules.required(e, r, n, i, a);
  43498. }
  43499. t2(i);
  43500. }
  43501. var validators = { string, method, number, boolean: _boolean, regexp, integer, float: floatFn, array, object, enum: enumerable$1, pattern: pattern$2, date, url: type$1, hex: type$1, email: type$1, required: required$1, any };
  43502. function newMessages() {
  43503. return { default: "Validation error on field %s", required: "%s is required", enum: "%s must be one of %s", whitespace: "%s cannot be empty", date: { format: "%s date %s is invalid for format %s", parse: "%s date could not be parsed, %s is invalid ", invalid: "%s date %s is invalid" }, types: { string: "%s is not a %s", method: "%s is not a %s (function)", array: "%s is not an %s", object: "%s is not an %s", number: "%s is not a %s", date: "%s is not a %s", boolean: "%s is not a %s", integer: "%s is not an %s", float: "%s is not a %s", regexp: "%s is not a valid %s", email: "%s is not a valid %s", url: "%s is not a valid %s", hex: "%s is not a valid %s" }, string: { len: "%s must be exactly %s characters", min: "%s must be at least %s characters", max: "%s cannot be longer than %s characters", range: "%s must be between %s and %s characters" }, number: { len: "%s must equal %s", min: "%s cannot be less than %s", max: "%s cannot be greater than %s", range: "%s must be between %s and %s" }, array: { len: "%s must be exactly %s in length", min: "%s cannot be less than %s in length", max: "%s cannot be greater than %s in length", range: "%s must be between %s and %s in length" }, pattern: { mismatch: "%s value %s does not match pattern %s" }, clone: function() {
  43504. var e = JSON.parse(JSON.stringify(this));
  43505. return e.clone = this.clone, e;
  43506. } };
  43507. }
  43508. var messages = newMessages();
  43509. function Schema(e) {
  43510. this.rules = null, this._messages = messages, this.define(e);
  43511. }
  43512. Schema.prototype = { messages: function(e) {
  43513. return e && (this._messages = deepMerge(newMessages(), e)), this._messages;
  43514. }, define: function(e) {
  43515. if (!e)
  43516. throw new Error("Cannot configure a schema with no rules");
  43517. if ("object" != typeof e || Array.isArray(e))
  43518. throw new Error("Rules must be an object");
  43519. var r, t2;
  43520. for (r in this.rules = {}, e)
  43521. e.hasOwnProperty(r) && (t2 = e[r], this.rules[r] = Array.isArray(t2) ? t2 : [t2]);
  43522. }, validate: function(t2, e, r) {
  43523. var n = this;
  43524. void 0 === e && (e = {}), void 0 === r && (r = function() {
  43525. });
  43526. var a, i, s = t2, p = e, u2 = r;
  43527. if ("function" == typeof p && (u2 = p, p = {}), !this.rules || 0 === Object.keys(this.rules).length)
  43528. return u2 && u2(), Promise.resolve();
  43529. p.messages ? ((r = this.messages()) === messages && (r = newMessages()), deepMerge(r, p.messages), p.messages = r) : p.messages = this.messages();
  43530. var o = {};
  43531. (p.keys || Object.keys(this.rules)).forEach(function(r2) {
  43532. a = n.rules[r2], i = s[r2], a.forEach(function(e2) {
  43533. "function" == typeof e2.transform && (s === t2 && (s = _extends({}, s)), i = s[r2] = e2.transform(i)), (e2 = "function" == typeof e2 ? { validator: e2 } : _extends({}, e2)).validator = n.getValidationMethod(e2), e2.field = r2, e2.fullField = e2.fullField || r2, e2.type = n.getType(e2), e2.validator && (o[r2] = o[r2] || [], o[r2].push({ rule: e2, value: i, source: s, field: r2 }));
  43534. });
  43535. });
  43536. var d = {};
  43537. return asyncMap(o, p, function(s2, u22) {
  43538. var e2, o2 = s2.rule, l = !("object" !== o2.type && "array" !== o2.type || "object" != typeof o2.fields && "object" != typeof o2.defaultField);
  43539. function f(e3, r3) {
  43540. return _extends({}, r3, { fullField: o2.fullField + "." + e3 });
  43541. }
  43542. function r2(e3) {
  43543. void 0 === e3 && (e3 = []);
  43544. var t22 = e3;
  43545. if (Array.isArray(t22) || (t22 = [t22]), !p.suppressWarning && t22.length && Schema.warning("async-validator:", t22), t22.length && o2.message && (t22 = [].concat(o2.message)), t22 = t22.map(complementError(o2)), p.first && t22.length)
  43546. return d[o2.field] = 1, u22(t22);
  43547. if (l) {
  43548. if (o2.required && !s2.value)
  43549. return t22 = o2.message ? [].concat(o2.message).map(complementError(o2)) : p.error ? [p.error(o2, format(p.messages.required, o2.field))] : [], u22(t22);
  43550. var r3, n2, a2 = {};
  43551. if (o2.defaultField)
  43552. for (var i2 in s2.value)
  43553. s2.value.hasOwnProperty(i2) && (a2[i2] = o2.defaultField);
  43554. for (r3 in a2 = _extends({}, a2, {}, s2.rule.fields))
  43555. a2.hasOwnProperty(r3) && (n2 = Array.isArray(a2[r3]) ? a2[r3] : [a2[r3]], a2[r3] = n2.map(f.bind(null, r3)));
  43556. e3 = new Schema(a2);
  43557. e3.messages(p.messages), s2.rule.options && (s2.rule.options.messages = p.messages, s2.rule.options.error = p.error), e3.validate(s2.value, s2.rule.options || p, function(e4) {
  43558. var r4 = [];
  43559. t22 && t22.length && r4.push.apply(r4, t22), e4 && e4.length && r4.push.apply(r4, e4), u22(r4.length ? r4 : null);
  43560. });
  43561. } else
  43562. u22(t22);
  43563. }
  43564. l = l && (o2.required || !o2.required && s2.value), o2.field = s2.field, o2.asyncValidator ? e2 = o2.asyncValidator(o2, s2.value, r2, s2.source, p) : o2.validator && (true === (e2 = o2.validator(o2, s2.value, r2, s2.source, p)) ? r2() : false === e2 ? r2(o2.message || o2.field + " fails") : e2 instanceof Array ? r2(e2) : e2 instanceof Error && r2(e2.message)), e2 && e2.then && e2.then(function() {
  43565. return r2();
  43566. }, r2);
  43567. }, function(e2) {
  43568. !function(e3) {
  43569. var r2, t22, n2 = [], a2 = {};
  43570. for (r2 = 0; r2 < e3.length; r2++)
  43571. t22 = e3[r2], Array.isArray(t22) ? n2 = n2.concat.apply(n2, t22) : n2.push(t22);
  43572. a2 = n2.length ? convertFieldsError(n2) : n2 = null, u2(n2, a2);
  43573. }(e2);
  43574. });
  43575. }, getType: function(e) {
  43576. if (void 0 === e.type && e.pattern instanceof RegExp && (e.type = "pattern"), "function" != typeof e.validator && e.type && !validators.hasOwnProperty(e.type))
  43577. throw new Error(format("Unknown rule type %s", e.type));
  43578. return e.type || "string";
  43579. }, getValidationMethod: function(e) {
  43580. if ("function" == typeof e.validator)
  43581. return e.validator;
  43582. var r = Object.keys(e), t2 = r.indexOf("message");
  43583. return -1 !== t2 && r.splice(t2, 1), 1 === r.length && "required" === r[0] ? validators.required : validators[this.getType(e)] || false;
  43584. } }, Schema.register = function(e, r) {
  43585. if ("function" != typeof r)
  43586. throw new Error("Cannot register a validator by type, validator is not a function");
  43587. validators[e] = r;
  43588. }, Schema.warning = warning, Schema.messages = messages;
  43589. const FormItemProps = {
  43590. ...baseProps,
  43591. /** input的label提示语 */
  43592. label: {
  43593. type: String,
  43594. default: ""
  43595. },
  43596. /** 绑定的值 */
  43597. prop: {
  43598. type: String,
  43599. default: ""
  43600. },
  43601. /** 是否显示表单域的下划线边框 */
  43602. borderBottom: {
  43603. type: [String, Boolean],
  43604. default: ""
  43605. },
  43606. /** label的位置,left-左边,top-上边 */
  43607. labelPosition: {
  43608. type: String,
  43609. default: ""
  43610. },
  43611. /** label的宽度,单位rpx */
  43612. labelWidth: {
  43613. type: [String, Number],
  43614. default: ""
  43615. },
  43616. /** label的样式,对象形式 */
  43617. labelStyle: {
  43618. type: Object,
  43619. default: () => ({})
  43620. },
  43621. /** label字体的对齐方式 */
  43622. labelAlign: {
  43623. type: String,
  43624. default: ""
  43625. },
  43626. /** 右侧图标 */
  43627. rightIcon: {
  43628. type: String,
  43629. default: ""
  43630. },
  43631. /** 左侧图标 */
  43632. leftIcon: {
  43633. type: String,
  43634. default: ""
  43635. },
  43636. /** 左侧图标的样式 */
  43637. leftIconStyle: {
  43638. type: Object,
  43639. default: () => ({})
  43640. },
  43641. /** 右侧图标的样式 */
  43642. rightIconStyle: {
  43643. type: Object,
  43644. default: () => ({})
  43645. },
  43646. /** 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 */
  43647. required: {
  43648. type: Boolean,
  43649. default: false
  43650. }
  43651. };
  43652. const __default__$1 = {
  43653. name: "u-form-item",
  43654. options: {
  43655. addGlobalClass: true,
  43656. virtualHost: true,
  43657. styleIsolation: "shared"
  43658. }
  43659. };
  43660. const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
  43661. ...__default__$1,
  43662. props: FormItemProps,
  43663. setup(__props, { expose: __expose }) {
  43664. Schema.warning = function() {
  43665. };
  43666. const { broadcast } = useParent("u-form-item");
  43667. const props = __props;
  43668. const $slots = vue.useSlots();
  43669. const { parentExposed } = useChildren("u-form-item", "u-form");
  43670. const initialValue = vue.ref("");
  43671. const validateState = vue.ref("");
  43672. const validateMessage = vue.ref("");
  43673. const errorType = vue.ref(["message"]);
  43674. const fieldValue = vue.ref("");
  43675. const parentData = vue.ref({
  43676. borderBottom: true,
  43677. // 父表单下划线边框
  43678. labelWidth: 90,
  43679. // 父表单 label 宽度
  43680. labelPosition: "left",
  43681. // 父表单 label 位置
  43682. labelStyle: {},
  43683. // 父表单 label 样式
  43684. labelAlign: "left"
  43685. // 父表单 label 对齐
  43686. });
  43687. const showError = vue.computed(() => (type2) => {
  43688. if (errorType.value.indexOf("none") >= 0)
  43689. return false;
  43690. else if (errorType.value.indexOf(type2) >= 0)
  43691. return true;
  43692. else
  43693. return false;
  43694. });
  43695. vue.watch(validateState, () => {
  43696. broadcastInputError();
  43697. });
  43698. vue.watch(
  43699. () => {
  43700. var _a2, _b2;
  43701. return (_b2 = (_a2 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _a2.props) == null ? void 0 : _b2.errorType;
  43702. },
  43703. (val) => {
  43704. if (val)
  43705. errorType.value = val;
  43706. broadcastInputError();
  43707. },
  43708. { immediate: true }
  43709. );
  43710. const uLabelWidth = vue.computed(() => {
  43711. return elLabelPosition.value == "left" ? (props.label === "true" || props.label === "") && !$slots.label ? "auto" : $u.addUnit(elLabelWidth.value) : "100%";
  43712. });
  43713. const elLabelWidth = vue.computed(() => {
  43714. return props.labelWidth != 0 && props.labelWidth !== "" ? props.labelWidth : parentData.value.labelWidth ? parentData.value.labelWidth : 90;
  43715. });
  43716. const elLabelStyle = vue.computed(() => {
  43717. return Object.keys(props.labelStyle).length ? props.labelStyle : parentData.value.labelStyle ? parentData.value.labelStyle : {};
  43718. });
  43719. const elLabelPosition = vue.computed(() => {
  43720. return props.labelPosition ? props.labelPosition : parentData.value.labelPosition ? parentData.value.labelPosition : "left";
  43721. });
  43722. const elLabelAlign = vue.computed(() => {
  43723. return props.labelAlign ? props.labelAlign : parentData.value.labelAlign ? parentData.value.labelAlign : "left";
  43724. });
  43725. const elBorderBottom = vue.computed(() => {
  43726. return props.borderBottom !== "" ? props.borderBottom : parentData.value.borderBottom ? parentData.value.borderBottom : true;
  43727. });
  43728. function broadcastInputError() {
  43729. broadcast("onFormItemError", validateState.value === "error" && showError.value("border"));
  43730. }
  43731. function getPropByPath(obj, path) {
  43732. if (!obj || !path)
  43733. return { o: obj, k: "", v: void 0 };
  43734. const paths = path.split(".");
  43735. let current = obj;
  43736. let key = "";
  43737. for (let i = 0; i < paths.length; i++) {
  43738. key = paths[i];
  43739. if (!current)
  43740. break;
  43741. if (i === paths.length - 1) {
  43742. return { o: current, k: key, v: current[key] };
  43743. }
  43744. current = current[key];
  43745. }
  43746. return { o: current, k: key, v: void 0 };
  43747. }
  43748. function getRules() {
  43749. var _a2, _b2;
  43750. let rules2 = ((_b2 = (_a2 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _a2.rules) == null ? void 0 : _b2.value) || {};
  43751. rules2 = rules2 ? rules2[props.prop] || getPropByPath(rules2, props.prop.replace(/(\.|^)(\d+)\./, ".defaultField.fields.")).v : [];
  43752. return [].concat(rules2 || []);
  43753. }
  43754. function onFieldBlur() {
  43755. validation("blur");
  43756. }
  43757. function onFieldChange() {
  43758. validation("change");
  43759. }
  43760. function onFormBlur() {
  43761. onFieldBlur();
  43762. }
  43763. function onFormChange() {
  43764. onFieldChange();
  43765. }
  43766. function getFilteredRule(triggerType = "") {
  43767. const rules2 = getRules();
  43768. if (!triggerType)
  43769. return rules2;
  43770. return rules2.filter((res) => res.trigger && res.trigger.indexOf(triggerType) !== -1);
  43771. }
  43772. function validation(trigger, callback = () => {
  43773. }) {
  43774. var _a2, _b2;
  43775. const propPath = getPropByPath((_b2 = (_a2 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _a2.model) == null ? void 0 : _b2.value, props.prop);
  43776. fieldValue.value = propPath.v;
  43777. let rules2 = getFilteredRule(trigger);
  43778. if (!rules2 || rules2.length === 0) {
  43779. callback("");
  43780. return;
  43781. }
  43782. validateState.value = "validating";
  43783. let validator = new Schema({ [props.prop]: rules2 });
  43784. validator.validate({ [props.prop]: fieldValue.value }, { firstFields: true }, (errors) => {
  43785. validateState.value = !errors ? "success" : "error";
  43786. validateMessage.value = errors ? errors[0].message : "";
  43787. callback(validateMessage.value);
  43788. });
  43789. }
  43790. function resetField() {
  43791. var _a2, _b2;
  43792. if (((_b2 = (_a2 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _a2.model) == null ? void 0 : _b2.value) && props.prop) {
  43793. const propPath = getPropByPath(parentExposed.value.model.value, props.prop);
  43794. if (propPath.o && propPath.k) {
  43795. propPath.o[propPath.k] = initialValue.value;
  43796. }
  43797. }
  43798. setTimeout(() => {
  43799. validateState.value = "success";
  43800. }, 50);
  43801. }
  43802. vue.onMounted(() => {
  43803. vue.nextTick(() => {
  43804. var _a2, _b2, _c, _d, _e;
  43805. if (parentExposed.value) {
  43806. Object.keys(parentData.value).forEach((key) => {
  43807. var _a3;
  43808. parentData.value[key] = (_a3 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _a3.props[key];
  43809. });
  43810. if (props.prop) {
  43811. ((_a2 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _a2.addField) && ((_b2 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _b2.addField({
  43812. validation,
  43813. resetField,
  43814. prop: props.prop
  43815. }));
  43816. errorType.value = ((_c = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _c.errorType) || errorType.value;
  43817. const propPath = getPropByPath((_e = (_d = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _d.model) == null ? void 0 : _e.value, props.prop);
  43818. fieldValue.value = propPath.v;
  43819. initialValue.value = fieldValue.value;
  43820. }
  43821. }
  43822. });
  43823. });
  43824. vue.onBeforeUnmount(() => {
  43825. var _a2;
  43826. if ((parentExposed == null ? void 0 : parentExposed.value) && props.prop) {
  43827. (_a2 = parentExposed == null ? void 0 : parentExposed.value) == null ? void 0 : _a2.removeField({ prop: props.prop });
  43828. }
  43829. });
  43830. __expose({
  43831. validation,
  43832. resetField,
  43833. onFormBlur,
  43834. onFormChange
  43835. });
  43836. const __returned__ = { broadcast, props, $slots, parentExposed, initialValue, validateState, validateMessage, errorType, fieldValue, parentData, showError, uLabelWidth, elLabelWidth, elLabelStyle, elLabelPosition, elLabelAlign, elBorderBottom, broadcastInputError, getPropByPath, getRules, onFieldBlur, onFieldChange, onFormBlur, onFormChange, getFilteredRule, validation, resetField, get $u() {
  43837. return $u;
  43838. } };
  43839. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  43840. return __returned__;
  43841. }
  43842. });
  43843. function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) {
  43844. const _component_u_icon = __unplugin_components_0$5;
  43845. return vue.openBlock(), vue.createElementBlock(
  43846. "view",
  43847. {
  43848. class: vue.normalizeClass(["u-form-item", [
  43849. {
  43850. "u-border-bottom": $setup.elBorderBottom,
  43851. "u-form-item__border-bottom--error": $setup.validateState === "error" && $setup.showError("border-bottom"),
  43852. "u-form-item__border--error": $setup.validateState === "error" && $setup.showError("border")
  43853. },
  43854. _ctx.customClass
  43855. ]]),
  43856. style: vue.normalizeStyle($setup.$u.toStyle(_ctx.customStyle))
  43857. },
  43858. [
  43859. vue.createElementVNode(
  43860. "view",
  43861. {
  43862. class: "u-form-item__body",
  43863. style: vue.normalizeStyle({
  43864. flexDirection: $setup.elLabelPosition == "left" ? "row" : "column"
  43865. })
  43866. },
  43867. [
  43868. vue.createCommentVNode(' 微信小程序中,将一个参数设置空字符串,结果会变成字符串"true" '),
  43869. vue.createElementVNode(
  43870. "view",
  43871. {
  43872. class: "u-form-item--left",
  43873. style: vue.normalizeStyle({
  43874. width: $setup.uLabelWidth,
  43875. flex: `0 0 ${$setup.uLabelWidth}`,
  43876. marginBottom: $setup.elLabelPosition == "left" ? 0 : "10rpx"
  43877. })
  43878. },
  43879. [
  43880. vue.createCommentVNode(" 为了块对齐 "),
  43881. _ctx.required || _ctx.leftIcon || _ctx.label || $setup.$slots.label ? (vue.openBlock(), vue.createElementBlock("view", {
  43882. key: 0,
  43883. class: "u-form-item--left__content"
  43884. }, [
  43885. vue.createCommentVNode(" nvue不支持伪元素before "),
  43886. _ctx.required ? (vue.openBlock(), vue.createElementBlock("text", {
  43887. key: 0,
  43888. class: "u-form-item--left__content--required"
  43889. }, "*")) : vue.createCommentVNode("v-if", true),
  43890. _ctx.leftIcon ? (vue.openBlock(), vue.createElementBlock("view", {
  43891. key: 1,
  43892. class: "u-form-item--left__content__icon"
  43893. }, [
  43894. vue.createVNode(_component_u_icon, {
  43895. name: _ctx.leftIcon,
  43896. "custom-style": _ctx.leftIconStyle
  43897. }, null, 8, ["name", "custom-style"])
  43898. ])) : vue.createCommentVNode("v-if", true),
  43899. vue.createElementVNode(
  43900. "view",
  43901. {
  43902. class: "u-form-item--left__content__label",
  43903. style: vue.normalizeStyle([
  43904. $setup.elLabelStyle,
  43905. {
  43906. "justify-content": $setup.elLabelAlign == "left" ? "flex-start" : $setup.elLabelAlign == "center" ? "center" : "flex-end"
  43907. }
  43908. ])
  43909. },
  43910. [
  43911. vue.renderSlot(_ctx.$slots, "label", {}, () => [
  43912. vue.createTextVNode(
  43913. vue.toDisplayString(_ctx.label),
  43914. 1
  43915. /* TEXT */
  43916. )
  43917. ], true)
  43918. ],
  43919. 4
  43920. /* STYLE */
  43921. )
  43922. ])) : vue.createCommentVNode("v-if", true)
  43923. ],
  43924. 4
  43925. /* STYLE */
  43926. ),
  43927. vue.createElementVNode("view", { class: "u-form-item--right u-flex" }, [
  43928. vue.createElementVNode("view", { class: "u-form-item--right__content" }, [
  43929. vue.createElementVNode("view", { class: "u-form-item--right__content__slot" }, [
  43930. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  43931. ]),
  43932. $setup.$slots.right || _ctx.rightIcon ? (vue.openBlock(), vue.createElementBlock("view", {
  43933. key: 0,
  43934. class: "u-form-item--right__content__icon u-flex"
  43935. }, [
  43936. _ctx.rightIcon ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  43937. key: 0,
  43938. "custom-style": _ctx.rightIconStyle,
  43939. name: _ctx.rightIcon
  43940. }, null, 8, ["custom-style", "name"])) : vue.createCommentVNode("v-if", true),
  43941. vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
  43942. ])) : vue.createCommentVNode("v-if", true)
  43943. ])
  43944. ])
  43945. ],
  43946. 4
  43947. /* STYLE */
  43948. ),
  43949. $setup.validateState === "error" && $setup.showError("message") ? (vue.openBlock(), vue.createElementBlock(
  43950. "view",
  43951. {
  43952. key: 0,
  43953. class: "u-form-item__message",
  43954. style: vue.normalizeStyle({
  43955. paddingLeft: $setup.elLabelPosition == "left" ? $setup.$u.addUnit($setup.elLabelWidth) : "0"
  43956. })
  43957. },
  43958. vue.toDisplayString($setup.validateMessage),
  43959. 5
  43960. /* TEXT, STYLE */
  43961. )) : vue.createCommentVNode("v-if", true)
  43962. ],
  43963. 6
  43964. /* CLASS, STYLE */
  43965. );
  43966. }
  43967. const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$k], ["__scopeId", "data-v-759dc3ff"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-form-item/u-form-item.vue"]]);
  43968. const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
  43969. __name: "index",
  43970. setup(__props, { expose: __expose }) {
  43971. __expose();
  43972. const { t: t2 } = useI18n();
  43973. const uToastRef = vue.ref();
  43974. const form = vue.reactive({
  43975. old_password: "",
  43976. // 旧密码
  43977. new_password: "",
  43978. // 新密码
  43979. confirmPassword: ""
  43980. // 确认密码(仅前端校验)
  43981. });
  43982. const validateForm = () => {
  43983. if (!form.old_password) {
  43984. uni.showToast({ title: t2("请输入旧密码"), icon: "none" });
  43985. return false;
  43986. }
  43987. if (!form.new_password) {
  43988. uni.showToast({ title: t2("请输入新密码"), icon: "none" });
  43989. return false;
  43990. }
  43991. if (form.new_password.length < 6) {
  43992. uni.showToast({ title: t2("新密码长度不能少于") + 6 + t2("位"), icon: "none" });
  43993. return false;
  43994. }
  43995. if (!form.confirmPassword) {
  43996. uni.showToast({ title: t2("请再次输入确认密码"), icon: "none" });
  43997. return false;
  43998. }
  43999. if (form.confirmPassword !== form.new_password) {
  44000. uni.showToast({ title: t2("两次输入的新密码不一致"), icon: "none" });
  44001. return false;
  44002. }
  44003. if (form.old_password === form.new_password) {
  44004. uni.showToast({ title: t2("新密码不能与旧密码相同"), icon: "none" });
  44005. return false;
  44006. }
  44007. return true;
  44008. };
  44009. const handleResetPassword = () => {
  44010. if (!validateForm())
  44011. return;
  44012. const requestData = {
  44013. old_password: form.old_password,
  44014. new_password: form.new_password
  44015. };
  44016. resetPassword(requestData).then(() => {
  44017. uni.removeStorageSync("token");
  44018. uni.removeStorageSync("user_info");
  44019. let timer = setTimeout(() => {
  44020. clearTimeout(timer);
  44021. router.replaceAll({ name: "login" });
  44022. }, 1500);
  44023. });
  44024. };
  44025. const __returned__ = { t: t2, uToastRef, form, validateForm, handleResetPassword };
  44026. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  44027. return __returned__;
  44028. }
  44029. });
  44030. function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) {
  44031. const _component_u_input = __unplugin_components_3$2;
  44032. const _component_u_form_item = __unplugin_components_1;
  44033. const _component_u_form = __unplugin_components_2;
  44034. const _component_u_button = __unplugin_components_2$1;
  44035. const _component_u_toast = __unplugin_components_4;
  44036. const _component_PageContainer = PageContainer;
  44037. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  44038. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  44039. default: vue.withCtx(() => [
  44040. vue.createVNode(_component_PageContainer, {
  44041. "nav-title": $setup.t("修改密码"),
  44042. class: "safety-page"
  44043. }, {
  44044. default: vue.withCtx(() => [
  44045. vue.createElementVNode("view", { class: "reset-password-container" }, [
  44046. vue.createVNode(_component_u_form, {
  44047. model: $setup.form,
  44048. ref: "uFormRef",
  44049. "label-position": "top"
  44050. }, {
  44051. default: vue.withCtx(() => [
  44052. vue.createVNode(_component_u_form_item, {
  44053. label: $setup.t("旧密码"),
  44054. prop: "old_password",
  44055. "border-bottom": ""
  44056. }, {
  44057. default: vue.withCtx(() => [
  44058. vue.createVNode(_component_u_input, {
  44059. type: "password",
  44060. modelValue: $setup.form.old_password,
  44061. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.old_password = $event),
  44062. placeholder: $setup.t("请输入旧密码"),
  44063. "password-icon": true,
  44064. clearable: false
  44065. }, null, 8, ["modelValue", "placeholder"])
  44066. ]),
  44067. _: 1
  44068. /* STABLE */
  44069. }, 8, ["label"]),
  44070. vue.createVNode(_component_u_form_item, {
  44071. label: $setup.t("新密码"),
  44072. prop: "new_password",
  44073. "border-bottom": ""
  44074. }, {
  44075. default: vue.withCtx(() => [
  44076. vue.createVNode(_component_u_input, {
  44077. type: "password",
  44078. modelValue: $setup.form.new_password,
  44079. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.new_password = $event),
  44080. placeholder: $setup.t("请输入新密码(至少6位)"),
  44081. "password-icon": true,
  44082. clearable: false
  44083. }, null, 8, ["modelValue", "placeholder"])
  44084. ]),
  44085. _: 1
  44086. /* STABLE */
  44087. }, 8, ["label"]),
  44088. vue.createVNode(_component_u_form_item, {
  44089. label: $setup.t("确认新密码"),
  44090. prop: "confirmPassword",
  44091. "border-bottom": ""
  44092. }, {
  44093. default: vue.withCtx(() => [
  44094. vue.createVNode(_component_u_input, {
  44095. type: "password",
  44096. modelValue: $setup.form.confirmPassword,
  44097. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.form.confirmPassword = $event),
  44098. placeholder: $setup.t("请再次输入新密码"),
  44099. "password-icon": true,
  44100. clearable: false
  44101. }, null, 8, ["modelValue", "placeholder"])
  44102. ]),
  44103. _: 1
  44104. /* STABLE */
  44105. }, 8, ["label"])
  44106. ]),
  44107. _: 1
  44108. /* STABLE */
  44109. }, 8, ["model"]),
  44110. vue.createElementVNode("view", { class: "btn-wrap" }, [
  44111. vue.createVNode(_component_u_button, {
  44112. type: "primary",
  44113. shape: "circle",
  44114. class: "reset-btn",
  44115. onClick: $setup.handleResetPassword
  44116. }, {
  44117. default: vue.withCtx(() => [
  44118. vue.createTextVNode(
  44119. vue.toDisplayString($setup.t("确认修改")),
  44120. 1
  44121. /* TEXT */
  44122. )
  44123. ]),
  44124. _: 1
  44125. /* STABLE */
  44126. })
  44127. ])
  44128. ]),
  44129. vue.createVNode(
  44130. _component_u_toast,
  44131. { ref: "uToastRef" },
  44132. null,
  44133. 512
  44134. /* NEED_PATCH */
  44135. )
  44136. ]),
  44137. _: 1
  44138. /* STABLE */
  44139. }, 8, ["nav-title"])
  44140. ]),
  44141. _: 1
  44142. /* STABLE */
  44143. });
  44144. }
  44145. const PagesWorkModuleMyChangePasswordIndex = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$j], ["__scopeId", "data-v-c14ec030"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/changePassword/index.vue"]]);
  44146. const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
  44147. __name: "index",
  44148. setup(__props, { expose: __expose }) {
  44149. __expose();
  44150. const { t: t2 } = useI18n();
  44151. const uToastRef = vue.ref();
  44152. const form = vue.reactive({
  44153. old_password: "",
  44154. // 旧密码(可选)
  44155. password: "",
  44156. // 新资金密码(必需)
  44157. confirmPassword: ""
  44158. // 确认密码(仅前端校验)
  44159. });
  44160. const validateForm = () => {
  44161. if (!form.password) {
  44162. uni.showToast({ title: t2("请输入新资金密码"), icon: "none" });
  44163. return false;
  44164. }
  44165. if (form.password.length < 6) {
  44166. uni.showToast({ title: t2("新资金密码长度不能少于6位"), icon: "none" });
  44167. return false;
  44168. }
  44169. if (!form.confirmPassword) {
  44170. uni.showToast({ title: t2("请再次输入确认密码"), icon: "none" });
  44171. return false;
  44172. }
  44173. if (form.confirmPassword !== form.password) {
  44174. uni.showToast({ title: t2("两次输入的新资金密码不一致"), icon: "none" });
  44175. return false;
  44176. }
  44177. if (form.old_password && form.old_password === form.password) {
  44178. uni.showToast({ title: t2("新资金密码不能与旧密码相同"), icon: "none" });
  44179. return false;
  44180. }
  44181. return true;
  44182. };
  44183. const handleModifySafeWord = () => {
  44184. if (!validateForm())
  44185. return;
  44186. const requestData = {
  44187. password: form.password
  44188. };
  44189. if (form.old_password) {
  44190. requestData.old_password = form.old_password;
  44191. }
  44192. modifySafeWord(requestData).then(() => {
  44193. uni.showToast({ title: t2("设置成功"), icon: "success" });
  44194. let timer = setTimeout(() => {
  44195. clearTimeout(timer);
  44196. router.back();
  44197. }, 1500);
  44198. });
  44199. };
  44200. const __returned__ = { t: t2, uToastRef, form, validateForm, handleModifySafeWord };
  44201. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  44202. return __returned__;
  44203. }
  44204. });
  44205. function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
  44206. const _component_u_input = __unplugin_components_3$2;
  44207. const _component_u_form_item = __unplugin_components_1;
  44208. const _component_u_form = __unplugin_components_2;
  44209. const _component_u_button = __unplugin_components_2$1;
  44210. const _component_u_toast = __unplugin_components_4;
  44211. const _component_PageContainer = PageContainer;
  44212. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  44213. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  44214. default: vue.withCtx(() => [
  44215. vue.createVNode(_component_PageContainer, {
  44216. "nav-title": $setup.t("修改资金密码"),
  44217. class: "safety-page"
  44218. }, {
  44219. default: vue.withCtx(() => [
  44220. vue.createElementVNode("view", { class: "reset-password-container" }, [
  44221. vue.createVNode(_component_u_form, {
  44222. model: $setup.form,
  44223. ref: "uFormRef",
  44224. "label-position": "top"
  44225. }, {
  44226. default: vue.withCtx(() => [
  44227. vue.createVNode(_component_u_form_item, {
  44228. label: $setup.t("旧资金密码"),
  44229. prop: "old_password",
  44230. "border-bottom": ""
  44231. }, {
  44232. default: vue.withCtx(() => [
  44233. vue.createVNode(_component_u_input, {
  44234. type: "password",
  44235. modelValue: $setup.form.old_password,
  44236. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.old_password = $event),
  44237. placeholder: $setup.t("请输入旧密码(第一次设置资金密码可以为空)"),
  44238. "password-icon": true,
  44239. clearable: false
  44240. }, null, 8, ["modelValue", "placeholder"])
  44241. ]),
  44242. _: 1
  44243. /* STABLE */
  44244. }, 8, ["label"]),
  44245. vue.createVNode(_component_u_form_item, {
  44246. label: $setup.t("新资金密码"),
  44247. prop: "password",
  44248. "border-bottom": ""
  44249. }, {
  44250. default: vue.withCtx(() => [
  44251. vue.createVNode(_component_u_input, {
  44252. type: "password",
  44253. modelValue: $setup.form.password,
  44254. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.password = $event),
  44255. placeholder: $setup.t("请输入新资金密码(至少6位)"),
  44256. "password-icon": true,
  44257. clearable: false
  44258. }, null, 8, ["modelValue", "placeholder"])
  44259. ]),
  44260. _: 1
  44261. /* STABLE */
  44262. }, 8, ["label"]),
  44263. vue.createVNode(_component_u_form_item, {
  44264. label: $setup.t("确认新资金密码"),
  44265. prop: "confirmPassword",
  44266. "border-bottom": ""
  44267. }, {
  44268. default: vue.withCtx(() => [
  44269. vue.createVNode(_component_u_input, {
  44270. type: "password",
  44271. modelValue: $setup.form.confirmPassword,
  44272. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.form.confirmPassword = $event),
  44273. placeholder: $setup.t("请再次输入新资金密码"),
  44274. "password-icon": true,
  44275. clearable: false
  44276. }, null, 8, ["modelValue", "placeholder"])
  44277. ]),
  44278. _: 1
  44279. /* STABLE */
  44280. }, 8, ["label"])
  44281. ]),
  44282. _: 1
  44283. /* STABLE */
  44284. }, 8, ["model"]),
  44285. vue.createElementVNode("view", { class: "btn-wrap" }, [
  44286. vue.createVNode(_component_u_button, {
  44287. type: "primary",
  44288. shape: "circle",
  44289. class: "reset-btn",
  44290. onClick: $setup.handleModifySafeWord
  44291. }, {
  44292. default: vue.withCtx(() => [
  44293. vue.createTextVNode(
  44294. vue.toDisplayString($setup.t("确认修改")),
  44295. 1
  44296. /* TEXT */
  44297. )
  44298. ]),
  44299. _: 1
  44300. /* STABLE */
  44301. })
  44302. ])
  44303. ]),
  44304. vue.createVNode(
  44305. _component_u_toast,
  44306. { ref: "uToastRef" },
  44307. null,
  44308. 512
  44309. /* NEED_PATCH */
  44310. )
  44311. ]),
  44312. _: 1
  44313. /* STABLE */
  44314. }, 8, ["nav-title"])
  44315. ]),
  44316. _: 1
  44317. /* STABLE */
  44318. });
  44319. }
  44320. const PagesWorkModuleMyChangeFundPasswordIndex = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$i], ["__scopeId", "data-v-f33293e6"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/changeFundPassword/index.vue"]]);
  44321. const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
  44322. __name: "index",
  44323. setup(__props, { expose: __expose }) {
  44324. __expose();
  44325. const { t: t2 } = useI18n();
  44326. const pagingRef = vue.ref(null);
  44327. const moneyLogList = vue.ref([]);
  44328. const fundTypePickerShow = vue.ref(false);
  44329. const typePickerShow = vue.ref(false);
  44330. const calendarShow = vue.ref(false);
  44331. const fundType = vue.ref("");
  44332. const transactionType = vue.ref("");
  44333. const startTime = vue.ref("");
  44334. const endTime = vue.ref("");
  44335. const dateRange = vue.ref("");
  44336. const fundTypeColumns = vue.ref([
  44337. { label: t2("全部资金"), value: "" },
  44338. { label: t2("可用余额"), value: "1" },
  44339. { label: t2("冻结金额"), value: "2" }
  44340. ]);
  44341. const typeColumns = vue.ref([
  44342. { label: t2("全部类型"), value: "" },
  44343. { label: t2("充值"), value: "充值" },
  44344. { label: t2("提现"), value: "提现" },
  44345. { label: t2("投注"), value: "投注" }
  44346. ]);
  44347. const fundTypeText = vue.computed(() => {
  44348. const target = fundTypeColumns.value.find((item) => item.value === fundType.value);
  44349. return target ? target.label : "";
  44350. });
  44351. const transactionTypeText = vue.computed(() => {
  44352. const target = typeColumns.value.find((item) => item.value === transactionType.value);
  44353. return target ? target.label : "";
  44354. });
  44355. async function onQuery(pageNo, pageSize) {
  44356. var _a2, _b2;
  44357. try {
  44358. const params = {
  44359. type: fundType.value,
  44360. // 新增:资金类型
  44361. change_type: transactionType.value,
  44362. // 如果后端改了此字段名请对应修改
  44363. page: pageNo,
  44364. limit: pageSize,
  44365. start_time: startTime.value,
  44366. end_time: endTime.value
  44367. };
  44368. const res = await getMoneyLog(params);
  44369. typeColumns.value = [{ label: t2("全部类型"), value: "" }].concat(((_b2 = (_a2 = res.data) == null ? void 0 : _a2.extend) == null ? void 0 : _b2.change_type_list) || []);
  44370. if (res.code === 1) {
  44371. pagingRef.value.complete(res.data.list);
  44372. } else {
  44373. pagingRef.value.complete(false);
  44374. }
  44375. } catch (e) {
  44376. pagingRef.value.complete(false);
  44377. }
  44378. }
  44379. function onFundTypeConfirm(e) {
  44380. fundType.value = e[0].value;
  44381. handleQuery2();
  44382. }
  44383. function onTypeConfirm(e) {
  44384. transactionType.value = e[0].value;
  44385. handleQuery2();
  44386. }
  44387. function onCalendarChange(e) {
  44388. const range2 = e;
  44389. if (range2.startDate && range2.endDate) {
  44390. startTime.value = range2.startDate;
  44391. endTime.value = range2.endDate;
  44392. dateRange.value = `${range2.startDate} ~ ${range2.endDate}`;
  44393. handleQuery2();
  44394. }
  44395. }
  44396. function handleQuery2() {
  44397. pagingRef.value.reload();
  44398. }
  44399. function handleReset() {
  44400. fundType.value = "";
  44401. transactionType.value = "";
  44402. dateRange.value = "";
  44403. startTime.value = "";
  44404. endTime.value = "";
  44405. pagingRef.value.reload();
  44406. }
  44407. const __returned__ = { t: t2, pagingRef, moneyLogList, fundTypePickerShow, typePickerShow, calendarShow, fundType, transactionType, startTime, endTime, dateRange, fundTypeColumns, typeColumns, fundTypeText, transactionTypeText, onQuery, onFundTypeConfirm, onTypeConfirm, onCalendarChange, handleQuery: handleQuery2, handleReset };
  44408. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  44409. return __returned__;
  44410. }
  44411. });
  44412. function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
  44413. const _component_u_icon = __unplugin_components_0$5;
  44414. const _component_u_button = __unplugin_components_2$1;
  44415. const _component_u_empty = __unplugin_components_4$2;
  44416. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  44417. const _component_u_select = __unplugin_components_5$1;
  44418. const _component_u_calendar = __unplugin_components_6;
  44419. const _component_PageContainer = PageContainer;
  44420. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  44421. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  44422. default: vue.withCtx(() => [
  44423. vue.createVNode(_component_PageContainer, { "nav-title": "资金记录" }, {
  44424. default: vue.withCtx(() => [
  44425. vue.createElementVNode("view", { class: "page-content" }, [
  44426. vue.createVNode(_component_z_paging, {
  44427. ref: "pagingRef",
  44428. modelValue: $setup.moneyLogList,
  44429. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.moneyLogList = $event),
  44430. onQuery: $setup.onQuery,
  44431. fixed: false,
  44432. "refresher-enabled": true,
  44433. "loading-more-enabled": true,
  44434. "auto-show-back-to-top": true,
  44435. "back-to-top-threshold": 300,
  44436. loadingMoreLoadingText: $setup.t("正在加载"),
  44437. loadingMoreNoMoreText: $setup.t("没有更多了"),
  44438. loadingMoreDefaultText: $setup.t("点击加载更多")
  44439. }, {
  44440. top: vue.withCtx(() => [
  44441. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  44442. vue.createElementVNode("view", { class: "filter-card" }, [
  44443. vue.createElementVNode("view", { class: "filter-header" }, [
  44444. vue.createElementVNode("view", { class: "title-line" }, [
  44445. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  44446. vue.createElementVNode(
  44447. "text",
  44448. { class: "title-text" },
  44449. vue.toDisplayString($setup.t("条件筛选")),
  44450. 1
  44451. /* TEXT */
  44452. )
  44453. ]),
  44454. vue.createElementVNode(
  44455. "text",
  44456. {
  44457. class: "reset-link",
  44458. onClick: $setup.handleReset
  44459. },
  44460. vue.toDisplayString($setup.t("重置全部")),
  44461. 1
  44462. /* TEXT */
  44463. )
  44464. ]),
  44465. vue.createElementVNode("view", { class: "filter-body" }, [
  44466. vue.createElementVNode("view", { class: "filter-row" }, [
  44467. vue.createElementVNode("view", {
  44468. class: "filter-item type-item",
  44469. onClick: _cache[0] || (_cache[0] = ($event) => $setup.fundTypePickerShow = true)
  44470. }, [
  44471. vue.createVNode(_component_u_icon, {
  44472. name: "rmb-circle",
  44473. size: "32",
  44474. color: _ctx.$mainColor
  44475. }, null, 8, ["color"]),
  44476. vue.createElementVNode("view", { class: "filter-content" }, [
  44477. vue.withDirectives(vue.createElementVNode(
  44478. "text",
  44479. { class: "filter-value" },
  44480. vue.toDisplayString($setup.fundTypeText),
  44481. 513
  44482. /* TEXT, NEED_PATCH */
  44483. ), [
  44484. [vue.vShow, $setup.fundTypeText]
  44485. ]),
  44486. vue.withDirectives(vue.createElementVNode(
  44487. "text",
  44488. { class: "filter-placeholder" },
  44489. vue.toDisplayString($setup.t("全部资金")),
  44490. 513
  44491. /* TEXT, NEED_PATCH */
  44492. ), [
  44493. [vue.vShow, !$setup.fundTypeText]
  44494. ])
  44495. ]),
  44496. vue.createVNode(_component_u_icon, {
  44497. name: "arrow-down",
  44498. size: "14",
  44499. color: "#ccc"
  44500. })
  44501. ]),
  44502. vue.createElementVNode("view", {
  44503. class: "filter-item type-item",
  44504. onClick: _cache[1] || (_cache[1] = ($event) => $setup.typePickerShow = true)
  44505. }, [
  44506. vue.createVNode(_component_u_icon, {
  44507. name: "list-dot",
  44508. size: "32",
  44509. color: _ctx.$mainColor
  44510. }, null, 8, ["color"]),
  44511. vue.createElementVNode("view", { class: "filter-content" }, [
  44512. vue.withDirectives(vue.createElementVNode(
  44513. "text",
  44514. { class: "filter-value" },
  44515. vue.toDisplayString($setup.transactionTypeText),
  44516. 513
  44517. /* TEXT, NEED_PATCH */
  44518. ), [
  44519. [vue.vShow, $setup.transactionTypeText]
  44520. ]),
  44521. vue.withDirectives(vue.createElementVNode(
  44522. "text",
  44523. { class: "filter-placeholder" },
  44524. vue.toDisplayString($setup.t("全部类型")),
  44525. 513
  44526. /* TEXT, NEED_PATCH */
  44527. ), [
  44528. [vue.vShow, !$setup.transactionTypeText]
  44529. ])
  44530. ]),
  44531. vue.createVNode(_component_u_icon, {
  44532. name: "arrow-down",
  44533. size: "14",
  44534. color: "#ccc"
  44535. })
  44536. ])
  44537. ]),
  44538. vue.createElementVNode("view", { class: "filter-row" }, [
  44539. vue.createElementVNode("view", {
  44540. class: "filter-item date-item",
  44541. onClick: _cache[2] || (_cache[2] = ($event) => $setup.calendarShow = true)
  44542. }, [
  44543. vue.createVNode(_component_u_icon, {
  44544. name: "calendar",
  44545. size: "32",
  44546. color: _ctx.$mainColor
  44547. }, null, 8, ["color"]),
  44548. vue.createElementVNode("view", { class: "filter-content" }, [
  44549. $setup.dateRange ? (vue.openBlock(), vue.createElementBlock(
  44550. "text",
  44551. {
  44552. key: 0,
  44553. class: "filter-value"
  44554. },
  44555. vue.toDisplayString($setup.dateRange),
  44556. 1
  44557. /* TEXT */
  44558. )) : (vue.openBlock(), vue.createElementBlock(
  44559. "text",
  44560. {
  44561. key: 1,
  44562. class: "filter-placeholder"
  44563. },
  44564. vue.toDisplayString($setup.t("日期区间")),
  44565. 1
  44566. /* TEXT */
  44567. ))
  44568. ]),
  44569. vue.createVNode(_component_u_icon, {
  44570. name: "arrow-down",
  44571. size: "14",
  44572. color: "#ccc"
  44573. })
  44574. ])
  44575. ]),
  44576. vue.createElementVNode("view", { class: "button-group" }, [
  44577. vue.createVNode(_component_u_button, {
  44578. type: "primary",
  44579. shape: "circle",
  44580. class: "search-btn",
  44581. onClick: $setup.handleQuery,
  44582. ripple: ""
  44583. }, {
  44584. default: vue.withCtx(() => [
  44585. vue.createVNode(_component_u_icon, {
  44586. name: "search",
  44587. size: "32",
  44588. color: "#fff",
  44589. class: "mr-1"
  44590. }),
  44591. vue.createTextVNode(
  44592. " " + vue.toDisplayString($setup.t("立即查询")),
  44593. 1
  44594. /* TEXT */
  44595. )
  44596. ]),
  44597. _: 1
  44598. /* STABLE */
  44599. })
  44600. ])
  44601. ])
  44602. ])
  44603. ])
  44604. ]),
  44605. refresher: vue.withCtx(() => [
  44606. vue.createElementVNode("view", { class: "refresher-ui" }, [
  44607. vue.createElementVNode("view", { class: "spin-loader" }),
  44608. vue.createElementVNode(
  44609. "text",
  44610. { class: "refresher-text" },
  44611. vue.toDisplayString($setup.t("更新数据中...")),
  44612. 1
  44613. /* TEXT */
  44614. )
  44615. ])
  44616. ]),
  44617. empty: vue.withCtx(() => [
  44618. vue.createElementVNode("view", { class: "empty-ui" }, [
  44619. vue.createVNode(_component_u_empty, {
  44620. text: $setup.t("暂无相关资金记录"),
  44621. mode: "data",
  44622. "icon-size": "120"
  44623. }, null, 8, ["text"])
  44624. ])
  44625. ]),
  44626. default: vue.withCtx(() => [
  44627. vue.createElementVNode("view", { class: "money-log-list" }, [
  44628. (vue.openBlock(true), vue.createElementBlock(
  44629. vue.Fragment,
  44630. null,
  44631. vue.renderList($setup.moneyLogList, (item) => {
  44632. return vue.openBlock(), vue.createElementBlock("view", {
  44633. key: item.id,
  44634. class: "log-card"
  44635. }, [
  44636. vue.createElementVNode("view", { class: "card-header" }, [
  44637. vue.createElementVNode(
  44638. "view",
  44639. {
  44640. class: vue.normalizeClass(["type-badge", parseFloat(item.amount || 0) < 0 ? "withdraw" : "recharge"])
  44641. },
  44642. [
  44643. vue.createElementVNode("view", { class: "dot" }),
  44644. vue.createElementVNode(
  44645. "text",
  44646. null,
  44647. vue.toDisplayString(item.change_type || (parseFloat(item.amount || 0) < 0 ? $setup.t("支出") : $setup.t("收入"))),
  44648. 1
  44649. /* TEXT */
  44650. ),
  44651. vue.createElementVNode(
  44652. "text",
  44653. null,
  44654. vue.toDisplayString(item.change_type_text || ""),
  44655. 1
  44656. /* TEXT */
  44657. )
  44658. ],
  44659. 2
  44660. /* CLASS */
  44661. )
  44662. ]),
  44663. vue.createElementVNode("view", { class: "card-main" }, [
  44664. vue.createElementVNode("view", { class: "amount-box" }, [
  44665. vue.createElementVNode(
  44666. "text",
  44667. {
  44668. class: vue.normalizeClass(["amount-val", parseFloat(item.amount) < 0 ? "decrease" : "increase"])
  44669. },
  44670. vue.toDisplayString(parseFloat(item.amount || 0) > 0 ? "+" + parseFloat(item.amount || 0) : parseFloat(item.amount || 0)),
  44671. 3
  44672. /* TEXT, CLASS */
  44673. ),
  44674. vue.createElementVNode(
  44675. "text",
  44676. { class: "currency" },
  44677. vue.toDisplayString(_ctx.$currency),
  44678. 1
  44679. /* TEXT */
  44680. )
  44681. ]),
  44682. vue.createElementVNode("view", { class: "time-box" }, [
  44683. vue.createElementVNode(
  44684. "text",
  44685. { class: "time-text" },
  44686. vue.toDisplayString(item.created_at),
  44687. 1
  44688. /* TEXT */
  44689. )
  44690. ])
  44691. ]),
  44692. vue.createElementVNode("view", { class: "card-footer" }, [
  44693. vue.createElementVNode("view", { class: "info-row" }, [
  44694. vue.createElementVNode(
  44695. "text",
  44696. { class: "info-label" },
  44697. vue.toDisplayString($setup.t("资金类型")),
  44698. 1
  44699. /* TEXT */
  44700. ),
  44701. vue.createElementVNode(
  44702. "text",
  44703. { class: "info-value" },
  44704. vue.toDisplayString(item.type == 1 ? $setup.t("可用余额") : item.type == 2 ? $setup.t("冻结金额") : $setup.t("未知")),
  44705. 1
  44706. /* TEXT */
  44707. )
  44708. ]),
  44709. vue.createElementVNode("view", { class: "info-row" }, [
  44710. vue.createElementVNode(
  44711. "text",
  44712. { class: "info-label" },
  44713. vue.toDisplayString($setup.t("变动前余额")),
  44714. 1
  44715. /* TEXT */
  44716. ),
  44717. vue.createElementVNode(
  44718. "text",
  44719. { class: "info-value" },
  44720. vue.toDisplayString(parseFloat(item.before_balance || 0)),
  44721. 1
  44722. /* TEXT */
  44723. )
  44724. ]),
  44725. vue.createElementVNode("view", { class: "info-row" }, [
  44726. vue.createElementVNode(
  44727. "text",
  44728. { class: "info-label" },
  44729. vue.toDisplayString($setup.t("变动后余额")),
  44730. 1
  44731. /* TEXT */
  44732. ),
  44733. vue.createElementVNode(
  44734. "text",
  44735. { class: "info-value highlighted" },
  44736. vue.toDisplayString(parseFloat(item.after_balance || 0)),
  44737. 1
  44738. /* TEXT */
  44739. )
  44740. ])
  44741. ])
  44742. ]);
  44743. }),
  44744. 128
  44745. /* KEYED_FRAGMENT */
  44746. ))
  44747. ])
  44748. ]),
  44749. _: 1
  44750. /* STABLE */
  44751. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])
  44752. ]),
  44753. vue.createVNode(_component_u_select, {
  44754. modelValue: $setup.fundTypePickerShow,
  44755. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.fundTypePickerShow = $event),
  44756. mode: "single-column",
  44757. list: $setup.fundTypeColumns,
  44758. "confirm-color": _ctx.$mainColor,
  44759. onConfirm: $setup.onFundTypeConfirm
  44760. }, null, 8, ["modelValue", "list", "confirm-color"]),
  44761. vue.createVNode(_component_u_select, {
  44762. modelValue: $setup.typePickerShow,
  44763. "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $setup.typePickerShow = $event),
  44764. mode: "single-column",
  44765. list: $setup.typeColumns,
  44766. "confirm-color": _ctx.$mainColor,
  44767. onConfirm: $setup.onTypeConfirm
  44768. }, null, 8, ["modelValue", "list", "confirm-color"]),
  44769. vue.createVNode(_component_u_calendar, {
  44770. modelValue: $setup.calendarShow,
  44771. "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.calendarShow = $event),
  44772. mode: "range",
  44773. "active-bg-color": _ctx.$mainColor,
  44774. "range-color": _ctx.$mainColor,
  44775. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  44776. "start-text": $setup.t("开始"),
  44777. "end-text": $setup.t("结束"),
  44778. "btn-type": "primary",
  44779. onChange: $setup.onCalendarChange
  44780. }, null, 8, ["modelValue", "active-bg-color", "range-color", "start-text", "end-text"])
  44781. ]),
  44782. _: 1
  44783. /* STABLE */
  44784. })
  44785. ]),
  44786. _: 1
  44787. /* STABLE */
  44788. });
  44789. }
  44790. const PagesWorkModuleMyFundRecordIndex = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$h], ["__scopeId", "data-v-b9e809c6"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/my/fundRecord/index.vue"]]);
  44791. const _sfc_main$h = {
  44792. __name: "index",
  44793. setup(__props, { expose: __expose }) {
  44794. __expose();
  44795. const { t: t2 } = useI18n();
  44796. const router2 = useRouter();
  44797. const orderStore = useOrderStore();
  44798. const userMoney = vue.ref(0);
  44799. const safeModalRef = vue.ref(null);
  44800. const showSafeModal = vue.ref(false);
  44801. const safeWord = vue.ref("");
  44802. const retryModalRef = vue.ref(null);
  44803. const showRetryModal = vue.ref(false);
  44804. const retryFailures = vue.ref([]);
  44805. const checkIsLocked = (item) => {
  44806. if (!item)
  44807. return true;
  44808. if (Number(item.is_locked) === 1)
  44809. return true;
  44810. if (item.status !== void 0 && Number(item.status) !== 1)
  44811. return true;
  44812. if (!item.odds || item.odds === "-" || Number(item.odds) === 0)
  44813. return true;
  44814. if (item.state !== void 0) {
  44815. const state = Number(item.state);
  44816. if (state !== 0 && state !== 1)
  44817. return true;
  44818. }
  44819. return false;
  44820. };
  44821. const validOrders = vue.computed(() => {
  44822. return orderStore.selectOrders.filter((item) => !checkIsLocked(item));
  44823. });
  44824. const validTotalOdds = vue.computed(() => {
  44825. if (validOrders.value.length === 0)
  44826. return 0;
  44827. return validOrders.value.reduce((sum, item) => sum + (Number(item.odds) || 0), 0);
  44828. });
  44829. const validTotalStake = vue.computed(() => {
  44830. return validOrders.value.reduce((sum, item) => sum + (Number(item.stake) || 0), 0);
  44831. });
  44832. function getData() {
  44833. getBalance().then((res) => {
  44834. userMoney.value = res.data.money;
  44835. }).catch((err) => {
  44836. });
  44837. }
  44838. const goBack = () => {
  44839. uni.navigateBack();
  44840. };
  44841. const topUp = () => {
  44842. router2.push({ name: "topUp" });
  44843. };
  44844. const changeStake = (item, delta) => {
  44845. if (checkIsLocked(item))
  44846. return;
  44847. let val = Number(item.stake) || 0;
  44848. val += delta;
  44849. if (val < 0)
  44850. val = 0;
  44851. orderStore.updateStake(item.uniqueKey, val);
  44852. item.errorMsg = "";
  44853. };
  44854. const onInputStake = (e, item) => {
  44855. if (checkIsLocked(item))
  44856. return;
  44857. orderStore.updateStake(item.uniqueKey, e.detail.value);
  44858. item.errorMsg = "";
  44859. };
  44860. const submitBet = () => {
  44861. if (orderStore.selectOrders.length === 0) {
  44862. return uni.$u.toast(t2("请选择投注单"));
  44863. }
  44864. if (validOrders.value.length === 0) {
  44865. return uni.$u.toast(t2("暂无有效投注项,请移除锁定盘口或重新选择"));
  44866. }
  44867. if (validTotalStake.value > userMoney.value) {
  44868. return uni.showToast({ title: t2("余额不足"), icon: "none" });
  44869. }
  44870. safeWord.value = "";
  44871. confirmSubmitBet();
  44872. };
  44873. const doSubmit = (ordersData, submittedKeys, isRetry = false) => {
  44874. submitOrder({
  44875. data: ordersData,
  44876. safe_word: safeWord.value
  44877. }).then((res) => {
  44878. var _a2, _b2, _c;
  44879. if (res.code === 1) {
  44880. const failures = ((_a2 = res.data) == null ? void 0 : _a2.failure) || [];
  44881. const newOrders = [];
  44882. orderStore.selectOrders.forEach((order) => {
  44883. const isSubmitted = submittedKeys.includes(order.uniqueKey);
  44884. if (isSubmitted) {
  44885. const failInfo = failures.find(
  44886. (f) => String(f.data_id) === String(order.data_id) && String(f.id) === String(order.marketId) && String(f.value) === String(order.optionValue) && String(f.handicap || "") === String(order.handicap || "")
  44887. );
  44888. if (failInfo) {
  44889. order.errorMsg = failInfo.msg || t2("投注失败");
  44890. if (failInfo.odd)
  44891. order.odds = failInfo.odd;
  44892. newOrders.push(order);
  44893. }
  44894. } else {
  44895. newOrders.push(order);
  44896. }
  44897. });
  44898. orderStore.selectOrders = newOrders;
  44899. orderStore.saveToStorage();
  44900. if (isRetry) {
  44901. showRetryModal.value = false;
  44902. } else {
  44903. showSafeModal.value = false;
  44904. }
  44905. if (failures.length === 0) {
  44906. uni.showToast({ title: t2("全部下注成功"), icon: "success" });
  44907. if (orderStore.selectOrders.length === 0) {
  44908. setTimeout(() => {
  44909. goBack();
  44910. }, 1e3);
  44911. }
  44912. } else {
  44913. const successCount = ordersData.length - failures.length;
  44914. if (successCount > 0) {
  44915. uni.showToast({ title: `成功 ${successCount}单,失败 ${failures.length}单`, icon: "none", duration: 2500 });
  44916. }
  44917. retryFailures.value = failures;
  44918. setTimeout(() => {
  44919. showRetryModal.value = true;
  44920. }, 500);
  44921. }
  44922. getData();
  44923. } else {
  44924. uni.showToast({ title: res.msg || t2("投注失败"), icon: "none" });
  44925. if (isRetry) {
  44926. (_b2 = retryModalRef.value) == null ? void 0 : _b2.clearLoading();
  44927. } else {
  44928. (_c = safeModalRef.value) == null ? void 0 : _c.clearLoading();
  44929. }
  44930. }
  44931. }).catch((err) => {
  44932. var _a2, _b2;
  44933. if (isRetry) {
  44934. (_a2 = retryModalRef.value) == null ? void 0 : _a2.clearLoading();
  44935. } else {
  44936. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  44937. }
  44938. });
  44939. };
  44940. const confirmSubmitBet = () => {
  44941. uni.showModal({
  44942. title: t2("提示"),
  44943. content: t2("确认提交吗?"),
  44944. success: (res) => {
  44945. if (res.confirm) {
  44946. const submittedKeys = [];
  44947. const ordersData = validOrders.value.map((item) => {
  44948. submittedKeys.push(item.uniqueKey);
  44949. const payload = {
  44950. data_id: item.data_id,
  44951. amount: item.stake,
  44952. id: item.marketId,
  44953. value: item.optionValue,
  44954. odd: item.odds
  44955. };
  44956. if (item.handicap !== null && item.handicap !== void 0 && item.handicap !== "") {
  44957. payload.handicap = String(item.handicap);
  44958. }
  44959. return payload;
  44960. });
  44961. doSubmit(ordersData, submittedKeys, false);
  44962. }
  44963. }
  44964. });
  44965. };
  44966. const confirmRetryBet = () => {
  44967. const submittedKeys = [];
  44968. const ordersData = retryFailures.value.map((f) => {
  44969. let hdp = f.handicap !== null && f.handicap !== void 0 && f.handicap !== "" ? `_${f.handicap}` : "";
  44970. submittedKeys.push(`${f.data_id}_${f.id}_${f.value}${hdp}`);
  44971. const payload = {
  44972. data_id: f.data_id,
  44973. amount: f.amount,
  44974. id: f.id,
  44975. value: f.value,
  44976. odd: f.odd
  44977. };
  44978. if (f.handicap !== null && f.handicap !== void 0 && f.handicap !== "") {
  44979. payload.handicap = String(f.handicap);
  44980. }
  44981. return payload;
  44982. });
  44983. doSubmit(ordersData, submittedKeys, true);
  44984. };
  44985. onShow(() => {
  44986. getData();
  44987. });
  44988. const __returned__ = { t: t2, router: router2, orderStore, userMoney, safeModalRef, showSafeModal, safeWord, retryModalRef, showRetryModal, retryFailures, checkIsLocked, validOrders, validTotalOdds, validTotalStake, getData, goBack, topUp, changeStake, onInputStake, submitBet, doSubmit, confirmSubmitBet, confirmRetryBet, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, get onShow() {
  44989. return onShow;
  44990. }, get useI18n() {
  44991. return useI18n;
  44992. }, get useOrderStore() {
  44993. return useOrderStore;
  44994. }, get getBalance() {
  44995. return getBalance;
  44996. }, get submitOrder() {
  44997. return submitOrder;
  44998. } };
  44999. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  45000. return __returned__;
  45001. }
  45002. };
  45003. function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
  45004. const _component_u_icon = __unplugin_components_0$5;
  45005. const _component_u_button = __unplugin_components_2$1;
  45006. const _component_u_input = __unplugin_components_3$2;
  45007. const _component_u_modal = __unplugin_components_4$3;
  45008. const _component_PageContainer = PageContainer;
  45009. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  45010. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  45011. default: vue.withCtx(() => [
  45012. vue.createVNode(_component_PageContainer, {
  45013. "nav-title": $setup.t("投注单")
  45014. }, {
  45015. navBarRight: vue.withCtx(() => [
  45016. vue.createElementVNode("view", { style: { "display": "flex", "gap": "10px" } }, [
  45017. vue.createElementVNode("view", {
  45018. class: "nav-btn",
  45019. onClick: _cache[0] || (_cache[0] = ($event) => $setup.router.push({ name: "AllHistory", query: { tab: 0 } }))
  45020. }, [
  45021. vue.createVNode(_component_u_icon, {
  45022. name: "clock",
  45023. size: "36"
  45024. })
  45025. ]),
  45026. vue.createElementVNode("view", {
  45027. class: "nav-btn",
  45028. onClick: _cache[1] || (_cache[1] = (...args) => $setup.orderStore.clearAllOrders && $setup.orderStore.clearAllOrders(...args))
  45029. }, [
  45030. vue.createVNode(_component_u_icon, {
  45031. name: "trash",
  45032. size: "36"
  45033. })
  45034. ])
  45035. ])
  45036. ]),
  45037. default: vue.withCtx(() => [
  45038. vue.createElementVNode("view", { class: "content" }, [
  45039. $setup.orderStore.selectedCount === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  45040. key: 0,
  45041. class: "empty-sheet"
  45042. }, [
  45043. vue.createElementVNode(
  45044. "text",
  45045. null,
  45046. vue.toDisplayString($setup.t("暂无投注项")),
  45047. 1
  45048. /* TEXT */
  45049. ),
  45050. vue.createVNode(_component_u_button, {
  45051. type: "primary",
  45052. customStyle: { marginTop: "20px", width: "120px" },
  45053. onClick: $setup.goBack
  45054. }, {
  45055. default: vue.withCtx(() => [
  45056. vue.createTextVNode(
  45057. vue.toDisplayString($setup.t("去投注")),
  45058. 1
  45059. /* TEXT */
  45060. )
  45061. ]),
  45062. _: 1
  45063. /* STABLE */
  45064. })
  45065. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  45066. key: 1,
  45067. class: "bet-list"
  45068. }, [
  45069. (vue.openBlock(true), vue.createElementBlock(
  45070. vue.Fragment,
  45071. null,
  45072. vue.renderList($setup.orderStore.selectOrders, (item, index) => {
  45073. return vue.openBlock(), vue.createElementBlock(
  45074. "view",
  45075. {
  45076. class: vue.normalizeClass(["bet-item", { "is-locked": $setup.checkIsLocked(item) }]),
  45077. key: index
  45078. },
  45079. [
  45080. $setup.checkIsLocked(item) ? (vue.openBlock(), vue.createElementBlock("view", {
  45081. key: 0,
  45082. class: "lock-overlay"
  45083. }, [
  45084. vue.createVNode(_component_u_icon, {
  45085. name: "lock-fill",
  45086. color: "#fff",
  45087. size: "32"
  45088. }),
  45089. vue.createElementVNode(
  45090. "text",
  45091. { class: "lock-text" },
  45092. vue.toDisplayString($setup.t("盘口已失效或关闭")),
  45093. 1
  45094. /* TEXT */
  45095. )
  45096. ])) : vue.createCommentVNode("v-if", true),
  45097. item.errorMsg ? (vue.openBlock(), vue.createElementBlock("view", {
  45098. key: 1,
  45099. class: "fail-msg-box"
  45100. }, [
  45101. vue.createVNode(_component_u_icon, {
  45102. name: "info-circle-fill",
  45103. color: "#fa3534",
  45104. size: "28"
  45105. }),
  45106. vue.createElementVNode(
  45107. "text",
  45108. { class: "fail-text" },
  45109. vue.toDisplayString($setup.t(item.errorMsg)),
  45110. 1
  45111. /* TEXT */
  45112. )
  45113. ])) : vue.createCommentVNode("v-if", true),
  45114. vue.createElementVNode("view", { class: "item-header" }, [
  45115. vue.createElementVNode(
  45116. "text",
  45117. { class: "team-names" },
  45118. vue.toDisplayString(item.homeTeam) + " - " + vue.toDisplayString(item.guestTeam),
  45119. 1
  45120. /* TEXT */
  45121. ),
  45122. vue.createElementVNode("view", {
  45123. class: "close-btn",
  45124. onClick: vue.withModifiers(($event) => $setup.orderStore.removeOrderItem(item.uniqueKey), ["stop"])
  45125. }, [
  45126. vue.createVNode(_component_u_icon, {
  45127. name: "close",
  45128. color: "#666",
  45129. size: "16"
  45130. })
  45131. ], 8, ["onClick"])
  45132. ]),
  45133. vue.createElementVNode("view", { class: "item-info" }, [
  45134. vue.createElementVNode("view", { class: "bet-type" }, [
  45135. vue.createElementVNode("text", { class: "type-name" }, [
  45136. vue.createTextVNode(
  45137. vue.toDisplayString(item.betType) + ": " + vue.toDisplayString(item.betTypeName) + " ",
  45138. 1
  45139. /* TEXT */
  45140. ),
  45141. item.handicap ? (vue.openBlock(), vue.createElementBlock(
  45142. "text",
  45143. {
  45144. key: 0,
  45145. style: { "margin-left": "4px", "color": "#f8b932" }
  45146. },
  45147. "[" + vue.toDisplayString(item.handicap) + "]",
  45148. 1
  45149. /* TEXT */
  45150. )) : vue.createCommentVNode("v-if", true)
  45151. ])
  45152. ]),
  45153. vue.createElementVNode("view", { class: "odds-box" }, [
  45154. vue.createElementVNode(
  45155. "text",
  45156. { class: "odds-val" },
  45157. vue.toDisplayString(item.odds),
  45158. 1
  45159. /* TEXT */
  45160. )
  45161. ])
  45162. ]),
  45163. vue.createElementVNode("view", { class: "league-info" }, [
  45164. vue.createElementVNode(
  45165. "text",
  45166. null,
  45167. vue.toDisplayString(item.league),
  45168. 1
  45169. /* TEXT */
  45170. ),
  45171. item.score && item.score !== "-" ? (vue.openBlock(), vue.createElementBlock(
  45172. "text",
  45173. {
  45174. key: 0,
  45175. class: "live-score"
  45176. },
  45177. vue.toDisplayString($setup.t("当前比分")) + ": " + vue.toDisplayString(item.score),
  45178. 1
  45179. /* TEXT */
  45180. )) : vue.createCommentVNode("v-if", true)
  45181. ]),
  45182. vue.createElementVNode(
  45183. "view",
  45184. {
  45185. class: vue.normalizeClass(["stake-input-box", { "error-border": item.errorMsg || !$setup.checkIsLocked(item) && Number(item.stake) > Number($setup.userMoney) }])
  45186. },
  45187. [
  45188. vue.createElementVNode("view", {
  45189. class: "stepper-btn",
  45190. onClick: vue.withModifiers(($event) => $setup.changeStake(item, -10), ["stop"])
  45191. }, [
  45192. vue.createVNode(_component_u_icon, {
  45193. name: "minus",
  45194. size: "24"
  45195. })
  45196. ], 8, ["onClick"]),
  45197. vue.withDirectives(vue.createElementVNode("input", {
  45198. type: "number",
  45199. class: "stake-input",
  45200. "onUpdate:modelValue": ($event) => item.stake = $event,
  45201. onInput: (e) => $setup.onInputStake(e, item),
  45202. placeholder: "本金",
  45203. disabled: $setup.checkIsLocked(item)
  45204. }, null, 40, ["onUpdate:modelValue", "onInput", "disabled"]), [
  45205. [vue.vModelText, item.stake]
  45206. ]),
  45207. vue.createElementVNode("view", {
  45208. class: "stepper-btn",
  45209. onClick: vue.withModifiers(($event) => $setup.changeStake(item, 10), ["stop"])
  45210. }, [
  45211. vue.createVNode(_component_u_icon, {
  45212. name: "plus",
  45213. size: "24"
  45214. })
  45215. ], 8, ["onClick"])
  45216. ],
  45217. 2
  45218. /* CLASS */
  45219. ),
  45220. vue.createElementVNode("view", { class: "item-footer" }, [
  45221. !$setup.checkIsLocked(item) && Number(item.stake) > Number($setup.userMoney) ? (vue.openBlock(), vue.createElementBlock(
  45222. "view",
  45223. {
  45224. key: 0,
  45225. class: "err-msg"
  45226. },
  45227. vue.toDisplayString($setup.t("投注额超过您的余额")),
  45228. 1
  45229. /* TEXT */
  45230. )) : (vue.openBlock(), vue.createElementBlock("view", {
  45231. key: 1,
  45232. class: "potential-win"
  45233. }, [
  45234. vue.createTextVNode(
  45235. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  45236. 1
  45237. /* TEXT */
  45238. ),
  45239. vue.createElementVNode(
  45240. "text",
  45241. { class: "win-amount" },
  45242. vue.toDisplayString((Number(item.stake) * Number(item.odds)).toFixed(2)) + " " + vue.toDisplayString(_ctx.$currency),
  45243. 1
  45244. /* TEXT */
  45245. )
  45246. ]))
  45247. ])
  45248. ],
  45249. 2
  45250. /* CLASS */
  45251. );
  45252. }),
  45253. 128
  45254. /* KEYED_FRAGMENT */
  45255. ))
  45256. ]))
  45257. ]),
  45258. $setup.orderStore.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  45259. key: 0,
  45260. class: "sheet-action-bar"
  45261. }, [
  45262. vue.createElementVNode("view", { class: "total-odds-row" }, [
  45263. vue.createElementVNode(
  45264. "text",
  45265. { class: "label" },
  45266. vue.toDisplayString($setup.t("总赔率 (有效)")),
  45267. 1
  45268. /* TEXT */
  45269. ),
  45270. vue.createElementVNode(
  45271. "text",
  45272. { class: "val" },
  45273. vue.toDisplayString($setup.validTotalOdds.toFixed(2)),
  45274. 1
  45275. /* TEXT */
  45276. )
  45277. ]),
  45278. $setup.validTotalStake > $setup.userMoney ? (vue.openBlock(), vue.createBlock(_component_u_button, {
  45279. key: 0,
  45280. type: "primary",
  45281. onClick: $setup.topUp
  45282. }, {
  45283. default: vue.withCtx(() => [
  45284. vue.createTextVNode(
  45285. vue.toDisplayString($setup.t("存款")),
  45286. 1
  45287. /* TEXT */
  45288. )
  45289. ]),
  45290. _: 1
  45291. /* STABLE */
  45292. })) : (vue.openBlock(), vue.createBlock(_component_u_button, {
  45293. key: 1,
  45294. type: "primary",
  45295. onClick: $setup.submitBet
  45296. }, {
  45297. default: vue.withCtx(() => [
  45298. vue.createTextVNode(
  45299. vue.toDisplayString($setup.t("投注")),
  45300. 1
  45301. /* TEXT */
  45302. )
  45303. ]),
  45304. _: 1
  45305. /* STABLE */
  45306. }))
  45307. ])) : vue.createCommentVNode("v-if", true),
  45308. vue.createVNode(_component_u_modal, {
  45309. ref: "safeModalRef",
  45310. modelValue: $setup.showSafeModal,
  45311. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.showSafeModal = $event),
  45312. "async-close": true,
  45313. title: $setup.t("安全验证"),
  45314. "show-cancel-button": true,
  45315. "confirm-text": $setup.t("确定投注"),
  45316. "cancel-text": $setup.t("取消"),
  45317. "confirm-color": "#f8b932",
  45318. onConfirm: $setup.confirmSubmitBet
  45319. }, {
  45320. default: vue.withCtx(() => [
  45321. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  45322. vue.createElementVNode(
  45323. "text",
  45324. { class: "safe-tips" },
  45325. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  45326. 1
  45327. /* TEXT */
  45328. ),
  45329. vue.createVNode(_component_u_input, {
  45330. modelValue: $setup.safeWord,
  45331. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.safeWord = $event),
  45332. type: "password",
  45333. placeholder: $setup.t("请输入资金密码"),
  45334. border: true,
  45335. "border-color": "#e4e7ed",
  45336. clearable: true
  45337. }, null, 8, ["modelValue", "placeholder"])
  45338. ])
  45339. ]),
  45340. _: 1
  45341. /* STABLE */
  45342. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"]),
  45343. vue.createVNode(_component_u_modal, {
  45344. ref: "retryModalRef",
  45345. modelValue: $setup.showRetryModal,
  45346. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.showRetryModal = $event),
  45347. "async-close": true,
  45348. title: $setup.t("提示"),
  45349. "show-cancel-button": true,
  45350. "confirm-text": $setup.t("确定"),
  45351. "cancel-text": $setup.t("取消"),
  45352. "confirm-color": "#f8b932",
  45353. onConfirm: $setup.confirmRetryBet
  45354. }, {
  45355. default: vue.withCtx(() => [
  45356. vue.createElementVNode("view", { class: "retry-modal-content" }, [
  45357. vue.createElementVNode(
  45358. "text",
  45359. { class: "retry-tips" },
  45360. vue.toDisplayString($setup.t("以下注单提交失败,是否重新提交?")),
  45361. 1
  45362. /* TEXT */
  45363. ),
  45364. vue.createElementVNode("scroll-view", {
  45365. "scroll-y": "",
  45366. class: "retry-list"
  45367. }, [
  45368. (vue.openBlock(true), vue.createElementBlock(
  45369. vue.Fragment,
  45370. null,
  45371. vue.renderList($setup.retryFailures, (err, idx) => {
  45372. return vue.openBlock(), vue.createElementBlock("view", {
  45373. class: "retry-item",
  45374. key: idx
  45375. }, [
  45376. vue.createElementVNode("text", { class: "err-val" }, [
  45377. vue.createTextVNode(
  45378. vue.toDisplayString(err.value) + " ",
  45379. 1
  45380. /* TEXT */
  45381. ),
  45382. err.handicap ? (vue.openBlock(), vue.createElementBlock(
  45383. "text",
  45384. { key: 0 },
  45385. "[" + vue.toDisplayString(err.handicap) + "]",
  45386. 1
  45387. /* TEXT */
  45388. )) : vue.createCommentVNode("v-if", true),
  45389. vue.createTextVNode(
  45390. " @" + vue.toDisplayString(err.odd),
  45391. 1
  45392. /* TEXT */
  45393. )
  45394. ]),
  45395. vue.createElementVNode(
  45396. "text",
  45397. { class: "err-msg" },
  45398. vue.toDisplayString(err.msg),
  45399. 1
  45400. /* TEXT */
  45401. )
  45402. ]);
  45403. }),
  45404. 128
  45405. /* KEYED_FRAGMENT */
  45406. ))
  45407. ])
  45408. ])
  45409. ]),
  45410. _: 1
  45411. /* STABLE */
  45412. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"])
  45413. ]),
  45414. _: 1
  45415. /* STABLE */
  45416. }, 8, ["nav-title"])
  45417. ]),
  45418. _: 1
  45419. /* STABLE */
  45420. });
  45421. }
  45422. const PagesCommonBetSlipIndex = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$g], ["__scopeId", "data-v-94a1f34f"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/betSlip/index.vue"]]);
  45423. const _sfc_main$g = {
  45424. __name: "index",
  45425. setup(__props, { expose: __expose }) {
  45426. __expose();
  45427. const route2 = useRoute();
  45428. let token = vue.ref(uni.getStorageSync("token"));
  45429. if (route2.query.GuestMode && route2.query.GuestMode == 1) {
  45430. token.value = uni.getStorageSync("youke_token");
  45431. }
  45432. let lang = vue.ref(uni.getStorageSync("locale") || "zh");
  45433. var url2 = vue.ref("http://bot28webkefu.sp2509.cc/#/userMsg?token=" + token.value + "&Lang=" + lang.value);
  45434. const __returned__ = { route: route2, get token() {
  45435. return token;
  45436. }, set token(v) {
  45437. token = v;
  45438. }, get lang() {
  45439. return lang;
  45440. }, set lang(v) {
  45441. lang = v;
  45442. }, get url() {
  45443. return url2;
  45444. }, set url(v) {
  45445. url2 = v;
  45446. } };
  45447. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  45448. return __returned__;
  45449. }
  45450. };
  45451. function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
  45452. const _component_PageContainer = PageContainer;
  45453. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  45454. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  45455. default: vue.withCtx(() => [
  45456. vue.createVNode(_component_PageContainer, null, {
  45457. default: vue.withCtx(() => [
  45458. vue.createElementVNode("iframe", {
  45459. height: "100%",
  45460. width: "100%",
  45461. src: $setup.url
  45462. }, null, 8, ["src"])
  45463. ]),
  45464. _: 1
  45465. /* STABLE */
  45466. })
  45467. ]),
  45468. _: 1
  45469. /* STABLE */
  45470. });
  45471. }
  45472. const PagesCommonCustomerServiceIndex = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$f], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/customerService/index.vue"]]);
  45473. const SubsectionProps = {
  45474. ...baseProps,
  45475. /** tab的数据 */
  45476. list: { type: Array, default: () => [] },
  45477. /** 当前活动的tab的index */
  45478. current: { type: [Number, String], default: 0 },
  45479. /** 激活的颜色 */
  45480. activeColor: { type: String, default: "var(--u-main-color)" },
  45481. /** 未激活的颜色 */
  45482. inactiveColor: { type: String, default: "var(--u-content-color)" },
  45483. /** 模式选择,mode=button为按钮形式,mode=subsection时为分段模式 */
  45484. mode: { type: String, default: "button" },
  45485. /** 字体大小,单位rpx */
  45486. fontSize: { type: [Number, String], default: 28 },
  45487. /** 是否开启动画效果 */
  45488. animation: { type: Boolean, default: true },
  45489. /** 组件的高度,单位rpx */
  45490. height: { type: [Number, String], default: 70 },
  45491. /** 激活tab的字体是否加粗 */
  45492. bold: { type: Boolean, default: true },
  45493. /** mode=button时,组件背景颜色 */
  45494. bgColor: { type: String, default: "var(--u-divider-color)" },
  45495. /** mode = button时,滑块背景颜色 */
  45496. buttonColor: { type: String, default: "var(--u-bg-white)" },
  45497. /** 在切换分段器的时候,是否让设备震一下 */
  45498. vibrateShort: { type: Boolean, default: false }
  45499. };
  45500. const __default__ = {
  45501. name: "u-subsection",
  45502. options: {
  45503. addGlobalClass: true,
  45504. virtualHost: true,
  45505. styleIsolation: "shared"
  45506. }
  45507. };
  45508. const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
  45509. ...__default__,
  45510. props: SubsectionProps,
  45511. emits: ["change"],
  45512. setup(__props, { expose: __expose, emit: __emit }) {
  45513. __expose();
  45514. const props = __props;
  45515. const emit = __emit;
  45516. const listInfo = vue.ref([]);
  45517. const itemBgStyle = vue.ref({
  45518. width: 0,
  45519. left: 0,
  45520. backgroundColor: "var(--u-bg-white)",
  45521. height: "100%",
  45522. transition: ""
  45523. });
  45524. const currentIndex = vue.ref(Number(props.current));
  45525. const buttonPadding = 3;
  45526. const borderRadius = 5;
  45527. const firstTimeVibrateShort = vue.ref(true);
  45528. const instanceId = $u.guid();
  45529. const instance = vue.getCurrentInstance();
  45530. vue.watch(
  45531. () => props.current,
  45532. (nVal) => {
  45533. currentIndex.value = Number(nVal);
  45534. changeSectionStatus(currentIndex.value);
  45535. },
  45536. { immediate: true }
  45537. );
  45538. vue.watch(
  45539. () => props.list,
  45540. () => {
  45541. if (!props.list || !props.list.length)
  45542. return;
  45543. initListInfo();
  45544. vue.nextTick(() => {
  45545. setTimeout(() => {
  45546. getTabsInfo();
  45547. }, 10);
  45548. });
  45549. },
  45550. { deep: true, immediate: true }
  45551. );
  45552. vue.watch(
  45553. () => props.mode,
  45554. () => {
  45555. vue.nextTick(() => {
  45556. setTimeout(() => {
  45557. getTabsInfo();
  45558. }, 10);
  45559. });
  45560. }
  45561. );
  45562. function initListInfo() {
  45563. listInfo.value = props.list.map((val) => {
  45564. if (typeof val !== "object") {
  45565. return { width: 0, name: val };
  45566. } else {
  45567. return { ...val, width: 0 };
  45568. }
  45569. });
  45570. }
  45571. const noBorderRight = vue.computed(() => {
  45572. return (index) => {
  45573. if (props.mode !== "subsection")
  45574. return "";
  45575. let classs = "";
  45576. if (index < props.list.length - 1)
  45577. classs += " u-none-border-right";
  45578. if (index === 0)
  45579. classs += " u-item-first";
  45580. if (index === props.list.length - 1)
  45581. classs += " u-item-last";
  45582. return classs;
  45583. };
  45584. });
  45585. const textStyle = vue.computed(() => {
  45586. return (index) => {
  45587. const style = {};
  45588. if (props.mode === "subsection") {
  45589. style.color = index === currentIndex.value ? "var(--u-white-color)" : props.activeColor;
  45590. } else {
  45591. style.color = index === currentIndex.value ? props.activeColor : props.inactiveColor;
  45592. }
  45593. if (index === currentIndex.value && props.bold)
  45594. style.fontWeight = "bold";
  45595. style.fontSize = props.fontSize + "rpx";
  45596. return style;
  45597. };
  45598. });
  45599. const itemStyle = vue.computed(() => {
  45600. return (index) => {
  45601. const style = {};
  45602. if (props.mode === "subsection") {
  45603. style.borderColor = props.activeColor;
  45604. style.borderWidth = "1px";
  45605. style.borderStyle = "solid";
  45606. }
  45607. return style;
  45608. };
  45609. });
  45610. const subsectionStyle = vue.computed(() => {
  45611. const style = {};
  45612. style.height = uni.upx2px(Number(props.height)) + "px";
  45613. if (props.mode === "button") {
  45614. style.backgroundColor = props.bgColor;
  45615. style.padding = `${buttonPadding}px`;
  45616. style.borderRadius = `${borderRadius}px`;
  45617. }
  45618. return style;
  45619. });
  45620. const itemBarStyle = vue.computed(() => {
  45621. const style = {};
  45622. style.backgroundColor = props.activeColor;
  45623. style.zIndex = 1;
  45624. if (props.mode === "button") {
  45625. style.backgroundColor = props.buttonColor;
  45626. style.borderRadius = `${borderRadius}px`;
  45627. style.bottom = `${buttonPadding}px`;
  45628. style.height = uni.upx2px(Number(props.height)) - buttonPadding * 2 + "px";
  45629. style.zIndex = 0;
  45630. }
  45631. return Object.assign({}, itemBgStyle.value, style);
  45632. });
  45633. function changeSectionStatus(nVal) {
  45634. if (props.mode === "subsection") {
  45635. if (nVal === props.list.length - 1) {
  45636. itemBgStyle.value.borderRadius = `0 ${buttonPadding}px ${buttonPadding}px 0`;
  45637. }
  45638. if (nVal === 0) {
  45639. itemBgStyle.value.borderRadius = `${buttonPadding}px 0 0 ${buttonPadding}px`;
  45640. }
  45641. if (nVal > 0 && nVal < props.list.length - 1) {
  45642. itemBgStyle.value.borderRadius = "0";
  45643. }
  45644. }
  45645. setTimeout(() => {
  45646. itemBgLeft();
  45647. }, 10);
  45648. if (props.vibrateShort && !firstTimeVibrateShort.value) {
  45649. uni.vibrateShort();
  45650. }
  45651. firstTimeVibrateShort.value = false;
  45652. }
  45653. function click2(index) {
  45654. if (index === currentIndex.value)
  45655. return;
  45656. currentIndex.value = index;
  45657. changeSectionStatus(index);
  45658. emit("change", index);
  45659. }
  45660. function getTabsInfo() {
  45661. const view = uni.createSelectorQuery().in(instance == null ? void 0 : instance.proxy);
  45662. for (let i = 0; i < props.list.length; i++) {
  45663. view.select(`#${instanceId} .u-item-${i}`).boundingClientRect();
  45664. }
  45665. view.exec((res) => {
  45666. var _a2;
  45667. if (!res.length) {
  45668. setTimeout(() => {
  45669. getTabsInfo();
  45670. return;
  45671. }, 10);
  45672. }
  45673. res.map((val, index) => {
  45674. listInfo.value[index].width = val.width;
  45675. });
  45676. if (props.mode === "subsection" || props.mode === "button") {
  45677. itemBgStyle.value.width = ((_a2 = listInfo.value[0]) == null ? void 0 : _a2.width) + "px";
  45678. }
  45679. itemBgLeft();
  45680. });
  45681. }
  45682. function itemBgLeft() {
  45683. if (props.animation) {
  45684. itemBgStyle.value.transition = "all 0.35s";
  45685. } else {
  45686. itemBgStyle.value.transition = "all 0s";
  45687. }
  45688. let left = 0;
  45689. listInfo.value.forEach((val, index) => {
  45690. if (index < currentIndex.value)
  45691. left += val.width ?? 0;
  45692. });
  45693. if (props.mode === "subsection") {
  45694. itemBgStyle.value.left = left + "px";
  45695. } else if (props.mode === "button") {
  45696. itemBgStyle.value.left = left + buttonPadding + "px";
  45697. }
  45698. }
  45699. const __returned__ = { props, emit, listInfo, itemBgStyle, currentIndex, buttonPadding, borderRadius, firstTimeVibrateShort, instanceId, instance, initListInfo, noBorderRight, textStyle, itemStyle, subsectionStyle, itemBarStyle, changeSectionStatus, click: click2, getTabsInfo, itemBgLeft, get $u() {
  45700. return $u;
  45701. } };
  45702. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  45703. return __returned__;
  45704. }
  45705. });
  45706. function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
  45707. return vue.openBlock(), vue.createElementBlock("view", {
  45708. id: $setup.instanceId,
  45709. class: vue.normalizeClass(["u-subsection", _ctx.customClass]),
  45710. style: vue.normalizeStyle($setup.$u.toStyle($setup.subsectionStyle, _ctx.customStyle))
  45711. }, [
  45712. (vue.openBlock(true), vue.createElementBlock(
  45713. vue.Fragment,
  45714. null,
  45715. vue.renderList($setup.listInfo, (item, index) => {
  45716. return vue.openBlock(), vue.createElementBlock("view", {
  45717. class: vue.normalizeClass(["u-item u-line-1", [$setup.noBorderRight(index), `u-item-${index}`]]),
  45718. style: vue.normalizeStyle($setup.itemStyle(index)),
  45719. onClick: ($event) => $setup.click(index),
  45720. key: index
  45721. }, [
  45722. vue.createElementVNode(
  45723. "view",
  45724. {
  45725. style: vue.normalizeStyle($setup.textStyle(index)),
  45726. class: "u-item-text u-line-1"
  45727. },
  45728. vue.toDisplayString(item.name),
  45729. 5
  45730. /* TEXT, STYLE */
  45731. )
  45732. ], 14, ["onClick"]);
  45733. }),
  45734. 128
  45735. /* KEYED_FRAGMENT */
  45736. )),
  45737. vue.createElementVNode(
  45738. "view",
  45739. {
  45740. class: "u-item-bg",
  45741. style: vue.normalizeStyle($setup.itemBarStyle)
  45742. },
  45743. null,
  45744. 4
  45745. /* STYLE */
  45746. )
  45747. ], 14, ["id"]);
  45748. }
  45749. const __unplugin_components_5 = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$e], ["__scopeId", "data-v-753bf5ed"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/node_modules/uview-pro/components/u-subsection/u-subsection.vue"]]);
  45750. const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
  45751. __name: "index",
  45752. setup(__props, { expose: __expose }) {
  45753. __expose();
  45754. const { t: t2, locale } = useI18n();
  45755. const orderInfo = vue.ref(null);
  45756. const order_id = vue.ref("");
  45757. onLoad((options) => {
  45758. if (options && options.order_id) {
  45759. order_id.value = options.order_id;
  45760. fetchDetail();
  45761. }
  45762. });
  45763. const fetchDetail = async () => {
  45764. try {
  45765. const res = await getOrderInfo({ order_id: order_id.value });
  45766. if (res.code === 1) {
  45767. const data = res.data;
  45768. if (typeof data.detail === "string") {
  45769. try {
  45770. data.detail = JSON.parse(data.detail);
  45771. } catch (e) {
  45772. data.detail = {};
  45773. }
  45774. }
  45775. orderInfo.value = data;
  45776. } else {
  45777. uni.showToast({ title: res.msg || t2("获取详情失败"), icon: "none" });
  45778. }
  45779. } catch (error) {
  45780. formatAppLog("error", "at pages/WorkModule/bettingHistory/bettingDetail/index.vue:249", error);
  45781. }
  45782. };
  45783. const getOrderStatusTag = (val) => {
  45784. const map = {
  45785. "0": { text: t2("下注中"), type: "info" },
  45786. "1": { text: t2("下注成功"), type: "success" },
  45787. "2": { text: t2("已退款"), type: "warning" },
  45788. "-1": { text: t2("已取消"), type: "danger" }
  45789. };
  45790. return map[String(val)] || { text: "--", type: "info" };
  45791. };
  45792. const getMarketName = () => {
  45793. var _a2, _b2;
  45794. if (((_b2 = (_a2 = orderInfo.value) == null ? void 0 : _a2.detail) == null ? void 0 : _b2.odds) && orderInfo.value.detail.odds[0]) {
  45795. return orderInfo.value.detail.odds[0].name || "-";
  45796. }
  45797. return "-";
  45798. };
  45799. const getSelectionValue = () => {
  45800. var _a2, _b2, _c;
  45801. if (((_b2 = (_a2 = orderInfo.value) == null ? void 0 : _a2.detail) == null ? void 0 : _b2.odds) && ((_c = orderInfo.value.detail.odds[0]) == null ? void 0 : _c.values) && orderInfo.value.detail.odds[0].values[0]) {
  45802. return orderInfo.value.detail.odds[0].values[0].value || "-";
  45803. }
  45804. return "-";
  45805. };
  45806. const getSelectionHandicap = () => {
  45807. var _a2, _b2, _c;
  45808. if (((_b2 = (_a2 = orderInfo.value) == null ? void 0 : _a2.detail) == null ? void 0 : _b2.odds) && ((_c = orderInfo.value.detail.odds[0]) == null ? void 0 : _c.values) && orderInfo.value.detail.odds[0].values[0]) {
  45809. return orderInfo.value.detail.odds[0].values[0].handicap || "";
  45810. }
  45811. return "";
  45812. };
  45813. const getSelectionOdd = () => {
  45814. var _a2, _b2, _c;
  45815. if (((_b2 = (_a2 = orderInfo.value) == null ? void 0 : _a2.detail) == null ? void 0 : _b2.odds) && ((_c = orderInfo.value.detail.odds[0]) == null ? void 0 : _c.values) && orderInfo.value.detail.odds[0].values[0]) {
  45816. return orderInfo.value.detail.odds[0].values[0].odd || "0.00";
  45817. }
  45818. return "0.00";
  45819. };
  45820. const statusClass = vue.computed(() => {
  45821. if (!orderInfo.value)
  45822. return "";
  45823. const { settlement_status, is_win, return_status } = orderInfo.value;
  45824. if (Number(return_status) === 2)
  45825. return "bg-cancel";
  45826. if (settlement_status === 0)
  45827. return "bg-pending";
  45828. if (settlement_status === 2)
  45829. return "bg-cancel";
  45830. const winStatus = parseInt(is_win);
  45831. if (winStatus === 1)
  45832. return "bg-win";
  45833. if ([2, 3].includes(winStatus))
  45834. return "bg-draw";
  45835. return "bg-loss";
  45836. });
  45837. const statusIcon = vue.computed(() => {
  45838. if (!orderInfo.value)
  45839. return "";
  45840. const { settlement_status, is_win, return_status } = orderInfo.value;
  45841. if (Number(return_status) === 2)
  45842. return "close-circle";
  45843. if (settlement_status === 0)
  45844. return "clock";
  45845. if (settlement_status === 2)
  45846. return "close-circle";
  45847. if (parseInt(is_win) === 1)
  45848. return "checkmark-circle";
  45849. if ([2, 3].includes(parseInt(is_win)))
  45850. return "minus-circle";
  45851. return "close-circle";
  45852. });
  45853. const statusText = vue.computed(() => {
  45854. if (!orderInfo.value)
  45855. return "";
  45856. const { settlement_status, is_win, return_status } = orderInfo.value;
  45857. if (Number(return_status) === 2)
  45858. return t2("已退款");
  45859. if (settlement_status === 0)
  45860. return t2("待结算");
  45861. if (settlement_status === 2)
  45862. return t2("结算待发放");
  45863. const winMap = {
  45864. 0: t2("未中奖"),
  45865. 1: t2("中奖"),
  45866. 2: t2("和局"),
  45867. 3: t2("平手半")
  45868. };
  45869. return winMap[parseInt(is_win)] || t2("已结算");
  45870. });
  45871. const settlementStatusText = vue.computed(() => {
  45872. if (!orderInfo.value)
  45873. return "";
  45874. const status = Number(orderInfo.value.settlement_status);
  45875. if (status === 0)
  45876. return t2("待结算");
  45877. if (status === 1)
  45878. return t2("已结算");
  45879. if (status === 2)
  45880. return t2("结算待发放");
  45881. return t2("未知");
  45882. });
  45883. const getMatchStatusText = (state) => {
  45884. const states = { 0: t2("未开始"), 1: t2("进行中"), 2: t2("已完场"), 3: t2("延期"), 4: t2("取消") };
  45885. return states[Number(state)] || t2("未知");
  45886. };
  45887. const getMatchStateType = (state) => {
  45888. const s = Number(state);
  45889. if (s === 0)
  45890. return "info";
  45891. if (s === 1)
  45892. return "primary";
  45893. if (s === 2)
  45894. return "success";
  45895. if (s === 3)
  45896. return "warning";
  45897. if (s === 4)
  45898. return "error";
  45899. return "info";
  45900. };
  45901. const formatTimestamp = (timestamp) => {
  45902. if (!timestamp)
  45903. return "";
  45904. const date2 = new Date(timestamp * 1e3);
  45905. const Y = date2.getFullYear();
  45906. const M = (date2.getMonth() + 1).toString().padStart(2, "0");
  45907. const D = date2.getDate().toString().padStart(2, "0");
  45908. const h = date2.getHours().toString().padStart(2, "0");
  45909. const m = date2.getMinutes().toString().padStart(2, "0");
  45910. return `${Y}-${M}-${D} ${h}:${m}`;
  45911. };
  45912. const formatGameTimeOnly = (timestamp, formatStr) => {
  45913. if (!timestamp)
  45914. return "";
  45915. const date2 = new Date(timestamp * 1e3);
  45916. const m = String(date2.getMonth() + 1).padStart(2, "0");
  45917. const d = String(date2.getDate()).padStart(2, "0");
  45918. const h = String(date2.getHours()).padStart(2, "0");
  45919. const min = String(date2.getMinutes()).padStart(2, "0");
  45920. if (formatStr === "MM-DD")
  45921. return `${m}-${d}`;
  45922. if (formatStr === "HH:mm")
  45923. return `${h}:${min}`;
  45924. return `${m}-${d} ${h}:${min}`;
  45925. };
  45926. const getScore = (scoreStr, index) => {
  45927. if (!scoreStr || scoreStr === "-")
  45928. return 0;
  45929. const parts = scoreStr.split("-");
  45930. return parts[index] || 0;
  45931. };
  45932. const statActiveTab = vue.ref(0);
  45933. const statTabChange = (index) => {
  45934. statActiveTab.value = index;
  45935. };
  45936. const hasStatistics = vue.computed(() => {
  45937. var _a2, _b2;
  45938. return ((_b2 = (_a2 = orderInfo.value) == null ? void 0 : _a2.sport) == null ? void 0 : _b2.statistics) && Array.isArray(orderInfo.value.sport.statistics) && orderInfo.value.sport.statistics.length > 0;
  45939. });
  45940. const currentHalfStats = vue.computed(() => {
  45941. if (!hasStatistics.value)
  45942. return [];
  45943. const stats = orderInfo.value.sport.statistics;
  45944. const homeId = orderInfo.value.sport.home_team_id;
  45945. const guestId = orderInfo.value.sport.guest_team_id;
  45946. const targetHalf = statActiveTab.value + 1;
  45947. const uniqueStats = {};
  45948. stats.forEach((item) => {
  45949. if (item.half === targetHalf) {
  45950. uniqueStats[`${item.team_id}`] = item;
  45951. }
  45952. });
  45953. const homeData = uniqueStats[homeId] || {};
  45954. const guestData = uniqueStats[guestId] || {};
  45955. const formatVal = (val) => val === null || val === void 0 ? "-" : val;
  45956. const statMapping = [
  45957. { key: "shots_on_goal", label: t2("射正球门") },
  45958. { key: "shots_off_goal", label: t2("射偏球门") },
  45959. { key: "shots_insidebox", label: t2("禁区内射门") },
  45960. { key: "shots_outsidebox", label: t2("禁区外射门") },
  45961. { key: "total_shots", label: t2("总射门次数") },
  45962. { key: "blocked_shots", label: t2("被封堵射门") },
  45963. { key: "fouls", label: t2("犯规次数") },
  45964. { key: "corner_kicks", label: t2("角球") },
  45965. { key: "offsides", label: t2("越位") },
  45966. { key: "ball_possession", label: t2("控球率(%)") },
  45967. { key: "yellow_cards", label: t2("黄牌") },
  45968. { key: "red_cards", label: t2("红牌") },
  45969. { key: "goalkeeper_saves", label: t2("门将扑救") },
  45970. { key: "total_passes", label: t2("总传球数") },
  45971. { key: "passes_accurate", label: t2("精准传球") },
  45972. { key: "passes_percent", label: t2("传球成功率") }
  45973. ];
  45974. return statMapping.map((row) => ({
  45975. label: row.label,
  45976. home: formatVal(homeData[row.key]),
  45977. guest: formatVal(guestData[row.key])
  45978. }));
  45979. });
  45980. const getRefundStatusText = (status) => {
  45981. const map = {
  45982. // 1: t('退款审核中'),
  45983. 2: t2("已退款")
  45984. // 3: t('退款被驳回')
  45985. };
  45986. return map[Number(status)] || t2("未知");
  45987. };
  45988. const handleRefundTagClick = () => {
  45989. if (Number(orderInfo.value.return_status) === 3) {
  45990. uni.showToast({
  45991. title: orderInfo.value.failure_msg || t2("无详细驳回原因"),
  45992. icon: "none",
  45993. duration: 3e3
  45994. });
  45995. }
  45996. };
  45997. const canRefund = vue.computed(() => {
  45998. if (!orderInfo.value)
  45999. return false;
  46000. const userRefund = Number(orderInfo.value.user_refund);
  46001. const payStatus = Number(orderInfo.value.pay_status);
  46002. const settlementStatus = Number(orderInfo.value.settlement_status);
  46003. const returnStatus = Number(orderInfo.value.return_status);
  46004. return userRefund === 1 && payStatus === 1 && settlementStatus === 0 && returnStatus === 0;
  46005. });
  46006. const handleRefund = () => {
  46007. uni.showModal({
  46008. title: t2("退款确认"),
  46009. content: t2("您确定要申请退款吗?"),
  46010. confirmText: t2("确定"),
  46011. cancelText: t2("取消"),
  46012. confirmColor: "#ef4444",
  46013. success: (res) => {
  46014. if (res.confirm) {
  46015. uni.showLoading({ title: t2("提交中...") });
  46016. applyRefund({ order_id: orderInfo.value.order_id }).then(() => {
  46017. let timer = setTimeout(() => {
  46018. clearTimeout(timer);
  46019. fetchDetail();
  46020. }, 1500);
  46021. });
  46022. }
  46023. }
  46024. });
  46025. };
  46026. const copyText = (text) => {
  46027. uni.setClipboardData({
  46028. data: text,
  46029. success: () => uni.showToast({ title: t2("复制成功"), icon: "none" })
  46030. });
  46031. };
  46032. const __returned__ = { t: t2, locale, orderInfo, order_id, fetchDetail, getOrderStatusTag, getMarketName, getSelectionValue, getSelectionHandicap, getSelectionOdd, statusClass, statusIcon, statusText, settlementStatusText, getMatchStatusText, getMatchStateType, formatTimestamp, formatGameTimeOnly, getScore, statActiveTab, statTabChange, hasStatistics, currentHalfStats, getRefundStatusText, handleRefundTagClick, canRefund, handleRefund, copyText };
  46033. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  46034. return __returned__;
  46035. }
  46036. });
  46037. function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
  46038. const _component_u_icon = __unplugin_components_0$5;
  46039. const _component_u_tag = __unplugin_components_2$2;
  46040. const _component_u_image = __unplugin_components_1$1;
  46041. const _component_u_cell_item = __unplugin_components_3;
  46042. const _component_u_cell_group = __unplugin_components_4$1;
  46043. const _component_u_subsection = __unplugin_components_5;
  46044. const _component_u_button = __unplugin_components_2$1;
  46045. const _component_u_loading = __unplugin_components_3$3;
  46046. const _component_PageContainer = PageContainer;
  46047. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  46048. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  46049. default: vue.withCtx(() => [
  46050. vue.createVNode(_component_PageContainer, {
  46051. "nav-title": $setup.t("注单详情")
  46052. }, {
  46053. default: vue.withCtx(() => {
  46054. var _a2, _b2, _c, _d;
  46055. return [
  46056. $setup.orderInfo ? (vue.openBlock(), vue.createElementBlock("view", {
  46057. key: 0,
  46058. class: "detail-content"
  46059. }, [
  46060. vue.createElementVNode(
  46061. "view",
  46062. {
  46063. class: vue.normalizeClass(["status-card", $setup.statusClass])
  46064. },
  46065. [
  46066. vue.createElementVNode("view", { class: "status-top" }, [
  46067. vue.createElementVNode("view", { class: "status-icon-row" }, [
  46068. vue.createVNode(_component_u_icon, {
  46069. name: $setup.statusIcon,
  46070. size: "40",
  46071. color: "#fff"
  46072. }, null, 8, ["name"]),
  46073. vue.createElementVNode(
  46074. "text",
  46075. { class: "status-text" },
  46076. vue.toDisplayString($setup.statusText),
  46077. 1
  46078. /* TEXT */
  46079. )
  46080. ])
  46081. ]),
  46082. vue.createElementVNode("view", { class: "profit-row" }, [
  46083. vue.createElementVNode(
  46084. "text",
  46085. { class: "label" },
  46086. vue.toDisplayString($setup.t("盈亏金额")),
  46087. 1
  46088. /* TEXT */
  46089. ),
  46090. vue.createElementVNode(
  46091. "text",
  46092. { class: "value" },
  46093. vue.toDisplayString($setup.orderInfo.settlement_status === 0 ? "--" : $setup.orderInfo.profit_and_loss),
  46094. 1
  46095. /* TEXT */
  46096. )
  46097. ])
  46098. ],
  46099. 2
  46100. /* CLASS */
  46101. ),
  46102. $setup.orderInfo.sport ? (vue.openBlock(), vue.createElementBlock("view", {
  46103. key: 0,
  46104. class: "info-card"
  46105. }, [
  46106. vue.createElementVNode("view", { class: "card-header" }, [
  46107. vue.createElementVNode("view", { class: "title-row" }, [
  46108. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  46109. vue.createElementVNode(
  46110. "text",
  46111. { class: "title" },
  46112. vue.toDisplayString($setup.t("赛事信息")),
  46113. 1
  46114. /* TEXT */
  46115. )
  46116. ]),
  46117. vue.createElementVNode("view", { class: "match-status-tag" }, [
  46118. vue.createVNode(_component_u_tag, {
  46119. text: $setup.getMatchStatusText($setup.orderInfo.sport.state),
  46120. type: $setup.getMatchStateType($setup.orderInfo.sport.state),
  46121. plain: "",
  46122. size: "mini"
  46123. }, null, 8, ["text", "type"])
  46124. ])
  46125. ]),
  46126. vue.createElementVNode("view", { class: "match-info-box" }, [
  46127. vue.createElementVNode("view", { class: "league-row" }, [
  46128. vue.createElementVNode("view", { class: "league-name" }, [
  46129. vue.createVNode(_component_u_icon, {
  46130. name: "grid-fill",
  46131. color: "#f8b932",
  46132. size: "16",
  46133. class: "mr-1"
  46134. }),
  46135. vue.createTextVNode(
  46136. " " + vue.toDisplayString($setup.locale === "zh" ? $setup.orderInfo.sport.league : $setup.orderInfo.sport.league_en),
  46137. 1
  46138. /* TEXT */
  46139. )
  46140. ]),
  46141. $setup.orderInfo.is_roll === 1 ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  46142. key: 0,
  46143. text: $setup.t("滚球"),
  46144. type: "error",
  46145. plain: "",
  46146. size: "mini"
  46147. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true)
  46148. ]),
  46149. vue.createElementVNode("view", { class: "match-time" }, [
  46150. vue.createElementVNode(
  46151. "text",
  46152. null,
  46153. vue.toDisplayString((_a2 = $setup.orderInfo.detail) == null ? void 0 : _a2.game_time),
  46154. 1
  46155. /* TEXT */
  46156. ),
  46157. ((_b2 = $setup.orderInfo.detail) == null ? void 0 : _b2.fixture_status) ? (vue.openBlock(), vue.createElementBlock("text", {
  46158. key: 0,
  46159. class: "fixture-status"
  46160. }, [
  46161. $setup.orderInfo.detail.fixture_status.long ? (vue.openBlock(), vue.createElementBlock(
  46162. "text",
  46163. {
  46164. key: 0,
  46165. style: { "margin-left": "12px", "color": "#f8b932" }
  46166. },
  46167. vue.toDisplayString($setup.orderInfo.detail.fixture_status.long),
  46168. 1
  46169. /* TEXT */
  46170. )) : vue.createCommentVNode("v-if", true),
  46171. $setup.orderInfo.detail.fixture_status.elapsed ? (vue.openBlock(), vue.createElementBlock(
  46172. "text",
  46173. {
  46174. key: 1,
  46175. style: { "margin-left": "6px", "color": "#f8b932" }
  46176. },
  46177. vue.toDisplayString($setup.orderInfo.detail.fixture_status.seconds) + "'",
  46178. 1
  46179. /* TEXT */
  46180. )) : vue.createCommentVNode("v-if", true)
  46181. ])) : vue.createCommentVNode("v-if", true)
  46182. ]),
  46183. vue.createElementVNode("view", { class: "vs-container" }, [
  46184. vue.createElementVNode("view", { class: "team-box" }, [
  46185. vue.createVNode(_component_u_image, {
  46186. src: $setup.orderInfo.sport.home_team_logo,
  46187. width: "40px",
  46188. height: "40px",
  46189. shape: "circle",
  46190. errorIcon: "photo"
  46191. }, null, 8, ["src"]),
  46192. vue.createElementVNode(
  46193. "text",
  46194. { class: "team-name" },
  46195. vue.toDisplayString($setup.locale === "zh" ? $setup.orderInfo.sport.home_team : $setup.orderInfo.sport.home_team_en),
  46196. 1
  46197. /* TEXT */
  46198. )
  46199. ]),
  46200. vue.createElementVNode("view", { class: "score-box" }, [
  46201. $setup.orderInfo.sport.state !== 0 && ((_c = $setup.orderInfo.detail) == null ? void 0 : _c.score) ? (vue.openBlock(), vue.createElementBlock("view", {
  46202. key: 0,
  46203. class: "score-main"
  46204. }, [
  46205. vue.createElementVNode(
  46206. "text",
  46207. { class: "num" },
  46208. vue.toDisplayString($setup.getScore($setup.orderInfo.detail.score, 0)),
  46209. 1
  46210. /* TEXT */
  46211. ),
  46212. vue.createElementVNode("span", { style: { "color": "#ccc" } }, ":"),
  46213. vue.createElementVNode(
  46214. "text",
  46215. { class: "num" },
  46216. vue.toDisplayString($setup.getScore($setup.orderInfo.detail.score, 1)),
  46217. 1
  46218. /* TEXT */
  46219. )
  46220. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  46221. key: 1,
  46222. style: { "font-weight": "bold" }
  46223. }, " VS ")),
  46224. ((_d = $setup.orderInfo.detail) == null ? void 0 : _d.half_score) && $setup.orderInfo.sport.state !== 0 && $setup.orderInfo.detail.half_score !== "-" ? (vue.openBlock(), vue.createElementBlock(
  46225. "text",
  46226. {
  46227. key: 2,
  46228. class: "half-score"
  46229. },
  46230. vue.toDisplayString($setup.t("半场")) + ": " + vue.toDisplayString($setup.orderInfo.detail.half_score),
  46231. 1
  46232. /* TEXT */
  46233. )) : vue.createCommentVNode("v-if", true)
  46234. ]),
  46235. vue.createElementVNode("view", { class: "team-box" }, [
  46236. vue.createVNode(_component_u_image, {
  46237. src: $setup.orderInfo.sport.guest_team_logo,
  46238. width: "40px",
  46239. height: "40px",
  46240. shape: "circle",
  46241. errorIcon: "photo"
  46242. }, null, 8, ["src"]),
  46243. vue.createElementVNode(
  46244. "text",
  46245. { class: "team-name" },
  46246. vue.toDisplayString($setup.locale === "zh" ? $setup.orderInfo.sport.guest_team : $setup.orderInfo.sport.guest_team_en),
  46247. 1
  46248. /* TEXT */
  46249. )
  46250. ])
  46251. ]),
  46252. $setup.orderInfo.sport.state !== 0 && ($setup.orderInfo.sport.score || $setup.orderInfo.sport.half_score) ? (vue.openBlock(), vue.createElementBlock("view", {
  46253. key: 0,
  46254. class: "live-score-row"
  46255. }, [
  46256. vue.createElementVNode(
  46257. "text",
  46258. { class: "live-label" },
  46259. vue.toDisplayString($setup.t("即时比分")) + ":",
  46260. 1
  46261. /* TEXT */
  46262. ),
  46263. $setup.orderInfo.sport.score ? (vue.openBlock(), vue.createElementBlock(
  46264. "text",
  46265. {
  46266. key: 0,
  46267. class: "live-val"
  46268. },
  46269. vue.toDisplayString($setup.orderInfo.sport.score),
  46270. 1
  46271. /* TEXT */
  46272. )) : vue.createCommentVNode("v-if", true),
  46273. $setup.orderInfo.sport.half_score && $setup.orderInfo.sport.half_score !== "-" ? (vue.openBlock(), vue.createElementBlock(
  46274. "text",
  46275. {
  46276. key: 1,
  46277. class: "live-half"
  46278. },
  46279. "(" + vue.toDisplayString($setup.t("半场")) + ": " + vue.toDisplayString($setup.orderInfo.sport.half_score) + ")",
  46280. 1
  46281. /* TEXT */
  46282. )) : vue.createCommentVNode("v-if", true)
  46283. ])) : vue.createCommentVNode("v-if", true)
  46284. ])
  46285. ])) : vue.createCommentVNode("v-if", true),
  46286. vue.createElementVNode("view", { class: "info-card" }, [
  46287. vue.createElementVNode("view", { class: "card-header" }, [
  46288. vue.createElementVNode("view", { class: "title-row" }, [
  46289. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  46290. vue.createElementVNode(
  46291. "text",
  46292. { class: "title" },
  46293. vue.toDisplayString($setup.t("投注内容")),
  46294. 1
  46295. /* TEXT */
  46296. )
  46297. ])
  46298. ]),
  46299. vue.createElementVNode("view", { class: "bet-details" }, [
  46300. vue.createElementVNode("view", { class: "detail-item" }, [
  46301. vue.createElementVNode(
  46302. "text",
  46303. { class: "label" },
  46304. vue.toDisplayString($setup.t("玩法")),
  46305. 1
  46306. /* TEXT */
  46307. ),
  46308. vue.createElementVNode(
  46309. "text",
  46310. { class: "val bold" },
  46311. vue.toDisplayString($setup.orderInfo.odd_name),
  46312. 1
  46313. /* TEXT */
  46314. )
  46315. ]),
  46316. vue.createElementVNode("view", { class: "detail-item" }, [
  46317. vue.createElementVNode(
  46318. "text",
  46319. { class: "label" },
  46320. vue.toDisplayString($setup.t("选项")),
  46321. 1
  46322. /* TEXT */
  46323. ),
  46324. vue.createElementVNode("text", {
  46325. class: "val",
  46326. style: { "color": "#3b82f6" }
  46327. }, [
  46328. vue.createTextVNode(
  46329. vue.toDisplayString($setup.orderInfo.odd_value) + " ",
  46330. 1
  46331. /* TEXT */
  46332. ),
  46333. $setup.getSelectionHandicap() ? (vue.openBlock(), vue.createElementBlock(
  46334. "text",
  46335. {
  46336. key: 0,
  46337. style: { "margin-left": "4px", "color": "#f8b932", "font-weight": "bold" }
  46338. },
  46339. " [" + vue.toDisplayString($setup.getSelectionHandicap()) + "] ",
  46340. 1
  46341. /* TEXT */
  46342. )) : vue.createCommentVNode("v-if", true)
  46343. ])
  46344. ]),
  46345. vue.createElementVNode("view", { class: "detail-item" }, [
  46346. vue.createElementVNode(
  46347. "text",
  46348. { class: "label" },
  46349. vue.toDisplayString($setup.t("赔率")),
  46350. 1
  46351. /* TEXT */
  46352. ),
  46353. vue.createElementVNode(
  46354. "text",
  46355. { class: "val odds" },
  46356. vue.toDisplayString(Number($setup.orderInfo.odd)),
  46357. 1
  46358. /* TEXT */
  46359. )
  46360. ])
  46361. ]),
  46362. vue.createElementVNode("view", { class: "divider" }),
  46363. vue.createElementVNode("view", {
  46364. class: "amount-row",
  46365. style: { "margin-bottom": "12px" }
  46366. }, [
  46367. vue.createElementVNode(
  46368. "text",
  46369. { class: "label" },
  46370. vue.toDisplayString($setup.t("下注金额")),
  46371. 1
  46372. /* TEXT */
  46373. ),
  46374. vue.createElementVNode(
  46375. "text",
  46376. { class: "amount-val" },
  46377. vue.toDisplayString($setup.orderInfo.amount),
  46378. 1
  46379. /* TEXT */
  46380. )
  46381. ]),
  46382. vue.createElementVNode("view", {
  46383. class: "amount-row",
  46384. style: { "margin-bottom": "12px" }
  46385. }, [
  46386. vue.createElementVNode(
  46387. "text",
  46388. { class: "label" },
  46389. vue.toDisplayString($setup.t("赔率玩法")),
  46390. 1
  46391. /* TEXT */
  46392. ),
  46393. vue.createElementVNode(
  46394. "text",
  46395. { class: "" },
  46396. vue.toDisplayString($setup.orderInfo.odd_value),
  46397. 1
  46398. /* TEXT */
  46399. )
  46400. ]),
  46401. $setup.orderInfo.handicap ? (vue.openBlock(), vue.createElementBlock("view", {
  46402. key: 0,
  46403. class: "amount-row",
  46404. style: { "margin-bottom": "12px" }
  46405. }, [
  46406. vue.createElementVNode(
  46407. "text",
  46408. { class: "label" },
  46409. vue.toDisplayString($setup.t("盘口")),
  46410. 1
  46411. /* TEXT */
  46412. ),
  46413. vue.createElementVNode(
  46414. "text",
  46415. { class: "" },
  46416. vue.toDisplayString($setup.orderInfo.handicap || "--"),
  46417. 1
  46418. /* TEXT */
  46419. )
  46420. ])) : vue.createCommentVNode("v-if", true),
  46421. $setup.orderInfo.failure ? (vue.openBlock(), vue.createElementBlock("view", {
  46422. key: 1,
  46423. class: "amount-row",
  46424. style: { "margin-bottom": "12px" }
  46425. }, [
  46426. vue.createElementVNode(
  46427. "text",
  46428. { class: "label" },
  46429. vue.toDisplayString($setup.t("下注失败原因")),
  46430. 1
  46431. /* TEXT */
  46432. ),
  46433. vue.createElementVNode(
  46434. "text",
  46435. { style: { "color": "#fa3534" } },
  46436. vue.toDisplayString($setup.orderInfo.failure || "--"),
  46437. 1
  46438. /* TEXT */
  46439. )
  46440. ])) : vue.createCommentVNode("v-if", true),
  46441. $setup.orderInfo.settlement_status === 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  46442. key: 2,
  46443. class: "amount-row"
  46444. }, [
  46445. vue.createElementVNode(
  46446. "text",
  46447. { class: "label" },
  46448. vue.toDisplayString($setup.t("派彩金额")),
  46449. 1
  46450. /* TEXT */
  46451. ),
  46452. vue.createElementVNode(
  46453. "text",
  46454. { class: "amount-val highlight" },
  46455. vue.toDisplayString($setup.orderInfo.win_amount),
  46456. 1
  46457. /* TEXT */
  46458. )
  46459. ])) : vue.createCommentVNode("v-if", true)
  46460. ]),
  46461. vue.createElementVNode("view", { class: "info-card no-padding" }, [
  46462. vue.createVNode(_component_u_cell_group, { border: false }, {
  46463. default: vue.withCtx(() => [
  46464. vue.createVNode(_component_u_cell_item, {
  46465. title: $setup.t("订单编号"),
  46466. arrow: false,
  46467. "border-bottom": false
  46468. }, {
  46469. "right-icon": vue.withCtx(() => [
  46470. vue.createElementVNode("view", {
  46471. class: "copy-value",
  46472. onClick: _cache[0] || (_cache[0] = ($event) => $setup.copyText($setup.orderInfo.order_id))
  46473. }, [
  46474. vue.createElementVNode(
  46475. "text",
  46476. null,
  46477. vue.toDisplayString($setup.orderInfo.order_id),
  46478. 1
  46479. /* TEXT */
  46480. ),
  46481. vue.createVNode(_component_u_icon, {
  46482. name: "file-text",
  46483. size: "28",
  46484. color: "#999",
  46485. style: { "margin-left": "4px" }
  46486. })
  46487. ])
  46488. ]),
  46489. _: 1
  46490. /* STABLE */
  46491. }, 8, ["title"]),
  46492. vue.createVNode(_component_u_cell_item, {
  46493. title: $setup.t("订单状态"),
  46494. arrow: false,
  46495. "border-bottom": false
  46496. }, {
  46497. "right-icon": vue.withCtx(() => [
  46498. vue.createVNode(_component_u_tag, {
  46499. text: $setup.getOrderStatusTag($setup.orderInfo.status).text,
  46500. type: $setup.getOrderStatusTag($setup.orderInfo.status).type,
  46501. plain: "",
  46502. size: "mini"
  46503. }, null, 8, ["text", "type"])
  46504. ]),
  46505. _: 1
  46506. /* STABLE */
  46507. }, 8, ["title"]),
  46508. vue.createVNode(_component_u_cell_item, {
  46509. title: $setup.t("下注时间"),
  46510. value: $setup.orderInfo.create_time,
  46511. arrow: false,
  46512. "border-bottom": false
  46513. }, null, 8, ["title", "value"]),
  46514. $setup.orderInfo.return_operation_time ? (vue.openBlock(), vue.createBlock(_component_u_cell_item, {
  46515. key: 0,
  46516. title: $setup.t("退款时间"),
  46517. value: $setup.orderInfo.return_operation_time,
  46518. arrow: false,
  46519. "border-bottom": false
  46520. }, null, 8, ["title", "value"])) : vue.createCommentVNode("v-if", true),
  46521. vue.createVNode(_component_u_cell_item, {
  46522. title: $setup.t("结算状态"),
  46523. value: $setup.settlementStatusText,
  46524. arrow: false,
  46525. "border-bottom": false
  46526. }, null, 8, ["title", "value"]),
  46527. $setup.orderInfo.settlement_status !== 0 && $setup.orderInfo.settlement_time ? (vue.openBlock(), vue.createBlock(_component_u_cell_item, {
  46528. key: 1,
  46529. title: $setup.t("结算时间"),
  46530. value: $setup.orderInfo.settlement_time,
  46531. arrow: false,
  46532. "border-bottom": false
  46533. }, null, 8, ["title", "value"])) : vue.createCommentVNode("v-if", true)
  46534. ]),
  46535. _: 1
  46536. /* STABLE */
  46537. })
  46538. ]),
  46539. $setup.hasStatistics ? (vue.openBlock(), vue.createElementBlock("view", {
  46540. key: 1,
  46541. class: "info-card"
  46542. }, [
  46543. vue.createElementVNode("view", {
  46544. class: "card-header",
  46545. style: { "margin-bottom": "16rpx" }
  46546. }, [
  46547. vue.createElementVNode("view", { class: "title-row" }, [
  46548. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  46549. vue.createElementVNode(
  46550. "text",
  46551. { class: "title" },
  46552. vue.toDisplayString($setup.t("赛事统计")),
  46553. 1
  46554. /* TEXT */
  46555. )
  46556. ])
  46557. ]),
  46558. vue.createElementVNode("view", { style: { "margin-bottom": "24rpx" } }, [
  46559. vue.createVNode(_component_u_subsection, {
  46560. list: [$setup.t("上半场"), $setup.t("下半场")],
  46561. current: $setup.statActiveTab,
  46562. onChange: $setup.statTabChange,
  46563. activeColor: "#f8b932"
  46564. }, null, 8, ["list", "current"])
  46565. ]),
  46566. vue.createElementVNode("view", { class: "stat-team-header" }, [
  46567. vue.createElementVNode(
  46568. "text",
  46569. { class: "team-name home" },
  46570. vue.toDisplayString($setup.locale === "zh" ? $setup.orderInfo.sport.home_team : $setup.orderInfo.sport.home_team_en),
  46571. 1
  46572. /* TEXT */
  46573. ),
  46574. vue.createElementVNode("text", { class: "vs-text" }, "VS"),
  46575. vue.createElementVNode(
  46576. "text",
  46577. { class: "team-name guest" },
  46578. vue.toDisplayString($setup.locale === "zh" ? $setup.orderInfo.sport.guest_team : $setup.orderInfo.sport.guest_team_en),
  46579. 1
  46580. /* TEXT */
  46581. )
  46582. ]),
  46583. vue.createElementVNode("view", { class: "stat-list" }, [
  46584. (vue.openBlock(true), vue.createElementBlock(
  46585. vue.Fragment,
  46586. null,
  46587. vue.renderList($setup.currentHalfStats, (item, index) => {
  46588. return vue.openBlock(), vue.createElementBlock("view", {
  46589. class: "stat-row",
  46590. key: index
  46591. }, [
  46592. vue.createElementVNode(
  46593. "text",
  46594. { class: "stat-val home" },
  46595. vue.toDisplayString(item.home),
  46596. 1
  46597. /* TEXT */
  46598. ),
  46599. vue.createElementVNode("view", { class: "stat-label-box" }, [
  46600. vue.createElementVNode(
  46601. "text",
  46602. { class: "stat-label" },
  46603. vue.toDisplayString(item.label),
  46604. 1
  46605. /* TEXT */
  46606. )
  46607. ]),
  46608. vue.createElementVNode(
  46609. "text",
  46610. { class: "stat-val guest" },
  46611. vue.toDisplayString(item.guest),
  46612. 1
  46613. /* TEXT */
  46614. )
  46615. ]);
  46616. }),
  46617. 128
  46618. /* KEYED_FRAGMENT */
  46619. ))
  46620. ])
  46621. ])) : vue.createCommentVNode("v-if", true),
  46622. $setup.canRefund ? (vue.openBlock(), vue.createElementBlock("view", {
  46623. key: 2,
  46624. class: "action-box"
  46625. }, [
  46626. vue.createVNode(_component_u_button, {
  46627. type: "error",
  46628. shape: "circle",
  46629. onClick: $setup.handleRefund
  46630. }, {
  46631. default: vue.withCtx(() => [
  46632. vue.createTextVNode(
  46633. vue.toDisplayString($setup.t("申请退款")),
  46634. 1
  46635. /* TEXT */
  46636. )
  46637. ]),
  46638. _: 1
  46639. /* STABLE */
  46640. })
  46641. ])) : vue.createCommentVNode("v-if", true)
  46642. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  46643. key: 1,
  46644. class: "loading-container"
  46645. }, [
  46646. vue.createVNode(_component_u_loading, {
  46647. mode: "circle",
  46648. size: "36",
  46649. color: _ctx.$mainColor
  46650. }, null, 8, ["color"]),
  46651. vue.createElementVNode("text", { class: "loading-text" }, "Loading...")
  46652. ]))
  46653. ];
  46654. }),
  46655. _: 1
  46656. /* STABLE */
  46657. }, 8, ["nav-title"])
  46658. ]),
  46659. _: 1
  46660. /* STABLE */
  46661. });
  46662. }
  46663. const PagesWorkModuleBettingHistoryBettingDetailIndex = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$d], ["__scopeId", "data-v-32ff12af"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/bettingHistory/bettingDetail/index.vue"]]);
  46664. const _sfc_main$d = {
  46665. __name: "index",
  46666. setup(__props, { expose: __expose }) {
  46667. __expose();
  46668. const { t: t2, locale } = useI18n();
  46669. const orderStore = useOrderStore();
  46670. const WebsocketData = useWebsocketDataStore();
  46671. const pagingRef = vue.ref(null);
  46672. const matchInfo = vue.ref(null);
  46673. const dataId = vue.ref("");
  46674. const selectedMap = vue.ref({});
  46675. const stateTagType = vue.computed(() => {
  46676. return (state) => {
  46677. if (state === 0)
  46678. return "warning";
  46679. else if (state === 1)
  46680. return "success";
  46681. else
  46682. return "danger";
  46683. };
  46684. });
  46685. const threeColMarkets = [
  46686. "Fulltime Result",
  46687. "Match Winner",
  46688. "Second Half Winner",
  46689. "Double Chance",
  46690. "To Win 2nd Half",
  46691. "First Half Winner",
  46692. "Results/Both Teams Score",
  46693. "Handicap Result",
  46694. "Team To Score First",
  46695. "Team To Score Last",
  46696. "Home Team Exact Goals Number",
  46697. "Away Team Exact Goals Number",
  46698. "Corners 1x2",
  46699. "1x2 - 60 minutes",
  46700. "1x2 - 30 minutes",
  46701. "Highest Scoring Half",
  46702. "First 10 min Winner",
  46703. "Double Chance - First Half"
  46704. ];
  46705. const pairPriority = {
  46706. "Home": 1,
  46707. "Away": 2,
  46708. "Over": 1,
  46709. "Under": 2,
  46710. "Yes": 1,
  46711. "No": 2,
  46712. "Odd": 1,
  46713. "Even": 2
  46714. };
  46715. const translateSelection = (valStr) => valStr === void 0 || valStr === null ? "" : String(valStr);
  46716. const isDoubleChanceMarket = (market) => {
  46717. if (!market || !market.values)
  46718. return false;
  46719. if (market.name_en && market.name_en.toLowerCase().includes("double chance"))
  46720. return true;
  46721. const vals = market.values.map((v) => v.value);
  46722. const hasCombo1 = vals.includes("Home/Draw") && vals.includes("Home/Away") && vals.includes("Draw/Away");
  46723. const hasCombo2 = vals.includes("1/X") && vals.includes("1/2") && vals.includes("X/2");
  46724. return hasCombo1 || hasCombo2;
  46725. };
  46726. const isThreeWayMarket = (market) => {
  46727. if (!market || !market.values)
  46728. return false;
  46729. const hasHome = market.values.some((v) => ["Home", "1"].includes(v.value));
  46730. const hasDraw = market.values.some((v) => ["Draw", "X"].includes(v.value));
  46731. const hasAway = market.values.some((v) => ["Away", "2"].includes(v.value));
  46732. if (hasHome && hasDraw && hasAway)
  46733. return true;
  46734. const hasOver = market.values.some((v) => ["Over"].includes(v.value));
  46735. const hasExactly = market.values.some((v) => ["Exactly"].includes(v.value));
  46736. const hasUnder = market.values.some((v) => ["Under"].includes(v.value));
  46737. return hasOver && hasExactly && hasUnder;
  46738. };
  46739. const getThreeWayHeaders = (market) => {
  46740. if (!market || !market.values)
  46741. return ["", "", ""];
  46742. let col1 = "", col2 = "", col3 = "";
  46743. const hasHome = market.values.some((v) => ["Home", "1"].includes(v.value));
  46744. const hasDraw = market.values.some((v) => ["Draw", "X"].includes(v.value));
  46745. const hasAway = market.values.some((v) => ["Away", "2"].includes(v.value));
  46746. const isHAD = hasHome && hasDraw && hasAway;
  46747. for (const v of market.values) {
  46748. if (isHAD) {
  46749. if (!col1 && ["Home", "1"].includes(v.value)) {
  46750. col1 = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46751. } else if (!col2 && ["Draw", "X"].includes(v.value)) {
  46752. col2 = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46753. } else if (!col3 && ["Away", "2"].includes(v.value)) {
  46754. col3 = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46755. }
  46756. } else {
  46757. if (!col1 && ["Over"].includes(v.value)) {
  46758. col1 = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46759. } else if (!col2 && ["Exactly"].includes(v.value)) {
  46760. col2 = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46761. } else if (!col3 && ["Under"].includes(v.value)) {
  46762. col3 = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46763. }
  46764. }
  46765. }
  46766. return [col1, col2, col3];
  46767. };
  46768. const isSlashGroupMarket = (market) => {
  46769. if (!market || !market.values)
  46770. return false;
  46771. if (isDoubleChanceMarket(market))
  46772. return false;
  46773. return market.values.some((v) => typeof v.value === "string" && v.value.includes("/"));
  46774. };
  46775. const getSlashHeadersInfo = (market) => {
  46776. const headers = [];
  46777. const keys = [];
  46778. if (!market || !market.values)
  46779. return { headers, keys };
  46780. market.values.forEach((v) => {
  46781. if (typeof v.value === "string" && v.value.includes("/")) {
  46782. const key = v.value.split("/")[0];
  46783. if (!keys.includes(key)) {
  46784. keys.push(key);
  46785. let name = key;
  46786. if (locale.value === "zh" && v.value_text && v.value_text.includes("/")) {
  46787. name = v.value_text.split("/")[0];
  46788. } else {
  46789. name = translateSelection(key);
  46790. }
  46791. headers.push({ key, name });
  46792. }
  46793. }
  46794. });
  46795. const orderedHeaders = [];
  46796. const order = ["Home", "1", "Draw", "X", "Away", "2"];
  46797. order.forEach((k) => {
  46798. const found = headers.find((h) => h.key === k);
  46799. if (found && !orderedHeaders.includes(found))
  46800. orderedHeaders.push(found);
  46801. });
  46802. headers.forEach((h) => {
  46803. if (!orderedHeaders.includes(h))
  46804. orderedHeaders.push(h);
  46805. });
  46806. return { headers: orderedHeaders, keys: orderedHeaders.map((h) => h.key) };
  46807. };
  46808. const isOverUnderMixedMarket = (market) => {
  46809. if (!market || !market.values)
  46810. return false;
  46811. if (isThreeWayMarket(market))
  46812. return false;
  46813. if (isSlashGroupMarket(market))
  46814. return false;
  46815. let hasOver = false;
  46816. let hasUnder = false;
  46817. market.values.forEach((v) => {
  46818. const val = String(v.value).toLowerCase();
  46819. const zhVal = String(v.value_text || "");
  46820. const hasNumber = /\d/.test(val) || /\d/.test(zhVal);
  46821. if (hasNumber) {
  46822. if (val.includes("over ") || val.includes(" or more") || zhVal.includes("大")) {
  46823. hasOver = true;
  46824. }
  46825. if (val.includes("under ") || zhVal.includes("小")) {
  46826. hasUnder = true;
  46827. }
  46828. }
  46829. });
  46830. return hasOver && hasUnder;
  46831. };
  46832. const getSelectionDisplayName = (market, selection) => {
  46833. let rawText = translateSelection(locale.value === "zh" ? selection.value_text : selection.value);
  46834. return rawText;
  46835. };
  46836. const getColClass = (market) => {
  46837. if (isThreeWayMarket(market))
  46838. return "col-3";
  46839. if (isSlashGroupMarket(market)) {
  46840. return getSlashHeadersInfo(market).headers.length === 3 ? "col-3" : "col-2";
  46841. }
  46842. if (isOverUnderMixedMarket(market))
  46843. return "col-2";
  46844. if (threeColMarkets.includes(market.name_en))
  46845. return "col-3";
  46846. return "col-2";
  46847. };
  46848. const showExpand = (market) => {
  46849. if (isSlashGroupMarket(market)) {
  46850. return market.values && market.values.length > getSlashHeadersInfo(market).headers.length;
  46851. }
  46852. if (isOverUnderMixedMarket(market)) {
  46853. return market.values && market.values.length > 2;
  46854. }
  46855. return hasMore(market.values) && !threeColMarkets.includes(market.name_en);
  46856. };
  46857. const getExpandRemainCount = (market) => {
  46858. if (isSlashGroupMarket(market)) {
  46859. return market.values.length - getSlashHeadersInfo(market).headers.length;
  46860. }
  46861. if (isOverUnderMixedMarket(market)) {
  46862. return market.values.length - 2;
  46863. }
  46864. return getRemainCount(market.values);
  46865. };
  46866. const isHeaderValue = (market, val) => {
  46867. if (isSlashGroupMarket(market) || isOverUnderMixedMarket(market))
  46868. return false;
  46869. if (isThreeWayMarket(market)) {
  46870. return ["Home", "1", "Draw", "X", "Away", "2", "Over", "Exactly", "Under"].includes(val);
  46871. }
  46872. return hasPairHeaders(market) && pairPriority[val];
  46873. };
  46874. const getPairHeaders = (market) => {
  46875. if (!market || !market.values)
  46876. return ["", ""];
  46877. let left = "";
  46878. let right = "";
  46879. for (const v of market.values) {
  46880. if (pairPriority[v.value] === 1 && !left) {
  46881. left = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46882. } else if (pairPriority[v.value] === 2 && !right) {
  46883. right = translateSelection(locale.value === "zh" ? v.value_text : v.value);
  46884. }
  46885. }
  46886. return [left, right];
  46887. };
  46888. const hasPairHeaders = (market) => {
  46889. if (threeColMarkets.includes(market.name_en))
  46890. return false;
  46891. if (isThreeWayMarket(market))
  46892. return false;
  46893. if (isSlashGroupMarket(market))
  46894. return false;
  46895. if (isOverUnderMixedMarket(market))
  46896. return false;
  46897. const headers = getPairHeaders(market);
  46898. return !!(headers[0] || headers[1]);
  46899. };
  46900. const oddsChangeMap = vue.ref(/* @__PURE__ */ new Map());
  46901. const getOddsKey = (matchId, marketId, selection) => {
  46902. let val = selection.submit_value !== void 0 ? selection.submit_value : selection.value;
  46903. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  46904. return `${matchId}_${marketId}_${val}_${selection.handicap}`;
  46905. }
  46906. if (selection.handicap_text !== null && selection.handicap_text !== void 0 && selection.handicap_text !== "") {
  46907. return `${matchId}_${marketId}_${val}_${selection.handicap_text}`;
  46908. }
  46909. return `${matchId}_${marketId}_${val}`;
  46910. };
  46911. const isOddsUp = (key) => {
  46912. const change = oddsChangeMap.value.get(key);
  46913. return (change == null ? void 0 : change.direction) === "up" && Date.now() - change.timestamp < 3e3;
  46914. };
  46915. const isOddsDown = (key) => {
  46916. const change = oddsChangeMap.value.get(key);
  46917. return (change == null ? void 0 : change.direction) === "down" && Date.now() - change.timestamp < 3e3;
  46918. };
  46919. const showChangeIcon = (key) => {
  46920. const change = oddsChangeMap.value.get(key);
  46921. return change && Date.now() - change.timestamp < 3e3;
  46922. };
  46923. const isEventsExpanded = vue.ref(true);
  46924. const parsedEvents = vue.computed(() => {
  46925. if (!matchInfo.value || !matchInfo.value.event || !Array.isArray(matchInfo.value.event))
  46926. return [];
  46927. return matchInfo.value.event.map((ev) => {
  46928. let player = {};
  46929. let assist = {};
  46930. try {
  46931. player = ev.player ? JSON.parse(ev.player) : {};
  46932. } catch (e) {
  46933. }
  46934. try {
  46935. assist = ev.assist ? JSON.parse(ev.assist) : {};
  46936. } catch (e) {
  46937. }
  46938. return {
  46939. ...ev,
  46940. playerName: (player == null ? void 0 : player.name) || t2("未知"),
  46941. assistName: (assist == null ? void 0 : assist.name) || ""
  46942. };
  46943. }).sort((a, b) => a.time_elapsed - b.time_elapsed);
  46944. });
  46945. const getEventIcon = (type2, detail) => {
  46946. const lowerType = String(type2).toLowerCase();
  46947. const lowerDetail = String(detail).toLowerCase();
  46948. if (lowerType === "goal")
  46949. return "⚽";
  46950. if (lowerType === "card")
  46951. return lowerDetail.includes("yellow") ? "🟨" : "🟥";
  46952. if (lowerType === "subst")
  46953. return "🔄";
  46954. return "⏱";
  46955. };
  46956. const getEventDetailText = (ev) => {
  46957. let text = (locale.value === "zh" ? ev.detail_text : ev.detail) || ev.type;
  46958. if (ev.assistName)
  46959. text += ` (${ev.assistName})`;
  46960. if (ev.comments)
  46961. text += ` - ${ev.comments}`;
  46962. return text;
  46963. };
  46964. const getUniqueKey = (dataId2, marketId, selection) => {
  46965. let val = selection.submit_value !== void 0 ? selection.submit_value : selection.value !== void 0 ? selection.value : selection.optionValue;
  46966. let hdp = "";
  46967. if (selection.handicap !== null && selection.handicap !== void 0 && selection.handicap !== "") {
  46968. hdp = `_${selection.handicap}`;
  46969. } else if (selection.handicap_text !== null && selection.handicap_text !== void 0 && selection.handicap_text !== "") {
  46970. hdp = `_${selection.handicap_text}`;
  46971. }
  46972. return `${dataId2}_${marketId}_${val}${hdp}`;
  46973. };
  46974. const checkIsLocked = (item) => {
  46975. if (!item)
  46976. return true;
  46977. if (Number(item.is_locked) === 1)
  46978. return true;
  46979. if (Number(item.status) !== 1)
  46980. return true;
  46981. const state = Number(item.state);
  46982. return state !== 0 && state !== 1;
  46983. };
  46984. const isOptionLocked = (item, marketId, opt) => {
  46985. if (checkIsLocked(item))
  46986. return true;
  46987. if (item && item.odd_ids_locked) {
  46988. let lockedIds = item.odd_ids_locked;
  46989. if (typeof lockedIds === "string") {
  46990. try {
  46991. lockedIds = JSON.parse(lockedIds);
  46992. } catch (e) {
  46993. lockedIds = [];
  46994. }
  46995. }
  46996. if (Array.isArray(lockedIds) && lockedIds.map(Number).includes(Number(marketId)))
  46997. return true;
  46998. }
  46999. if (!opt || !opt.odd || opt.odd === "-" || Number(opt.odd) === 0)
  47000. return true;
  47001. return opt.suspended === true || String(opt.suspended).toLowerCase() === "true";
  47002. };
  47003. const expandedGroups = vue.ref({});
  47004. const isExpanded = (id) => !!expandedGroups.value[id];
  47005. const toggleGroup = (id) => {
  47006. expandedGroups.value[id] = !expandedGroups.value[id];
  47007. };
  47008. const getVisibleValues = (market, values) => {
  47009. if (!values)
  47010. return [];
  47011. if (isSlashGroupMarket(market)) {
  47012. const { keys } = getSlashHeadersInfo(market);
  47013. const groups = {};
  47014. keys.forEach((k) => groups[k] = []);
  47015. const others2 = [];
  47016. values.forEach((v) => {
  47017. if (typeof v.value === "string" && v.value.includes("/")) {
  47018. const k = v.value.split("/")[0];
  47019. if (groups[k])
  47020. groups[k].push(v);
  47021. else
  47022. others2.push(v);
  47023. } else {
  47024. others2.push(v);
  47025. }
  47026. });
  47027. let sortedValues2 = [];
  47028. const maxLen = Math.max(...keys.map((k) => groups[k].length), 0);
  47029. for (let i = 0; i < maxLen; i++) {
  47030. keys.forEach((k) => {
  47031. if (groups[k][i])
  47032. sortedValues2.push(groups[k][i]);
  47033. });
  47034. }
  47035. sortedValues2 = sortedValues2.concat(others2);
  47036. if (isExpanded(market.id))
  47037. return sortedValues2;
  47038. return sortedValues2.length <= keys.length ? sortedValues2 : sortedValues2.slice(0, keys.length);
  47039. }
  47040. if (isOverUnderMixedMarket(market)) {
  47041. const overs = [], unders = [], others2 = [];
  47042. values.forEach((v) => {
  47043. const valStr = String(v.value).toLowerCase();
  47044. const zhStr = String(v.value_text || "");
  47045. let type2 = "";
  47046. if (valStr.includes("under") || zhStr.startsWith("小"))
  47047. type2 = "under";
  47048. else if (valStr.includes("over") || valStr.includes("or more") || zhStr.startsWith("大"))
  47049. type2 = "over";
  47050. const numMatch = valStr.match(/\d+(\.\d+)?/);
  47051. const key = numMatch ? numMatch[0] : valStr;
  47052. if (type2 === "over")
  47053. overs.push({ ...v, _sortKey: key });
  47054. else if (type2 === "under")
  47055. unders.push({ ...v, _sortKey: key });
  47056. else
  47057. others2.push(v);
  47058. });
  47059. const keys = [.../* @__PURE__ */ new Set([...overs.map((o) => o._sortKey), ...unders.map((u2) => u2._sortKey)])];
  47060. keys.sort((a, b) => {
  47061. const numA = parseFloat(a);
  47062. const numB = parseFloat(b);
  47063. if (!isNaN(numA) && !isNaN(numB))
  47064. return numA - numB;
  47065. return a.localeCompare(b);
  47066. });
  47067. let sortedValues2 = [];
  47068. keys.forEach((k) => {
  47069. const overItem = overs.find((o) => o._sortKey === k);
  47070. const underItem = unders.find((u2) => u2._sortKey === k);
  47071. if (overItem)
  47072. sortedValues2.push(overItem);
  47073. if (underItem)
  47074. sortedValues2.push(underItem);
  47075. });
  47076. sortedValues2 = sortedValues2.concat(others2);
  47077. if (isExpanded(market.id))
  47078. return sortedValues2;
  47079. return sortedValues2.length <= 2 ? sortedValues2 : sortedValues2.slice(0, 2);
  47080. }
  47081. if (threeColMarkets.includes(market.name_en))
  47082. return values;
  47083. if (isThreeWayMarket(market)) {
  47084. const col1 = [], col2 = [], col3 = [], others2 = [];
  47085. const hasHome = market.values.some((v) => ["Home", "1"].includes(v.value));
  47086. const hasDraw = market.values.some((v) => ["Draw", "X"].includes(v.value));
  47087. const hasAway = market.values.some((v) => ["Away", "2"].includes(v.value));
  47088. const isHAD = hasHome && hasDraw && hasAway;
  47089. values.forEach((v) => {
  47090. if (isHAD) {
  47091. if (["Home", "1"].includes(v.value))
  47092. col1.push(v);
  47093. else if (["Draw", "X"].includes(v.value))
  47094. col2.push(v);
  47095. else if (["Away", "2"].includes(v.value))
  47096. col3.push(v);
  47097. else
  47098. others2.push(v);
  47099. } else {
  47100. if (["Over"].includes(v.value))
  47101. col1.push(v);
  47102. else if (["Exactly"].includes(v.value))
  47103. col2.push(v);
  47104. else if (["Under"].includes(v.value))
  47105. col3.push(v);
  47106. else
  47107. others2.push(v);
  47108. }
  47109. });
  47110. let sortedValues2 = [];
  47111. const maxLen = Math.max(col1.length, col2.length, col3.length);
  47112. for (let i = 0; i < maxLen; i++) {
  47113. if (col1[i])
  47114. sortedValues2.push(col1[i]);
  47115. if (col2[i])
  47116. sortedValues2.push(col2[i]);
  47117. if (col3[i])
  47118. sortedValues2.push(col3[i]);
  47119. }
  47120. sortedValues2 = sortedValues2.concat(others2);
  47121. if (isExpanded(market.id))
  47122. return sortedValues2;
  47123. return sortedValues2.length <= 3 ? sortedValues2 : sortedValues2.slice(0, 3);
  47124. }
  47125. const lefts = [];
  47126. const rights = [];
  47127. const others = [];
  47128. values.forEach((v) => {
  47129. const p = pairPriority[v.value];
  47130. if (p === 1)
  47131. lefts.push(v);
  47132. else if (p === 2)
  47133. rights.push(v);
  47134. else
  47135. others.push(v);
  47136. });
  47137. let sortedValues = [];
  47138. if (lefts.length > 0 || rights.length > 0) {
  47139. const maxLen = Math.max(lefts.length, rights.length);
  47140. for (let i = 0; i < maxLen; i++) {
  47141. if (lefts[i])
  47142. sortedValues.push(lefts[i]);
  47143. if (rights[i])
  47144. sortedValues.push(rights[i]);
  47145. }
  47146. sortedValues = sortedValues.concat(others);
  47147. } else {
  47148. sortedValues = [...values];
  47149. }
  47150. if (isExpanded(market.id))
  47151. return sortedValues;
  47152. return sortedValues.length <= 3 ? sortedValues : sortedValues.slice(0, 2);
  47153. };
  47154. const hasMore = (values) => {
  47155. if (!values)
  47156. return false;
  47157. return values.length > 3;
  47158. };
  47159. const getRemainCount = (values) => {
  47160. if (!values)
  47161. return 0;
  47162. return values.length - 2;
  47163. };
  47164. onLoad((options) => {
  47165. if (options && options.data_id)
  47166. dataId.value = options.data_id;
  47167. });
  47168. vue.watch(() => WebsocketData.data, handleWebsocketData);
  47169. function handleWebsocketData(data) {
  47170. try {
  47171. const res = typeof data === "string" ? JSON.parse(data) : data;
  47172. if (res.type === "sport_list" && Array.isArray(res.message)) {
  47173. res.message.forEach((newMatch) => {
  47174. if (matchInfo.value && String(matchInfo.value.data_id) === String(newMatch.data_id)) {
  47175. const oldMatch = matchInfo.value;
  47176. let parsedNewOdds = newMatch.odds;
  47177. if (typeof parsedNewOdds === "string") {
  47178. try {
  47179. parsedNewOdds = JSON.parse(parsedNewOdds);
  47180. } catch (e) {
  47181. parsedNewOdds = [];
  47182. }
  47183. } else if (!parsedNewOdds)
  47184. parsedNewOdds = oldMatch.odds;
  47185. if (oldMatch.odds && Array.isArray(oldMatch.odds) && parsedNewOdds && Array.isArray(parsedNewOdds)) {
  47186. parsedNewOdds.forEach((newMarket) => {
  47187. const oldMarket = oldMatch.odds.find((m) => m.id === newMarket.id);
  47188. if (oldMarket && oldMarket.values && newMarket.values) {
  47189. newMarket.values.forEach((newOpt) => {
  47190. const oldOpt = oldMarket.values.find((o) => {
  47191. if (o.submit_value && newOpt.submit_value) {
  47192. return o.submit_value === newOpt.submit_value;
  47193. }
  47194. return o.value === newOpt.value && (o.handicap == newOpt.handicap || !o.handicap && !newOpt.handicap);
  47195. });
  47196. if ((oldOpt == null ? void 0 : oldOpt.odd) && (newOpt == null ? void 0 : newOpt.odd)) {
  47197. const oldOddNum = parseFloat(oldOpt.odd);
  47198. const newOddNum = parseFloat(newOpt.odd);
  47199. if (!isNaN(oldOddNum) && !isNaN(newOddNum) && oldOddNum !== newOddNum) {
  47200. const key = getOddsKey(oldMatch.data_id, newMarket.id, newOpt);
  47201. oddsChangeMap.value.set(key, { direction: newOddNum > oldOddNum ? "up" : "down", timestamp: Date.now() });
  47202. setTimeout(() => {
  47203. oddsChangeMap.value.delete(key);
  47204. }, 3100);
  47205. }
  47206. }
  47207. });
  47208. }
  47209. });
  47210. }
  47211. let parsedOdds = newMatch.odds;
  47212. if (typeof parsedOdds === "string") {
  47213. try {
  47214. parsedOdds = JSON.parse(parsedOdds);
  47215. } catch (e) {
  47216. parsedOdds = [];
  47217. }
  47218. } else if (!parsedOdds)
  47219. parsedOdds = matchInfo.value.odds;
  47220. let parsedLockedIds = newMatch.odd_ids_locked;
  47221. if (typeof parsedLockedIds === "string") {
  47222. try {
  47223. parsedLockedIds = JSON.parse(parsedLockedIds);
  47224. } catch (e) {
  47225. parsedLockedIds = [];
  47226. }
  47227. } else if (parsedLockedIds === void 0)
  47228. parsedLockedIds = matchInfo.value.odd_ids_locked || [];
  47229. matchInfo.value = { ...matchInfo.value, ...newMatch, odds: parsedOdds, odd_ids_locked: parsedLockedIds };
  47230. if (matchInfo.value.odds) {
  47231. matchInfo.value.odds.forEach((market) => {
  47232. if (market.values) {
  47233. market.values.forEach((wsItem) => {
  47234. if (isOptionLocked(matchInfo.value, market.id, wsItem)) {
  47235. const uniqueKey = getUniqueKey(matchInfo.value.data_id, market.id, wsItem);
  47236. }
  47237. });
  47238. }
  47239. });
  47240. }
  47241. orderStore.updateMatchStatus(newMatch.data_id, matchInfo.value);
  47242. }
  47243. });
  47244. }
  47245. } catch (error) {
  47246. }
  47247. }
  47248. onShow(() => {
  47249. syncFromStore();
  47250. fetchData();
  47251. });
  47252. vue.watch(() => orderStore.selectOrders, () => {
  47253. syncFromStore();
  47254. }, { deep: true });
  47255. const syncFromStore = () => {
  47256. const map = {};
  47257. if (orderStore.selectOrders && orderStore.selectOrders.length) {
  47258. orderStore.selectOrders.forEach((order) => {
  47259. if (order.uniqueKey)
  47260. map[order.uniqueKey] = true;
  47261. });
  47262. }
  47263. selectedMap.value = map;
  47264. };
  47265. const fetchData = async () => {
  47266. if (!dataId.value)
  47267. return pagingRef.value.complete(false);
  47268. try {
  47269. const res = await getSportInfo({ data_id: dataId.value });
  47270. if (res.code === 1 && res.data) {
  47271. if (typeof res.data.odds === "string") {
  47272. try {
  47273. res.data.odds = JSON.parse(res.data.odds);
  47274. } catch (e) {
  47275. res.data.odds = [];
  47276. }
  47277. }
  47278. if (res.data.odd_ids_locked && typeof res.data.odd_ids_locked === "string") {
  47279. try {
  47280. res.data.odd_ids_locked = JSON.parse(res.data.odd_ids_locked);
  47281. } catch (e) {
  47282. res.data.odd_ids_locked = [];
  47283. }
  47284. }
  47285. matchInfo.value = res.data;
  47286. pagingRef.value.complete(true);
  47287. } else {
  47288. pagingRef.value.complete(false);
  47289. uni.showToast({ title: res.msg || t2("获取赛事失败"), icon: "none" });
  47290. setTimeout(() => {
  47291. uni.navigateBack();
  47292. }, 1500);
  47293. }
  47294. } catch (e) {
  47295. pagingRef.value.complete(false);
  47296. }
  47297. };
  47298. const getStatusText = (state) => {
  47299. const states = { 0: t2("未开始"), 1: t2("进行中"), 2: t2("已完场"), 3: t2("延期"), 4: t2("取消") };
  47300. return states[state] || t2("未知");
  47301. };
  47302. const getScore = (scoreStr, index) => {
  47303. if (!scoreStr || scoreStr === "-")
  47304. return 0;
  47305. return scoreStr.split("-")[index] || 0;
  47306. };
  47307. const getMarketName = (name) => name;
  47308. const isSelected = (marketId, selection) => matchInfo.value ? !!selectedMap.value[getUniqueKey(matchInfo.value.data_id, marketId, selection)] : false;
  47309. const handleBet = (market, selection) => {
  47310. if (isOptionLocked(matchInfo.value, market.id, selection))
  47311. return;
  47312. const uniqueKey = getUniqueKey(matchInfo.value.data_id, market.id, selection);
  47313. if (isSelected(market.id, selection)) {
  47314. orderStore.removeOrderItemByKey(uniqueKey);
  47315. } else {
  47316. if (market.values) {
  47317. market.values.forEach((wsItem) => {
  47318. const otherKey = getUniqueKey(matchInfo.value.data_id, market.id, wsItem);
  47319. if (selectedMap.value[otherKey])
  47320. orderStore.removeOrderItemByKey(otherKey);
  47321. });
  47322. }
  47323. const betItem = {
  47324. matchId: matchInfo.value.id,
  47325. data_id: matchInfo.value.data_id,
  47326. league: matchInfo.value.league,
  47327. league_en: matchInfo.value.league_en,
  47328. homeTeam: matchInfo.value.home_team,
  47329. home_team_en: matchInfo.value.home_team_en,
  47330. guestTeam: matchInfo.value.guest_team,
  47331. guest_team_en: matchInfo.value.guest_team_en,
  47332. betType: market.name,
  47333. betTypeEn: market.name_en,
  47334. betTypeName: selection.value_text,
  47335. betTypeNameEn: selection.value,
  47336. handicap: selection.handicap,
  47337. handicap_text: selection.handicap_text,
  47338. odds: selection.odd,
  47339. score: matchInfo.value.score,
  47340. state: matchInfo.value.state,
  47341. status: matchInfo.value.status,
  47342. is_roll: matchInfo.value.is_roll,
  47343. is_locked: matchInfo.value.is_locked,
  47344. uniqueKey,
  47345. optionValue: selection.value,
  47346. submit_value: selection.submit_value,
  47347. marketId: market.id,
  47348. mininum: market.mininum,
  47349. // 新增:最低限额
  47350. maxinum: market.maxinum,
  47351. // 新增:最高限额
  47352. selection: {
  47353. ...selection
  47354. }
  47355. };
  47356. orderStore.addOrderItem(betItem);
  47357. uni.vibrateShort();
  47358. }
  47359. };
  47360. const __returned__ = { t: t2, locale, orderStore, WebsocketData, pagingRef, matchInfo, dataId, selectedMap, stateTagType, threeColMarkets, pairPriority, translateSelection, isDoubleChanceMarket, isThreeWayMarket, getThreeWayHeaders, isSlashGroupMarket, getSlashHeadersInfo, isOverUnderMixedMarket, getSelectionDisplayName, getColClass, showExpand, getExpandRemainCount, isHeaderValue, getPairHeaders, hasPairHeaders, oddsChangeMap, getOddsKey, isOddsUp, isOddsDown, showChangeIcon, isEventsExpanded, parsedEvents, getEventIcon, getEventDetailText, getUniqueKey, checkIsLocked, isOptionLocked, expandedGroups, isExpanded, toggleGroup, getVisibleValues, hasMore, getRemainCount, handleWebsocketData, syncFromStore, fetchData, getStatusText, getScore, getMarketName, isSelected, handleBet, ref: vue.ref, watch: vue.watch, onUnmounted: vue.onUnmounted, computed: vue.computed, get onLoad() {
  47361. return onLoad;
  47362. }, get onShow() {
  47363. return onShow;
  47364. }, get useI18n() {
  47365. return useI18n;
  47366. }, get getSportInfo() {
  47367. return getSportInfo;
  47368. }, get useOrderStore() {
  47369. return useOrderStore;
  47370. }, get useWebsocketDataStore() {
  47371. return useWebsocketDataStore;
  47372. } };
  47373. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  47374. return __returned__;
  47375. }
  47376. };
  47377. function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
  47378. const _component_u_image = __unplugin_components_1$1;
  47379. const _component_u_icon = __unplugin_components_0$5;
  47380. const _component_u_tag = __unplugin_components_2$2;
  47381. const _component_u_empty = __unplugin_components_4$2;
  47382. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  47383. const _component_PageContainer = PageContainer;
  47384. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  47385. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  47386. default: vue.withCtx(() => [
  47387. vue.createVNode(_component_PageContainer, {
  47388. "nav-title": $setup.t("赛事详情")
  47389. }, {
  47390. default: vue.withCtx(() => [
  47391. vue.createVNode(
  47392. _component_z_paging,
  47393. {
  47394. ref: "pagingRef",
  47395. onQuery: $setup.fetchData,
  47396. "refresher-only": true,
  47397. "loading-more-enabled": false,
  47398. fixed: false,
  47399. "auto-show-system-loading": true
  47400. },
  47401. {
  47402. refresher: vue.withCtx(() => [
  47403. vue.createElementVNode("view", { class: "flex flex-col items-center justify-center py-6" }, [
  47404. vue.createElementVNode("view", { class: "refresh-spinner mb-2" }),
  47405. vue.createElementVNode(
  47406. "text",
  47407. { class: "text-xs tmc" },
  47408. vue.toDisplayString($setup.t("正在更新赛事...")),
  47409. 1
  47410. /* TEXT */
  47411. )
  47412. ])
  47413. ]),
  47414. default: vue.withCtx(() => {
  47415. var _a2, _b2;
  47416. return [
  47417. $setup.matchInfo ? (vue.openBlock(), vue.createElementBlock(
  47418. vue.Fragment,
  47419. { key: 0 },
  47420. [
  47421. vue.createElementVNode("view", { class: "scoreboard" }, [
  47422. vue.createElementVNode("view", { class: "bg-mask" }),
  47423. vue.createElementVNode("view", { class: "league-bar-top" }, [
  47424. vue.createElementVNode("view", { class: "league-info" }, [
  47425. $setup.matchInfo.league_logo ? (vue.openBlock(), vue.createBlock(_component_u_image, {
  47426. key: 0,
  47427. src: $setup.matchInfo.league_logo,
  47428. width: "16px",
  47429. height: "16px"
  47430. }, null, 8, ["src"])) : (vue.openBlock(), vue.createBlock(_component_u_icon, {
  47431. key: 1,
  47432. name: "grid-fill",
  47433. color: "#f8b932",
  47434. size: "14"
  47435. })),
  47436. vue.createElementVNode(
  47437. "text",
  47438. { class: "league-name" },
  47439. vue.toDisplayString($setup.locale === "zh" ? $setup.matchInfo.league : $setup.matchInfo.league_en),
  47440. 1
  47441. /* TEXT */
  47442. ),
  47443. $setup.matchInfo.is_roll === 1 ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  47444. key: 2,
  47445. text: $setup.t("滚球"),
  47446. type: "primary",
  47447. size: "mini",
  47448. class: "ml-2"
  47449. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true)
  47450. ])
  47451. ]),
  47452. vue.createElementVNode("view", { class: "match-main-info" }, [
  47453. vue.createElementVNode("view", { class: "team-block" }, [
  47454. vue.createElementVNode("view", { class: "logo-wrapper" }, [
  47455. vue.createVNode(_component_u_image, {
  47456. src: $setup.matchInfo.home_team_logo,
  47457. errorIcon: "photo",
  47458. width: "56px",
  47459. height: "56px",
  47460. shape: "circle"
  47461. }, null, 8, ["src"])
  47462. ]),
  47463. vue.createElementVNode(
  47464. "text",
  47465. { class: "team-name" },
  47466. vue.toDisplayString($setup.locale === "zh" ? $setup.matchInfo.home_team : $setup.matchInfo.home_team_en),
  47467. 1
  47468. /* TEXT */
  47469. ),
  47470. vue.createVNode(_component_u_tag, {
  47471. size: "mini",
  47472. type: "success",
  47473. plain: ""
  47474. }, {
  47475. default: vue.withCtx(() => [
  47476. vue.createTextVNode(
  47477. vue.toDisplayString($setup.t("主")),
  47478. 1
  47479. /* TEXT */
  47480. )
  47481. ]),
  47482. _: 1
  47483. /* STABLE */
  47484. })
  47485. ]),
  47486. vue.createElementVNode("view", { class: "score-block" }, [
  47487. vue.createElementVNode(
  47488. "span",
  47489. {
  47490. class: vue.normalizeClass(["game-time-tag", `is-${$setup.stateTagType($setup.matchInfo.state)}`])
  47491. },
  47492. vue.toDisplayString($setup.matchInfo.game_time),
  47493. 3
  47494. /* TEXT, CLASS */
  47495. ),
  47496. vue.createElementVNode(
  47497. "view",
  47498. {
  47499. class: vue.normalizeClass(["status-badge", `is-${$setup.stateTagType($setup.matchInfo.state)}`])
  47500. },
  47501. [
  47502. $setup.matchInfo.state === 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  47503. key: 0,
  47504. class: "live-dot"
  47505. })) : vue.createCommentVNode("v-if", true),
  47506. vue.createElementVNode(
  47507. "text",
  47508. { class: "status-text" },
  47509. vue.toDisplayString($setup.getStatusText($setup.matchInfo.state)),
  47510. 1
  47511. /* TEXT */
  47512. )
  47513. ],
  47514. 2
  47515. /* CLASS */
  47516. ),
  47517. $setup.matchInfo.state !== 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  47518. key: 0,
  47519. class: "score-display"
  47520. }, [
  47521. vue.createElementVNode(
  47522. "text",
  47523. { class: "score-num" },
  47524. vue.toDisplayString($setup.getScore($setup.matchInfo.score, 0)),
  47525. 1
  47526. /* TEXT */
  47527. ),
  47528. vue.createElementVNode("text", { class: "score-colon" }, ":"),
  47529. vue.createElementVNode(
  47530. "text",
  47531. { class: "score-num" },
  47532. vue.toDisplayString($setup.getScore($setup.matchInfo.score, 1)),
  47533. 1
  47534. /* TEXT */
  47535. )
  47536. ])) : vue.createCommentVNode("v-if", true),
  47537. $setup.matchInfo.half_score && $setup.matchInfo.state !== 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  47538. key: 1,
  47539. class: "half-score"
  47540. }, [
  47541. vue.createElementVNode(
  47542. "text",
  47543. null,
  47544. vue.toDisplayString($setup.t("上半场")) + " " + vue.toDisplayString($setup.matchInfo.half_score),
  47545. 1
  47546. /* TEXT */
  47547. )
  47548. ])) : vue.createCommentVNode("v-if", true),
  47549. $setup.matchInfo.fixture_status && ((_a2 = $setup.matchInfo.fixture_status) == null ? void 0 : _a2.long) ? (vue.openBlock(), vue.createElementBlock("view", {
  47550. key: 2,
  47551. class: "fixture-status"
  47552. }, [
  47553. vue.createElementVNode(
  47554. "text",
  47555. null,
  47556. vue.toDisplayString($setup.t((_b2 = $setup.matchInfo.fixture_status) == null ? void 0 : _b2.long)),
  47557. 1
  47558. /* TEXT */
  47559. ),
  47560. $setup.matchInfo.fixture_status.seconds ? (vue.openBlock(), vue.createElementBlock(
  47561. "text",
  47562. {
  47563. key: 0,
  47564. style: { "margin-left": "4px" }
  47565. },
  47566. vue.toDisplayString($setup.matchInfo.fixture_status.seconds),
  47567. 1
  47568. /* TEXT */
  47569. )) : vue.createCommentVNode("v-if", true)
  47570. ])) : vue.createCommentVNode("v-if", true)
  47571. ]),
  47572. vue.createElementVNode("view", { class: "team-block" }, [
  47573. vue.createElementVNode("view", { class: "logo-wrapper" }, [
  47574. vue.createVNode(_component_u_image, {
  47575. src: $setup.matchInfo.guest_team_logo,
  47576. width: "56px",
  47577. height: "56px",
  47578. errorIcon: "photo",
  47579. shape: "circle"
  47580. }, null, 8, ["src"])
  47581. ]),
  47582. vue.createElementVNode(
  47583. "text",
  47584. { class: "team-name" },
  47585. vue.toDisplayString($setup.locale === "zh" ? $setup.matchInfo.guest_team : $setup.matchInfo.guest_team_en),
  47586. 1
  47587. /* TEXT */
  47588. ),
  47589. vue.createVNode(_component_u_tag, {
  47590. size: "mini",
  47591. type: "error",
  47592. plain: ""
  47593. }, {
  47594. default: vue.withCtx(() => [
  47595. vue.createTextVNode(
  47596. vue.toDisplayString($setup.t("客")),
  47597. 1
  47598. /* TEXT */
  47599. )
  47600. ]),
  47601. _: 1
  47602. /* STABLE */
  47603. })
  47604. ])
  47605. ])
  47606. ]),
  47607. vue.createElementVNode("view", { class: "market-list" }, [
  47608. $setup.matchInfo.event && $setup.matchInfo.event.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  47609. key: 0,
  47610. class: "market-card events-card"
  47611. }, [
  47612. vue.createElementVNode("view", {
  47613. class: "market-header",
  47614. onClick: _cache[0] || (_cache[0] = ($event) => $setup.isEventsExpanded = !$setup.isEventsExpanded),
  47615. style: { "cursor": "pointer", "border-bottom": "none", "padding-bottom": "0", "margin-bottom": "0" }
  47616. }, [
  47617. vue.createElementVNode("view", { class: "header-left" }, [
  47618. vue.createElementVNode("view", { class: "stick" }),
  47619. vue.createElementVNode(
  47620. "text",
  47621. { class: "title" },
  47622. vue.toDisplayString($setup.t("比赛事件")),
  47623. 1
  47624. /* TEXT */
  47625. )
  47626. ]),
  47627. vue.createVNode(_component_u_icon, {
  47628. name: $setup.isEventsExpanded ? "arrow-up" : "arrow-down",
  47629. color: "#94a3b8",
  47630. size: "16"
  47631. }, null, 8, ["name"])
  47632. ]),
  47633. vue.withDirectives(vue.createElementVNode(
  47634. "view",
  47635. { class: "events-body" },
  47636. [
  47637. vue.createElementVNode("view", { class: "timeline" }, [
  47638. (vue.openBlock(true), vue.createElementBlock(
  47639. vue.Fragment,
  47640. null,
  47641. vue.renderList($setup.parsedEvents, (ev, idx) => {
  47642. return vue.openBlock(), vue.createElementBlock("view", {
  47643. class: "timeline-item",
  47644. key: ev.id || idx
  47645. }, [
  47646. vue.createElementVNode(
  47647. "view",
  47648. { class: "t-time" },
  47649. vue.toDisplayString(ev.time_elapsed) + "'",
  47650. 1
  47651. /* TEXT */
  47652. ),
  47653. vue.createElementVNode("view", { class: "t-node" }, [
  47654. vue.createElementVNode(
  47655. "text",
  47656. { class: "t-icon" },
  47657. vue.toDisplayString($setup.getEventIcon(ev.type, ev.detail)),
  47658. 1
  47659. /* TEXT */
  47660. ),
  47661. idx !== $setup.parsedEvents.length - 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  47662. key: 0,
  47663. class: "t-line"
  47664. })) : vue.createCommentVNode("v-if", true)
  47665. ]),
  47666. vue.createElementVNode("view", { class: "t-content" }, [
  47667. vue.createElementVNode(
  47668. "text",
  47669. { class: "t-player" },
  47670. vue.toDisplayString(ev.playerName),
  47671. 1
  47672. /* TEXT */
  47673. ),
  47674. vue.createElementVNode(
  47675. "text",
  47676. { class: "t-detail" },
  47677. vue.toDisplayString($setup.getEventDetailText(ev)),
  47678. 1
  47679. /* TEXT */
  47680. )
  47681. ])
  47682. ]);
  47683. }),
  47684. 128
  47685. /* KEYED_FRAGMENT */
  47686. ))
  47687. ])
  47688. ],
  47689. 512
  47690. /* NEED_PATCH */
  47691. ), [
  47692. [vue.vShow, $setup.isEventsExpanded]
  47693. ])
  47694. ])) : vue.createCommentVNode("v-if", true),
  47695. (vue.openBlock(true), vue.createElementBlock(
  47696. vue.Fragment,
  47697. null,
  47698. vue.renderList($setup.matchInfo.odds, (market, mIndex) => {
  47699. return vue.openBlock(), vue.createElementBlock("view", {
  47700. class: "market-card",
  47701. key: mIndex
  47702. }, [
  47703. vue.createElementVNode("view", { class: "market-header" }, [
  47704. vue.createElementVNode("view", { class: "header-left" }, [
  47705. vue.createElementVNode("view", { class: "stick" }),
  47706. vue.createElementVNode(
  47707. "text",
  47708. { class: "title" },
  47709. vue.toDisplayString($setup.getMarketName($setup.locale === "zh" ? market.name : market.name_en)),
  47710. 1
  47711. /* TEXT */
  47712. )
  47713. ]),
  47714. $setup.showExpand(market) ? (vue.openBlock(), vue.createElementBlock("view", {
  47715. key: 0,
  47716. class: "header-right",
  47717. onClick: ($event) => $setup.toggleGroup(market.id)
  47718. }, [
  47719. vue.createElementVNode(
  47720. "text",
  47721. { class: "toggle-text" },
  47722. vue.toDisplayString($setup.isExpanded(market.id) ? $setup.t("收起") : $setup.t("展开") + " +" + $setup.getExpandRemainCount(market)),
  47723. 1
  47724. /* TEXT */
  47725. ),
  47726. vue.createVNode(_component_u_icon, {
  47727. name: $setup.isExpanded(market.id) ? "arrow-up" : "arrow-down",
  47728. color: "#64748b",
  47729. size: "14"
  47730. }, null, 8, ["name"])
  47731. ], 8, ["onClick"])) : vue.createCommentVNode("v-if", true)
  47732. ]),
  47733. $setup.hasPairHeaders(market) || $setup.isThreeWayMarket(market) || $setup.isSlashGroupMarket(market) || $setup.isOverUnderMixedMarket(market) ? (vue.openBlock(), vue.createElementBlock("view", {
  47734. key: 0,
  47735. class: "pair-headers"
  47736. }, [
  47737. $setup.isSlashGroupMarket(market) ? (vue.openBlock(true), vue.createElementBlock(
  47738. vue.Fragment,
  47739. { key: 0 },
  47740. vue.renderList($setup.getSlashHeadersInfo(market).headers, (h, idx) => {
  47741. return vue.openBlock(), vue.createElementBlock(
  47742. "view",
  47743. {
  47744. class: "pair-header-item",
  47745. key: idx
  47746. },
  47747. vue.toDisplayString(h.name),
  47748. 1
  47749. /* TEXT */
  47750. );
  47751. }),
  47752. 128
  47753. /* KEYED_FRAGMENT */
  47754. )) : $setup.isThreeWayMarket(market) ? (vue.openBlock(), vue.createElementBlock(
  47755. vue.Fragment,
  47756. { key: 1 },
  47757. [
  47758. vue.createElementVNode(
  47759. "view",
  47760. { class: "pair-header-item" },
  47761. vue.toDisplayString($setup.getThreeWayHeaders(market)[0]),
  47762. 1
  47763. /* TEXT */
  47764. ),
  47765. vue.createElementVNode(
  47766. "view",
  47767. { class: "pair-header-item" },
  47768. vue.toDisplayString($setup.getThreeWayHeaders(market)[1]),
  47769. 1
  47770. /* TEXT */
  47771. ),
  47772. vue.createElementVNode(
  47773. "view",
  47774. { class: "pair-header-item" },
  47775. vue.toDisplayString($setup.getThreeWayHeaders(market)[2]),
  47776. 1
  47777. /* TEXT */
  47778. )
  47779. ],
  47780. 64
  47781. /* STABLE_FRAGMENT */
  47782. )) : $setup.isOverUnderMixedMarket(market) ? (vue.openBlock(), vue.createElementBlock(
  47783. vue.Fragment,
  47784. { key: 2 },
  47785. [
  47786. vue.createElementVNode(
  47787. "view",
  47788. { class: "pair-header-item" },
  47789. vue.toDisplayString($setup.locale === "zh" ? "大" : "Over"),
  47790. 1
  47791. /* TEXT */
  47792. ),
  47793. vue.createElementVNode(
  47794. "view",
  47795. { class: "pair-header-item" },
  47796. vue.toDisplayString($setup.locale === "zh" ? "小" : "Under"),
  47797. 1
  47798. /* TEXT */
  47799. )
  47800. ],
  47801. 64
  47802. /* STABLE_FRAGMENT */
  47803. )) : (vue.openBlock(), vue.createElementBlock(
  47804. vue.Fragment,
  47805. { key: 3 },
  47806. [
  47807. vue.createElementVNode(
  47808. "view",
  47809. { class: "pair-header-item" },
  47810. vue.toDisplayString($setup.getPairHeaders(market)[0]),
  47811. 1
  47812. /* TEXT */
  47813. ),
  47814. vue.createElementVNode(
  47815. "view",
  47816. { class: "pair-header-item" },
  47817. vue.toDisplayString($setup.getPairHeaders(market)[1]),
  47818. 1
  47819. /* TEXT */
  47820. )
  47821. ],
  47822. 64
  47823. /* STABLE_FRAGMENT */
  47824. ))
  47825. ])) : vue.createCommentVNode("v-if", true),
  47826. vue.createElementVNode("view", { class: "odds-grid" }, [
  47827. (vue.openBlock(true), vue.createElementBlock(
  47828. vue.Fragment,
  47829. null,
  47830. vue.renderList($setup.getVisibleValues(market, market.values), (selection, sIndex) => {
  47831. return vue.openBlock(), vue.createElementBlock("view", {
  47832. class: vue.normalizeClass(["odds-btn", [
  47833. $setup.getColClass(market),
  47834. {
  47835. "is-active": $setup.isSelected(market.id, selection),
  47836. "is-locked": $setup.isOptionLocked($setup.matchInfo, market.id, selection),
  47837. "odds-up": $setup.isOddsUp($setup.getOddsKey($setup.matchInfo.data_id, market.id, selection)) && !$setup.isOptionLocked($setup.matchInfo, market.id, selection),
  47838. "odds-down": $setup.isOddsDown($setup.getOddsKey($setup.matchInfo.data_id, market.id, selection)) && !$setup.isOptionLocked($setup.matchInfo, market.id, selection)
  47839. }
  47840. ]]),
  47841. key: sIndex,
  47842. onClick: ($event) => $setup.handleBet(market, selection)
  47843. }, [
  47844. $setup.isOptionLocked($setup.matchInfo, market.id, selection) ? (vue.openBlock(), vue.createElementBlock("view", {
  47845. key: 0,
  47846. class: "locked-overlay"
  47847. }, [
  47848. vue.createVNode(_component_u_icon, {
  47849. name: "lock",
  47850. color: "#fff",
  47851. size: "32"
  47852. })
  47853. ])) : vue.createCommentVNode("v-if", true),
  47854. vue.createElementVNode("view", { class: "btn-left" }, [
  47855. vue.createElementVNode(
  47856. "text",
  47857. { class: "selection-name" },
  47858. vue.toDisplayString($setup.getSelectionDisplayName(market, selection)),
  47859. 1
  47860. /* TEXT */
  47861. ),
  47862. selection.handicap_text ? (vue.openBlock(), vue.createElementBlock(
  47863. "text",
  47864. {
  47865. key: 0,
  47866. class: "selection-handicap"
  47867. },
  47868. vue.toDisplayString(selection.handicap_text),
  47869. 1
  47870. /* TEXT */
  47871. )) : vue.createCommentVNode("v-if", true)
  47872. ]),
  47873. vue.createElementVNode("view", { class: "btn-right" }, [
  47874. vue.createElementVNode("text", { class: "odds-val" }, [
  47875. vue.createTextVNode(
  47876. vue.toDisplayString(selection.odd || "-") + " ",
  47877. 1
  47878. /* TEXT */
  47879. ),
  47880. $setup.showChangeIcon($setup.getOddsKey($setup.matchInfo.data_id, market.id, selection)) && !$setup.isOptionLocked($setup.matchInfo, market.id, selection) ? (vue.openBlock(), vue.createElementBlock(
  47881. "text",
  47882. {
  47883. key: 0,
  47884. class: vue.normalizeClass(["change-icon", {
  47885. up: $setup.isOddsUp($setup.getOddsKey($setup.matchInfo.data_id, market.id, selection)),
  47886. down: $setup.isOddsDown($setup.getOddsKey($setup.matchInfo.data_id, market.id, selection))
  47887. }])
  47888. },
  47889. [
  47890. vue.withDirectives(vue.createVNode(
  47891. _component_u_icon,
  47892. { name: "arrow-up-fill" },
  47893. null,
  47894. 512
  47895. /* NEED_PATCH */
  47896. ), [
  47897. [vue.vShow, $setup.isOddsUp($setup.getOddsKey($setup.matchInfo.data_id, market.id, selection))]
  47898. ]),
  47899. vue.withDirectives(vue.createVNode(
  47900. _component_u_icon,
  47901. { name: "arrow-down-fill" },
  47902. null,
  47903. 512
  47904. /* NEED_PATCH */
  47905. ), [
  47906. [vue.vShow, !$setup.isOddsUp($setup.getOddsKey($setup.matchInfo.data_id, market.id, selection))]
  47907. ])
  47908. ],
  47909. 2
  47910. /* CLASS */
  47911. )) : vue.createCommentVNode("v-if", true)
  47912. ])
  47913. ])
  47914. ], 10, ["onClick"]);
  47915. }),
  47916. 128
  47917. /* KEYED_FRAGMENT */
  47918. ))
  47919. ])
  47920. ]);
  47921. }),
  47922. 128
  47923. /* KEYED_FRAGMENT */
  47924. )),
  47925. (!$setup.matchInfo.odds || $setup.matchInfo.odds.length === 0) && $setup.matchInfo.state !== 2 ? (vue.openBlock(), vue.createElementBlock("view", {
  47926. key: 1,
  47927. class: "empty-box"
  47928. }, [
  47929. vue.createVNode(_component_u_empty, {
  47930. text: $setup.t("暂无盘口数据"),
  47931. mode: "data"
  47932. }, null, 8, ["text"])
  47933. ])) : vue.createCommentVNode("v-if", true)
  47934. ]),
  47935. vue.createElementVNode("view", { class: "btHeight" }),
  47936. vue.createElementVNode("view", { class: "safe-hb" }),
  47937. vue.createElementVNode("view", { class: "safe-ht" })
  47938. ],
  47939. 64
  47940. /* STABLE_FRAGMENT */
  47941. )) : vue.createCommentVNode("v-if", true)
  47942. ];
  47943. }),
  47944. _: 1
  47945. /* STABLE */
  47946. },
  47947. 512
  47948. /* NEED_PATCH */
  47949. )
  47950. ]),
  47951. _: 1
  47952. /* STABLE */
  47953. }, 8, ["nav-title"])
  47954. ]),
  47955. _: 1
  47956. /* STABLE */
  47957. });
  47958. }
  47959. const PagesCommonSportDetailIndex = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$c], ["__scopeId", "data-v-21bc9fc5"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/sportDetail/index.vue"]]);
  47960. const _sfc_main$c = {
  47961. __name: "BettingItems",
  47962. props: ["PageContainerRef", "issue_no", "m", "s", "pc28", "apiIsFengpan", "selectedItems"],
  47963. emits: ["toggle"],
  47964. setup(__props, { expose: __expose, emit: __emit }) {
  47965. __expose();
  47966. const { t: t2 } = useI18n();
  47967. const WebsocketData = useWebsocketDataStore();
  47968. const ruleList = vue.ref([]);
  47969. const isFengpan = vue.ref(false);
  47970. const props = __props;
  47971. const emit = __emit;
  47972. vue.watch(() => props.apiIsFengpan, (val) => {
  47973. isFengpan.value = val;
  47974. });
  47975. const expandedGroups = vue.ref({});
  47976. const isExpanded = (groupName) => !!expandedGroups.value[groupName];
  47977. const expandGroup = (groupName) => {
  47978. expandedGroups.value[groupName] = true;
  47979. };
  47980. const getLimit = () => {
  47981. return 3;
  47982. };
  47983. const getVisibleRules = (groupName, rules2) => {
  47984. if (groupName === "热门" || isExpanded(groupName)) {
  47985. return rules2;
  47986. }
  47987. const limit = getLimit();
  47988. return rules2.slice(0, limit);
  47989. };
  47990. const hasMore = (groupName, rules2) => {
  47991. if (groupName === "热门")
  47992. return false;
  47993. const limit = getLimit();
  47994. return rules2.length > limit;
  47995. };
  47996. const getRemainCount = (rules2) => {
  47997. const limit = getLimit();
  47998. return rules2.length - limit;
  47999. };
  48000. vue.onMounted(() => {
  48001. fetchRules();
  48002. });
  48003. const fetchRules = async () => {
  48004. try {
  48005. const res = await getGameRuleList({ page: 1, limit: 999 });
  48006. if (res.code === 1 && res.data && res.data.list) {
  48007. ruleList.value = res.data.list.reverse();
  48008. }
  48009. } catch (error) {
  48010. formatAppLog("error", "at pages/Tabbar/Entertainment/components/BettingItems.vue:104", "获取玩法规则失败", error);
  48011. }
  48012. };
  48013. const groupedRules = vue.computed(() => {
  48014. const map = {};
  48015. ruleList.value.forEach((rule) => {
  48016. let group = rule.groups || "其他";
  48017. if (!map[group]) {
  48018. map[group] = [];
  48019. }
  48020. map[group].push(rule);
  48021. });
  48022. const sortedMap = {};
  48023. if (map["热门"]) {
  48024. sortedMap["热门"] = map["热门"];
  48025. delete map["热门"];
  48026. }
  48027. Object.keys(map).forEach((key) => {
  48028. sortedMap[key] = map[key];
  48029. });
  48030. return sortedMap;
  48031. });
  48032. const isSelected = (id) => {
  48033. return props.selectedItems && props.selectedItems.some((item) => item.id === id);
  48034. };
  48035. vue.watch(() => WebsocketData.globalData, (data) => {
  48036. const res = typeof data === "string" ? JSON.parse(data) : data;
  48037. if (props.pc28 === 0) {
  48038. if (res && res.type === "issue_fengpan") {
  48039. isFengpan.value = true;
  48040. } else if (res && res.type === "issue_kaipan") {
  48041. isFengpan.value = false;
  48042. }
  48043. } else if (props.pc28 === 1) {
  48044. if (res && res.type === "jisu_fengpan") {
  48045. isFengpan.value = true;
  48046. } else if (res && res.type === "jisu_kaipan") {
  48047. isFengpan.value = false;
  48048. }
  48049. }
  48050. });
  48051. const __returned__ = { t: t2, WebsocketData, ruleList, isFengpan, props, emit, expandedGroups, isExpanded, expandGroup, getLimit, getVisibleRules, hasMore, getRemainCount, fetchRules, groupedRules, isSelected, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, watch: vue.watch, get useI18n() {
  48052. return useI18n;
  48053. }, get getGameRuleList() {
  48054. return getGameRuleList;
  48055. }, get useWebsocketDataStore() {
  48056. return useWebsocketDataStore;
  48057. } };
  48058. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  48059. return __returned__;
  48060. }
  48061. };
  48062. function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
  48063. const _component_u_empty = __unplugin_components_4$2;
  48064. return vue.openBlock(), vue.createElementBlock("view", { class: "rule-betting-container" }, [
  48065. vue.createElementVNode("view", { class: "rule-list-wrap" }, [
  48066. (vue.openBlock(true), vue.createElementBlock(
  48067. vue.Fragment,
  48068. null,
  48069. vue.renderList($setup.groupedRules, (rules2, groupName) => {
  48070. return vue.openBlock(), vue.createElementBlock("view", {
  48071. key: groupName,
  48072. class: "rule-group"
  48073. }, [
  48074. vue.createElementVNode("view", { class: "group-title" }, [
  48075. vue.createElementVNode("view", { class: "stick" }),
  48076. vue.createElementVNode(
  48077. "text",
  48078. null,
  48079. vue.toDisplayString(groupName || $setup.t("其他玩法")),
  48080. 1
  48081. /* TEXT */
  48082. )
  48083. ]),
  48084. vue.createElementVNode("view", { class: "rule-grid" }, [
  48085. (vue.openBlock(true), vue.createElementBlock(
  48086. vue.Fragment,
  48087. null,
  48088. vue.renderList($setup.getVisibleRules(groupName, rules2), (item) => {
  48089. return vue.openBlock(), vue.createElementBlock("view", {
  48090. class: vue.normalizeClass(["rule-btn", {
  48091. "is-active": $setup.isSelected(item.id),
  48092. "is-disabled": Number(item.odds) <= 0 || $setup.isFengpan
  48093. }]),
  48094. key: item.id,
  48095. onClick: ($event) => !$setup.isFengpan && Number(item.odds) > 0 && $setup.emit("toggle", item)
  48096. }, [
  48097. vue.createElementVNode(
  48098. "text",
  48099. { class: "keyword" },
  48100. vue.toDisplayString(item.keywords),
  48101. 1
  48102. /* TEXT */
  48103. ),
  48104. !$setup.isFengpan && Number(item.odds) > 0 ? (vue.openBlock(), vue.createElementBlock(
  48105. "text",
  48106. {
  48107. key: 0,
  48108. class: "odds"
  48109. },
  48110. vue.toDisplayString(Number(item.odds).toFixed(2)),
  48111. 1
  48112. /* TEXT */
  48113. )) : (vue.openBlock(), vue.createElementBlock("text", {
  48114. key: 1,
  48115. class: "odds"
  48116. }, "--"))
  48117. ], 10, ["onClick"]);
  48118. }),
  48119. 128
  48120. /* KEYED_FRAGMENT */
  48121. )),
  48122. !$setup.isExpanded(groupName) && $setup.hasMore(groupName, rules2) ? (vue.openBlock(), vue.createElementBlock("view", {
  48123. key: 0,
  48124. class: "rule-btn expand-btn",
  48125. onClick: ($event) => $setup.expandGroup(groupName)
  48126. }, [
  48127. vue.createElementVNode("text", { class: "plus-icon" }, "+"),
  48128. vue.createElementVNode(
  48129. "text",
  48130. { class: "remain-count" },
  48131. vue.toDisplayString($setup.getRemainCount(rules2)),
  48132. 1
  48133. /* TEXT */
  48134. )
  48135. ], 8, ["onClick"])) : vue.createCommentVNode("v-if", true)
  48136. ])
  48137. ]);
  48138. }),
  48139. 128
  48140. /* KEYED_FRAGMENT */
  48141. )),
  48142. Object.keys($setup.groupedRules).length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  48143. key: 0,
  48144. class: "empty-box"
  48145. }, [
  48146. vue.createVNode(_component_u_empty, {
  48147. text: $setup.t("暂无玩法数据"),
  48148. mode: "data"
  48149. }, null, 8, ["text"])
  48150. ])) : vue.createCommentVNode("v-if", true)
  48151. ])
  48152. ]);
  48153. }
  48154. const BettingItems = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$b], ["__scopeId", "data-v-1a6727a2"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/components/BettingItems.vue"]]);
  48155. const CACHE_KEY$1 = "0_GAME_RULE_CART_CACHE";
  48156. const _sfc_main$b = {
  48157. __name: "index",
  48158. setup(__props, { expose: __expose }) {
  48159. __expose();
  48160. const { t: t2, locale } = useI18n();
  48161. const router2 = useRouter();
  48162. const PageContainerRef = vue.ref();
  48163. const pagingRef = vue.ref(null);
  48164. const latestDraw = vue.ref(null);
  48165. const countdownInfo = vue.ref(null);
  48166. const isFengpan = vue.ref(false);
  48167. const showDetailPopup = vue.ref(false);
  48168. const timeLeft = vue.ref(0);
  48169. let timer = null;
  48170. const selectedItems = vue.ref(uni.getStorageSync(CACHE_KEY$1) || []);
  48171. const isOpen = vue.ref(false);
  48172. const userMoney = vue.ref(0);
  48173. const safeModalRef = vue.ref(null);
  48174. const showSafeModal = vue.ref(false);
  48175. const safeWord = vue.ref("");
  48176. const batchStakeValue = vue.ref(uni.getStorageSync("pc28BatchStakeCache") || "");
  48177. vue.watch(selectedItems, (newVal) => {
  48178. uni.setStorageSync(CACHE_KEY$1, newVal);
  48179. }, { deep: true });
  48180. const selectedCount = vue.computed(() => selectedItems.value.length);
  48181. const totalStake = vue.computed(() => {
  48182. return selectedItems.value.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
  48183. });
  48184. const handleToggleItem = (rule) => {
  48185. if (Number(rule.odds) <= 0 || isFengpan.value)
  48186. return;
  48187. const index = selectedItems.value.findIndex((item) => item.id === rule.id);
  48188. if (index > -1) {
  48189. selectedItems.value.splice(index, 1);
  48190. if (selectedItems.value.length === 0)
  48191. isOpen.value = false;
  48192. } else {
  48193. const defaultAmount = Number(rule.mininum) > 0 ? Number(rule.mininum) : 20;
  48194. selectedItems.value.push({
  48195. ...rule,
  48196. amount: defaultAmount
  48197. });
  48198. }
  48199. };
  48200. const removeItem = (id) => {
  48201. selectedItems.value = selectedItems.value.filter((item) => item.id !== id);
  48202. if (selectedItems.value.length === 0)
  48203. isOpen.value = false;
  48204. };
  48205. const changeAmount = (item, delta) => {
  48206. let val = Number(item.amount) || 0;
  48207. Number(item.mininum) || 0;
  48208. const max = Number(item.maxinum) || 9999999;
  48209. val += delta;
  48210. if (val < 0)
  48211. val = 0;
  48212. if (val > max) {
  48213. val = max;
  48214. uni.showToast({ title: `${t2("已达最高投注")} ${max}`, icon: "none" });
  48215. }
  48216. item.amount = val;
  48217. };
  48218. const validateAmount = (item) => {
  48219. };
  48220. const applyBatchStake = () => {
  48221. let val = batchStakeValue.value;
  48222. uni.setStorageSync("pc28BatchStakeCache", val);
  48223. if (val === "") {
  48224. selectedItems.value.forEach((item) => {
  48225. item.amount = "";
  48226. });
  48227. return;
  48228. }
  48229. let numVal = Number(val);
  48230. if (isNaN(numVal) || numVal <= 0) {
  48231. return uni.showToast({ title: t2("请输入大于0的有效金额"), icon: "none" });
  48232. }
  48233. selectedItems.value.forEach((item) => {
  48234. let itemVal = numVal;
  48235. const min = Number(item.mininum) || 0;
  48236. const max = Number(item.maxinum) || 9999999;
  48237. if (itemVal < min) {
  48238. itemVal = min;
  48239. }
  48240. if (itemVal > max) {
  48241. itemVal = max;
  48242. }
  48243. item.amount = itemVal;
  48244. });
  48245. };
  48246. const fetchBalance = async () => {
  48247. try {
  48248. const res = await getBalance();
  48249. if (res.code === 1) {
  48250. userMoney.value = Number(res.data.money);
  48251. }
  48252. } catch (error) {
  48253. formatAppLog("error", "at pages/Tabbar/Entertainment/view/PC28/index.vue:392", "获取余额失败", error);
  48254. }
  48255. };
  48256. const submitBet = () => {
  48257. if (isFengpan.value)
  48258. return;
  48259. if (selectedItems.value.length === 0)
  48260. return uni.$u.toast(t2("请选择投注单"));
  48261. for (let i = 0; i < selectedItems.value.length; i++) {
  48262. const item = selectedItems.value[i];
  48263. const stake = Number(item.amount);
  48264. if (!stake || stake <= 0) {
  48265. return uni.showToast({ title: t2("请输入大于0的有效投注金额"), icon: "none" });
  48266. }
  48267. const min = Number(item.mininum) || 0;
  48268. const max = Number(item.maxinum) || 9999999;
  48269. if (stake < min) {
  48270. return uni.showToast({ title: `${t2("最低投注限额为")} ${min}`, icon: "none" });
  48271. }
  48272. if (stake > max) {
  48273. return uni.showToast({ title: `${t2("最高投注限额为")} ${max}`, icon: "none" });
  48274. }
  48275. }
  48276. if (totalStake.value > userMoney.value)
  48277. return uni.showToast({ title: t2("余额不足"), icon: "none" });
  48278. safeWord.value = "";
  48279. confirmSubmitBet();
  48280. };
  48281. const confirmSubmitBet = () => {
  48282. uni.showModal({
  48283. title: t2("提示"),
  48284. content: t2("确认提交吗?"),
  48285. success: (res) => {
  48286. if (res.confirm) {
  48287. const ordersData = selectedItems.value.map((item) => ({ id: item.id, amount: item.amount }));
  48288. submitGameBet({
  48289. data: ordersData,
  48290. safe_word: safeWord.value,
  48291. pc28: 0
  48292. }).then((res2) => {
  48293. var _a2, _b2;
  48294. if (res2.code === 1) {
  48295. uni.showToast({ title: t2("投注成功"), icon: "success" });
  48296. selectedItems.value = [];
  48297. isOpen.value = false;
  48298. showSafeModal.value = false;
  48299. fetchBalance();
  48300. if ((_a2 = PageContainerRef.value) == null ? void 0 : _a2.getData) {
  48301. PageContainerRef.value.getData();
  48302. }
  48303. } else {
  48304. uni.showToast({ title: res2.msg || t2("投注失败"), icon: "none" });
  48305. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  48306. }
  48307. }).catch((err) => {
  48308. var _a2;
  48309. formatAppLog("error", "at pages/Tabbar/Entertainment/view/PC28/index.vue:448", "投注错误:", err);
  48310. (_a2 = safeModalRef.value) == null ? void 0 : _a2.clearLoading();
  48311. });
  48312. }
  48313. }
  48314. });
  48315. };
  48316. const goTopUp = () => {
  48317. if (!uni.getStorageSync("token")) {
  48318. uni.showToast({ title: t2("请先登录"), icon: "none" });
  48319. uni.navigateTo({
  48320. url: "/pages/login/index?redirect=/pages/Tabbar/Entertainment/view/PC28/index"
  48321. });
  48322. return;
  48323. }
  48324. router2.push({ name: "topUp" });
  48325. };
  48326. const getApiBasePath = () => {
  48327. return "issue";
  48328. };
  48329. const getLatestYuanTou = () => {
  48330. return new Promise((resolve2, reject) => {
  48331. uni.request({
  48332. url: `${apiUrl}${getApiBasePath()}/yuanTou`,
  48333. method: "GET",
  48334. success: (res) => resolve2(res.data),
  48335. fail: (err) => reject(err),
  48336. header: {
  48337. lang: locale.value
  48338. }
  48339. });
  48340. });
  48341. };
  48342. const getCountdown = () => {
  48343. return new Promise((resolve2, reject) => {
  48344. uni.request({
  48345. url: `${apiUrl}${getApiBasePath()}/countdown`,
  48346. method: "GET",
  48347. success: (res) => resolve2(res.data),
  48348. fail: (err) => reject(err),
  48349. header: {
  48350. lang: locale.value
  48351. }
  48352. });
  48353. });
  48354. };
  48355. const onQuery = async () => {
  48356. try {
  48357. await fetchTopData();
  48358. pagingRef.value.complete([]);
  48359. } catch (error) {
  48360. formatAppLog("error", "at pages/Tabbar/Entertainment/view/PC28/index.vue:516", error);
  48361. pagingRef.value.complete(false);
  48362. }
  48363. };
  48364. const goToHistory = () => {
  48365. router2.push({ name: "history" });
  48366. };
  48367. const goToPC28History = () => {
  48368. router2.push({ name: "AllHistory", query: { tab: 1 } });
  48369. };
  48370. const fetchTopData = async () => {
  48371. try {
  48372. const [yuanTouRes, countRes] = await Promise.all([
  48373. getLatestYuanTou(),
  48374. getCountdown()
  48375. ]);
  48376. if (yuanTouRes.code === 0 && yuanTouRes.data.length > 0) {
  48377. latestDraw.value = yuanTouRes.data[0];
  48378. }
  48379. if (countRes.code === 0 && countRes.data) {
  48380. countdownInfo.value = countRes.data;
  48381. startCountdown(countRes.data.end_time, countRes.data.current_time);
  48382. }
  48383. } catch (error) {
  48384. formatAppLog("error", "at pages/Tabbar/Entertainment/view/PC28/index.vue:551", "获取顶部数据失败", error);
  48385. }
  48386. };
  48387. const startCountdown = (endTime, currentTime) => {
  48388. clearInterval(timer);
  48389. const diff = endTime - currentTime;
  48390. timeLeft.value = Math.max(0, diff);
  48391. if (diff > 0) {
  48392. timer = setInterval(() => {
  48393. if (timeLeft.value > 0) {
  48394. timeLeft.value--;
  48395. } else {
  48396. clearInterval(timer);
  48397. }
  48398. }, 1e3);
  48399. }
  48400. };
  48401. const formatTime = (seconds) => {
  48402. const m = Math.floor(seconds / 60).toString().padStart(2, "0");
  48403. const s = (seconds % 60).toString().padStart(2, "0");
  48404. return { m, s };
  48405. };
  48406. const latestSum = vue.computed(() => {
  48407. if (!latestDraw.value)
  48408. return 0;
  48409. return Number(latestDraw.value.openCode1 || 0) + Number(latestDraw.value.openCode2 || 0) + Number(latestDraw.value.openCode3 || 0);
  48410. });
  48411. const calcDetails = vue.computed(() => {
  48412. if (!latestDraw.value || !latestDraw.value.keno)
  48413. return null;
  48414. const keno = latestDraw.value.keno.map(Number);
  48415. const getZone = (startIndex) => {
  48416. let nums = [];
  48417. let sum = 0;
  48418. for (let i = 0; i < 6; i++) {
  48419. const val = keno[startIndex + i * 3];
  48420. nums.push(val);
  48421. sum += val;
  48422. }
  48423. return { str: nums.join(" + "), sum };
  48424. };
  48425. return {
  48426. zone1: getZone(1),
  48427. zone2: getZone(2),
  48428. zone3: getZone(3)
  48429. };
  48430. });
  48431. const getBallColor = (numStr) => {
  48432. const num = parseInt(numStr, 10);
  48433. return num % 2 === 0 ? "red-ball" : "blue-ball";
  48434. };
  48435. const getGridCellClass = (num) => {
  48436. if (!latestDraw.value || !latestDraw.value.keno)
  48437. return "";
  48438. const isSelected = latestDraw.value.keno.some((k) => Number(k) === num);
  48439. if (isSelected) {
  48440. return num % 2 === 0 ? "bg-red" : "bg-blue";
  48441. }
  48442. return "";
  48443. };
  48444. const goRule = () => {
  48445. router2.push({ name: "PC28Rule" });
  48446. };
  48447. vue.onMounted(() => {
  48448. uni.$on("onSocketMessage", (data) => {
  48449. var _a2;
  48450. if (!data)
  48451. return;
  48452. try {
  48453. const res = JSON.parse(data);
  48454. if (res.type === "new_issue") {
  48455. const currentIssue = (_a2 = countdownInfo.value) == null ? void 0 : _a2.issue_no;
  48456. if (currentIssue !== res.message) {
  48457. fetchTopData();
  48458. getGameLotteryStatus();
  48459. }
  48460. }
  48461. if (res && res.type === "issue_fengpan") {
  48462. isFengpan.value = true;
  48463. } else if (res && res.type === "issue_kaipan") {
  48464. isFengpan.value = false;
  48465. }
  48466. } catch (e) {
  48467. formatAppLog("error", "at pages/Tabbar/Entertainment/view/PC28/index.vue:648", "WebSocket消息解析失败:", e);
  48468. }
  48469. });
  48470. });
  48471. onQuery();
  48472. function getGameLotteryStatus() {
  48473. gameLotteryStatus({ type: 1 }).then((res) => {
  48474. if (res.data.is_kaipan == 0) {
  48475. isFengpan.value = true;
  48476. } else if (res.data.is_kaipan == 1) {
  48477. isFengpan.value = false;
  48478. }
  48479. });
  48480. }
  48481. getGameLotteryStatus();
  48482. vue.onUnmounted(() => {
  48483. clearInterval(timer);
  48484. uni.$off("onSocketMessage");
  48485. });
  48486. onLoad(() => {
  48487. });
  48488. onShow(() => {
  48489. vue.nextTick(() => {
  48490. uni.customFromPath = "";
  48491. });
  48492. batchStakeValue.value = uni.getStorageSync("pc28BatchStakeCache") || "";
  48493. if (uni.getStorageSync("token")) {
  48494. fetchBalance();
  48495. }
  48496. });
  48497. const __returned__ = { t: t2, locale, router: router2, PageContainerRef, pagingRef, latestDraw, countdownInfo, isFengpan, showDetailPopup, timeLeft, get timer() {
  48498. return timer;
  48499. }, set timer(v) {
  48500. timer = v;
  48501. }, CACHE_KEY: CACHE_KEY$1, selectedItems, isOpen, userMoney, safeModalRef, showSafeModal, safeWord, batchStakeValue, selectedCount, totalStake, handleToggleItem, removeItem, changeAmount, validateAmount, applyBatchStake, fetchBalance, submitBet, confirmSubmitBet, goTopUp, getApiBasePath, getLatestYuanTou, getCountdown, onQuery, goToHistory, goToPC28History, fetchTopData, startCountdown, formatTime, latestSum, calcDetails, getBallColor, getGridCellClass, goRule, getGameLotteryStatus, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, nextTick: vue.nextTick, watch: vue.watch, get useI18n() {
  48502. return useI18n;
  48503. }, BettingItems, get onLoad() {
  48504. return onLoad;
  48505. }, get onShow() {
  48506. return onShow;
  48507. }, get apiUrl() {
  48508. return apiUrl;
  48509. }, get gameLotteryStatus() {
  48510. return gameLotteryStatus;
  48511. }, get getBalance() {
  48512. return getBalance;
  48513. }, get submitGameBet() {
  48514. return submitGameBet;
  48515. } };
  48516. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  48517. return __returned__;
  48518. }
  48519. };
  48520. function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
  48521. const _component_u_icon = __unplugin_components_0$5;
  48522. const _component_u_tag = __unplugin_components_2$2;
  48523. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  48524. const _component_u_popup = __unplugin_components_2$3;
  48525. const _component_u_button = __unplugin_components_2$1;
  48526. const _component_u_input = __unplugin_components_3$2;
  48527. const _component_u_modal = __unplugin_components_4$3;
  48528. const _component_PageContainer = PageContainer;
  48529. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  48530. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  48531. default: vue.withCtx(() => [
  48532. vue.createVNode(
  48533. _component_PageContainer,
  48534. {
  48535. ref: "PageContainerRef",
  48536. navTitle: "加拿大28"
  48537. },
  48538. {
  48539. default: vue.withCtx(() => [
  48540. vue.createVNode(
  48541. _component_z_paging,
  48542. {
  48543. ref: "pagingRef",
  48544. onQuery: $setup.onQuery,
  48545. fixed: false,
  48546. "refresher-only": true,
  48547. "refresher-enabled": true,
  48548. "loading-more-enabled": false,
  48549. "auto-show-back-to-top": true
  48550. },
  48551. {
  48552. refresher: vue.withCtx(() => [
  48553. vue.createElementVNode("view", { class: "refresher-ui" }, [
  48554. vue.createElementVNode("view", { class: "spin-loader" }),
  48555. vue.createElementVNode(
  48556. "text",
  48557. { class: "refresher-text" },
  48558. vue.toDisplayString($setup.t("获取最新数据...")),
  48559. 1
  48560. /* TEXT */
  48561. )
  48562. ])
  48563. ]),
  48564. default: vue.withCtx(() => {
  48565. var _a2;
  48566. return [
  48567. vue.createElementVNode("view", { class: "top-section" }, [
  48568. $setup.latestDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  48569. key: 0,
  48570. class: "latest-draw-card"
  48571. }, [
  48572. vue.createElementVNode("view", { class: "header" }, [
  48573. vue.createElementVNode("view", { class: "title-left" }, [
  48574. vue.createElementVNode(
  48575. "text",
  48576. { class: "bclc" },
  48577. vue.toDisplayString($setup.t("加拿大")) + "28",
  48578. 1
  48579. /* TEXT */
  48580. ),
  48581. vue.createElementVNode(
  48582. "text",
  48583. { class: "issue" },
  48584. vue.toDisplayString($setup.latestDraw.issue_no || $setup.latestDraw.section) + " " + vue.toDisplayString($setup.t("期")),
  48585. 1
  48586. /* TEXT */
  48587. )
  48588. ]),
  48589. vue.createVNode(_component_u_icon, {
  48590. name: "globe",
  48591. size: "40",
  48592. color: "#666"
  48593. })
  48594. ]),
  48595. $setup.latestDraw.keno && $setup.latestDraw.keno.length > 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  48596. key: 0,
  48597. class: "balls-grid"
  48598. }, [
  48599. (vue.openBlock(true), vue.createElementBlock(
  48600. vue.Fragment,
  48601. null,
  48602. vue.renderList($setup.latestDraw.keno, (num, idx) => {
  48603. return vue.openBlock(), vue.createElementBlock(
  48604. "view",
  48605. {
  48606. class: vue.normalizeClass(["ball", $setup.getBallColor(num)]),
  48607. key: idx
  48608. },
  48609. [
  48610. vue.createElementVNode(
  48611. "view",
  48612. { class: "ball-inner" },
  48613. vue.toDisplayString(num),
  48614. 1
  48615. /* TEXT */
  48616. )
  48617. ],
  48618. 2
  48619. /* CLASS */
  48620. );
  48621. }),
  48622. 128
  48623. /* KEYED_FRAGMENT */
  48624. ))
  48625. ])) : vue.createCommentVNode("v-if", true)
  48626. ])) : vue.createCommentVNode("v-if", true),
  48627. vue.createElementVNode("view", { class: "calc-tabs" }, [
  48628. vue.createElementVNode(
  48629. "view",
  48630. {
  48631. class: "c-tab active",
  48632. onClick: _cache[0] || (_cache[0] = ($event) => $setup.showDetailPopup = true)
  48633. },
  48634. vue.toDisplayString($setup.t("开奖详情")),
  48635. 1
  48636. /* TEXT */
  48637. ),
  48638. vue.createElementVNode(
  48639. "view",
  48640. {
  48641. class: "c-tab active",
  48642. onClick: $setup.goToHistory
  48643. },
  48644. vue.toDisplayString($setup.t("往期历史")),
  48645. 1
  48646. /* TEXT */
  48647. ),
  48648. vue.createElementVNode(
  48649. "view",
  48650. {
  48651. class: "c-tab active",
  48652. onClick: $setup.goToPC28History
  48653. },
  48654. vue.toDisplayString($setup.t("投注记录")),
  48655. 1
  48656. /* TEXT */
  48657. ),
  48658. vue.createElementVNode(
  48659. "view",
  48660. {
  48661. class: "c-tab active",
  48662. onClick: $setup.goRule
  48663. },
  48664. vue.toDisplayString($setup.t("开奖规则")),
  48665. 1
  48666. /* TEXT */
  48667. )
  48668. ]),
  48669. $setup.latestDraw && $setup.calcDetails ? (vue.openBlock(), vue.createElementBlock("view", {
  48670. key: 1,
  48671. class: "calc-card"
  48672. }, [
  48673. vue.createElementVNode("view", { class: "equation" }, [
  48674. vue.createElementVNode(
  48675. "view",
  48676. { class: "circle" },
  48677. vue.toDisplayString($setup.latestDraw.openCode1),
  48678. 1
  48679. /* TEXT */
  48680. ),
  48681. vue.createElementVNode("text", { class: "operator" }, "+"),
  48682. vue.createElementVNode(
  48683. "view",
  48684. { class: "circle" },
  48685. vue.toDisplayString($setup.latestDraw.openCode2),
  48686. 1
  48687. /* TEXT */
  48688. ),
  48689. vue.createElementVNode("text", { class: "operator" }, "+"),
  48690. vue.createElementVNode(
  48691. "view",
  48692. { class: "circle" },
  48693. vue.toDisplayString($setup.latestDraw.openCode3),
  48694. 1
  48695. /* TEXT */
  48696. ),
  48697. vue.createElementVNode("text", { class: "operator" }, "="),
  48698. vue.createElementVNode(
  48699. "view",
  48700. { class: "circle result" },
  48701. vue.toDisplayString($setup.latestSum),
  48702. 1
  48703. /* TEXT */
  48704. )
  48705. ]),
  48706. $setup.latestDraw.keno && $setup.latestDraw.keno.length > 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  48707. key: 0,
  48708. class: "details-list"
  48709. }, [
  48710. vue.createElementVNode("view", { class: "d-row" }, [
  48711. vue.createElementVNode(
  48712. "text",
  48713. { class: "label" },
  48714. vue.toDisplayString($setup.t("前")) + ":",
  48715. 1
  48716. /* TEXT */
  48717. ),
  48718. vue.createElementVNode(
  48719. "text",
  48720. { class: "formula" },
  48721. vue.toDisplayString($setup.calcDetails.zone1.str) + " = " + vue.toDisplayString($setup.calcDetails.zone1.sum) + " " + vue.toDisplayString($setup.t("取")) + " " + vue.toDisplayString($setup.latestDraw.openCode1),
  48722. 1
  48723. /* TEXT */
  48724. )
  48725. ]),
  48726. vue.createElementVNode("view", { class: "d-row" }, [
  48727. vue.createElementVNode(
  48728. "text",
  48729. { class: "label" },
  48730. vue.toDisplayString($setup.t("中")) + ":",
  48731. 1
  48732. /* TEXT */
  48733. ),
  48734. vue.createElementVNode(
  48735. "text",
  48736. { class: "formula" },
  48737. vue.toDisplayString($setup.calcDetails.zone2.str) + " = " + vue.toDisplayString($setup.calcDetails.zone2.sum) + " " + vue.toDisplayString($setup.t("取")) + " " + vue.toDisplayString($setup.latestDraw.openCode2),
  48738. 1
  48739. /* TEXT */
  48740. )
  48741. ]),
  48742. vue.createElementVNode("view", { class: "d-row" }, [
  48743. vue.createElementVNode(
  48744. "text",
  48745. { class: "label" },
  48746. vue.toDisplayString($setup.t("尾")) + ":",
  48747. 1
  48748. /* TEXT */
  48749. ),
  48750. vue.createElementVNode(
  48751. "text",
  48752. { class: "formula" },
  48753. vue.toDisplayString($setup.calcDetails.zone3.str) + " = " + vue.toDisplayString($setup.calcDetails.zone3.sum) + " " + vue.toDisplayString($setup.t("取")) + " " + vue.toDisplayString($setup.latestDraw.openCode3),
  48754. 1
  48755. /* TEXT */
  48756. )
  48757. ])
  48758. ])) : vue.createCommentVNode("v-if", true)
  48759. ])) : vue.createCommentVNode("v-if", true),
  48760. $setup.countdownInfo ? (vue.openBlock(), vue.createElementBlock("view", {
  48761. key: 2,
  48762. class: "next-draw-card"
  48763. }, [
  48764. vue.createElementVNode("view", { class: "n-header" }, [
  48765. vue.createElementVNode("text", { class: "n-title" }, [
  48766. vue.createTextVNode(
  48767. vue.toDisplayString($setup.t("最新")) + ": ",
  48768. 1
  48769. /* TEXT */
  48770. ),
  48771. vue.createElementVNode(
  48772. "text",
  48773. { class: "n-issue" },
  48774. vue.toDisplayString($setup.countdownInfo.issue_no),
  48775. 1
  48776. /* TEXT */
  48777. ),
  48778. vue.createTextVNode(
  48779. " " + vue.toDisplayString($setup.t("期")),
  48780. 1
  48781. /* TEXT */
  48782. )
  48783. ])
  48784. ]),
  48785. vue.createElementVNode("view", { class: "n-timer" }, [
  48786. vue.createElementVNode(
  48787. "text",
  48788. { class: "t-label" },
  48789. vue.toDisplayString($setup.t("下一期")) + ":",
  48790. 1
  48791. /* TEXT */
  48792. ),
  48793. vue.createElementVNode(
  48794. "view",
  48795. { class: "t-box" },
  48796. vue.toDisplayString($setup.formatTime($setup.timeLeft).m),
  48797. 1
  48798. /* TEXT */
  48799. ),
  48800. vue.createElementVNode(
  48801. "text",
  48802. { class: "t-unit" },
  48803. vue.toDisplayString($setup.t("分")),
  48804. 1
  48805. /* TEXT */
  48806. ),
  48807. vue.createElementVNode(
  48808. "view",
  48809. { class: "t-box" },
  48810. vue.toDisplayString($setup.formatTime($setup.timeLeft).s),
  48811. 1
  48812. /* TEXT */
  48813. ),
  48814. vue.createElementVNode(
  48815. "text",
  48816. { class: "t-unit" },
  48817. vue.toDisplayString($setup.t("秒")),
  48818. 1
  48819. /* TEXT */
  48820. )
  48821. ])
  48822. ])) : vue.createCommentVNode("v-if", true)
  48823. ]),
  48824. $setup.isFengpan ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  48825. key: 0,
  48826. type: "error",
  48827. text: $setup.t("封盘中"),
  48828. style: { "width": "calc(100% - 20px)", "text-align": "center", "margin-left": "10px" }
  48829. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true),
  48830. vue.createVNode($setup["BettingItems"], {
  48831. pc28: 0,
  48832. m: $setup.formatTime($setup.timeLeft).m,
  48833. s: $setup.formatTime($setup.timeLeft).s,
  48834. PageContainerRef: $setup.PageContainerRef,
  48835. issue_no: (_a2 = $setup.countdownInfo) == null ? void 0 : _a2.issue_no,
  48836. apiIsFengpan: $setup.isFengpan,
  48837. selectedItems: $setup.selectedItems,
  48838. onToggle: $setup.handleToggleItem
  48839. }, null, 8, ["m", "s", "PageContainerRef", "issue_no", "apiIsFengpan", "selectedItems"]),
  48840. vue.createElementVNode("view", { style: { "height": "100px" } })
  48841. ];
  48842. }),
  48843. _: 1
  48844. /* STABLE */
  48845. },
  48846. 512
  48847. /* NEED_PATCH */
  48848. ),
  48849. vue.createVNode(_component_u_popup, {
  48850. modelValue: $setup.showDetailPopup,
  48851. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.showDetailPopup = $event),
  48852. mode: "center",
  48853. "border-radius": "20",
  48854. "mask-close-able": true
  48855. }, {
  48856. default: vue.withCtx(() => {
  48857. var _a2, _b2;
  48858. return [
  48859. vue.createElementVNode("view", { class: "popup-wrapper" }, [
  48860. vue.createElementVNode(
  48861. "view",
  48862. { class: "p-title" },
  48863. vue.toDisplayString(((_a2 = $setup.latestDraw) == null ? void 0 : _a2.issue_no) || ((_b2 = $setup.latestDraw) == null ? void 0 : _b2.section)) + " " + vue.toDisplayString($setup.t("期")),
  48864. 1
  48865. /* TEXT */
  48866. ),
  48867. $setup.latestDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  48868. key: 0,
  48869. class: "p-equation"
  48870. }, [
  48871. vue.createElementVNode(
  48872. "view",
  48873. { class: "circle" },
  48874. vue.toDisplayString($setup.latestDraw.openCode1),
  48875. 1
  48876. /* TEXT */
  48877. ),
  48878. vue.createElementVNode("text", { class: "operator" }, "+"),
  48879. vue.createElementVNode(
  48880. "view",
  48881. { class: "circle" },
  48882. vue.toDisplayString($setup.latestDraw.openCode2),
  48883. 1
  48884. /* TEXT */
  48885. ),
  48886. vue.createElementVNode("text", { class: "operator" }, "+"),
  48887. vue.createElementVNode(
  48888. "view",
  48889. { class: "circle" },
  48890. vue.toDisplayString($setup.latestDraw.openCode3),
  48891. 1
  48892. /* TEXT */
  48893. ),
  48894. vue.createElementVNode("text", { class: "operator" }, "="),
  48895. vue.createElementVNode(
  48896. "view",
  48897. { class: "circle result" },
  48898. vue.toDisplayString($setup.latestSum),
  48899. 1
  48900. /* TEXT */
  48901. )
  48902. ])) : vue.createCommentVNode("v-if", true),
  48903. vue.createElementVNode("view", { class: "p-grid" }, [
  48904. (vue.openBlock(), vue.createElementBlock(
  48905. vue.Fragment,
  48906. null,
  48907. vue.renderList(80, (i) => {
  48908. return vue.createElementVNode(
  48909. "view",
  48910. {
  48911. class: vue.normalizeClass(["p-cell", $setup.getGridCellClass(i)]),
  48912. key: i
  48913. },
  48914. vue.toDisplayString(i),
  48915. 3
  48916. /* TEXT, CLASS */
  48917. );
  48918. }),
  48919. 64
  48920. /* STABLE_FRAGMENT */
  48921. ))
  48922. ])
  48923. ])
  48924. ];
  48925. }),
  48926. _: 1
  48927. /* STABLE */
  48928. }, 8, ["modelValue"]),
  48929. vue.createElementVNode("view", { style: { "height": "70px" } }),
  48930. !$setup.isOpen ? (vue.openBlock(), vue.createElementBlock("view", {
  48931. key: 0,
  48932. class: "sticky-header-bar",
  48933. onClick: _cache[3] || (_cache[3] = ($event) => $setup.isOpen = true)
  48934. }, [
  48935. vue.createElementVNode("view", { class: "betting-sheet-header" }, [
  48936. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  48937. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock(
  48938. "view",
  48939. {
  48940. key: 0,
  48941. class: "sheet-badge"
  48942. },
  48943. vue.toDisplayString($setup.selectedCount),
  48944. 1
  48945. /* TEXT */
  48946. )) : vue.createCommentVNode("v-if", true),
  48947. vue.createElementVNode(
  48948. "text",
  48949. { class: "header-text" },
  48950. vue.toDisplayString($setup.t("投注单")),
  48951. 1
  48952. /* TEXT */
  48953. ),
  48954. vue.createVNode(_component_u_icon, {
  48955. name: "arrow-up",
  48956. color: "#666"
  48957. })
  48958. ]),
  48959. vue.createElementVNode("view", { class: "betting-sheet-header-right" }, [
  48960. vue.createElementVNode("view", { class: "settings-btn" }, [
  48961. vue.createVNode(_component_u_button, {
  48962. onClick: _cache[2] || (_cache[2] = vue.withModifiers(($event) => $setup.isOpen = true, ["stop"])),
  48963. size: "mini",
  48964. type: "primary",
  48965. disabled: $setup.isFengpan
  48966. }, {
  48967. default: vue.withCtx(() => [
  48968. vue.createTextVNode(
  48969. vue.toDisplayString($setup.t("下注")),
  48970. 1
  48971. /* TEXT */
  48972. )
  48973. ]),
  48974. _: 1
  48975. /* STABLE */
  48976. }, 8, ["disabled"])
  48977. ])
  48978. ])
  48979. ])
  48980. ])) : vue.createCommentVNode("v-if", true),
  48981. vue.createVNode(_component_u_popup, {
  48982. modelValue: $setup.isOpen,
  48983. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.isOpen = $event),
  48984. mode: "bottom",
  48985. "border-radius": "24",
  48986. mask: true,
  48987. "mask-close-able": true,
  48988. "z-index": 990,
  48989. "safe-area-inset-bottom": true,
  48990. height: "70%"
  48991. }, {
  48992. default: vue.withCtx(() => {
  48993. var _a2;
  48994. return [
  48995. vue.createElementVNode("view", { class: "popup-betting-sheet-header" }, [
  48996. vue.createElementVNode("view", {
  48997. class: "betting-sheet-header border-bottom",
  48998. onClick: _cache[5] || (_cache[5] = ($event) => $setup.isOpen = false)
  48999. }, [
  49000. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  49001. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock(
  49002. "view",
  49003. {
  49004. key: 0,
  49005. class: "sheet-badge"
  49006. },
  49007. vue.toDisplayString($setup.selectedCount),
  49008. 1
  49009. /* TEXT */
  49010. )) : vue.createCommentVNode("v-if", true),
  49011. vue.createElementVNode(
  49012. "text",
  49013. { class: "header-text" },
  49014. vue.toDisplayString($setup.t("投注单")),
  49015. 1
  49016. /* TEXT */
  49017. ),
  49018. vue.createVNode(_component_u_icon, {
  49019. name: "arrow-down",
  49020. color: "#666"
  49021. })
  49022. ]),
  49023. vue.createElementVNode("view", { class: "betting-sheet-header-right" }, [
  49024. vue.createElementVNode("view", { class: "settings-btn" }, [
  49025. vue.createElementVNode(
  49026. "text",
  49027. {
  49028. style: { "font-size": "12px", "margin-right": "4px" },
  49029. class: "tmc",
  49030. onClick: _cache[4] || (_cache[4] = vue.withModifiers(($event) => $setup.selectedItems = [], ["stop"]))
  49031. },
  49032. vue.toDisplayString($setup.t("清空")),
  49033. 1
  49034. /* TEXT */
  49035. )
  49036. ])
  49037. ])
  49038. ]),
  49039. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  49040. key: 0,
  49041. class: "batch-stake-box"
  49042. }, [
  49043. vue.createElementVNode(
  49044. "text",
  49045. { class: "batch-label" },
  49046. vue.toDisplayString($setup.t("批量设置金额")),
  49047. 1
  49048. /* TEXT */
  49049. ),
  49050. vue.createElementVNode("view", { class: "batch-input-wrapper" }, [
  49051. vue.withDirectives(vue.createElementVNode("input", {
  49052. "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.batchStakeValue = $event),
  49053. class: "batch-input",
  49054. placeholder: $setup.t("请输入金额"),
  49055. type: "number"
  49056. }, null, 8, ["placeholder"]), [
  49057. [vue.vModelText, $setup.batchStakeValue]
  49058. ])
  49059. ]),
  49060. vue.createVNode(_component_u_button, {
  49061. size: "mini",
  49062. type: "primary",
  49063. style: { "margin-left": "10px" },
  49064. onClick: $setup.applyBatchStake
  49065. }, {
  49066. default: vue.withCtx(() => [
  49067. vue.createTextVNode(
  49068. vue.toDisplayString($setup.t("确定")),
  49069. 1
  49070. /* TEXT */
  49071. )
  49072. ]),
  49073. _: 1
  49074. /* STABLE */
  49075. })
  49076. ])) : vue.createCommentVNode("v-if", true)
  49077. ]),
  49078. $setup.selectedCount === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  49079. key: 0,
  49080. class: "empty-sheet"
  49081. }, [
  49082. vue.createElementVNode(
  49083. "text",
  49084. null,
  49085. vue.toDisplayString($setup.t("暂无投注项")),
  49086. 1
  49087. /* TEXT */
  49088. )
  49089. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  49090. key: 1,
  49091. class: "bet-list"
  49092. }, [
  49093. vue.createElementVNode("view", { style: { "display": "flex", "align-items": "center", "margin-bottom": "10px", "justify-content": "space-between" } }, [
  49094. vue.createElementVNode("text", { class: "n-title" }, [
  49095. vue.createElementVNode(
  49096. "text",
  49097. { class: "n-issue" },
  49098. vue.toDisplayString((_a2 = $setup.countdownInfo) == null ? void 0 : _a2.issue_no),
  49099. 1
  49100. /* TEXT */
  49101. ),
  49102. vue.createTextVNode(
  49103. " " + vue.toDisplayString($setup.t("期")),
  49104. 1
  49105. /* TEXT */
  49106. )
  49107. ]),
  49108. vue.createElementVNode("view", { class: "n-timer" }, [
  49109. vue.createElementVNode(
  49110. "view",
  49111. { class: "t-box" },
  49112. vue.toDisplayString($setup.formatTime($setup.timeLeft).m),
  49113. 1
  49114. /* TEXT */
  49115. ),
  49116. vue.createElementVNode(
  49117. "text",
  49118. { class: "t-unit" },
  49119. vue.toDisplayString($setup.t("分")),
  49120. 1
  49121. /* TEXT */
  49122. ),
  49123. vue.createElementVNode(
  49124. "view",
  49125. { class: "t-box" },
  49126. vue.toDisplayString($setup.formatTime($setup.timeLeft).s),
  49127. 1
  49128. /* TEXT */
  49129. ),
  49130. vue.createElementVNode(
  49131. "text",
  49132. { class: "t-unit" },
  49133. vue.toDisplayString($setup.t("秒")),
  49134. 1
  49135. /* TEXT */
  49136. )
  49137. ])
  49138. ]),
  49139. (vue.openBlock(true), vue.createElementBlock(
  49140. vue.Fragment,
  49141. null,
  49142. vue.renderList($setup.selectedItems, (item) => {
  49143. return vue.openBlock(), vue.createElementBlock("view", {
  49144. class: "bet-item",
  49145. key: item.id
  49146. }, [
  49147. vue.createElementVNode("view", { class: "item-header" }, [
  49148. vue.createElementVNode(
  49149. "text",
  49150. { class: "team-names" },
  49151. vue.toDisplayString(item.groups) + " - " + vue.toDisplayString(item.keywords),
  49152. 1
  49153. /* TEXT */
  49154. ),
  49155. vue.createElementVNode("view", {
  49156. class: "close-btn",
  49157. onClick: vue.withModifiers(($event) => $setup.removeItem(item.id), ["stop"])
  49158. }, [
  49159. vue.createVNode(_component_u_icon, {
  49160. name: "close",
  49161. color: "#666",
  49162. size: "16"
  49163. })
  49164. ], 8, ["onClick"])
  49165. ]),
  49166. vue.createElementVNode("view", { class: "item-info" }, [
  49167. vue.createElementVNode("view", { class: "bet-type" }, [
  49168. vue.createElementVNode(
  49169. "text",
  49170. { class: "type-name" },
  49171. vue.toDisplayString($setup.t("赔率")),
  49172. 1
  49173. /* TEXT */
  49174. )
  49175. ]),
  49176. vue.createElementVNode("view", { class: "odds-box" }, [
  49177. vue.createElementVNode(
  49178. "text",
  49179. { class: "odds-val" },
  49180. vue.toDisplayString($setup.isFengpan ? "--" : Number(item.odds).toFixed(2)),
  49181. 1
  49182. /* TEXT */
  49183. )
  49184. ])
  49185. ]),
  49186. vue.createElementVNode("view", { class: "limit-info" }, [
  49187. vue.createElementVNode(
  49188. "text",
  49189. null,
  49190. vue.toDisplayString($setup.t("限额")) + ": " + vue.toDisplayString(item.mininum) + " ~ " + vue.toDisplayString(item.maxinum),
  49191. 1
  49192. /* TEXT */
  49193. )
  49194. ]),
  49195. vue.createElementVNode(
  49196. "view",
  49197. {
  49198. class: vue.normalizeClass(["stake-input-box", { "error-border": item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 || Number(item.amount) > Number($setup.userMoney) || item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < Number(item.mininum) || item.maxinum !== void 0 && Number(item.amount) > Number(item.maxinum) }])
  49199. },
  49200. [
  49201. vue.createElementVNode("view", {
  49202. class: "stepper-btn",
  49203. onClick: ($event) => $setup.changeAmount(item, -10)
  49204. }, "-", 8, ["onClick"]),
  49205. vue.withDirectives(vue.createElementVNode("input", {
  49206. type: "number",
  49207. class: "stake-input",
  49208. "onUpdate:modelValue": ($event) => item.amount = $event,
  49209. onBlur: ($event) => $setup.validateAmount(item),
  49210. placeholder: "输入本金"
  49211. }, null, 40, ["onUpdate:modelValue", "onBlur"]), [
  49212. [vue.vModelText, item.amount]
  49213. ]),
  49214. vue.createElementVNode("view", {
  49215. class: "stepper-btn",
  49216. onClick: ($event) => $setup.changeAmount(item, 10)
  49217. }, "+", 8, ["onClick"])
  49218. ],
  49219. 2
  49220. /* CLASS */
  49221. ),
  49222. vue.createElementVNode("view", { class: "item-footer" }, [
  49223. item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 ? (vue.openBlock(), vue.createElementBlock(
  49224. "view",
  49225. {
  49226. key: 0,
  49227. class: "err-msg"
  49228. },
  49229. vue.toDisplayString($setup.t("金额不能小于等于0")),
  49230. 1
  49231. /* TEXT */
  49232. )) : item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < Number(item.mininum) ? (vue.openBlock(), vue.createElementBlock(
  49233. "view",
  49234. {
  49235. key: 1,
  49236. class: "err-msg"
  49237. },
  49238. vue.toDisplayString($setup.t("单注最低限制为")) + " " + vue.toDisplayString(item.mininum),
  49239. 1
  49240. /* TEXT */
  49241. )) : item.maxinum !== void 0 && Number(item.amount) > Number(item.maxinum) ? (vue.openBlock(), vue.createElementBlock(
  49242. "view",
  49243. {
  49244. key: 2,
  49245. class: "err-msg"
  49246. },
  49247. vue.toDisplayString($setup.t("单注最高限制为")) + " " + vue.toDisplayString(item.maxinum),
  49248. 1
  49249. /* TEXT */
  49250. )) : Number(item.amount) > Number($setup.userMoney) ? (vue.openBlock(), vue.createElementBlock(
  49251. "view",
  49252. {
  49253. key: 3,
  49254. class: "err-msg"
  49255. },
  49256. vue.toDisplayString($setup.t("投注额超过您的余额")),
  49257. 1
  49258. /* TEXT */
  49259. )) : (vue.openBlock(), vue.createElementBlock("view", {
  49260. key: 4,
  49261. class: "potential-win"
  49262. }, [
  49263. vue.createTextVNode(
  49264. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  49265. 1
  49266. /* TEXT */
  49267. ),
  49268. vue.createElementVNode(
  49269. "text",
  49270. { class: "win-amount" },
  49271. vue.toDisplayString((Number(item.amount) * Number(item.odds)).toFixed(2)) + " " + vue.toDisplayString(_ctx.$currency || "USDT"),
  49272. 1
  49273. /* TEXT */
  49274. )
  49275. ]))
  49276. ])
  49277. ]);
  49278. }),
  49279. 128
  49280. /* KEYED_FRAGMENT */
  49281. ))
  49282. ])),
  49283. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  49284. key: 2,
  49285. class: "sheet-action-bar pc28-cart-bottom"
  49286. }, [
  49287. vue.createElementVNode("view", { class: "total-odds-row" }, [
  49288. vue.createElementVNode(
  49289. "text",
  49290. { class: "label" },
  49291. vue.toDisplayString($setup.t("总投注金额")),
  49292. 1
  49293. /* TEXT */
  49294. ),
  49295. vue.createElementVNode(
  49296. "text",
  49297. { class: "val" },
  49298. vue.toDisplayString($setup.totalStake.toFixed(2)),
  49299. 1
  49300. /* TEXT */
  49301. )
  49302. ]),
  49303. $setup.totalStake > $setup.userMoney ? (vue.openBlock(), vue.createBlock(_component_u_button, {
  49304. key: 0,
  49305. type: "primary",
  49306. onClick: $setup.goTopUp
  49307. }, {
  49308. default: vue.withCtx(() => [
  49309. vue.createTextVNode(
  49310. vue.toDisplayString($setup.t("余额不足,去存款")),
  49311. 1
  49312. /* TEXT */
  49313. )
  49314. ]),
  49315. _: 1
  49316. /* STABLE */
  49317. })) : (vue.openBlock(), vue.createBlock(_component_u_button, {
  49318. key: 1,
  49319. type: "primary",
  49320. onClick: $setup.submitBet,
  49321. disabled: $setup.isFengpan
  49322. }, {
  49323. default: vue.withCtx(() => [
  49324. vue.createTextVNode(
  49325. vue.toDisplayString($setup.t("立即投注")),
  49326. 1
  49327. /* TEXT */
  49328. )
  49329. ]),
  49330. _: 1
  49331. /* STABLE */
  49332. }, 8, ["disabled"]))
  49333. ])) : vue.createCommentVNode("v-if", true),
  49334. vue.createElementVNode("view", { style: { "height": "90px" } })
  49335. ];
  49336. }),
  49337. _: 1
  49338. /* STABLE */
  49339. }, 8, ["modelValue"]),
  49340. vue.createVNode(_component_u_modal, {
  49341. ref: "safeModalRef",
  49342. modelValue: $setup.showSafeModal,
  49343. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.showSafeModal = $event),
  49344. "async-close": true,
  49345. title: $setup.t("安全验证"),
  49346. "show-cancel-button": true,
  49347. "confirm-text": $setup.t("确定投注"),
  49348. "cancel-text": $setup.t("取消"),
  49349. "confirm-color": "#f8b932",
  49350. onConfirm: $setup.confirmSubmitBet
  49351. }, {
  49352. default: vue.withCtx(() => [
  49353. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  49354. vue.createElementVNode(
  49355. "text",
  49356. { class: "safe-tips" },
  49357. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  49358. 1
  49359. /* TEXT */
  49360. ),
  49361. vue.createVNode(_component_u_input, {
  49362. modelValue: $setup.safeWord,
  49363. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.safeWord = $event),
  49364. type: "password",
  49365. placeholder: $setup.t("请输入资金密码"),
  49366. border: true,
  49367. "border-color": "#e4e7ed",
  49368. clearable: true
  49369. }, null, 8, ["modelValue", "placeholder"])
  49370. ])
  49371. ]),
  49372. _: 1
  49373. /* STABLE */
  49374. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"])
  49375. ]),
  49376. _: 1
  49377. /* STABLE */
  49378. },
  49379. 512
  49380. /* NEED_PATCH */
  49381. )
  49382. ]),
  49383. _: 1
  49384. /* STABLE */
  49385. });
  49386. }
  49387. const PagesTabbarEntertainmentViewPC28Index = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$a], ["__scopeId", "data-v-a6a987df"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/PC28/index.vue"]]);
  49388. const CACHE_KEY = "1_GAME_RULE_CART_CACHE";
  49389. const _sfc_main$a = {
  49390. __name: "index",
  49391. setup(__props, { expose: __expose }) {
  49392. __expose();
  49393. const { t: t2, locale } = useI18n();
  49394. const router2 = useRouter();
  49395. const PageContainerRef = vue.ref();
  49396. const pagingRef = vue.ref(null);
  49397. const latestDraw = vue.ref(null);
  49398. const countdownInfo = vue.ref(null);
  49399. const isFengpan = vue.ref(false);
  49400. const showDetailPopup = vue.ref(false);
  49401. const timeLeft = vue.ref(0);
  49402. let timer = null;
  49403. const selectedItems = vue.ref(uni.getStorageSync(CACHE_KEY) || []);
  49404. const isOpen = vue.ref(false);
  49405. const userMoney = vue.ref(0);
  49406. const safeModalRef = vue.ref(null);
  49407. const showSafeModal = vue.ref(false);
  49408. const safeWord = vue.ref("");
  49409. const batchStakeValue = vue.ref(uni.getStorageSync("jisu28BatchStakeCache") || "");
  49410. vue.watch(selectedItems, (newVal) => {
  49411. uni.setStorageSync(CACHE_KEY, newVal);
  49412. }, { deep: true });
  49413. const selectedCount = vue.computed(() => selectedItems.value.length);
  49414. const totalStake = vue.computed(() => {
  49415. return selectedItems.value.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
  49416. });
  49417. const handleToggleItem = (rule) => {
  49418. if (Number(rule.odds) <= 0 || isFengpan.value)
  49419. return;
  49420. const index = selectedItems.value.findIndex((item) => item.id === rule.id);
  49421. if (index > -1) {
  49422. selectedItems.value.splice(index, 1);
  49423. if (selectedItems.value.length === 0)
  49424. isOpen.value = false;
  49425. } else {
  49426. const defaultAmount = Number(rule.mininum) > 0 ? Number(rule.mininum) : 20;
  49427. selectedItems.value.push({
  49428. ...rule,
  49429. amount: defaultAmount
  49430. });
  49431. }
  49432. };
  49433. const removeItem = (id) => {
  49434. selectedItems.value = selectedItems.value.filter((item) => item.id !== id);
  49435. if (selectedItems.value.length === 0)
  49436. isOpen.value = false;
  49437. };
  49438. const changeAmount = (item, delta) => {
  49439. let val = Number(item.amount) || 0;
  49440. Number(item.mininum) || 0;
  49441. const max = Number(item.maxinum) || 9999999;
  49442. val += delta;
  49443. if (val < 0)
  49444. val = 0;
  49445. if (val > max) {
  49446. val = max;
  49447. uni.showToast({ title: `${t2("已达最高投注")} ${max}`, icon: "none" });
  49448. }
  49449. item.amount = val;
  49450. };
  49451. const validateAmount = (item) => {
  49452. };
  49453. const applyBatchStake = () => {
  49454. let val = batchStakeValue.value;
  49455. uni.setStorageSync("jisu28BatchStakeCache", val);
  49456. if (val === "") {
  49457. selectedItems.value.forEach((item) => {
  49458. item.amount = "";
  49459. });
  49460. return;
  49461. }
  49462. let numVal = Number(val);
  49463. if (isNaN(numVal) || numVal <= 0) {
  49464. return uni.showToast({ title: t2("请输入大于0的有效金额"), icon: "none" });
  49465. }
  49466. selectedItems.value.forEach((item) => {
  49467. let itemVal = numVal;
  49468. const min = Number(item.mininum) || 0;
  49469. const max = Number(item.maxinum) || 9999999;
  49470. if (itemVal < min) {
  49471. itemVal = min;
  49472. }
  49473. if (itemVal > max) {
  49474. itemVal = max;
  49475. }
  49476. item.amount = itemVal;
  49477. });
  49478. };
  49479. const fetchBalance = async () => {
  49480. try {
  49481. const res = await getBalance();
  49482. if (res.code === 1) {
  49483. userMoney.value = Number(res.data.money);
  49484. }
  49485. } catch (error) {
  49486. formatAppLog("error", "at pages/Tabbar/Entertainment/view/ExtremeSpeed28/index.vue:394", "获取余额失败", error);
  49487. }
  49488. };
  49489. const submitBet = () => {
  49490. if (isFengpan.value)
  49491. return;
  49492. if (selectedItems.value.length === 0)
  49493. return uni.$u.toast(t2("请选择投注单"));
  49494. for (let i = 0; i < selectedItems.value.length; i++) {
  49495. const item = selectedItems.value[i];
  49496. const stake = Number(item.amount);
  49497. if (!stake || stake <= 0) {
  49498. return uni.showToast({ title: t2("请输入大于0的有效投注金额"), icon: "none" });
  49499. }
  49500. const min = Number(item.mininum) || 0;
  49501. const max = Number(item.maxinum) || 9999999;
  49502. if (stake < min) {
  49503. return uni.showToast({ title: `${t2("最低投注限额为")} ${min}`, icon: "none" });
  49504. }
  49505. if (stake > max) {
  49506. return uni.showToast({ title: `${t2("最高投注限额为")} ${max}`, icon: "none" });
  49507. }
  49508. }
  49509. if (totalStake.value > userMoney.value)
  49510. return uni.showToast({ title: t2("余额不足"), icon: "none" });
  49511. safeWord.value = "";
  49512. confirmSubmitBet();
  49513. };
  49514. const confirmSubmitBet = () => {
  49515. uni.showModal({
  49516. title: t2("提示"),
  49517. content: t2("确认提交吗?"),
  49518. success: (res) => {
  49519. if (res.confirm) {
  49520. const ordersData = selectedItems.value.map((item) => ({ id: item.id, amount: item.amount }));
  49521. submitGameBet({
  49522. data: ordersData,
  49523. safe_word: safeWord.value,
  49524. pc28: 1
  49525. }).then((res2) => {
  49526. var _a2, _b2;
  49527. if (res2.code === 1) {
  49528. uni.showToast({ title: t2("投注成功"), icon: "success" });
  49529. selectedItems.value = [];
  49530. isOpen.value = false;
  49531. showSafeModal.value = false;
  49532. fetchBalance();
  49533. if ((_a2 = PageContainerRef.value) == null ? void 0 : _a2.getData) {
  49534. PageContainerRef.value.getData();
  49535. }
  49536. } else {
  49537. uni.showToast({ title: res2.msg || t2("投注失败"), icon: "none" });
  49538. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  49539. }
  49540. }).catch((err) => {
  49541. var _a2;
  49542. formatAppLog("error", "at pages/Tabbar/Entertainment/view/ExtremeSpeed28/index.vue:451", "投注错误:", err);
  49543. (_a2 = safeModalRef.value) == null ? void 0 : _a2.clearLoading();
  49544. });
  49545. }
  49546. }
  49547. });
  49548. };
  49549. const goTopUp = () => {
  49550. if (!uni.getStorageSync("token")) {
  49551. uni.showToast({ title: t2("请先登录"), icon: "none" });
  49552. return;
  49553. }
  49554. router2.push({ name: "topUp" });
  49555. };
  49556. const getApiBasePath = () => {
  49557. return "newPc";
  49558. };
  49559. const getLatestYuanTou = () => {
  49560. return new Promise((resolve2, reject) => {
  49561. uni.request({
  49562. url: `${apiUrl}${getApiBasePath()}/yuanTou`,
  49563. method: "GET",
  49564. success: (res) => resolve2(res.data),
  49565. fail: (err) => reject(err),
  49566. header: {
  49567. lang: locale.value
  49568. }
  49569. });
  49570. });
  49571. };
  49572. const getCountdown = () => {
  49573. return new Promise((resolve2, reject) => {
  49574. uni.request({
  49575. url: `${apiUrl}${getApiBasePath()}/countdown`,
  49576. method: "GET",
  49577. success: (res) => resolve2(res.data),
  49578. fail: (err) => reject(err),
  49579. header: {
  49580. lang: locale.value
  49581. }
  49582. });
  49583. });
  49584. };
  49585. const onQuery = async () => {
  49586. try {
  49587. await fetchTopData();
  49588. pagingRef.value.complete([]);
  49589. } catch (error) {
  49590. formatAppLog("error", "at pages/Tabbar/Entertainment/view/ExtremeSpeed28/index.vue:515", error);
  49591. pagingRef.value.complete(false);
  49592. }
  49593. };
  49594. const goToHistory = () => {
  49595. router2.push({ name: "history", query: { type: "newPc" } });
  49596. };
  49597. const goToPC28History = () => {
  49598. router2.push({ name: "AllHistory", query: { tab: 1 } });
  49599. };
  49600. const fetchTopData = async () => {
  49601. try {
  49602. const [yuanTouRes, countRes] = await Promise.all([
  49603. getLatestYuanTou(),
  49604. getCountdown()
  49605. ]);
  49606. if (yuanTouRes.code === 0 && yuanTouRes.data.length > 0) {
  49607. latestDraw.value = yuanTouRes.data[0];
  49608. }
  49609. if (countRes.code === 0 && countRes.data) {
  49610. countdownInfo.value = countRes.data;
  49611. startCountdown(countRes.data.end_time, countRes.data.current_time);
  49612. }
  49613. } catch (error) {
  49614. formatAppLog("error", "at pages/Tabbar/Entertainment/view/ExtremeSpeed28/index.vue:551", "获取顶部数据失败", error);
  49615. }
  49616. };
  49617. const startCountdown = (endTime, currentTime) => {
  49618. clearInterval(timer);
  49619. const diff = endTime - currentTime;
  49620. timeLeft.value = Math.max(0, diff);
  49621. if (diff > 0) {
  49622. timer = setInterval(() => {
  49623. if (timeLeft.value > 0) {
  49624. timeLeft.value--;
  49625. } else {
  49626. clearInterval(timer);
  49627. }
  49628. }, 1e3);
  49629. }
  49630. };
  49631. const formatTime = (seconds) => {
  49632. const m = Math.floor(seconds / 60).toString().padStart(2, "0");
  49633. const s = (seconds % 60).toString().padStart(2, "0");
  49634. return { m, s };
  49635. };
  49636. const latestSum = vue.computed(() => {
  49637. if (!latestDraw.value)
  49638. return 0;
  49639. return Number(latestDraw.value.openCode1 || 0) + Number(latestDraw.value.openCode2 || 0) + Number(latestDraw.value.openCode3 || 0);
  49640. });
  49641. const calcDetails = vue.computed(() => {
  49642. if (!latestDraw.value || !latestDraw.value.keno)
  49643. return null;
  49644. const keno = latestDraw.value.keno.map(Number);
  49645. const getZone = (startIndex) => {
  49646. let nums = [];
  49647. let sum = 0;
  49648. for (let i = 0; i < 6; i++) {
  49649. const val = keno[startIndex + i * 3];
  49650. nums.push(val);
  49651. sum += val;
  49652. }
  49653. return { str: nums.join(" + "), sum };
  49654. };
  49655. return {
  49656. zone1: getZone(1),
  49657. zone2: getZone(2),
  49658. zone3: getZone(3)
  49659. };
  49660. });
  49661. const getBallColor = (numStr) => {
  49662. const num = parseInt(numStr, 10);
  49663. return num % 2 === 0 ? "red-ball" : "blue-ball";
  49664. };
  49665. const getGridCellClass = (num) => {
  49666. if (!latestDraw.value || !latestDraw.value.keno)
  49667. return "";
  49668. const isSelected = latestDraw.value.keno.some((k) => Number(k) === num);
  49669. if (isSelected) {
  49670. return num % 2 === 0 ? "bg-red" : "bg-blue";
  49671. }
  49672. return "";
  49673. };
  49674. const goRule = () => {
  49675. router2.push({ name: "PC28Rule" });
  49676. };
  49677. vue.onMounted(() => {
  49678. uni.$on("onSocketMessage", (data) => {
  49679. var _a2;
  49680. if (!data)
  49681. return;
  49682. try {
  49683. const res = JSON.parse(data);
  49684. if (res.type === "new_jisu_issue") {
  49685. const currentIssue = (_a2 = countdownInfo.value) == null ? void 0 : _a2.issue_no;
  49686. if (currentIssue !== res.message) {
  49687. fetchTopData();
  49688. getGameLotteryStatus();
  49689. }
  49690. }
  49691. if (res && res.type === "jisu_fengpan") {
  49692. isFengpan.value = true;
  49693. } else if (res && res.type === "jisu_kaipan") {
  49694. isFengpan.value = false;
  49695. }
  49696. } catch (e) {
  49697. formatAppLog("error", "at pages/Tabbar/Entertainment/view/ExtremeSpeed28/index.vue:652", "WebSocket消息解析失败:", e);
  49698. }
  49699. });
  49700. });
  49701. function getGameLotteryStatus() {
  49702. gameLotteryStatus({ type: 2 }).then((res) => {
  49703. if (res.data.is_kaipan == 0) {
  49704. isFengpan.value = true;
  49705. } else if (res.data.is_kaipan == 1) {
  49706. isFengpan.value = false;
  49707. }
  49708. });
  49709. }
  49710. getGameLotteryStatus();
  49711. onQuery();
  49712. vue.onUnmounted(() => {
  49713. clearInterval(timer);
  49714. uni.$off("onSocketMessage");
  49715. });
  49716. onLoad(() => {
  49717. });
  49718. onShow(() => {
  49719. vue.nextTick(() => {
  49720. uni.customFromPath = "";
  49721. });
  49722. batchStakeValue.value = uni.getStorageSync("jisu28BatchStakeCache") || "";
  49723. if (uni.getStorageSync("token")) {
  49724. fetchBalance();
  49725. }
  49726. });
  49727. const __returned__ = { t: t2, locale, router: router2, PageContainerRef, pagingRef, latestDraw, countdownInfo, isFengpan, showDetailPopup, timeLeft, get timer() {
  49728. return timer;
  49729. }, set timer(v) {
  49730. timer = v;
  49731. }, CACHE_KEY, selectedItems, isOpen, userMoney, safeModalRef, showSafeModal, safeWord, batchStakeValue, selectedCount, totalStake, handleToggleItem, removeItem, changeAmount, validateAmount, applyBatchStake, fetchBalance, submitBet, confirmSubmitBet, goTopUp, getApiBasePath, getLatestYuanTou, getCountdown, onQuery, goToHistory, goToPC28History, fetchTopData, startCountdown, formatTime, latestSum, calcDetails, getBallColor, getGridCellClass, goRule, getGameLotteryStatus, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, nextTick: vue.nextTick, watch: vue.watch, get useI18n() {
  49732. return useI18n;
  49733. }, BettingItems, get onLoad() {
  49734. return onLoad;
  49735. }, get onShow() {
  49736. return onShow;
  49737. }, get apiUrl() {
  49738. return apiUrl;
  49739. }, get gameLotteryStatus() {
  49740. return gameLotteryStatus;
  49741. }, get getBalance() {
  49742. return getBalance;
  49743. }, get submitGameBet() {
  49744. return submitGameBet;
  49745. } };
  49746. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  49747. return __returned__;
  49748. }
  49749. };
  49750. function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
  49751. const _component_u_icon = __unplugin_components_0$5;
  49752. const _component_u_tag = __unplugin_components_2$2;
  49753. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  49754. const _component_u_popup = __unplugin_components_2$3;
  49755. const _component_u_button = __unplugin_components_2$1;
  49756. const _component_u_input = __unplugin_components_3$2;
  49757. const _component_u_modal = __unplugin_components_4$3;
  49758. const _component_PageContainer = PageContainer;
  49759. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  49760. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  49761. default: vue.withCtx(() => [
  49762. vue.createVNode(
  49763. _component_PageContainer,
  49764. {
  49765. ref: "PageContainerRef",
  49766. navTitle: "极速28"
  49767. },
  49768. {
  49769. default: vue.withCtx(() => [
  49770. vue.createVNode(
  49771. _component_z_paging,
  49772. {
  49773. ref: "pagingRef",
  49774. onQuery: $setup.onQuery,
  49775. fixed: false,
  49776. "refresher-only": true,
  49777. "refresher-enabled": true,
  49778. "loading-more-enabled": false,
  49779. "auto-show-back-to-top": true
  49780. },
  49781. {
  49782. refresher: vue.withCtx(() => [
  49783. vue.createElementVNode("view", { class: "refresher-ui" }, [
  49784. vue.createElementVNode("view", { class: "spin-loader" }),
  49785. vue.createElementVNode(
  49786. "text",
  49787. { class: "refresher-text" },
  49788. vue.toDisplayString($setup.t("获取最新数据...")),
  49789. 1
  49790. /* TEXT */
  49791. )
  49792. ])
  49793. ]),
  49794. default: vue.withCtx(() => {
  49795. var _a2;
  49796. return [
  49797. vue.createElementVNode("view", { class: "top-section" }, [
  49798. $setup.latestDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  49799. key: 0,
  49800. class: "latest-draw-card"
  49801. }, [
  49802. vue.createElementVNode("view", { class: "header" }, [
  49803. vue.createElementVNode("view", { class: "title-left" }, [
  49804. vue.createElementVNode(
  49805. "text",
  49806. { class: "bclc" },
  49807. vue.toDisplayString($setup.t("极速")) + "28",
  49808. 1
  49809. /* TEXT */
  49810. ),
  49811. vue.createElementVNode(
  49812. "text",
  49813. { class: "issue" },
  49814. vue.toDisplayString($setup.latestDraw.issue_no || $setup.latestDraw.section) + " " + vue.toDisplayString($setup.t("期")),
  49815. 1
  49816. /* TEXT */
  49817. )
  49818. ]),
  49819. vue.createVNode(_component_u_icon, {
  49820. name: "globe",
  49821. size: "40",
  49822. color: "#666"
  49823. })
  49824. ]),
  49825. vue.createElementVNode("view", { class: "balls-grid" }, [
  49826. (vue.openBlock(true), vue.createElementBlock(
  49827. vue.Fragment,
  49828. null,
  49829. vue.renderList($setup.latestDraw.keno, (num, idx) => {
  49830. return vue.openBlock(), vue.createElementBlock(
  49831. "view",
  49832. {
  49833. class: vue.normalizeClass(["ball", $setup.getBallColor(num)]),
  49834. key: idx
  49835. },
  49836. [
  49837. vue.createElementVNode(
  49838. "view",
  49839. { class: "ball-inner" },
  49840. vue.toDisplayString(num),
  49841. 1
  49842. /* TEXT */
  49843. )
  49844. ],
  49845. 2
  49846. /* CLASS */
  49847. );
  49848. }),
  49849. 128
  49850. /* KEYED_FRAGMENT */
  49851. ))
  49852. ])
  49853. ])) : vue.createCommentVNode("v-if", true),
  49854. vue.createElementVNode("view", { class: "calc-tabs" }, [
  49855. vue.createElementVNode(
  49856. "view",
  49857. {
  49858. class: "c-tab active",
  49859. onClick: _cache[0] || (_cache[0] = ($event) => $setup.showDetailPopup = true)
  49860. },
  49861. vue.toDisplayString($setup.t("开奖详情")),
  49862. 1
  49863. /* TEXT */
  49864. ),
  49865. vue.createElementVNode(
  49866. "view",
  49867. {
  49868. class: "c-tab active",
  49869. onClick: $setup.goToHistory
  49870. },
  49871. vue.toDisplayString($setup.t("往期历史")),
  49872. 1
  49873. /* TEXT */
  49874. ),
  49875. vue.createElementVNode(
  49876. "view",
  49877. {
  49878. class: "c-tab active",
  49879. onClick: $setup.goToPC28History
  49880. },
  49881. vue.toDisplayString($setup.t("投注记录")),
  49882. 1
  49883. /* TEXT */
  49884. ),
  49885. vue.createElementVNode(
  49886. "view",
  49887. {
  49888. class: "c-tab active",
  49889. onClick: $setup.goRule
  49890. },
  49891. vue.toDisplayString($setup.t("开奖规则")),
  49892. 1
  49893. /* TEXT */
  49894. )
  49895. ]),
  49896. $setup.latestDraw && $setup.calcDetails ? (vue.openBlock(), vue.createElementBlock("view", {
  49897. key: 1,
  49898. class: "calc-card"
  49899. }, [
  49900. vue.createElementVNode("view", { class: "equation" }, [
  49901. vue.createElementVNode(
  49902. "view",
  49903. { class: "circle" },
  49904. vue.toDisplayString($setup.latestDraw.openCode1),
  49905. 1
  49906. /* TEXT */
  49907. ),
  49908. vue.createElementVNode("text", { class: "operator" }, "+"),
  49909. vue.createElementVNode(
  49910. "view",
  49911. { class: "circle" },
  49912. vue.toDisplayString($setup.latestDraw.openCode2),
  49913. 1
  49914. /* TEXT */
  49915. ),
  49916. vue.createElementVNode("text", { class: "operator" }, "+"),
  49917. vue.createElementVNode(
  49918. "view",
  49919. { class: "circle" },
  49920. vue.toDisplayString($setup.latestDraw.openCode3),
  49921. 1
  49922. /* TEXT */
  49923. ),
  49924. vue.createElementVNode("text", { class: "operator" }, "="),
  49925. vue.createElementVNode(
  49926. "view",
  49927. { class: "circle result" },
  49928. vue.toDisplayString($setup.latestSum),
  49929. 1
  49930. /* TEXT */
  49931. )
  49932. ]),
  49933. vue.createElementVNode("view", { class: "details-list" }, [
  49934. vue.createElementVNode("view", { class: "d-row" }, [
  49935. vue.createElementVNode(
  49936. "text",
  49937. { class: "label" },
  49938. vue.toDisplayString($setup.t("前")) + ":",
  49939. 1
  49940. /* TEXT */
  49941. ),
  49942. vue.createElementVNode(
  49943. "text",
  49944. { class: "formula" },
  49945. vue.toDisplayString($setup.calcDetails.zone1.str) + " = " + vue.toDisplayString($setup.calcDetails.zone1.sum) + " " + vue.toDisplayString($setup.t("取")) + " " + vue.toDisplayString($setup.latestDraw.openCode1),
  49946. 1
  49947. /* TEXT */
  49948. )
  49949. ]),
  49950. vue.createElementVNode("view", { class: "d-row" }, [
  49951. vue.createElementVNode(
  49952. "text",
  49953. { class: "label" },
  49954. vue.toDisplayString($setup.t("中")) + ":",
  49955. 1
  49956. /* TEXT */
  49957. ),
  49958. vue.createElementVNode(
  49959. "text",
  49960. { class: "formula" },
  49961. vue.toDisplayString($setup.calcDetails.zone2.str) + " = " + vue.toDisplayString($setup.calcDetails.zone2.sum) + " " + vue.toDisplayString($setup.t("取")) + " " + vue.toDisplayString($setup.latestDraw.openCode2),
  49962. 1
  49963. /* TEXT */
  49964. )
  49965. ]),
  49966. vue.createElementVNode("view", { class: "d-row" }, [
  49967. vue.createElementVNode(
  49968. "text",
  49969. { class: "label" },
  49970. vue.toDisplayString($setup.t("尾")) + ":",
  49971. 1
  49972. /* TEXT */
  49973. ),
  49974. vue.createElementVNode(
  49975. "text",
  49976. { class: "formula" },
  49977. vue.toDisplayString($setup.calcDetails.zone3.str) + " = " + vue.toDisplayString($setup.calcDetails.zone3.sum) + " " + vue.toDisplayString($setup.t("取")) + " " + vue.toDisplayString($setup.latestDraw.openCode3),
  49978. 1
  49979. /* TEXT */
  49980. )
  49981. ])
  49982. ])
  49983. ])) : vue.createCommentVNode("v-if", true),
  49984. $setup.countdownInfo ? (vue.openBlock(), vue.createElementBlock("view", {
  49985. key: 2,
  49986. class: "next-draw-card"
  49987. }, [
  49988. vue.createElementVNode("view", { class: "n-header" }, [
  49989. vue.createElementVNode("text", { class: "n-title" }, [
  49990. vue.createTextVNode(
  49991. vue.toDisplayString($setup.t("最新")) + ": ",
  49992. 1
  49993. /* TEXT */
  49994. ),
  49995. vue.createElementVNode(
  49996. "text",
  49997. { class: "n-issue" },
  49998. vue.toDisplayString($setup.countdownInfo.issue_no),
  49999. 1
  50000. /* TEXT */
  50001. ),
  50002. vue.createTextVNode(
  50003. " " + vue.toDisplayString($setup.t("期")),
  50004. 1
  50005. /* TEXT */
  50006. )
  50007. ])
  50008. ]),
  50009. vue.createElementVNode("view", { class: "n-timer" }, [
  50010. vue.createElementVNode(
  50011. "text",
  50012. { class: "t-label" },
  50013. vue.toDisplayString($setup.t("下一期")) + ":",
  50014. 1
  50015. /* TEXT */
  50016. ),
  50017. vue.createElementVNode(
  50018. "view",
  50019. { class: "t-box" },
  50020. vue.toDisplayString($setup.formatTime($setup.timeLeft).m),
  50021. 1
  50022. /* TEXT */
  50023. ),
  50024. vue.createElementVNode(
  50025. "text",
  50026. { class: "t-unit" },
  50027. vue.toDisplayString($setup.t("分")),
  50028. 1
  50029. /* TEXT */
  50030. ),
  50031. vue.createElementVNode(
  50032. "view",
  50033. { class: "t-box" },
  50034. vue.toDisplayString($setup.formatTime($setup.timeLeft).s),
  50035. 1
  50036. /* TEXT */
  50037. ),
  50038. vue.createElementVNode(
  50039. "text",
  50040. { class: "t-unit" },
  50041. vue.toDisplayString($setup.t("秒")),
  50042. 1
  50043. /* TEXT */
  50044. )
  50045. ])
  50046. ])) : vue.createCommentVNode("v-if", true)
  50047. ]),
  50048. $setup.isFengpan ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  50049. key: 0,
  50050. type: "error",
  50051. text: $setup.t("封盘中"),
  50052. style: { "width": "calc(100% - 20px)", "text-align": "center", "margin-left": "10px" }
  50053. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true),
  50054. vue.createVNode($setup["BettingItems"], {
  50055. pc28: 1,
  50056. m: $setup.formatTime($setup.timeLeft).m,
  50057. s: $setup.formatTime($setup.timeLeft).s,
  50058. PageContainerRef: $setup.PageContainerRef,
  50059. issue_no: (_a2 = $setup.countdownInfo) == null ? void 0 : _a2.issue_no,
  50060. apiIsFengpan: $setup.isFengpan,
  50061. selectedItems: $setup.selectedItems,
  50062. onToggle: $setup.handleToggleItem
  50063. }, null, 8, ["m", "s", "PageContainerRef", "issue_no", "apiIsFengpan", "selectedItems"]),
  50064. vue.createElementVNode("view", { style: { "height": "100px" } })
  50065. ];
  50066. }),
  50067. _: 1
  50068. /* STABLE */
  50069. },
  50070. 512
  50071. /* NEED_PATCH */
  50072. ),
  50073. vue.createVNode(_component_u_popup, {
  50074. modelValue: $setup.showDetailPopup,
  50075. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.showDetailPopup = $event),
  50076. mode: "center",
  50077. "border-radius": "20",
  50078. "mask-close-able": true
  50079. }, {
  50080. default: vue.withCtx(() => {
  50081. var _a2, _b2;
  50082. return [
  50083. vue.createElementVNode("view", { class: "popup-wrapper" }, [
  50084. vue.createElementVNode(
  50085. "view",
  50086. { class: "p-title" },
  50087. vue.toDisplayString(((_a2 = $setup.latestDraw) == null ? void 0 : _a2.issue_no) || ((_b2 = $setup.latestDraw) == null ? void 0 : _b2.section)) + " " + vue.toDisplayString($setup.t("期")),
  50088. 1
  50089. /* TEXT */
  50090. ),
  50091. $setup.latestDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  50092. key: 0,
  50093. class: "p-equation"
  50094. }, [
  50095. vue.createElementVNode(
  50096. "view",
  50097. { class: "circle" },
  50098. vue.toDisplayString($setup.latestDraw.openCode1),
  50099. 1
  50100. /* TEXT */
  50101. ),
  50102. vue.createElementVNode("text", { class: "operator" }, "+"),
  50103. vue.createElementVNode(
  50104. "view",
  50105. { class: "circle" },
  50106. vue.toDisplayString($setup.latestDraw.openCode2),
  50107. 1
  50108. /* TEXT */
  50109. ),
  50110. vue.createElementVNode("text", { class: "operator" }, "+"),
  50111. vue.createElementVNode(
  50112. "view",
  50113. { class: "circle" },
  50114. vue.toDisplayString($setup.latestDraw.openCode3),
  50115. 1
  50116. /* TEXT */
  50117. ),
  50118. vue.createElementVNode("text", { class: "operator" }, "="),
  50119. vue.createElementVNode(
  50120. "view",
  50121. { class: "circle result" },
  50122. vue.toDisplayString($setup.latestSum),
  50123. 1
  50124. /* TEXT */
  50125. )
  50126. ])) : vue.createCommentVNode("v-if", true),
  50127. vue.createElementVNode("view", { class: "p-grid" }, [
  50128. (vue.openBlock(), vue.createElementBlock(
  50129. vue.Fragment,
  50130. null,
  50131. vue.renderList(80, (i) => {
  50132. return vue.createElementVNode(
  50133. "view",
  50134. {
  50135. class: vue.normalizeClass(["p-cell", $setup.getGridCellClass(i)]),
  50136. key: i
  50137. },
  50138. vue.toDisplayString(i),
  50139. 3
  50140. /* TEXT, CLASS */
  50141. );
  50142. }),
  50143. 64
  50144. /* STABLE_FRAGMENT */
  50145. ))
  50146. ])
  50147. ])
  50148. ];
  50149. }),
  50150. _: 1
  50151. /* STABLE */
  50152. }, 8, ["modelValue"]),
  50153. vue.createElementVNode("view", { style: { "height": "70px" } }),
  50154. !$setup.isOpen ? (vue.openBlock(), vue.createElementBlock("view", {
  50155. key: 0,
  50156. class: "sticky-header-bar",
  50157. onClick: _cache[3] || (_cache[3] = ($event) => $setup.isOpen = true)
  50158. }, [
  50159. vue.createElementVNode("view", { class: "betting-sheet-header" }, [
  50160. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  50161. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock(
  50162. "view",
  50163. {
  50164. key: 0,
  50165. class: "sheet-badge"
  50166. },
  50167. vue.toDisplayString($setup.selectedCount),
  50168. 1
  50169. /* TEXT */
  50170. )) : vue.createCommentVNode("v-if", true),
  50171. vue.createElementVNode(
  50172. "text",
  50173. { class: "header-text" },
  50174. vue.toDisplayString($setup.t("投注单")),
  50175. 1
  50176. /* TEXT */
  50177. ),
  50178. vue.createVNode(_component_u_icon, {
  50179. name: "arrow-up",
  50180. color: "#666"
  50181. })
  50182. ]),
  50183. vue.createElementVNode("view", { class: "betting-sheet-header-right" }, [
  50184. vue.createElementVNode("view", { class: "settings-btn" }, [
  50185. vue.createVNode(_component_u_button, {
  50186. onClick: _cache[2] || (_cache[2] = vue.withModifiers(($event) => $setup.isOpen = true, ["stop"])),
  50187. size: "mini",
  50188. type: "primary",
  50189. disabled: $setup.isFengpan
  50190. }, {
  50191. default: vue.withCtx(() => [
  50192. vue.createTextVNode(
  50193. vue.toDisplayString($setup.t("下注")),
  50194. 1
  50195. /* TEXT */
  50196. )
  50197. ]),
  50198. _: 1
  50199. /* STABLE */
  50200. }, 8, ["disabled"])
  50201. ])
  50202. ])
  50203. ])
  50204. ])) : vue.createCommentVNode("v-if", true),
  50205. vue.createVNode(_component_u_popup, {
  50206. modelValue: $setup.isOpen,
  50207. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.isOpen = $event),
  50208. mode: "bottom",
  50209. "border-radius": "24",
  50210. mask: true,
  50211. "mask-close-able": true,
  50212. "z-index": 990,
  50213. "safe-area-inset-bottom": true,
  50214. height: "70%"
  50215. }, {
  50216. default: vue.withCtx(() => {
  50217. var _a2;
  50218. return [
  50219. vue.createElementVNode("view", { class: "popup-betting-sheet-header" }, [
  50220. vue.createElementVNode("view", {
  50221. class: "betting-sheet-header border-bottom",
  50222. onClick: _cache[5] || (_cache[5] = ($event) => $setup.isOpen = false)
  50223. }, [
  50224. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  50225. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock(
  50226. "view",
  50227. {
  50228. key: 0,
  50229. class: "sheet-badge"
  50230. },
  50231. vue.toDisplayString($setup.selectedCount),
  50232. 1
  50233. /* TEXT */
  50234. )) : vue.createCommentVNode("v-if", true),
  50235. vue.createElementVNode(
  50236. "text",
  50237. { class: "header-text" },
  50238. vue.toDisplayString($setup.t("投注单")),
  50239. 1
  50240. /* TEXT */
  50241. ),
  50242. vue.createVNode(_component_u_icon, {
  50243. name: "arrow-down",
  50244. color: "#666"
  50245. })
  50246. ]),
  50247. vue.createElementVNode("view", { class: "betting-sheet-header-right" }, [
  50248. vue.createElementVNode("view", { class: "settings-btn" }, [
  50249. vue.createElementVNode(
  50250. "text",
  50251. {
  50252. style: { "font-size": "12px", "margin-right": "4px" },
  50253. class: "tmc",
  50254. onClick: _cache[4] || (_cache[4] = vue.withModifiers(($event) => $setup.selectedItems = [], ["stop"]))
  50255. },
  50256. vue.toDisplayString($setup.t("清空")),
  50257. 1
  50258. /* TEXT */
  50259. )
  50260. ])
  50261. ])
  50262. ]),
  50263. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  50264. key: 0,
  50265. class: "batch-stake-box"
  50266. }, [
  50267. vue.createElementVNode(
  50268. "text",
  50269. { class: "batch-label" },
  50270. vue.toDisplayString($setup.t("批量设置金额")),
  50271. 1
  50272. /* TEXT */
  50273. ),
  50274. vue.createElementVNode("view", { class: "batch-input-wrapper" }, [
  50275. vue.withDirectives(vue.createElementVNode("input", {
  50276. "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $setup.batchStakeValue = $event),
  50277. class: "batch-input",
  50278. placeholder: $setup.t("请输入金额"),
  50279. type: "number"
  50280. }, null, 8, ["placeholder"]), [
  50281. [vue.vModelText, $setup.batchStakeValue]
  50282. ])
  50283. ]),
  50284. vue.createVNode(_component_u_button, {
  50285. size: "mini",
  50286. type: "primary",
  50287. style: { "margin-left": "10px" },
  50288. onClick: $setup.applyBatchStake
  50289. }, {
  50290. default: vue.withCtx(() => [
  50291. vue.createTextVNode(
  50292. vue.toDisplayString($setup.t("确定")),
  50293. 1
  50294. /* TEXT */
  50295. )
  50296. ]),
  50297. _: 1
  50298. /* STABLE */
  50299. })
  50300. ])) : vue.createCommentVNode("v-if", true)
  50301. ]),
  50302. $setup.selectedCount === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  50303. key: 0,
  50304. class: "empty-sheet"
  50305. }, [
  50306. vue.createElementVNode(
  50307. "text",
  50308. null,
  50309. vue.toDisplayString($setup.t("暂无投注项")),
  50310. 1
  50311. /* TEXT */
  50312. )
  50313. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  50314. key: 1,
  50315. class: "bet-list"
  50316. }, [
  50317. vue.createElementVNode("view", { style: { "display": "flex", "align-items": "center", "margin-bottom": "10px", "justify-content": "space-between" } }, [
  50318. vue.createElementVNode("text", { class: "n-title" }, [
  50319. vue.createElementVNode(
  50320. "text",
  50321. { class: "n-issue" },
  50322. vue.toDisplayString((_a2 = $setup.countdownInfo) == null ? void 0 : _a2.issue_no),
  50323. 1
  50324. /* TEXT */
  50325. ),
  50326. vue.createTextVNode(
  50327. " " + vue.toDisplayString($setup.t("期")),
  50328. 1
  50329. /* TEXT */
  50330. )
  50331. ]),
  50332. vue.createElementVNode("view", { class: "n-timer" }, [
  50333. vue.createElementVNode(
  50334. "view",
  50335. { class: "t-box" },
  50336. vue.toDisplayString($setup.formatTime($setup.timeLeft).m),
  50337. 1
  50338. /* TEXT */
  50339. ),
  50340. vue.createElementVNode(
  50341. "text",
  50342. { class: "t-unit" },
  50343. vue.toDisplayString($setup.t("分")),
  50344. 1
  50345. /* TEXT */
  50346. ),
  50347. vue.createElementVNode(
  50348. "view",
  50349. { class: "t-box" },
  50350. vue.toDisplayString($setup.formatTime($setup.timeLeft).s),
  50351. 1
  50352. /* TEXT */
  50353. ),
  50354. vue.createElementVNode(
  50355. "text",
  50356. { class: "t-unit" },
  50357. vue.toDisplayString($setup.t("秒")),
  50358. 1
  50359. /* TEXT */
  50360. )
  50361. ])
  50362. ]),
  50363. (vue.openBlock(true), vue.createElementBlock(
  50364. vue.Fragment,
  50365. null,
  50366. vue.renderList($setup.selectedItems, (item) => {
  50367. return vue.openBlock(), vue.createElementBlock("view", {
  50368. class: "bet-item",
  50369. key: item.id
  50370. }, [
  50371. vue.createElementVNode("view", { class: "item-header" }, [
  50372. vue.createElementVNode(
  50373. "text",
  50374. { class: "team-names" },
  50375. vue.toDisplayString(item.groups) + " - " + vue.toDisplayString(item.keywords),
  50376. 1
  50377. /* TEXT */
  50378. ),
  50379. vue.createElementVNode("view", {
  50380. class: "close-btn",
  50381. onClick: vue.withModifiers(($event) => $setup.removeItem(item.id), ["stop"])
  50382. }, [
  50383. vue.createVNode(_component_u_icon, {
  50384. name: "close",
  50385. color: "#666",
  50386. size: "16"
  50387. })
  50388. ], 8, ["onClick"])
  50389. ]),
  50390. vue.createElementVNode("view", { class: "item-info" }, [
  50391. vue.createElementVNode("view", { class: "bet-type" }, [
  50392. vue.createElementVNode(
  50393. "text",
  50394. { class: "type-name" },
  50395. vue.toDisplayString($setup.t("赔率")),
  50396. 1
  50397. /* TEXT */
  50398. )
  50399. ]),
  50400. vue.createElementVNode("view", { class: "odds-box" }, [
  50401. vue.createElementVNode(
  50402. "text",
  50403. { class: "odds-val" },
  50404. vue.toDisplayString($setup.isFengpan ? "--" : Number(item.odds).toFixed(2)),
  50405. 1
  50406. /* TEXT */
  50407. )
  50408. ])
  50409. ]),
  50410. vue.createElementVNode("view", { class: "limit-info" }, [
  50411. vue.createElementVNode(
  50412. "text",
  50413. null,
  50414. vue.toDisplayString($setup.t("限额")) + ": " + vue.toDisplayString(item.mininum) + " ~ " + vue.toDisplayString(item.maxinum),
  50415. 1
  50416. /* TEXT */
  50417. )
  50418. ]),
  50419. vue.createElementVNode(
  50420. "view",
  50421. {
  50422. class: vue.normalizeClass(["stake-input-box", { "error-border": item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 || Number(item.amount) > Number($setup.userMoney) || item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < Number(item.mininum) || item.maxinum !== void 0 && Number(item.amount) > Number(item.maxinum) }])
  50423. },
  50424. [
  50425. vue.createElementVNode("view", {
  50426. class: "stepper-btn",
  50427. onClick: ($event) => $setup.changeAmount(item, -10)
  50428. }, "-", 8, ["onClick"]),
  50429. vue.withDirectives(vue.createElementVNode("input", {
  50430. type: "number",
  50431. class: "stake-input",
  50432. "onUpdate:modelValue": ($event) => item.amount = $event,
  50433. onBlur: ($event) => $setup.validateAmount(item),
  50434. placeholder: "输入本金"
  50435. }, null, 40, ["onUpdate:modelValue", "onBlur"]), [
  50436. [vue.vModelText, item.amount]
  50437. ]),
  50438. vue.createElementVNode("view", {
  50439. class: "stepper-btn",
  50440. onClick: ($event) => $setup.changeAmount(item, 10)
  50441. }, "+", 8, ["onClick"])
  50442. ],
  50443. 2
  50444. /* CLASS */
  50445. ),
  50446. vue.createElementVNode("view", { class: "item-footer" }, [
  50447. item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 ? (vue.openBlock(), vue.createElementBlock(
  50448. "view",
  50449. {
  50450. key: 0,
  50451. class: "err-msg"
  50452. },
  50453. vue.toDisplayString($setup.t("金额不能小于等于0")),
  50454. 1
  50455. /* TEXT */
  50456. )) : item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < Number(item.mininum) ? (vue.openBlock(), vue.createElementBlock(
  50457. "view",
  50458. {
  50459. key: 1,
  50460. class: "err-msg"
  50461. },
  50462. vue.toDisplayString($setup.t("单注最低限制为")) + " " + vue.toDisplayString(item.mininum),
  50463. 1
  50464. /* TEXT */
  50465. )) : item.maxinum !== void 0 && Number(item.amount) > Number(item.maxinum) ? (vue.openBlock(), vue.createElementBlock(
  50466. "view",
  50467. {
  50468. key: 2,
  50469. class: "err-msg"
  50470. },
  50471. vue.toDisplayString($setup.t("单注最高限制为")) + " " + vue.toDisplayString(item.maxinum),
  50472. 1
  50473. /* TEXT */
  50474. )) : Number(item.amount) > Number($setup.userMoney) ? (vue.openBlock(), vue.createElementBlock(
  50475. "view",
  50476. {
  50477. key: 3,
  50478. class: "err-msg"
  50479. },
  50480. vue.toDisplayString($setup.t("投注额超过您的余额")),
  50481. 1
  50482. /* TEXT */
  50483. )) : (vue.openBlock(), vue.createElementBlock("view", {
  50484. key: 4,
  50485. class: "potential-win"
  50486. }, [
  50487. vue.createTextVNode(
  50488. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  50489. 1
  50490. /* TEXT */
  50491. ),
  50492. vue.createElementVNode(
  50493. "text",
  50494. { class: "win-amount" },
  50495. vue.toDisplayString((Number(item.amount) * Number(item.odds)).toFixed(2)) + " " + vue.toDisplayString(_ctx.$currency || "USDT"),
  50496. 1
  50497. /* TEXT */
  50498. )
  50499. ]))
  50500. ])
  50501. ]);
  50502. }),
  50503. 128
  50504. /* KEYED_FRAGMENT */
  50505. ))
  50506. ])),
  50507. $setup.selectedCount > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  50508. key: 2,
  50509. class: "sheet-action-bar pc28-cart-bottom"
  50510. }, [
  50511. vue.createElementVNode("view", { class: "total-odds-row" }, [
  50512. vue.createElementVNode(
  50513. "text",
  50514. { class: "label" },
  50515. vue.toDisplayString($setup.t("总投注金额")),
  50516. 1
  50517. /* TEXT */
  50518. ),
  50519. vue.createElementVNode(
  50520. "text",
  50521. { class: "val" },
  50522. vue.toDisplayString($setup.totalStake.toFixed(2)),
  50523. 1
  50524. /* TEXT */
  50525. )
  50526. ]),
  50527. $setup.totalStake > $setup.userMoney ? (vue.openBlock(), vue.createBlock(_component_u_button, {
  50528. key: 0,
  50529. type: "primary",
  50530. onClick: $setup.goTopUp
  50531. }, {
  50532. default: vue.withCtx(() => [
  50533. vue.createTextVNode(
  50534. vue.toDisplayString($setup.t("余额不足,去存款")),
  50535. 1
  50536. /* TEXT */
  50537. )
  50538. ]),
  50539. _: 1
  50540. /* STABLE */
  50541. })) : (vue.openBlock(), vue.createBlock(_component_u_button, {
  50542. key: 1,
  50543. type: "primary",
  50544. onClick: $setup.submitBet,
  50545. disabled: $setup.isFengpan
  50546. }, {
  50547. default: vue.withCtx(() => [
  50548. vue.createTextVNode(
  50549. vue.toDisplayString($setup.t("立即投注")),
  50550. 1
  50551. /* TEXT */
  50552. )
  50553. ]),
  50554. _: 1
  50555. /* STABLE */
  50556. }, 8, ["disabled"]))
  50557. ])) : vue.createCommentVNode("v-if", true),
  50558. vue.createElementVNode("view", { style: { "height": "90px" } })
  50559. ];
  50560. }),
  50561. _: 1
  50562. /* STABLE */
  50563. }, 8, ["modelValue"]),
  50564. vue.createVNode(_component_u_modal, {
  50565. ref: "safeModalRef",
  50566. modelValue: $setup.showSafeModal,
  50567. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.showSafeModal = $event),
  50568. "async-close": true,
  50569. title: $setup.t("安全验证"),
  50570. "show-cancel-button": true,
  50571. "confirm-text": $setup.t("确定投注"),
  50572. "cancel-text": $setup.t("取消"),
  50573. "confirm-color": "#f8b932",
  50574. onConfirm: $setup.confirmSubmitBet
  50575. }, {
  50576. default: vue.withCtx(() => [
  50577. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  50578. vue.createElementVNode(
  50579. "text",
  50580. { class: "safe-tips" },
  50581. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  50582. 1
  50583. /* TEXT */
  50584. ),
  50585. vue.createVNode(_component_u_input, {
  50586. modelValue: $setup.safeWord,
  50587. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.safeWord = $event),
  50588. type: "password",
  50589. placeholder: $setup.t("请输入资金密码"),
  50590. border: true,
  50591. "border-color": "#e4e7ed",
  50592. clearable: true
  50593. }, null, 8, ["modelValue", "placeholder"])
  50594. ])
  50595. ]),
  50596. _: 1
  50597. /* STABLE */
  50598. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"])
  50599. ]),
  50600. _: 1
  50601. /* STABLE */
  50602. },
  50603. 512
  50604. /* NEED_PATCH */
  50605. )
  50606. ]),
  50607. _: 1
  50608. /* STABLE */
  50609. });
  50610. }
  50611. const PagesTabbarEntertainmentViewExtremeSpeed28Index = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$9], ["__scopeId", "data-v-a95a1c58"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/ExtremeSpeed28/index.vue"]]);
  50612. const _sfc_main$9 = {
  50613. __name: "index",
  50614. setup(__props, { expose: __expose }) {
  50615. __expose();
  50616. const router2 = useRouter();
  50617. const { t: t2 } = useI18n();
  50618. const PageContainerRef = vue.ref();
  50619. const pagingRef1 = vue.ref(null);
  50620. const safeModalRef = vue.ref(null);
  50621. const cartPopupVisible = vue.ref(false);
  50622. const showSafeModal = vue.ref(false);
  50623. const historyPopupVisible = vue.ref(false);
  50624. const safeWord = vue.ref("");
  50625. const batchStakeValue = vue.ref(uni.getStorageSync("self_lhcBatchStakeCache") || "");
  50626. const userMoney = vue.ref(0);
  50627. const WebsocketData = useWebsocketDataStore();
  50628. const isFengpan = vue.ref(false);
  50629. const numberToZodiacMap = vue.ref({});
  50630. const zodiacToNumberMap = vue.ref({});
  50631. const currentIssue = vue.ref("");
  50632. const gameList = vue.ref([]);
  50633. const historyLotteryList = vue.ref([]);
  50634. const numberList = vue.ref([]);
  50635. const lhcGame = vue.ref({});
  50636. const activeGameIndex = vue.ref(0);
  50637. const activePlayIndex = vue.ref(0);
  50638. const selectedBets = vue.ref(uni.getStorageSync("self_lhc_selected_bets") || []);
  50639. vue.watch(selectedBets, (newVal) => {
  50640. uni.setStorageSync("self_lhc_selected_bets", newVal);
  50641. }, { deep: true });
  50642. const timeData = vue.ref({ days: 0, hours: "00", minutes: "00", seconds: "00" });
  50643. let countdownTimer = null;
  50644. let remainingSeconds = 0;
  50645. const currentGame = vue.computed(() => gameList.value[activeGameIndex.value] || {});
  50646. const currentPlayName = vue.computed(() => {
  50647. var _a2, _b2;
  50648. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.name) || "";
  50649. });
  50650. const currentPlayId = vue.computed(() => {
  50651. var _a2, _b2;
  50652. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.id) || "";
  50653. });
  50654. const lastDraw = vue.computed(() => historyLotteryList.value[0] || null);
  50655. const isBallStyle = vue.computed(() => {
  50656. const ballGames = [t2("特码"), t2("正码"), t2("正码特"), t2("正码1-6")];
  50657. return ballGames.includes(currentGame.value.name);
  50658. });
  50659. const totalBets = vue.computed(() => selectedBets.value.length);
  50660. const totalAmount = vue.computed(() => {
  50661. return selectedBets.value.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
  50662. });
  50663. const onQuery = async () => {
  50664. var _a2;
  50665. await initHowPlayData();
  50666. await fetchBalance();
  50667. (_a2 = pagingRef1.value) == null ? void 0 : _a2.complete([]);
  50668. };
  50669. const fetchBalance = async () => {
  50670. if (uni.getStorageSync("token")) {
  50671. try {
  50672. const res = await getBalance();
  50673. if (res.code === 1) {
  50674. userMoney.value = Number(res.data.money);
  50675. }
  50676. } catch (error) {
  50677. formatAppLog("error", "at pages/Tabbar/Entertainment/view/Digital/index.vue:377", "获取余额失败", error);
  50678. }
  50679. }
  50680. };
  50681. const initHowPlayData = async () => {
  50682. var _a2;
  50683. try {
  50684. const [infoRes, playRes] = await Promise.all([
  50685. getLHCInfo(),
  50686. getHowPlay({ type: 3 })
  50687. ]);
  50688. if (infoRes.code === 1 && infoRes.data) {
  50689. numberToZodiacMap.value = infoRes.data.number_to_zodiac || {};
  50690. zodiacToNumberMap.value = infoRes.data.zodiac_to_number || {};
  50691. }
  50692. if (playRes.code === 1 && playRes.data) {
  50693. lhcGame.value = playRes.data;
  50694. currentIssue.value = playRes.data.issue;
  50695. gameList.value = playRes.data.games || [];
  50696. if (playRes.data.history_lottery) {
  50697. historyLotteryList.value = playRes.data.history_lottery.map((item) => ({
  50698. ...item,
  50699. lottery_codes: item.lottery_codes.map((codeStr) => ({
  50700. code: codeStr,
  50701. color: calculateBallColor(codeStr),
  50702. zodiac: numberToZodiacMap.value[codeStr] || ""
  50703. }))
  50704. }));
  50705. }
  50706. if (((_a2 = playRes.data) == null ? void 0 : _a2.countdown) != 0) {
  50707. startCountdown(Number(playRes.data.countdown || 0));
  50708. }
  50709. await fetchPlayInfo();
  50710. }
  50711. } catch (error) {
  50712. formatAppLog("error", "at pages/Tabbar/Entertainment/view/Digital/index.vue:419", "获取数据失败", error);
  50713. }
  50714. };
  50715. vue.onMounted(() => {
  50716. initHowPlayData();
  50717. fetchBalance();
  50718. });
  50719. onShow(() => {
  50720. batchStakeValue.value = uni.getStorageSync("self_lhcBatchStakeCache") || "";
  50721. fetchBalance();
  50722. });
  50723. vue.onUnmounted(() => {
  50724. clearInterval(countdownTimer);
  50725. });
  50726. const handleGameClick = (index) => {
  50727. if (activeGameIndex.value === index)
  50728. return;
  50729. activeGameIndex.value = index;
  50730. activePlayIndex.value = 0;
  50731. fetchPlayInfo();
  50732. };
  50733. const handlePlayClick = (index) => {
  50734. if (activePlayIndex.value === index)
  50735. return;
  50736. activePlayIndex.value = index;
  50737. fetchPlayInfo();
  50738. };
  50739. const fetchPlayInfo = async () => {
  50740. if (!currentPlayId.value)
  50741. return;
  50742. numberList.value = [];
  50743. try {
  50744. const res = await getPlayInfo({ id: currentPlayId.value });
  50745. if (res.code === 1 && res.data) {
  50746. numberList.value = res.data.map((item) => {
  50747. let color2 = "";
  50748. if (isBallStyle.value || !isNaN(item.number)) {
  50749. color2 = calculateBallColor(item.number);
  50750. } else {
  50751. if (item.number.includes(t2("红")))
  50752. color2 = t2("红");
  50753. else if (item.number.includes(t2("蓝")))
  50754. color2 = t2("蓝");
  50755. else if (item.number.includes(t2("绿")))
  50756. color2 = t2("绿");
  50757. }
  50758. let tinyNums = [];
  50759. if (zodiacToNumberMap.value[item.number]) {
  50760. tinyNums = zodiacToNumberMap.value[item.number].map((nStr) => ({
  50761. number: nStr,
  50762. color: calculateBallColor(nStr)
  50763. }));
  50764. }
  50765. const isSelected = selectedBets.value.some((b) => b.id === item.id);
  50766. return {
  50767. id: item.id,
  50768. number: item.number,
  50769. odds: item.odds,
  50770. color: color2,
  50771. flag: isSelected,
  50772. numbers: tinyNums,
  50773. mininum: item.mininum,
  50774. maxinum: item.maxinum
  50775. };
  50776. });
  50777. }
  50778. } catch (error) {
  50779. formatAppLog("error", "at pages/Tabbar/Entertainment/view/Digital/index.vue:494", "获取玩法失败", error);
  50780. } finally {
  50781. uni.hideLoading();
  50782. }
  50783. };
  50784. const toggleSelect = (index) => {
  50785. if (isFengpan.value)
  50786. return;
  50787. const item = numberList.value[index];
  50788. item.flag = !item.flag;
  50789. if (item.flag) {
  50790. const amountToSet = batchStakeValue.value !== "" ? Number(batchStakeValue.value) : item.mininum !== void 0 ? item.mininum : 10;
  50791. selectedBets.value.push({
  50792. id: item.id,
  50793. gameName: currentGame.value.name,
  50794. playName: currentPlayName.value,
  50795. number: item.number,
  50796. odds: item.odds,
  50797. color: item.color,
  50798. mininum: item.mininum,
  50799. maxinum: item.maxinum,
  50800. amount: amountToSet
  50801. });
  50802. } else {
  50803. selectedBets.value = selectedBets.value.filter((b) => b.id !== item.id);
  50804. }
  50805. };
  50806. const quickSelectWave = (colorStr) => {
  50807. if (isFengpan.value)
  50808. return;
  50809. numberList.value.forEach((item, index) => {
  50810. const shouldSelect = item.color === colorStr;
  50811. if (item.flag !== shouldSelect) {
  50812. toggleSelect(index);
  50813. }
  50814. });
  50815. };
  50816. const randomSelect = () => {
  50817. if (isFengpan.value)
  50818. return;
  50819. const unselectedIndices = [];
  50820. numberList.value.forEach((item, index) => {
  50821. if (!item.flag) {
  50822. unselectedIndices.push(index);
  50823. }
  50824. });
  50825. if (unselectedIndices.length > 0) {
  50826. const randomPos = Math.floor(Math.random() * unselectedIndices.length);
  50827. const targetIndex = unselectedIndices[randomPos];
  50828. toggleSelect(targetIndex);
  50829. } else {
  50830. uni.showToast({ title: t2("所有选项已全选"), icon: "none" });
  50831. }
  50832. };
  50833. const clearSelect = () => {
  50834. numberList.value.forEach((item) => item.flag = false);
  50835. selectedBets.value = [];
  50836. cartPopupVisible.value = false;
  50837. };
  50838. const removeSelected = (id) => {
  50839. selectedBets.value = selectedBets.value.filter((b) => b.id !== id);
  50840. const visibleItem = numberList.value.find((n) => n.id === id);
  50841. if (visibleItem) {
  50842. visibleItem.flag = false;
  50843. }
  50844. if (selectedBets.value.length === 0) {
  50845. cartPopupVisible.value = false;
  50846. }
  50847. };
  50848. const applyBatchStake = () => {
  50849. let val = batchStakeValue.value;
  50850. uni.setStorageSync("self_lhcBatchStakeCache", val);
  50851. if (val === "") {
  50852. selectedBets.value.forEach((item) => {
  50853. item.amount = "";
  50854. });
  50855. return;
  50856. }
  50857. let numVal = Number(val);
  50858. if (isNaN(numVal) || numVal <= 0) {
  50859. return uni.showToast({ title: t2("请输入大于0的有效金额"), icon: "none" });
  50860. }
  50861. selectedBets.value.forEach((item) => {
  50862. let itemVal = numVal;
  50863. const min = item.mininum !== void 0 ? item.mininum : 10;
  50864. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  50865. if (itemVal < min) {
  50866. itemVal = min;
  50867. }
  50868. if (itemVal > max) {
  50869. itemVal = max;
  50870. }
  50871. if (itemVal > userMoney.value) {
  50872. itemVal = userMoney.value;
  50873. uni.showToast({ title: t2("余额不足"), icon: "none" });
  50874. }
  50875. item.amount = itemVal;
  50876. });
  50877. };
  50878. const validateAmount = (item) => {
  50879. const val = Number(item.amount);
  50880. const min = item.mininum !== void 0 ? item.mininum : 10;
  50881. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  50882. if (isNaN(val) || val <= 0) {
  50883. item.amount = "";
  50884. } else if (val < min) {
  50885. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  50886. item.amount = min;
  50887. } else if (val > max) {
  50888. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  50889. item.amount = max;
  50890. } else if (val > userMoney.value) {
  50891. uni.showToast({ title: t2("余额不足"), icon: "none" });
  50892. item.amount = userMoney.value;
  50893. }
  50894. };
  50895. const changeAmount = (item, delta) => {
  50896. let val = Number(item.amount) || 0;
  50897. val += delta;
  50898. const min = item.mininum !== void 0 ? item.mininum : 10;
  50899. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  50900. if (val < 0) {
  50901. val = 0;
  50902. item.amount = "";
  50903. return;
  50904. }
  50905. if (val > 0 && val < min) {
  50906. val = min;
  50907. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  50908. } else if (val > max) {
  50909. val = max;
  50910. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  50911. } else if (val > userMoney.value) {
  50912. val = userMoney.value;
  50913. uni.showToast({ title: t2("余额不足"), icon: "none" });
  50914. }
  50915. item.amount = val || "";
  50916. };
  50917. const openCartPopup = () => {
  50918. if (totalBets.value === 0)
  50919. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  50920. cartPopupVisible.value = true;
  50921. };
  50922. const handleOneClickBet = () => {
  50923. if (!uni.getStorageSync("token")) {
  50924. uni.showToast({
  50925. title: t2("请先登录"),
  50926. icon: "none"
  50927. });
  50928. return;
  50929. }
  50930. if (isFengpan.value)
  50931. return;
  50932. if (totalBets.value === 0) {
  50933. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  50934. }
  50935. if (totalAmount.value > userMoney.value) {
  50936. return uni.showToast({ title: t2("总投注金额超过可用余额"), icon: "none" });
  50937. }
  50938. const invalidItems = selectedBets.value.filter((item) => {
  50939. const val = Number(item.amount);
  50940. const min = item.mininum !== void 0 ? item.mininum : 10;
  50941. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  50942. return !val || val <= 0 || val < min || val > max || val > userMoney.value;
  50943. });
  50944. if (invalidItems.length > 0) {
  50945. if (!cartPopupVisible.value) {
  50946. cartPopupVisible.value = true;
  50947. }
  50948. return uni.showToast({ title: t2("请检查下注金额、限额及余额"), icon: "none" });
  50949. }
  50950. safeWord.value = "";
  50951. cartPopupVisible.value = false;
  50952. setTimeout(() => {
  50953. confirmSubmitBet();
  50954. }, 300);
  50955. };
  50956. const confirmSubmitBet = async () => {
  50957. uni.showModal({
  50958. title: t2("提示"),
  50959. content: t2("确认提交吗?"),
  50960. success: async (res) => {
  50961. var _a2, _b2, _c;
  50962. if (res.confirm) {
  50963. const payloadData = selectedBets.value.map((item) => ({
  50964. id: item.id,
  50965. amount: Number(item.amount)
  50966. }));
  50967. try {
  50968. const res2 = await submitBetCart({ data: payloadData, safe_word: safeWord.value, type: 3 });
  50969. if (res2.code === 1) {
  50970. showSafeModal.value = false;
  50971. clearSelect();
  50972. fetchBalance();
  50973. (_a2 = PageContainerRef.value) == null ? void 0 : _a2.getData();
  50974. } else {
  50975. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  50976. }
  50977. } catch (error) {
  50978. (_c = safeModalRef.value) == null ? void 0 : _c.clearLoading();
  50979. }
  50980. }
  50981. }
  50982. });
  50983. };
  50984. const goToOrder = () => {
  50985. router2.push({ name: "AllHistory", query: { tab: 2 } });
  50986. };
  50987. const startCountdown = (seconds) => {
  50988. remainingSeconds = seconds;
  50989. clearInterval(countdownTimer);
  50990. countdownTimer = setInterval(() => {
  50991. formatAppLog("log", "at pages/Tabbar/Entertainment/view/Digital/index.vue:748", remainingSeconds, 622);
  50992. if (remainingSeconds > 0) {
  50993. remainingSeconds--;
  50994. const d = Math.floor(remainingSeconds / 86400);
  50995. const h = Math.floor(remainingSeconds % 86400 / 3600);
  50996. const m = Math.floor(remainingSeconds % 3600 / 60);
  50997. const s = remainingSeconds % 60;
  50998. timeData.value.days = d;
  50999. timeData.value.hours = h.toString().padStart(2, "0");
  51000. timeData.value.minutes = m.toString().padStart(2, "0");
  51001. timeData.value.seconds = s.toString().padStart(2, "0");
  51002. } else {
  51003. clearInterval(countdownTimer);
  51004. initHowPlayData();
  51005. }
  51006. }, 1e3);
  51007. };
  51008. const calculateBallColor = (numStr) => {
  51009. const num = parseInt(numStr, 10);
  51010. if (isNaN(num))
  51011. return "";
  51012. const reds = [1, 2, 7, 8, 12, 13, 18, 19, 23, 24, 29, 30, 34, 35, 40, 45, 46];
  51013. const blues = [3, 4, 9, 10, 14, 15, 20, 25, 26, 31, 36, 37, 41, 42, 47, 48];
  51014. const greens = [5, 6, 11, 16, 17, 21, 22, 27, 28, 32, 33, 38, 39, 43, 44, 49];
  51015. if (reds.includes(num))
  51016. return t2("红");
  51017. if (blues.includes(num))
  51018. return t2("蓝");
  51019. if (greens.includes(num))
  51020. return t2("绿");
  51021. return "";
  51022. };
  51023. const getBgColorClass = (colorName) => {
  51024. if (colorName === t2("红"))
  51025. return "bg-red";
  51026. if (colorName === t2("蓝"))
  51027. return "bg-blue";
  51028. if (colorName === t2("绿"))
  51029. return "bg-green";
  51030. return "bg-gray";
  51031. };
  51032. const getTextColorClass = (colorName) => {
  51033. if (colorName === t2("红"))
  51034. return "text-red";
  51035. if (colorName === t2("蓝"))
  51036. return "text-blue";
  51037. if (colorName === t2("绿"))
  51038. return "text-green";
  51039. return "";
  51040. };
  51041. vue.watch(() => WebsocketData.globalData, (data) => {
  51042. const res = typeof data === "string" ? JSON.parse(data) : data;
  51043. if (res && res.type === "self_lhc_fengpan") {
  51044. isFengpan.value = true;
  51045. } else if (res && res.type === "self_lhc_kaipan") {
  51046. isFengpan.value = false;
  51047. }
  51048. });
  51049. gameLotteryStatus({ type: 5 }).then((res) => {
  51050. if (res.data.is_kaipan == 0) {
  51051. isFengpan.value = true;
  51052. } else if (res.data.is_kaipan == 1) {
  51053. isFengpan.value = false;
  51054. }
  51055. });
  51056. const __returned__ = { router: router2, t: t2, PageContainerRef, pagingRef1, safeModalRef, cartPopupVisible, showSafeModal, historyPopupVisible, safeWord, batchStakeValue, userMoney, WebsocketData, isFengpan, numberToZodiacMap, zodiacToNumberMap, currentIssue, gameList, historyLotteryList, numberList, lhcGame, activeGameIndex, activePlayIndex, selectedBets, timeData, get countdownTimer() {
  51057. return countdownTimer;
  51058. }, set countdownTimer(v) {
  51059. countdownTimer = v;
  51060. }, get remainingSeconds() {
  51061. return remainingSeconds;
  51062. }, set remainingSeconds(v) {
  51063. remainingSeconds = v;
  51064. }, currentGame, currentPlayName, currentPlayId, lastDraw, isBallStyle, totalBets, totalAmount, onQuery, fetchBalance, initHowPlayData, handleGameClick, handlePlayClick, fetchPlayInfo, toggleSelect, quickSelectWave, randomSelect, clearSelect, removeSelected, applyBatchStake, validateAmount, changeAmount, openCartPopup, handleOneClickBet, confirmSubmitBet, goToOrder, startCountdown, calculateBallColor, getBgColorClass, getTextColorClass, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, watch: vue.watch, get useI18n() {
  51065. return useI18n;
  51066. }, get onShow() {
  51067. return onShow;
  51068. }, get getHowPlay() {
  51069. return getHowPlay;
  51070. }, get getLHCInfo() {
  51071. return getLHCInfo;
  51072. }, get getPlayInfo() {
  51073. return getPlayInfo;
  51074. }, get submitBetCart() {
  51075. return submitBetCart;
  51076. }, get getBalance() {
  51077. return getBalance;
  51078. }, get useWebsocketDataStore() {
  51079. return useWebsocketDataStore;
  51080. }, get gameLotteryStatus() {
  51081. return gameLotteryStatus;
  51082. } };
  51083. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  51084. return __returned__;
  51085. }
  51086. };
  51087. function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
  51088. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  51089. const _component_u_icon = __unplugin_components_0$5;
  51090. const _component_u_button = __unplugin_components_2$1;
  51091. const _component_u_popup = __unplugin_components_2$3;
  51092. const _component_u_input = __unplugin_components_3$2;
  51093. const _component_u_modal = __unplugin_components_4$3;
  51094. const _component_PageContainer = PageContainer;
  51095. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  51096. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  51097. default: vue.withCtx(() => [
  51098. vue.createVNode(
  51099. _component_PageContainer,
  51100. {
  51101. ref: "PageContainerRef",
  51102. navTitle: "澳门六合彩"
  51103. },
  51104. {
  51105. default: vue.withCtx(() => [
  51106. vue.createVNode(
  51107. _component_z_paging,
  51108. {
  51109. ref: "pagingRef1",
  51110. onQuery: $setup.onQuery,
  51111. fixed: false,
  51112. "refresher-only": true,
  51113. "refresher-enabled": true,
  51114. "loading-more-enabled": false,
  51115. "auto-show-back-to-top": true
  51116. },
  51117. {
  51118. refresher: vue.withCtx(() => [
  51119. vue.createElementVNode("view", { class: "refresher-ui" }, [
  51120. vue.createElementVNode("view", { class: "spin-loader" }),
  51121. vue.createElementVNode(
  51122. "text",
  51123. { class: "refresher-text" },
  51124. vue.toDisplayString($setup.t("获取最新数据...")),
  51125. 1
  51126. /* TEXT */
  51127. )
  51128. ])
  51129. ]),
  51130. default: vue.withCtx(() => [
  51131. vue.createElementVNode("view", { class: "app-digital-container" }, [
  51132. vue.createElementVNode("view", { class: "calc-card lottery-dashboard" }, [
  51133. vue.createElementVNode("view", { class: "dash-top" }, [
  51134. vue.createElementVNode("view", { class: "lottery-title" }, [
  51135. vue.createElementVNode("text", { class: "issue-text" }, [
  51136. vue.createTextVNode(
  51137. vue.toDisplayString($setup.t("距")) + " ",
  51138. 1
  51139. /* TEXT */
  51140. ),
  51141. vue.createElementVNode(
  51142. "text",
  51143. { class: "highlight" },
  51144. vue.toDisplayString($setup.lhcGame.next_issue),
  51145. 1
  51146. /* TEXT */
  51147. ),
  51148. vue.createTextVNode(
  51149. " " + vue.toDisplayString($setup.t("期截止")),
  51150. 1
  51151. /* TEXT */
  51152. )
  51153. ])
  51154. ]),
  51155. vue.createElementVNode("view", { class: "timer-box" }, [
  51156. !$setup.isFengpan ? (vue.openBlock(), vue.createElementBlock(
  51157. vue.Fragment,
  51158. { key: 0 },
  51159. [
  51160. $setup.timeData.days > 0 ? (vue.openBlock(), vue.createElementBlock(
  51161. vue.Fragment,
  51162. { key: 0 },
  51163. [
  51164. vue.createElementVNode(
  51165. "view",
  51166. { class: "digit" },
  51167. vue.toDisplayString($setup.timeData.days),
  51168. 1
  51169. /* TEXT */
  51170. ),
  51171. vue.createElementVNode(
  51172. "text",
  51173. { class: "colon" },
  51174. vue.toDisplayString($setup.t("天")),
  51175. 1
  51176. /* TEXT */
  51177. )
  51178. ],
  51179. 64
  51180. /* STABLE_FRAGMENT */
  51181. )) : vue.createCommentVNode("v-if", true),
  51182. vue.createElementVNode(
  51183. "view",
  51184. { class: "digit" },
  51185. vue.toDisplayString($setup.timeData.hours),
  51186. 1
  51187. /* TEXT */
  51188. ),
  51189. vue.createElementVNode("text", { class: "colon" }, ":"),
  51190. vue.createElementVNode(
  51191. "view",
  51192. { class: "digit" },
  51193. vue.toDisplayString($setup.timeData.minutes),
  51194. 1
  51195. /* TEXT */
  51196. ),
  51197. vue.createElementVNode("text", { class: "colon" }, ":"),
  51198. vue.createElementVNode(
  51199. "view",
  51200. { class: "digit" },
  51201. vue.toDisplayString($setup.timeData.seconds),
  51202. 1
  51203. /* TEXT */
  51204. )
  51205. ],
  51206. 64
  51207. /* STABLE_FRAGMENT */
  51208. )) : (vue.openBlock(), vue.createElementBlock(
  51209. "text",
  51210. {
  51211. key: 1,
  51212. class: "fengpan-text"
  51213. },
  51214. vue.toDisplayString($setup.t("封盘中")),
  51215. 1
  51216. /* TEXT */
  51217. ))
  51218. ])
  51219. ]),
  51220. $setup.lastDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  51221. key: 0,
  51222. class: "dash-bottom"
  51223. }, [
  51224. vue.createElementVNode("view", { class: "result-header" }, [
  51225. vue.createElementVNode(
  51226. "text",
  51227. { class: "r-title" },
  51228. vue.toDisplayString($setup.t("第")) + " " + vue.toDisplayString($setup.lhcGame.issue) + " " + vue.toDisplayString($setup.t("期开奖")),
  51229. 1
  51230. /* TEXT */
  51231. ),
  51232. vue.createElementVNode("view", { class: "actions" }, [
  51233. vue.createElementVNode(
  51234. "text",
  51235. {
  51236. class: "action-btn tmc",
  51237. onClick: _cache[0] || (_cache[0] = ($event) => $setup.historyPopupVisible = true)
  51238. },
  51239. vue.toDisplayString($setup.t("近期开奖")),
  51240. 1
  51241. /* TEXT */
  51242. ),
  51243. vue.createElementVNode("text", { class: "action-divider" }, "|"),
  51244. vue.createElementVNode(
  51245. "text",
  51246. {
  51247. class: "action-btn tmc",
  51248. onClick: $setup.goToOrder
  51249. },
  51250. vue.toDisplayString($setup.t("购彩记录")),
  51251. 1
  51252. /* TEXT */
  51253. )
  51254. ])
  51255. ]),
  51256. vue.createElementVNode("view", { class: "balls-display" }, [
  51257. (vue.openBlock(true), vue.createElementBlock(
  51258. vue.Fragment,
  51259. null,
  51260. vue.renderList($setup.lastDraw.lottery_codes.slice(0, 6), (ball, idx) => {
  51261. return vue.openBlock(), vue.createElementBlock("view", {
  51262. class: "ball-group",
  51263. key: "norm_" + idx
  51264. }, [
  51265. vue.createElementVNode(
  51266. "view",
  51267. {
  51268. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(ball.color)])
  51269. },
  51270. [
  51271. vue.createElementVNode(
  51272. "view",
  51273. { class: "ball-inner" },
  51274. vue.toDisplayString(ball.code),
  51275. 1
  51276. /* TEXT */
  51277. )
  51278. ],
  51279. 2
  51280. /* CLASS */
  51281. ),
  51282. vue.createElementVNode(
  51283. "text",
  51284. { class: "l-zodiac" },
  51285. vue.toDisplayString(ball.zodiac),
  51286. 1
  51287. /* TEXT */
  51288. )
  51289. ]);
  51290. }),
  51291. 128
  51292. /* KEYED_FRAGMENT */
  51293. )),
  51294. vue.createElementVNode("text", { class: "plus-icon" }, "+"),
  51295. $setup.lastDraw.lottery_codes[6] ? (vue.openBlock(), vue.createElementBlock("view", {
  51296. key: 0,
  51297. class: "ball-group special"
  51298. }, [
  51299. vue.createElementVNode(
  51300. "view",
  51301. {
  51302. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass($setup.lastDraw.lottery_codes[6].color)])
  51303. },
  51304. [
  51305. vue.createElementVNode(
  51306. "view",
  51307. { class: "ball-inner" },
  51308. vue.toDisplayString($setup.lastDraw.lottery_codes[6].code),
  51309. 1
  51310. /* TEXT */
  51311. )
  51312. ],
  51313. 2
  51314. /* CLASS */
  51315. ),
  51316. vue.createElementVNode(
  51317. "text",
  51318. { class: "l-zodiac" },
  51319. vue.toDisplayString($setup.lastDraw.lottery_codes[6].zodiac),
  51320. 1
  51321. /* TEXT */
  51322. )
  51323. ])) : vue.createCommentVNode("v-if", true)
  51324. ])
  51325. ])) : vue.createCommentVNode("v-if", true)
  51326. ]),
  51327. $setup.gameList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  51328. key: 0,
  51329. class: "play-tabs-container"
  51330. }, [
  51331. vue.createElementVNode("scroll-view", {
  51332. "scroll-x": "",
  51333. class: "scroll-x-box",
  51334. "show-scrollbar": false
  51335. }, [
  51336. vue.createElementVNode("view", { class: "main-tabs" }, [
  51337. (vue.openBlock(true), vue.createElementBlock(
  51338. vue.Fragment,
  51339. null,
  51340. vue.renderList($setup.gameList, (game, index) => {
  51341. return vue.openBlock(), vue.createElementBlock("view", {
  51342. class: vue.normalizeClass(["play-tab", { "is-active": $setup.activeGameIndex === index }]),
  51343. key: game.id,
  51344. onClick: ($event) => $setup.handleGameClick(index)
  51345. }, vue.toDisplayString(game.name), 11, ["onClick"]);
  51346. }),
  51347. 128
  51348. /* KEYED_FRAGMENT */
  51349. ))
  51350. ])
  51351. ]),
  51352. $setup.currentGame.gameplay && $setup.currentGame.gameplay.length > 1 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  51353. key: 0,
  51354. "scroll-x": "",
  51355. class: "scroll-x-box",
  51356. "show-scrollbar": false
  51357. }, [
  51358. vue.createElementVNode("view", { class: "sub-tabs" }, [
  51359. (vue.openBlock(true), vue.createElementBlock(
  51360. vue.Fragment,
  51361. null,
  51362. vue.renderList($setup.currentGame.gameplay, (play, index) => {
  51363. return vue.openBlock(), vue.createElementBlock("view", {
  51364. class: vue.normalizeClass(["sub-tab", { "is-active": $setup.activePlayIndex === index }]),
  51365. key: play.id,
  51366. onClick: ($event) => $setup.handlePlayClick(index)
  51367. }, vue.toDisplayString(play.name), 11, ["onClick"]);
  51368. }),
  51369. 128
  51370. /* KEYED_FRAGMENT */
  51371. ))
  51372. ])
  51373. ])) : vue.createCommentVNode("v-if", true)
  51374. ])) : vue.createCommentVNode("v-if", true),
  51375. vue.createElementVNode("view", { class: "play-grid-wrap" }, [
  51376. vue.createElementVNode("view", { class: "play-group-card" }, [
  51377. [$setup.t("特码"), $setup.t("正码"), $setup.t("正码特")].includes($setup.currentGame.name) ? (vue.openBlock(), vue.createElementBlock("view", {
  51378. key: 0,
  51379. class: "calc-tabs quick-actions"
  51380. }, [
  51381. vue.createElementVNode(
  51382. "view",
  51383. {
  51384. class: vue.normalizeClass(["c-tab red", { "is-disabled": $setup.isFengpan }]),
  51385. onClick: _cache[1] || (_cache[1] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("红")))
  51386. },
  51387. vue.toDisplayString($setup.t("红波")),
  51388. 3
  51389. /* TEXT, CLASS */
  51390. ),
  51391. vue.createElementVNode(
  51392. "view",
  51393. {
  51394. class: vue.normalizeClass(["c-tab blue", { "is-disabled": $setup.isFengpan }]),
  51395. onClick: _cache[2] || (_cache[2] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("蓝")))
  51396. },
  51397. vue.toDisplayString($setup.t("蓝波")),
  51398. 3
  51399. /* TEXT, CLASS */
  51400. ),
  51401. vue.createElementVNode(
  51402. "view",
  51403. {
  51404. class: vue.normalizeClass(["c-tab green", { "is-disabled": $setup.isFengpan }]),
  51405. onClick: _cache[3] || (_cache[3] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("绿")))
  51406. },
  51407. vue.toDisplayString($setup.t("绿波")),
  51408. 3
  51409. /* TEXT, CLASS */
  51410. )
  51411. ])) : vue.createCommentVNode("v-if", true),
  51412. vue.createElementVNode(
  51413. "view",
  51414. {
  51415. class: vue.normalizeClass(["number-grid", $setup.isBallStyle ? "is-ball-grid" : "is-box-grid"])
  51416. },
  51417. [
  51418. (vue.openBlock(true), vue.createElementBlock(
  51419. vue.Fragment,
  51420. null,
  51421. vue.renderList($setup.numberList, (item, index) => {
  51422. return vue.openBlock(), vue.createElementBlock("view", {
  51423. class: vue.normalizeClass(["rule-btn num-item", { "is-active": item.flag, "is-disabled": $setup.isFengpan }]),
  51424. key: item.id,
  51425. onClick: ($event) => !$setup.isFengpan && $setup.toggleSelect(index)
  51426. }, [
  51427. $setup.isBallStyle ? (vue.openBlock(), vue.createElementBlock(
  51428. vue.Fragment,
  51429. { key: 0 },
  51430. [
  51431. vue.createElementVNode(
  51432. "view",
  51433. {
  51434. class: vue.normalizeClass(["ball-wrapper", $setup.getBgColorClass(item.color)])
  51435. },
  51436. [
  51437. vue.createElementVNode(
  51438. "text",
  51439. { class: "ball-text" },
  51440. vue.toDisplayString(item.number),
  51441. 1
  51442. /* TEXT */
  51443. )
  51444. ],
  51445. 2
  51446. /* CLASS */
  51447. ),
  51448. vue.createElementVNode(
  51449. "text",
  51450. { class: "odds-text" },
  51451. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  51452. 1
  51453. /* TEXT */
  51454. )
  51455. ],
  51456. 64
  51457. /* STABLE_FRAGMENT */
  51458. )) : (vue.openBlock(), vue.createElementBlock(
  51459. vue.Fragment,
  51460. { key: 1 },
  51461. [
  51462. vue.createElementVNode("view", { class: "box-top" }, [
  51463. vue.createElementVNode(
  51464. "text",
  51465. {
  51466. class: vue.normalizeClass(["box-name", $setup.getTextColorClass(item.color)])
  51467. },
  51468. vue.toDisplayString(item.number),
  51469. 3
  51470. /* TEXT, CLASS */
  51471. ),
  51472. vue.createElementVNode(
  51473. "text",
  51474. { class: "box-odds" },
  51475. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  51476. 1
  51477. /* TEXT */
  51478. )
  51479. ]),
  51480. item.numbers && item.numbers.length ? (vue.openBlock(), vue.createElementBlock("view", {
  51481. key: 0,
  51482. class: "box-bottom"
  51483. }, [
  51484. (vue.openBlock(true), vue.createElementBlock(
  51485. vue.Fragment,
  51486. null,
  51487. vue.renderList(item.numbers, (numObj, nIdx) => {
  51488. return vue.openBlock(), vue.createElementBlock(
  51489. "text",
  51490. {
  51491. key: nIdx,
  51492. class: vue.normalizeClass(["mini-num", $setup.getTextColorClass(numObj.color)])
  51493. },
  51494. vue.toDisplayString(numObj.number),
  51495. 3
  51496. /* TEXT, CLASS */
  51497. );
  51498. }),
  51499. 128
  51500. /* KEYED_FRAGMENT */
  51501. ))
  51502. ])) : vue.createCommentVNode("v-if", true)
  51503. ],
  51504. 64
  51505. /* STABLE_FRAGMENT */
  51506. ))
  51507. ], 10, ["onClick"]);
  51508. }),
  51509. 128
  51510. /* KEYED_FRAGMENT */
  51511. ))
  51512. ],
  51513. 2
  51514. /* CLASS */
  51515. )
  51516. ])
  51517. ]),
  51518. vue.createElementVNode("view", { style: { "height": "80px" } })
  51519. ]),
  51520. vue.createElementVNode("view", { class: "digital-bottom" })
  51521. ]),
  51522. _: 1
  51523. /* STABLE */
  51524. },
  51525. 512
  51526. /* NEED_PATCH */
  51527. ),
  51528. !$setup.cartPopupVisible ? (vue.openBlock(), vue.createElementBlock("view", {
  51529. key: 0,
  51530. class: "sticky-header-bar",
  51531. onClick: $setup.openCartPopup
  51532. }, [
  51533. vue.createElementVNode("view", { class: "betting-sheet-header" }, [
  51534. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  51535. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  51536. "view",
  51537. {
  51538. key: 0,
  51539. class: "sheet-badge"
  51540. },
  51541. vue.toDisplayString($setup.totalBets),
  51542. 1
  51543. /* TEXT */
  51544. )) : vue.createCommentVNode("v-if", true),
  51545. vue.createElementVNode(
  51546. "text",
  51547. { class: "header-text" },
  51548. vue.toDisplayString($setup.t("已选注单")),
  51549. 1
  51550. /* TEXT */
  51551. ),
  51552. vue.createVNode(_component_u_icon, {
  51553. name: "arrow-up",
  51554. color: "#666"
  51555. })
  51556. ]),
  51557. vue.createElementVNode("view", {
  51558. class: "betting-sheet-header-right",
  51559. style: { "display": "flex", "align-items": "center" }
  51560. }, [
  51561. vue.createElementVNode(
  51562. "view",
  51563. {
  51564. class: vue.normalizeClass(["btn-action", { "is-disabled": $setup.isFengpan }]),
  51565. style: { "margin-right": "10px", "background": "#6EC149", "color": "#fff" },
  51566. onClick: _cache[4] || (_cache[4] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.randomSelect(), ["stop"]))
  51567. },
  51568. vue.toDisplayString($setup.t("机选")),
  51569. 3
  51570. /* TEXT, CLASS */
  51571. ),
  51572. vue.createElementVNode(
  51573. "view",
  51574. {
  51575. class: vue.normalizeClass(["btn-action bet-btn", { "is-disabled": $setup.isFengpan }]),
  51576. style: { "background-color": "#f8b932", "color": "#fff", "border-color": "#f8b932" },
  51577. onClick: _cache[5] || (_cache[5] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.openCartPopup(), ["stop"]))
  51578. },
  51579. vue.toDisplayString($setup.t("下注")),
  51580. 3
  51581. /* TEXT, CLASS */
  51582. )
  51583. ])
  51584. ])
  51585. ])) : vue.createCommentVNode("v-if", true),
  51586. vue.createVNode(_component_u_popup, {
  51587. modelValue: $setup.cartPopupVisible,
  51588. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.cartPopupVisible = $event),
  51589. mode: "bottom",
  51590. "border-radius": "24",
  51591. mask: true,
  51592. "mask-close-able": true,
  51593. "z-index": 990,
  51594. "safe-area-inset-bottom": true,
  51595. height: "75%"
  51596. }, {
  51597. default: vue.withCtx(() => [
  51598. vue.createElementVNode("view", { class: "popup-cart-layout" }, [
  51599. vue.createElementVNode("view", { class: "popup-fixed-header" }, [
  51600. vue.createElementVNode("view", {
  51601. class: "betting-sheet-header border-bottom",
  51602. onClick: _cache[6] || (_cache[6] = ($event) => $setup.cartPopupVisible = false)
  51603. }, [
  51604. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  51605. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  51606. "view",
  51607. {
  51608. key: 0,
  51609. class: "sheet-badge"
  51610. },
  51611. vue.toDisplayString($setup.totalBets),
  51612. 1
  51613. /* TEXT */
  51614. )) : vue.createCommentVNode("v-if", true),
  51615. vue.createElementVNode(
  51616. "text",
  51617. { class: "header-text" },
  51618. vue.toDisplayString($setup.t("已选注单明细")),
  51619. 1
  51620. /* TEXT */
  51621. ),
  51622. vue.createVNode(_component_u_icon, {
  51623. name: "arrow-down",
  51624. color: "#666"
  51625. })
  51626. ]),
  51627. vue.createElementVNode("view", {
  51628. class: "betting-sheet-header-right",
  51629. style: { "display": "flex", "align-items": "center" }
  51630. }, [
  51631. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  51632. key: 0,
  51633. class: "settings-btn",
  51634. onClick: vue.withModifiers($setup.clearSelect, ["stop"])
  51635. }, [
  51636. vue.createElementVNode(
  51637. "text",
  51638. {
  51639. style: { "font-size": "12px" },
  51640. class: "tmc"
  51641. },
  51642. vue.toDisplayString($setup.t("清空")),
  51643. 1
  51644. /* TEXT */
  51645. )
  51646. ])) : vue.createCommentVNode("v-if", true)
  51647. ])
  51648. ]),
  51649. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  51650. key: 0,
  51651. class: "batch-stake-box"
  51652. }, [
  51653. vue.createElementVNode(
  51654. "text",
  51655. { class: "batch-label" },
  51656. vue.toDisplayString($setup.t("批量设置金额")),
  51657. 1
  51658. /* TEXT */
  51659. ),
  51660. vue.createElementVNode("view", { class: "batch-input-wrapper" }, [
  51661. vue.withDirectives(vue.createElementVNode("input", {
  51662. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.batchStakeValue = $event),
  51663. class: "batch-input",
  51664. placeholder: $setup.t("请输入金额"),
  51665. type: "number"
  51666. }, null, 8, ["placeholder"]), [
  51667. [vue.vModelText, $setup.batchStakeValue]
  51668. ])
  51669. ]),
  51670. vue.createVNode(_component_u_button, {
  51671. size: "mini",
  51672. type: "primary",
  51673. style: { "margin-left": "10px" },
  51674. onClick: $setup.applyBatchStake
  51675. }, {
  51676. default: vue.withCtx(() => [
  51677. vue.createTextVNode(
  51678. vue.toDisplayString($setup.t("确定")),
  51679. 1
  51680. /* TEXT */
  51681. )
  51682. ]),
  51683. _: 1
  51684. /* STABLE */
  51685. })
  51686. ])) : vue.createCommentVNode("v-if", true)
  51687. ]),
  51688. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  51689. key: 0,
  51690. "scroll-y": "true",
  51691. class: "scroll-view-container"
  51692. }, [
  51693. vue.createElementVNode("view", { class: "bet-list" }, [
  51694. (vue.openBlock(true), vue.createElementBlock(
  51695. vue.Fragment,
  51696. null,
  51697. vue.renderList($setup.selectedBets, (item) => {
  51698. return vue.openBlock(), vue.createElementBlock("view", {
  51699. class: "bet-item",
  51700. key: item.id
  51701. }, [
  51702. vue.createElementVNode("view", { class: "item-header" }, [
  51703. vue.createElementVNode("text", { class: "team-names" }, [
  51704. vue.createTextVNode(
  51705. vue.toDisplayString(item.playName) + " - ",
  51706. 1
  51707. /* TEXT */
  51708. ),
  51709. vue.createElementVNode(
  51710. "text",
  51711. {
  51712. class: vue.normalizeClass($setup.getTextColorClass(item.color))
  51713. },
  51714. vue.toDisplayString(item.number),
  51715. 3
  51716. /* TEXT, CLASS */
  51717. )
  51718. ]),
  51719. vue.createElementVNode("view", {
  51720. class: "close-btn",
  51721. onClick: vue.withModifiers(($event) => $setup.removeSelected(item.id), ["stop"])
  51722. }, [
  51723. vue.createVNode(_component_u_icon, {
  51724. name: "close",
  51725. color: "#666",
  51726. size: "16"
  51727. })
  51728. ], 8, ["onClick"])
  51729. ]),
  51730. vue.createElementVNode("view", { class: "item-info" }, [
  51731. vue.createElementVNode("view", { class: "bet-type" }, [
  51732. vue.createElementVNode(
  51733. "text",
  51734. { class: "type-name" },
  51735. vue.toDisplayString($setup.t("赔率")),
  51736. 1
  51737. /* TEXT */
  51738. ),
  51739. vue.createElementVNode(
  51740. "text",
  51741. {
  51742. class: "limit-text",
  51743. style: { "margin-left": "10px", "font-size": "12px", "color": "#999" }
  51744. },
  51745. vue.toDisplayString($setup.t("单注限额")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10) + " ~ " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  51746. 1
  51747. /* TEXT */
  51748. )
  51749. ]),
  51750. vue.createElementVNode("view", { class: "odds-box" }, [
  51751. vue.createElementVNode(
  51752. "text",
  51753. { class: "odds-val" },
  51754. "@" + vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  51755. 1
  51756. /* TEXT */
  51757. )
  51758. ])
  51759. ]),
  51760. vue.createElementVNode(
  51761. "view",
  51762. {
  51763. class: vue.normalizeClass(["stake-input-box", { "error-border": item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 || item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) || item.maxinum !== void 0 && Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) || Number(item.amount) > $setup.userMoney }])
  51764. },
  51765. [
  51766. vue.createElementVNode("view", {
  51767. class: "stepper-btn",
  51768. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, -10), ["stop"])
  51769. }, "-", 8, ["onClick"]),
  51770. vue.withDirectives(vue.createElementVNode("input", {
  51771. "onUpdate:modelValue": ($event) => item.amount = $event,
  51772. type: "number",
  51773. class: "stake-input",
  51774. placeholder: $setup.t("输入本金"),
  51775. onBlur: ($event) => $setup.validateAmount(item)
  51776. }, null, 40, ["onUpdate:modelValue", "placeholder", "onBlur"]), [
  51777. [vue.vModelText, item.amount]
  51778. ]),
  51779. vue.createElementVNode("view", {
  51780. class: "stepper-btn",
  51781. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, 10), ["stop"])
  51782. }, "+", 8, ["onClick"])
  51783. ],
  51784. 2
  51785. /* CLASS */
  51786. ),
  51787. vue.createElementVNode("view", { class: "item-footer" }, [
  51788. item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 ? (vue.openBlock(), vue.createElementBlock(
  51789. "view",
  51790. {
  51791. key: 0,
  51792. class: "err-msg"
  51793. },
  51794. vue.toDisplayString($setup.t("金额不能小于等于0")),
  51795. 1
  51796. /* TEXT */
  51797. )) : item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) ? (vue.openBlock(), vue.createElementBlock(
  51798. "view",
  51799. {
  51800. key: 1,
  51801. class: "err-msg"
  51802. },
  51803. vue.toDisplayString($setup.t("单注最低限制为")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10),
  51804. 1
  51805. /* TEXT */
  51806. )) : Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) ? (vue.openBlock(), vue.createElementBlock(
  51807. "view",
  51808. {
  51809. key: 2,
  51810. class: "err-msg"
  51811. },
  51812. vue.toDisplayString($setup.t("单注最高限制为")) + " " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  51813. 1
  51814. /* TEXT */
  51815. )) : Number(item.amount) > $setup.userMoney ? (vue.openBlock(), vue.createElementBlock(
  51816. "view",
  51817. {
  51818. key: 3,
  51819. class: "err-msg"
  51820. },
  51821. vue.toDisplayString($setup.t("余额不足")),
  51822. 1
  51823. /* TEXT */
  51824. )) : (vue.openBlock(), vue.createElementBlock("view", {
  51825. key: 4,
  51826. class: "potential-win"
  51827. }, [
  51828. vue.createTextVNode(
  51829. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  51830. 1
  51831. /* TEXT */
  51832. ),
  51833. vue.createElementVNode(
  51834. "text",
  51835. { class: "win-amount" },
  51836. vue.toDisplayString((Number(item.amount) * Number(item.odds)).toFixed(2)),
  51837. 1
  51838. /* TEXT */
  51839. )
  51840. ]))
  51841. ])
  51842. ]);
  51843. }),
  51844. 128
  51845. /* KEYED_FRAGMENT */
  51846. ))
  51847. ]),
  51848. vue.createElementVNode("view", { style: { "height": "100px" } })
  51849. ])) : vue.createCommentVNode("v-if", true),
  51850. $setup.totalBets === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  51851. key: 1,
  51852. class: "empty-sheet"
  51853. }, [
  51854. vue.createElementVNode(
  51855. "text",
  51856. null,
  51857. vue.toDisplayString($setup.t("暂无投注项")),
  51858. 1
  51859. /* TEXT */
  51860. )
  51861. ])) : vue.createCommentVNode("v-if", true),
  51862. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  51863. key: 2,
  51864. class: "sheet-action-bar popup-fixed-footer digital-cart-bottom"
  51865. }, [
  51866. vue.createElementVNode("view", { class: "total-odds-row" }, [
  51867. vue.createElementVNode(
  51868. "text",
  51869. { class: "label" },
  51870. vue.toDisplayString($setup.t("总投注金额")),
  51871. 1
  51872. /* TEXT */
  51873. ),
  51874. vue.createElementVNode(
  51875. "text",
  51876. { class: "val" },
  51877. vue.toDisplayString($setup.totalAmount.toFixed(2)),
  51878. 1
  51879. /* TEXT */
  51880. )
  51881. ]),
  51882. vue.createVNode(_component_u_button, {
  51883. type: "primary",
  51884. onClick: $setup.handleOneClickBet,
  51885. disabled: $setup.isFengpan
  51886. }, {
  51887. default: vue.withCtx(() => [
  51888. vue.createTextVNode(
  51889. vue.toDisplayString($setup.t("立即投注")),
  51890. 1
  51891. /* TEXT */
  51892. )
  51893. ]),
  51894. _: 1
  51895. /* STABLE */
  51896. }, 8, ["disabled"])
  51897. ])) : vue.createCommentVNode("v-if", true)
  51898. ])
  51899. ]),
  51900. _: 1
  51901. /* STABLE */
  51902. }, 8, ["modelValue"]),
  51903. vue.createVNode(_component_u_modal, {
  51904. ref: "safeModalRef",
  51905. modelValue: $setup.showSafeModal,
  51906. "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.showSafeModal = $event),
  51907. "async-close": true,
  51908. title: $setup.t("安全验证"),
  51909. "show-cancel-button": true,
  51910. "confirm-text": $setup.t("确定投注"),
  51911. "cancel-text": $setup.t("取消"),
  51912. "confirm-color": "#f8b932",
  51913. onConfirm: $setup.confirmSubmitBet
  51914. }, {
  51915. default: vue.withCtx(() => [
  51916. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  51917. vue.createElementVNode(
  51918. "text",
  51919. { class: "safe-tips" },
  51920. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  51921. 1
  51922. /* TEXT */
  51923. ),
  51924. vue.createVNode(_component_u_input, {
  51925. modelValue: $setup.safeWord,
  51926. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.safeWord = $event),
  51927. type: "password",
  51928. placeholder: $setup.t("请输入资金密码"),
  51929. border: true,
  51930. "border-color": "#e4e7ed",
  51931. clearable: true,
  51932. "input-align": "center"
  51933. }, null, 8, ["modelValue", "placeholder"])
  51934. ])
  51935. ]),
  51936. _: 1
  51937. /* STABLE */
  51938. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"]),
  51939. vue.createVNode(_component_u_popup, {
  51940. modelValue: $setup.historyPopupVisible,
  51941. "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $setup.historyPopupVisible = $event),
  51942. mode: "center",
  51943. "border-radius": "20",
  51944. mask: true,
  51945. "z-index": 990,
  51946. width: "90%"
  51947. }, {
  51948. default: vue.withCtx(() => [
  51949. vue.createElementVNode("view", { class: "popup-wrapper history-popup" }, [
  51950. vue.createElementVNode(
  51951. "view",
  51952. { class: "p-title" },
  51953. vue.toDisplayString($setup.t("近期开奖记录")),
  51954. 1
  51955. /* TEXT */
  51956. ),
  51957. vue.createElementVNode("scroll-view", {
  51958. "scroll-y": "true",
  51959. class: "history-scroll-container"
  51960. }, [
  51961. vue.createElementVNode("view", { class: "history-list-content" }, [
  51962. (vue.openBlock(true), vue.createElementBlock(
  51963. vue.Fragment,
  51964. null,
  51965. vue.renderList($setup.historyLotteryList, (item, idx) => {
  51966. return vue.openBlock(), vue.createElementBlock("view", {
  51967. class: "history-item",
  51968. key: idx
  51969. }, [
  51970. vue.createElementVNode("view", { class: "h-top" }, [
  51971. vue.createElementVNode(
  51972. "text",
  51973. { class: "h-issue" },
  51974. vue.toDisplayString(item.issue) + vue.toDisplayString($setup.t("期")),
  51975. 1
  51976. /* TEXT */
  51977. ),
  51978. vue.createElementVNode(
  51979. "text",
  51980. { class: "h-time" },
  51981. vue.toDisplayString(item.open_time),
  51982. 1
  51983. /* TEXT */
  51984. )
  51985. ]),
  51986. vue.createElementVNode("view", { class: "balls-grid" }, [
  51987. (vue.openBlock(true), vue.createElementBlock(
  51988. vue.Fragment,
  51989. null,
  51990. vue.renderList(item.lottery_codes.slice(0, 6), (b, i) => {
  51991. return vue.openBlock(), vue.createElementBlock("view", {
  51992. class: "ball-group",
  51993. key: i
  51994. }, [
  51995. vue.createElementVNode(
  51996. "view",
  51997. {
  51998. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(b.color)])
  51999. },
  52000. [
  52001. vue.createElementVNode(
  52002. "view",
  52003. { class: "ball-inner" },
  52004. vue.toDisplayString(b.code),
  52005. 1
  52006. /* TEXT */
  52007. )
  52008. ],
  52009. 2
  52010. /* CLASS */
  52011. ),
  52012. vue.createElementVNode(
  52013. "text",
  52014. { class: "l-zodiac" },
  52015. vue.toDisplayString(b.zodiac),
  52016. 1
  52017. /* TEXT */
  52018. )
  52019. ]);
  52020. }),
  52021. 128
  52022. /* KEYED_FRAGMENT */
  52023. )),
  52024. vue.createElementVNode("text", { class: "plus" }, "+"),
  52025. vue.createElementVNode("view", { class: "ball-group" }, [
  52026. vue.createElementVNode(
  52027. "view",
  52028. {
  52029. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass(item.lottery_codes[6].color)])
  52030. },
  52031. [
  52032. vue.createElementVNode(
  52033. "view",
  52034. { class: "ball-inner" },
  52035. vue.toDisplayString(item.lottery_codes[6].code),
  52036. 1
  52037. /* TEXT */
  52038. )
  52039. ],
  52040. 2
  52041. /* CLASS */
  52042. ),
  52043. vue.createElementVNode(
  52044. "text",
  52045. { class: "l-zodiac" },
  52046. vue.toDisplayString(item.lottery_codes[6].zodiac),
  52047. 1
  52048. /* TEXT */
  52049. )
  52050. ])
  52051. ])
  52052. ]);
  52053. }),
  52054. 128
  52055. /* KEYED_FRAGMENT */
  52056. ))
  52057. ])
  52058. ]),
  52059. vue.createElementVNode(
  52060. "view",
  52061. {
  52062. class: "close-btn-bottom",
  52063. onClick: _cache[11] || (_cache[11] = ($event) => $setup.historyPopupVisible = false)
  52064. },
  52065. vue.toDisplayString($setup.t("关闭")),
  52066. 1
  52067. /* TEXT */
  52068. )
  52069. ])
  52070. ]),
  52071. _: 1
  52072. /* STABLE */
  52073. }, 8, ["modelValue"])
  52074. ]),
  52075. _: 1
  52076. /* STABLE */
  52077. },
  52078. 512
  52079. /* NEED_PATCH */
  52080. )
  52081. ]),
  52082. _: 1
  52083. /* STABLE */
  52084. });
  52085. }
  52086. const PagesTabbarEntertainmentViewDigitalIndex = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$8], ["__scopeId", "data-v-3c5c7d70"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/Digital/index.vue"]]);
  52087. const _sfc_main$8 = {
  52088. __name: "index",
  52089. setup(__props, { expose: __expose }) {
  52090. __expose();
  52091. const router2 = useRouter();
  52092. const { t: t2 } = useI18n();
  52093. const PageContainerRef = vue.ref();
  52094. const pagingRef1 = vue.ref(null);
  52095. const safeModalRef = vue.ref(null);
  52096. const cartPopupVisible = vue.ref(false);
  52097. const showSafeModal = vue.ref(false);
  52098. const historyPopupVisible = vue.ref(false);
  52099. const safeWord = vue.ref("");
  52100. const batchStakeValue = vue.ref(uni.getStorageSync("lhcBatchStakeCache") || "");
  52101. const userMoney = vue.ref(0);
  52102. const WebsocketData = useWebsocketDataStore();
  52103. const isFengpan = vue.ref(false);
  52104. const numberToZodiacMap = vue.ref({});
  52105. const zodiacToNumberMap = vue.ref({});
  52106. const currentIssue = vue.ref("");
  52107. const gameList = vue.ref([]);
  52108. const historyLotteryList = vue.ref([]);
  52109. const numberList = vue.ref([]);
  52110. const lhcGame = vue.ref({});
  52111. const activeGameIndex = vue.ref(0);
  52112. const activePlayIndex = vue.ref(0);
  52113. const selectedBets = vue.ref(uni.getStorageSync("lhc_selected_bets") || []);
  52114. vue.watch(selectedBets, (newVal) => {
  52115. uni.setStorageSync("lhc_selected_bets", newVal);
  52116. }, { deep: true });
  52117. const timeData = vue.ref({ days: 0, hours: "00", minutes: "00", seconds: "00" });
  52118. let countdownTimer = null;
  52119. let remainingSeconds = 0;
  52120. const currentGame = vue.computed(() => gameList.value[activeGameIndex.value] || {});
  52121. const currentPlayName = vue.computed(() => {
  52122. var _a2, _b2;
  52123. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.name) || "";
  52124. });
  52125. const currentPlayId = vue.computed(() => {
  52126. var _a2, _b2;
  52127. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.id) || "";
  52128. });
  52129. const lastDraw = vue.computed(() => historyLotteryList.value[0] || null);
  52130. const isBallStyle = vue.computed(() => {
  52131. const ballGames = [t2("特码"), t2("正码"), t2("正码特"), t2("正码1-6")];
  52132. return ballGames.includes(currentGame.value.name);
  52133. });
  52134. const totalBets = vue.computed(() => selectedBets.value.length);
  52135. const totalAmount = vue.computed(() => {
  52136. return selectedBets.value.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
  52137. });
  52138. const onQuery = async () => {
  52139. var _a2;
  52140. await initHowPlayData();
  52141. await fetchBalance();
  52142. (_a2 = pagingRef1.value) == null ? void 0 : _a2.complete([]);
  52143. };
  52144. const fetchBalance = async () => {
  52145. if (uni.getStorageSync("token")) {
  52146. try {
  52147. const res = await getBalance();
  52148. if (res.code === 1) {
  52149. userMoney.value = Number(res.data.money);
  52150. }
  52151. } catch (error) {
  52152. formatAppLog("error", "at pages/Tabbar/Entertainment/view/NewDigital/index.vue:377", "获取余额失败", error);
  52153. }
  52154. }
  52155. };
  52156. const initHowPlayData = async () => {
  52157. var _a2;
  52158. try {
  52159. const [infoRes, playRes] = await Promise.all([
  52160. getLHCInfo(),
  52161. getHowPlay({ type: 1 })
  52162. ]);
  52163. if (infoRes.code === 1 && infoRes.data) {
  52164. numberToZodiacMap.value = infoRes.data.number_to_zodiac || {};
  52165. zodiacToNumberMap.value = infoRes.data.zodiac_to_number || {};
  52166. }
  52167. if (playRes.code === 1 && playRes.data) {
  52168. lhcGame.value = playRes.data;
  52169. currentIssue.value = playRes.data.issue;
  52170. gameList.value = playRes.data.games || [];
  52171. if (playRes.data.history_lottery) {
  52172. historyLotteryList.value = playRes.data.history_lottery.map((item) => ({
  52173. ...item,
  52174. lottery_codes: item.lottery_codes.map((codeStr) => ({
  52175. code: codeStr,
  52176. color: calculateBallColor(codeStr),
  52177. zodiac: numberToZodiacMap.value[codeStr] || ""
  52178. }))
  52179. }));
  52180. }
  52181. if (((_a2 = playRes.data) == null ? void 0 : _a2.countdown) != 0) {
  52182. startCountdown(Number(playRes.data.countdown || 0));
  52183. }
  52184. await fetchPlayInfo();
  52185. }
  52186. } catch (error) {
  52187. formatAppLog("error", "at pages/Tabbar/Entertainment/view/NewDigital/index.vue:419", "获取数据失败", error);
  52188. }
  52189. };
  52190. vue.onMounted(() => {
  52191. initHowPlayData();
  52192. fetchBalance();
  52193. });
  52194. onShow(() => {
  52195. batchStakeValue.value = uni.getStorageSync("lhcBatchStakeCache") || "";
  52196. fetchBalance();
  52197. });
  52198. vue.onUnmounted(() => {
  52199. clearInterval(countdownTimer);
  52200. });
  52201. const handleGameClick = (index) => {
  52202. if (activeGameIndex.value === index)
  52203. return;
  52204. activeGameIndex.value = index;
  52205. activePlayIndex.value = 0;
  52206. fetchPlayInfo();
  52207. };
  52208. const handlePlayClick = (index) => {
  52209. if (activePlayIndex.value === index)
  52210. return;
  52211. activePlayIndex.value = index;
  52212. fetchPlayInfo();
  52213. };
  52214. const fetchPlayInfo = async () => {
  52215. if (!currentPlayId.value)
  52216. return;
  52217. numberList.value = [];
  52218. try {
  52219. const res = await getPlayInfo({ id: currentPlayId.value });
  52220. if (res.code === 1 && res.data) {
  52221. numberList.value = res.data.map((item) => {
  52222. let color2 = "";
  52223. if (isBallStyle.value || !isNaN(item.number)) {
  52224. color2 = calculateBallColor(item.number);
  52225. } else {
  52226. if (item.number.includes(t2("红")))
  52227. color2 = t2("红");
  52228. else if (item.number.includes(t2("蓝")))
  52229. color2 = t2("蓝");
  52230. else if (item.number.includes(t2("绿")))
  52231. color2 = t2("绿");
  52232. }
  52233. let tinyNums = [];
  52234. if (zodiacToNumberMap.value[item.number]) {
  52235. tinyNums = zodiacToNumberMap.value[item.number].map((nStr) => ({
  52236. number: nStr,
  52237. color: calculateBallColor(nStr)
  52238. }));
  52239. }
  52240. const isSelected = selectedBets.value.some((b) => b.id === item.id);
  52241. return {
  52242. id: item.id,
  52243. number: item.number,
  52244. odds: item.odds,
  52245. color: color2,
  52246. flag: isSelected,
  52247. numbers: tinyNums,
  52248. mininum: item.mininum,
  52249. maxinum: item.maxinum
  52250. };
  52251. });
  52252. }
  52253. } catch (error) {
  52254. formatAppLog("error", "at pages/Tabbar/Entertainment/view/NewDigital/index.vue:494", "获取玩法失败", error);
  52255. } finally {
  52256. uni.hideLoading();
  52257. }
  52258. };
  52259. const toggleSelect = (index) => {
  52260. if (isFengpan.value)
  52261. return;
  52262. const item = numberList.value[index];
  52263. item.flag = !item.flag;
  52264. if (item.flag) {
  52265. const amountToSet = batchStakeValue.value !== "" ? Number(batchStakeValue.value) : item.mininum !== void 0 ? item.mininum : 10;
  52266. selectedBets.value.push({
  52267. id: item.id,
  52268. gameName: currentGame.value.name,
  52269. playName: currentPlayName.value,
  52270. number: item.number,
  52271. odds: item.odds,
  52272. color: item.color,
  52273. mininum: item.mininum,
  52274. maxinum: item.maxinum,
  52275. amount: amountToSet
  52276. });
  52277. } else {
  52278. selectedBets.value = selectedBets.value.filter((b) => b.id !== item.id);
  52279. }
  52280. };
  52281. const quickSelectWave = (colorStr) => {
  52282. if (isFengpan.value)
  52283. return;
  52284. numberList.value.forEach((item, index) => {
  52285. const shouldSelect = item.color === colorStr;
  52286. if (item.flag !== shouldSelect) {
  52287. toggleSelect(index);
  52288. }
  52289. });
  52290. };
  52291. const randomSelect = () => {
  52292. if (isFengpan.value)
  52293. return;
  52294. const unselectedIndices = [];
  52295. numberList.value.forEach((item, index) => {
  52296. if (!item.flag) {
  52297. unselectedIndices.push(index);
  52298. }
  52299. });
  52300. if (unselectedIndices.length > 0) {
  52301. const randomPos = Math.floor(Math.random() * unselectedIndices.length);
  52302. const targetIndex = unselectedIndices[randomPos];
  52303. toggleSelect(targetIndex);
  52304. } else {
  52305. uni.showToast({ title: t2("所有选项已全选"), icon: "none" });
  52306. }
  52307. };
  52308. const clearSelect = () => {
  52309. numberList.value.forEach((item) => item.flag = false);
  52310. selectedBets.value = [];
  52311. cartPopupVisible.value = false;
  52312. };
  52313. const removeSelected = (id) => {
  52314. selectedBets.value = selectedBets.value.filter((b) => b.id !== id);
  52315. const visibleItem = numberList.value.find((n) => n.id === id);
  52316. if (visibleItem) {
  52317. visibleItem.flag = false;
  52318. }
  52319. if (selectedBets.value.length === 0) {
  52320. cartPopupVisible.value = false;
  52321. }
  52322. };
  52323. const applyBatchStake = () => {
  52324. let val = batchStakeValue.value;
  52325. uni.setStorageSync("lhcBatchStakeCache", val);
  52326. if (val === "") {
  52327. selectedBets.value.forEach((item) => {
  52328. item.amount = "";
  52329. });
  52330. return;
  52331. }
  52332. let numVal = Number(val);
  52333. if (isNaN(numVal) || numVal <= 0) {
  52334. return uni.showToast({ title: t2("请输入大于0的有效金额"), icon: "none" });
  52335. }
  52336. selectedBets.value.forEach((item) => {
  52337. let itemVal = numVal;
  52338. const min = item.mininum !== void 0 ? item.mininum : 10;
  52339. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  52340. if (itemVal < min) {
  52341. itemVal = min;
  52342. }
  52343. if (itemVal > max) {
  52344. itemVal = max;
  52345. }
  52346. if (itemVal > userMoney.value) {
  52347. itemVal = userMoney.value;
  52348. uni.showToast({ title: t2("余额不足"), icon: "none" });
  52349. }
  52350. item.amount = itemVal;
  52351. });
  52352. };
  52353. const validateAmount = (item) => {
  52354. const val = Number(item.amount);
  52355. const min = item.mininum !== void 0 ? item.mininum : 10;
  52356. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  52357. if (isNaN(val) || val <= 0) {
  52358. item.amount = "";
  52359. } else if (val < min) {
  52360. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  52361. item.amount = min;
  52362. } else if (val > max) {
  52363. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  52364. item.amount = max;
  52365. } else if (val > userMoney.value) {
  52366. uni.showToast({ title: t2("余额不足"), icon: "none" });
  52367. item.amount = userMoney.value;
  52368. }
  52369. };
  52370. const changeAmount = (item, delta) => {
  52371. let val = Number(item.amount) || 0;
  52372. val += delta;
  52373. const min = item.mininum !== void 0 ? item.mininum : 10;
  52374. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  52375. if (val < 0) {
  52376. val = 0;
  52377. item.amount = "";
  52378. return;
  52379. }
  52380. if (val > 0 && val < min) {
  52381. val = min;
  52382. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  52383. } else if (val > max) {
  52384. val = max;
  52385. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  52386. } else if (val > userMoney.value) {
  52387. val = userMoney.value;
  52388. uni.showToast({ title: t2("余额不足"), icon: "none" });
  52389. }
  52390. item.amount = val || "";
  52391. };
  52392. const openCartPopup = () => {
  52393. if (totalBets.value === 0)
  52394. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  52395. cartPopupVisible.value = true;
  52396. };
  52397. const handleOneClickBet = () => {
  52398. if (!uni.getStorageSync("token")) {
  52399. uni.showToast({
  52400. title: t2("请先登录"),
  52401. icon: "none"
  52402. });
  52403. return;
  52404. }
  52405. if (isFengpan.value)
  52406. return;
  52407. if (totalBets.value === 0) {
  52408. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  52409. }
  52410. if (totalAmount.value > userMoney.value) {
  52411. return uni.showToast({ title: t2("总投注金额超过可用余额"), icon: "none" });
  52412. }
  52413. const invalidItems = selectedBets.value.filter((item) => {
  52414. const val = Number(item.amount);
  52415. const min = item.mininum !== void 0 ? item.mininum : 10;
  52416. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  52417. return !val || val <= 0 || val < min || val > max || val > userMoney.value;
  52418. });
  52419. if (invalidItems.length > 0) {
  52420. if (!cartPopupVisible.value) {
  52421. cartPopupVisible.value = true;
  52422. }
  52423. return uni.showToast({ title: t2("请检查下注金额、限额及余额"), icon: "none" });
  52424. }
  52425. safeWord.value = "";
  52426. cartPopupVisible.value = false;
  52427. setTimeout(() => {
  52428. confirmSubmitBet();
  52429. }, 300);
  52430. };
  52431. const confirmSubmitBet = async () => {
  52432. uni.showModal({
  52433. title: t2("提示"),
  52434. content: t2("确认提交吗?"),
  52435. success: async (res) => {
  52436. var _a2, _b2, _c;
  52437. if (res.confirm) {
  52438. const payloadData = selectedBets.value.map((item) => ({
  52439. id: item.id,
  52440. amount: Number(item.amount)
  52441. }));
  52442. try {
  52443. const res2 = await submitBetCart({ data: payloadData, safe_word: safeWord.value, type: 1 });
  52444. if (res2.code === 1) {
  52445. showSafeModal.value = false;
  52446. clearSelect();
  52447. fetchBalance();
  52448. (_a2 = PageContainerRef.value) == null ? void 0 : _a2.getData();
  52449. } else {
  52450. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  52451. }
  52452. } catch (error) {
  52453. (_c = safeModalRef.value) == null ? void 0 : _c.clearLoading();
  52454. }
  52455. }
  52456. }
  52457. });
  52458. };
  52459. const goToOrder = () => {
  52460. router2.push({ name: "AllHistory", query: { tab: 2 } });
  52461. };
  52462. const startCountdown = (seconds) => {
  52463. remainingSeconds = seconds;
  52464. clearInterval(countdownTimer);
  52465. countdownTimer = setInterval(() => {
  52466. formatAppLog("log", "at pages/Tabbar/Entertainment/view/NewDigital/index.vue:748", remainingSeconds, 622);
  52467. if (remainingSeconds > 0) {
  52468. remainingSeconds--;
  52469. const d = Math.floor(remainingSeconds / 86400);
  52470. const h = Math.floor(remainingSeconds % 86400 / 3600);
  52471. const m = Math.floor(remainingSeconds % 3600 / 60);
  52472. const s = remainingSeconds % 60;
  52473. timeData.value.days = d;
  52474. timeData.value.hours = h.toString().padStart(2, "0");
  52475. timeData.value.minutes = m.toString().padStart(2, "0");
  52476. timeData.value.seconds = s.toString().padStart(2, "0");
  52477. } else {
  52478. clearInterval(countdownTimer);
  52479. initHowPlayData();
  52480. }
  52481. }, 1e3);
  52482. };
  52483. const calculateBallColor = (numStr) => {
  52484. const num = parseInt(numStr, 10);
  52485. if (isNaN(num))
  52486. return "";
  52487. const reds = [1, 2, 7, 8, 12, 13, 18, 19, 23, 24, 29, 30, 34, 35, 40, 45, 46];
  52488. const blues = [3, 4, 9, 10, 14, 15, 20, 25, 26, 31, 36, 37, 41, 42, 47, 48];
  52489. const greens = [5, 6, 11, 16, 17, 21, 22, 27, 28, 32, 33, 38, 39, 43, 44, 49];
  52490. if (reds.includes(num))
  52491. return t2("红");
  52492. if (blues.includes(num))
  52493. return t2("蓝");
  52494. if (greens.includes(num))
  52495. return t2("绿");
  52496. return "";
  52497. };
  52498. const getBgColorClass = (colorName) => {
  52499. if (colorName === t2("红"))
  52500. return "bg-red";
  52501. if (colorName === t2("蓝"))
  52502. return "bg-blue";
  52503. if (colorName === t2("绿"))
  52504. return "bg-green";
  52505. return "bg-gray";
  52506. };
  52507. const getTextColorClass = (colorName) => {
  52508. if (colorName === t2("红"))
  52509. return "text-red";
  52510. if (colorName === t2("蓝"))
  52511. return "text-blue";
  52512. if (colorName === t2("绿"))
  52513. return "text-green";
  52514. return "";
  52515. };
  52516. vue.watch(() => WebsocketData.globalData, (data) => {
  52517. const res = typeof data === "string" ? JSON.parse(data) : data;
  52518. if (res && res.type === "aomen_lhc_fengpan") {
  52519. isFengpan.value = true;
  52520. } else if (res && res.type === "aomen_lhc_kaipan") {
  52521. isFengpan.value = false;
  52522. }
  52523. });
  52524. gameLotteryStatus({ type: 3 }).then((res) => {
  52525. if (res.data.is_kaipan == 0) {
  52526. isFengpan.value = true;
  52527. } else if (res.data.is_kaipan == 1) {
  52528. isFengpan.value = false;
  52529. }
  52530. });
  52531. const __returned__ = { router: router2, t: t2, PageContainerRef, pagingRef1, safeModalRef, cartPopupVisible, showSafeModal, historyPopupVisible, safeWord, batchStakeValue, userMoney, WebsocketData, isFengpan, numberToZodiacMap, zodiacToNumberMap, currentIssue, gameList, historyLotteryList, numberList, lhcGame, activeGameIndex, activePlayIndex, selectedBets, timeData, get countdownTimer() {
  52532. return countdownTimer;
  52533. }, set countdownTimer(v) {
  52534. countdownTimer = v;
  52535. }, get remainingSeconds() {
  52536. return remainingSeconds;
  52537. }, set remainingSeconds(v) {
  52538. remainingSeconds = v;
  52539. }, currentGame, currentPlayName, currentPlayId, lastDraw, isBallStyle, totalBets, totalAmount, onQuery, fetchBalance, initHowPlayData, handleGameClick, handlePlayClick, fetchPlayInfo, toggleSelect, quickSelectWave, randomSelect, clearSelect, removeSelected, applyBatchStake, validateAmount, changeAmount, openCartPopup, handleOneClickBet, confirmSubmitBet, goToOrder, startCountdown, calculateBallColor, getBgColorClass, getTextColorClass, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, watch: vue.watch, get useI18n() {
  52540. return useI18n;
  52541. }, get onShow() {
  52542. return onShow;
  52543. }, get getHowPlay() {
  52544. return getHowPlay;
  52545. }, get getLHCInfo() {
  52546. return getLHCInfo;
  52547. }, get getPlayInfo() {
  52548. return getPlayInfo;
  52549. }, get submitBetCart() {
  52550. return submitBetCart;
  52551. }, get getBalance() {
  52552. return getBalance;
  52553. }, get useWebsocketDataStore() {
  52554. return useWebsocketDataStore;
  52555. }, get gameLotteryStatus() {
  52556. return gameLotteryStatus;
  52557. } };
  52558. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  52559. return __returned__;
  52560. }
  52561. };
  52562. function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
  52563. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  52564. const _component_u_icon = __unplugin_components_0$5;
  52565. const _component_u_button = __unplugin_components_2$1;
  52566. const _component_u_popup = __unplugin_components_2$3;
  52567. const _component_u_input = __unplugin_components_3$2;
  52568. const _component_u_modal = __unplugin_components_4$3;
  52569. const _component_PageContainer = PageContainer;
  52570. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  52571. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  52572. default: vue.withCtx(() => [
  52573. vue.createVNode(
  52574. _component_PageContainer,
  52575. {
  52576. ref: "PageContainerRef",
  52577. navTitle: "新澳门六合彩"
  52578. },
  52579. {
  52580. default: vue.withCtx(() => [
  52581. vue.createVNode(
  52582. _component_z_paging,
  52583. {
  52584. ref: "pagingRef1",
  52585. onQuery: $setup.onQuery,
  52586. fixed: false,
  52587. "refresher-only": true,
  52588. "refresher-enabled": true,
  52589. "loading-more-enabled": false,
  52590. "auto-show-back-to-top": true
  52591. },
  52592. {
  52593. refresher: vue.withCtx(() => [
  52594. vue.createElementVNode("view", { class: "refresher-ui" }, [
  52595. vue.createElementVNode("view", { class: "spin-loader" }),
  52596. vue.createElementVNode(
  52597. "text",
  52598. { class: "refresher-text" },
  52599. vue.toDisplayString($setup.t("获取最新数据...")),
  52600. 1
  52601. /* TEXT */
  52602. )
  52603. ])
  52604. ]),
  52605. default: vue.withCtx(() => [
  52606. vue.createElementVNode("view", { class: "app-digital-container" }, [
  52607. vue.createElementVNode("view", { class: "calc-card lottery-dashboard" }, [
  52608. vue.createElementVNode("view", { class: "dash-top" }, [
  52609. vue.createElementVNode("view", { class: "lottery-title" }, [
  52610. vue.createElementVNode("text", { class: "issue-text" }, [
  52611. vue.createTextVNode(
  52612. vue.toDisplayString($setup.t("距")) + " ",
  52613. 1
  52614. /* TEXT */
  52615. ),
  52616. vue.createElementVNode(
  52617. "text",
  52618. { class: "highlight" },
  52619. vue.toDisplayString($setup.lhcGame.next_issue),
  52620. 1
  52621. /* TEXT */
  52622. ),
  52623. vue.createTextVNode(
  52624. " " + vue.toDisplayString($setup.t("期截止")),
  52625. 1
  52626. /* TEXT */
  52627. )
  52628. ])
  52629. ]),
  52630. vue.createElementVNode("view", { class: "timer-box" }, [
  52631. !$setup.isFengpan ? (vue.openBlock(), vue.createElementBlock(
  52632. vue.Fragment,
  52633. { key: 0 },
  52634. [
  52635. $setup.timeData.days > 0 ? (vue.openBlock(), vue.createElementBlock(
  52636. vue.Fragment,
  52637. { key: 0 },
  52638. [
  52639. vue.createElementVNode(
  52640. "view",
  52641. { class: "digit" },
  52642. vue.toDisplayString($setup.timeData.days),
  52643. 1
  52644. /* TEXT */
  52645. ),
  52646. vue.createElementVNode(
  52647. "text",
  52648. { class: "colon" },
  52649. vue.toDisplayString($setup.t("天")),
  52650. 1
  52651. /* TEXT */
  52652. )
  52653. ],
  52654. 64
  52655. /* STABLE_FRAGMENT */
  52656. )) : vue.createCommentVNode("v-if", true),
  52657. vue.createElementVNode(
  52658. "view",
  52659. { class: "digit" },
  52660. vue.toDisplayString($setup.timeData.hours),
  52661. 1
  52662. /* TEXT */
  52663. ),
  52664. vue.createElementVNode("text", { class: "colon" }, ":"),
  52665. vue.createElementVNode(
  52666. "view",
  52667. { class: "digit" },
  52668. vue.toDisplayString($setup.timeData.minutes),
  52669. 1
  52670. /* TEXT */
  52671. ),
  52672. vue.createElementVNode("text", { class: "colon" }, ":"),
  52673. vue.createElementVNode(
  52674. "view",
  52675. { class: "digit" },
  52676. vue.toDisplayString($setup.timeData.seconds),
  52677. 1
  52678. /* TEXT */
  52679. )
  52680. ],
  52681. 64
  52682. /* STABLE_FRAGMENT */
  52683. )) : (vue.openBlock(), vue.createElementBlock(
  52684. "text",
  52685. {
  52686. key: 1,
  52687. class: "fengpan-text"
  52688. },
  52689. vue.toDisplayString($setup.t("封盘中")),
  52690. 1
  52691. /* TEXT */
  52692. ))
  52693. ])
  52694. ]),
  52695. $setup.lastDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  52696. key: 0,
  52697. class: "dash-bottom"
  52698. }, [
  52699. vue.createElementVNode("view", { class: "result-header" }, [
  52700. vue.createElementVNode(
  52701. "text",
  52702. { class: "r-title" },
  52703. vue.toDisplayString($setup.t("第")) + " " + vue.toDisplayString($setup.lhcGame.issue) + " " + vue.toDisplayString($setup.t("期开奖")),
  52704. 1
  52705. /* TEXT */
  52706. ),
  52707. vue.createElementVNode("view", { class: "actions" }, [
  52708. vue.createElementVNode(
  52709. "text",
  52710. {
  52711. class: "action-btn tmc",
  52712. onClick: _cache[0] || (_cache[0] = ($event) => $setup.historyPopupVisible = true)
  52713. },
  52714. vue.toDisplayString($setup.t("近期开奖")),
  52715. 1
  52716. /* TEXT */
  52717. ),
  52718. vue.createElementVNode("text", { class: "action-divider" }, "|"),
  52719. vue.createElementVNode(
  52720. "text",
  52721. {
  52722. class: "action-btn tmc",
  52723. onClick: $setup.goToOrder
  52724. },
  52725. vue.toDisplayString($setup.t("购彩记录")),
  52726. 1
  52727. /* TEXT */
  52728. )
  52729. ])
  52730. ]),
  52731. vue.createElementVNode("view", { class: "balls-display" }, [
  52732. (vue.openBlock(true), vue.createElementBlock(
  52733. vue.Fragment,
  52734. null,
  52735. vue.renderList($setup.lastDraw.lottery_codes.slice(0, 6), (ball, idx) => {
  52736. return vue.openBlock(), vue.createElementBlock("view", {
  52737. class: "ball-group",
  52738. key: "norm_" + idx
  52739. }, [
  52740. vue.createElementVNode(
  52741. "view",
  52742. {
  52743. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(ball.color)])
  52744. },
  52745. [
  52746. vue.createElementVNode(
  52747. "view",
  52748. { class: "ball-inner" },
  52749. vue.toDisplayString(ball.code),
  52750. 1
  52751. /* TEXT */
  52752. )
  52753. ],
  52754. 2
  52755. /* CLASS */
  52756. ),
  52757. vue.createElementVNode(
  52758. "text",
  52759. { class: "l-zodiac" },
  52760. vue.toDisplayString(ball.zodiac),
  52761. 1
  52762. /* TEXT */
  52763. )
  52764. ]);
  52765. }),
  52766. 128
  52767. /* KEYED_FRAGMENT */
  52768. )),
  52769. vue.createElementVNode("text", { class: "plus-icon" }, "+"),
  52770. $setup.lastDraw.lottery_codes[6] ? (vue.openBlock(), vue.createElementBlock("view", {
  52771. key: 0,
  52772. class: "ball-group special"
  52773. }, [
  52774. vue.createElementVNode(
  52775. "view",
  52776. {
  52777. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass($setup.lastDraw.lottery_codes[6].color)])
  52778. },
  52779. [
  52780. vue.createElementVNode(
  52781. "view",
  52782. { class: "ball-inner" },
  52783. vue.toDisplayString($setup.lastDraw.lottery_codes[6].code),
  52784. 1
  52785. /* TEXT */
  52786. )
  52787. ],
  52788. 2
  52789. /* CLASS */
  52790. ),
  52791. vue.createElementVNode(
  52792. "text",
  52793. { class: "l-zodiac" },
  52794. vue.toDisplayString($setup.lastDraw.lottery_codes[6].zodiac),
  52795. 1
  52796. /* TEXT */
  52797. )
  52798. ])) : vue.createCommentVNode("v-if", true)
  52799. ])
  52800. ])) : vue.createCommentVNode("v-if", true)
  52801. ]),
  52802. $setup.gameList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  52803. key: 0,
  52804. class: "play-tabs-container"
  52805. }, [
  52806. vue.createElementVNode("scroll-view", {
  52807. "scroll-x": "",
  52808. class: "scroll-x-box",
  52809. "show-scrollbar": false
  52810. }, [
  52811. vue.createElementVNode("view", { class: "main-tabs" }, [
  52812. (vue.openBlock(true), vue.createElementBlock(
  52813. vue.Fragment,
  52814. null,
  52815. vue.renderList($setup.gameList, (game, index) => {
  52816. return vue.openBlock(), vue.createElementBlock("view", {
  52817. class: vue.normalizeClass(["play-tab", { "is-active": $setup.activeGameIndex === index }]),
  52818. key: game.id,
  52819. onClick: ($event) => $setup.handleGameClick(index)
  52820. }, vue.toDisplayString(game.name), 11, ["onClick"]);
  52821. }),
  52822. 128
  52823. /* KEYED_FRAGMENT */
  52824. ))
  52825. ])
  52826. ]),
  52827. $setup.currentGame.gameplay && $setup.currentGame.gameplay.length > 1 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  52828. key: 0,
  52829. "scroll-x": "",
  52830. class: "scroll-x-box",
  52831. "show-scrollbar": false
  52832. }, [
  52833. vue.createElementVNode("view", { class: "sub-tabs" }, [
  52834. (vue.openBlock(true), vue.createElementBlock(
  52835. vue.Fragment,
  52836. null,
  52837. vue.renderList($setup.currentGame.gameplay, (play, index) => {
  52838. return vue.openBlock(), vue.createElementBlock("view", {
  52839. class: vue.normalizeClass(["sub-tab", { "is-active": $setup.activePlayIndex === index }]),
  52840. key: play.id,
  52841. onClick: ($event) => $setup.handlePlayClick(index)
  52842. }, vue.toDisplayString(play.name), 11, ["onClick"]);
  52843. }),
  52844. 128
  52845. /* KEYED_FRAGMENT */
  52846. ))
  52847. ])
  52848. ])) : vue.createCommentVNode("v-if", true)
  52849. ])) : vue.createCommentVNode("v-if", true),
  52850. vue.createElementVNode("view", { class: "play-grid-wrap" }, [
  52851. vue.createElementVNode("view", { class: "play-group-card" }, [
  52852. [$setup.t("特码"), $setup.t("正码"), $setup.t("正码特")].includes($setup.currentGame.name) ? (vue.openBlock(), vue.createElementBlock("view", {
  52853. key: 0,
  52854. class: "calc-tabs quick-actions"
  52855. }, [
  52856. vue.createElementVNode(
  52857. "view",
  52858. {
  52859. class: vue.normalizeClass(["c-tab red", { "is-disabled": $setup.isFengpan }]),
  52860. onClick: _cache[1] || (_cache[1] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("红")))
  52861. },
  52862. vue.toDisplayString($setup.t("红波")),
  52863. 3
  52864. /* TEXT, CLASS */
  52865. ),
  52866. vue.createElementVNode(
  52867. "view",
  52868. {
  52869. class: vue.normalizeClass(["c-tab blue", { "is-disabled": $setup.isFengpan }]),
  52870. onClick: _cache[2] || (_cache[2] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("蓝")))
  52871. },
  52872. vue.toDisplayString($setup.t("蓝波")),
  52873. 3
  52874. /* TEXT, CLASS */
  52875. ),
  52876. vue.createElementVNode(
  52877. "view",
  52878. {
  52879. class: vue.normalizeClass(["c-tab green", { "is-disabled": $setup.isFengpan }]),
  52880. onClick: _cache[3] || (_cache[3] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("绿")))
  52881. },
  52882. vue.toDisplayString($setup.t("绿波")),
  52883. 3
  52884. /* TEXT, CLASS */
  52885. )
  52886. ])) : vue.createCommentVNode("v-if", true),
  52887. vue.createElementVNode(
  52888. "view",
  52889. {
  52890. class: vue.normalizeClass(["number-grid", $setup.isBallStyle ? "is-ball-grid" : "is-box-grid"])
  52891. },
  52892. [
  52893. (vue.openBlock(true), vue.createElementBlock(
  52894. vue.Fragment,
  52895. null,
  52896. vue.renderList($setup.numberList, (item, index) => {
  52897. return vue.openBlock(), vue.createElementBlock("view", {
  52898. class: vue.normalizeClass(["rule-btn num-item", { "is-active": item.flag, "is-disabled": $setup.isFengpan }]),
  52899. key: item.id,
  52900. onClick: ($event) => !$setup.isFengpan && $setup.toggleSelect(index)
  52901. }, [
  52902. $setup.isBallStyle ? (vue.openBlock(), vue.createElementBlock(
  52903. vue.Fragment,
  52904. { key: 0 },
  52905. [
  52906. vue.createElementVNode(
  52907. "view",
  52908. {
  52909. class: vue.normalizeClass(["ball-wrapper", $setup.getBgColorClass(item.color)])
  52910. },
  52911. [
  52912. vue.createElementVNode(
  52913. "text",
  52914. { class: "ball-text" },
  52915. vue.toDisplayString(item.number),
  52916. 1
  52917. /* TEXT */
  52918. )
  52919. ],
  52920. 2
  52921. /* CLASS */
  52922. ),
  52923. vue.createElementVNode(
  52924. "text",
  52925. { class: "odds-text" },
  52926. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  52927. 1
  52928. /* TEXT */
  52929. )
  52930. ],
  52931. 64
  52932. /* STABLE_FRAGMENT */
  52933. )) : (vue.openBlock(), vue.createElementBlock(
  52934. vue.Fragment,
  52935. { key: 1 },
  52936. [
  52937. vue.createElementVNode("view", { class: "box-top" }, [
  52938. vue.createElementVNode(
  52939. "text",
  52940. {
  52941. class: vue.normalizeClass(["box-name", $setup.getTextColorClass(item.color)])
  52942. },
  52943. vue.toDisplayString(item.number),
  52944. 3
  52945. /* TEXT, CLASS */
  52946. ),
  52947. vue.createElementVNode(
  52948. "text",
  52949. { class: "box-odds" },
  52950. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  52951. 1
  52952. /* TEXT */
  52953. )
  52954. ]),
  52955. item.numbers && item.numbers.length ? (vue.openBlock(), vue.createElementBlock("view", {
  52956. key: 0,
  52957. class: "box-bottom"
  52958. }, [
  52959. (vue.openBlock(true), vue.createElementBlock(
  52960. vue.Fragment,
  52961. null,
  52962. vue.renderList(item.numbers, (numObj, nIdx) => {
  52963. return vue.openBlock(), vue.createElementBlock(
  52964. "text",
  52965. {
  52966. key: nIdx,
  52967. class: vue.normalizeClass(["mini-num", $setup.getTextColorClass(numObj.color)])
  52968. },
  52969. vue.toDisplayString(numObj.number),
  52970. 3
  52971. /* TEXT, CLASS */
  52972. );
  52973. }),
  52974. 128
  52975. /* KEYED_FRAGMENT */
  52976. ))
  52977. ])) : vue.createCommentVNode("v-if", true)
  52978. ],
  52979. 64
  52980. /* STABLE_FRAGMENT */
  52981. ))
  52982. ], 10, ["onClick"]);
  52983. }),
  52984. 128
  52985. /* KEYED_FRAGMENT */
  52986. ))
  52987. ],
  52988. 2
  52989. /* CLASS */
  52990. )
  52991. ])
  52992. ]),
  52993. vue.createElementVNode("view", { style: { "height": "80px" } })
  52994. ]),
  52995. vue.createElementVNode("view", { class: "digital-bottom" })
  52996. ]),
  52997. _: 1
  52998. /* STABLE */
  52999. },
  53000. 512
  53001. /* NEED_PATCH */
  53002. ),
  53003. !$setup.cartPopupVisible ? (vue.openBlock(), vue.createElementBlock("view", {
  53004. key: 0,
  53005. class: "sticky-header-bar",
  53006. onClick: $setup.openCartPopup
  53007. }, [
  53008. vue.createElementVNode("view", { class: "betting-sheet-header" }, [
  53009. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  53010. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  53011. "view",
  53012. {
  53013. key: 0,
  53014. class: "sheet-badge"
  53015. },
  53016. vue.toDisplayString($setup.totalBets),
  53017. 1
  53018. /* TEXT */
  53019. )) : vue.createCommentVNode("v-if", true),
  53020. vue.createElementVNode(
  53021. "text",
  53022. { class: "header-text" },
  53023. vue.toDisplayString($setup.t("已选注单")),
  53024. 1
  53025. /* TEXT */
  53026. ),
  53027. vue.createVNode(_component_u_icon, {
  53028. name: "arrow-up",
  53029. color: "#666"
  53030. })
  53031. ]),
  53032. vue.createElementVNode("view", {
  53033. class: "betting-sheet-header-right",
  53034. style: { "display": "flex", "align-items": "center" }
  53035. }, [
  53036. vue.createElementVNode(
  53037. "view",
  53038. {
  53039. class: vue.normalizeClass(["btn-action", { "is-disabled": $setup.isFengpan }]),
  53040. style: { "margin-right": "10px", "background": "#6EC149", "color": "#fff" },
  53041. onClick: _cache[4] || (_cache[4] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.randomSelect(), ["stop"]))
  53042. },
  53043. vue.toDisplayString($setup.t("机选")),
  53044. 3
  53045. /* TEXT, CLASS */
  53046. ),
  53047. vue.createElementVNode(
  53048. "view",
  53049. {
  53050. class: vue.normalizeClass(["btn-action bet-btn", { "is-disabled": $setup.isFengpan }]),
  53051. style: { "background-color": "#f8b932", "color": "#fff", "border-color": "#f8b932" },
  53052. onClick: _cache[5] || (_cache[5] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.openCartPopup(), ["stop"]))
  53053. },
  53054. vue.toDisplayString($setup.t("下注")),
  53055. 3
  53056. /* TEXT, CLASS */
  53057. )
  53058. ])
  53059. ])
  53060. ])) : vue.createCommentVNode("v-if", true),
  53061. vue.createVNode(_component_u_popup, {
  53062. modelValue: $setup.cartPopupVisible,
  53063. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.cartPopupVisible = $event),
  53064. mode: "bottom",
  53065. "border-radius": "24",
  53066. mask: true,
  53067. "mask-close-able": true,
  53068. "z-index": 990,
  53069. "safe-area-inset-bottom": true,
  53070. height: "75%"
  53071. }, {
  53072. default: vue.withCtx(() => [
  53073. vue.createElementVNode("view", { class: "popup-cart-layout" }, [
  53074. vue.createElementVNode("view", { class: "popup-fixed-header" }, [
  53075. vue.createElementVNode("view", {
  53076. class: "betting-sheet-header border-bottom",
  53077. onClick: _cache[6] || (_cache[6] = ($event) => $setup.cartPopupVisible = false)
  53078. }, [
  53079. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  53080. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  53081. "view",
  53082. {
  53083. key: 0,
  53084. class: "sheet-badge"
  53085. },
  53086. vue.toDisplayString($setup.totalBets),
  53087. 1
  53088. /* TEXT */
  53089. )) : vue.createCommentVNode("v-if", true),
  53090. vue.createElementVNode(
  53091. "text",
  53092. { class: "header-text" },
  53093. vue.toDisplayString($setup.t("已选注单明细")),
  53094. 1
  53095. /* TEXT */
  53096. ),
  53097. vue.createVNode(_component_u_icon, {
  53098. name: "arrow-down",
  53099. color: "#666"
  53100. })
  53101. ]),
  53102. vue.createElementVNode("view", {
  53103. class: "betting-sheet-header-right",
  53104. style: { "display": "flex", "align-items": "center" }
  53105. }, [
  53106. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  53107. key: 0,
  53108. class: "settings-btn",
  53109. onClick: vue.withModifiers($setup.clearSelect, ["stop"])
  53110. }, [
  53111. vue.createElementVNode(
  53112. "text",
  53113. {
  53114. style: { "font-size": "12px" },
  53115. class: "tmc"
  53116. },
  53117. vue.toDisplayString($setup.t("清空")),
  53118. 1
  53119. /* TEXT */
  53120. )
  53121. ])) : vue.createCommentVNode("v-if", true)
  53122. ])
  53123. ]),
  53124. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  53125. key: 0,
  53126. class: "batch-stake-box"
  53127. }, [
  53128. vue.createElementVNode(
  53129. "text",
  53130. { class: "batch-label" },
  53131. vue.toDisplayString($setup.t("批量设置金额")),
  53132. 1
  53133. /* TEXT */
  53134. ),
  53135. vue.createElementVNode("view", { class: "batch-input-wrapper" }, [
  53136. vue.withDirectives(vue.createElementVNode("input", {
  53137. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.batchStakeValue = $event),
  53138. class: "batch-input",
  53139. placeholder: $setup.t("请输入金额"),
  53140. type: "number"
  53141. }, null, 8, ["placeholder"]), [
  53142. [vue.vModelText, $setup.batchStakeValue]
  53143. ])
  53144. ]),
  53145. vue.createVNode(_component_u_button, {
  53146. size: "mini",
  53147. type: "primary",
  53148. style: { "margin-left": "10px" },
  53149. onClick: $setup.applyBatchStake
  53150. }, {
  53151. default: vue.withCtx(() => [
  53152. vue.createTextVNode(
  53153. vue.toDisplayString($setup.t("确定")),
  53154. 1
  53155. /* TEXT */
  53156. )
  53157. ]),
  53158. _: 1
  53159. /* STABLE */
  53160. })
  53161. ])) : vue.createCommentVNode("v-if", true)
  53162. ]),
  53163. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  53164. key: 0,
  53165. "scroll-y": "true",
  53166. class: "scroll-view-container"
  53167. }, [
  53168. vue.createElementVNode("view", { class: "bet-list" }, [
  53169. (vue.openBlock(true), vue.createElementBlock(
  53170. vue.Fragment,
  53171. null,
  53172. vue.renderList($setup.selectedBets, (item) => {
  53173. return vue.openBlock(), vue.createElementBlock("view", {
  53174. class: "bet-item",
  53175. key: item.id
  53176. }, [
  53177. vue.createElementVNode("view", { class: "item-header" }, [
  53178. vue.createElementVNode("text", { class: "team-names" }, [
  53179. vue.createTextVNode(
  53180. vue.toDisplayString(item.playName) + " - ",
  53181. 1
  53182. /* TEXT */
  53183. ),
  53184. vue.createElementVNode(
  53185. "text",
  53186. {
  53187. class: vue.normalizeClass($setup.getTextColorClass(item.color))
  53188. },
  53189. vue.toDisplayString(item.number),
  53190. 3
  53191. /* TEXT, CLASS */
  53192. )
  53193. ]),
  53194. vue.createElementVNode("view", {
  53195. class: "close-btn",
  53196. onClick: vue.withModifiers(($event) => $setup.removeSelected(item.id), ["stop"])
  53197. }, [
  53198. vue.createVNode(_component_u_icon, {
  53199. name: "close",
  53200. color: "#666",
  53201. size: "16"
  53202. })
  53203. ], 8, ["onClick"])
  53204. ]),
  53205. vue.createElementVNode("view", { class: "item-info" }, [
  53206. vue.createElementVNode("view", { class: "bet-type" }, [
  53207. vue.createElementVNode(
  53208. "text",
  53209. { class: "type-name" },
  53210. vue.toDisplayString($setup.t("赔率")),
  53211. 1
  53212. /* TEXT */
  53213. ),
  53214. vue.createElementVNode(
  53215. "text",
  53216. {
  53217. class: "limit-text",
  53218. style: { "margin-left": "10px", "font-size": "12px", "color": "#999" }
  53219. },
  53220. vue.toDisplayString($setup.t("单注限额")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10) + " ~ " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  53221. 1
  53222. /* TEXT */
  53223. )
  53224. ]),
  53225. vue.createElementVNode("view", { class: "odds-box" }, [
  53226. vue.createElementVNode(
  53227. "text",
  53228. { class: "odds-val" },
  53229. "@" + vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  53230. 1
  53231. /* TEXT */
  53232. )
  53233. ])
  53234. ]),
  53235. vue.createElementVNode(
  53236. "view",
  53237. {
  53238. class: vue.normalizeClass(["stake-input-box", { "error-border": item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 || item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) || item.maxinum !== void 0 && Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) || Number(item.amount) > $setup.userMoney }])
  53239. },
  53240. [
  53241. vue.createElementVNode("view", {
  53242. class: "stepper-btn",
  53243. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, -10), ["stop"])
  53244. }, "-", 8, ["onClick"]),
  53245. vue.withDirectives(vue.createElementVNode("input", {
  53246. "onUpdate:modelValue": ($event) => item.amount = $event,
  53247. type: "number",
  53248. class: "stake-input",
  53249. placeholder: $setup.t("输入本金"),
  53250. onBlur: ($event) => $setup.validateAmount(item)
  53251. }, null, 40, ["onUpdate:modelValue", "placeholder", "onBlur"]), [
  53252. [vue.vModelText, item.amount]
  53253. ]),
  53254. vue.createElementVNode("view", {
  53255. class: "stepper-btn",
  53256. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, 10), ["stop"])
  53257. }, "+", 8, ["onClick"])
  53258. ],
  53259. 2
  53260. /* CLASS */
  53261. ),
  53262. vue.createElementVNode("view", { class: "item-footer" }, [
  53263. item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 ? (vue.openBlock(), vue.createElementBlock(
  53264. "view",
  53265. {
  53266. key: 0,
  53267. class: "err-msg"
  53268. },
  53269. vue.toDisplayString($setup.t("金额不能小于等于0")),
  53270. 1
  53271. /* TEXT */
  53272. )) : item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) ? (vue.openBlock(), vue.createElementBlock(
  53273. "view",
  53274. {
  53275. key: 1,
  53276. class: "err-msg"
  53277. },
  53278. vue.toDisplayString($setup.t("单注最低限制为")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10),
  53279. 1
  53280. /* TEXT */
  53281. )) : Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) ? (vue.openBlock(), vue.createElementBlock(
  53282. "view",
  53283. {
  53284. key: 2,
  53285. class: "err-msg"
  53286. },
  53287. vue.toDisplayString($setup.t("单注最高限制为")) + " " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  53288. 1
  53289. /* TEXT */
  53290. )) : Number(item.amount) > $setup.userMoney ? (vue.openBlock(), vue.createElementBlock(
  53291. "view",
  53292. {
  53293. key: 3,
  53294. class: "err-msg"
  53295. },
  53296. vue.toDisplayString($setup.t("余额不足")),
  53297. 1
  53298. /* TEXT */
  53299. )) : (vue.openBlock(), vue.createElementBlock("view", {
  53300. key: 4,
  53301. class: "potential-win"
  53302. }, [
  53303. vue.createTextVNode(
  53304. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  53305. 1
  53306. /* TEXT */
  53307. ),
  53308. vue.createElementVNode(
  53309. "text",
  53310. { class: "win-amount" },
  53311. vue.toDisplayString((Number(item.amount) * Number(item.odds)).toFixed(2)),
  53312. 1
  53313. /* TEXT */
  53314. )
  53315. ]))
  53316. ])
  53317. ]);
  53318. }),
  53319. 128
  53320. /* KEYED_FRAGMENT */
  53321. ))
  53322. ]),
  53323. vue.createElementVNode("view", { style: { "height": "100px" } })
  53324. ])) : vue.createCommentVNode("v-if", true),
  53325. $setup.totalBets === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  53326. key: 1,
  53327. class: "empty-sheet"
  53328. }, [
  53329. vue.createElementVNode(
  53330. "text",
  53331. null,
  53332. vue.toDisplayString($setup.t("暂无投注项")),
  53333. 1
  53334. /* TEXT */
  53335. )
  53336. ])) : vue.createCommentVNode("v-if", true),
  53337. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  53338. key: 2,
  53339. class: "sheet-action-bar popup-fixed-footer digital-cart-bottom"
  53340. }, [
  53341. vue.createElementVNode("view", { class: "total-odds-row" }, [
  53342. vue.createElementVNode(
  53343. "text",
  53344. { class: "label" },
  53345. vue.toDisplayString($setup.t("总投注金额")),
  53346. 1
  53347. /* TEXT */
  53348. ),
  53349. vue.createElementVNode(
  53350. "text",
  53351. { class: "val" },
  53352. vue.toDisplayString($setup.totalAmount.toFixed(2)),
  53353. 1
  53354. /* TEXT */
  53355. )
  53356. ]),
  53357. vue.createVNode(_component_u_button, {
  53358. type: "primary",
  53359. onClick: $setup.handleOneClickBet,
  53360. disabled: $setup.isFengpan
  53361. }, {
  53362. default: vue.withCtx(() => [
  53363. vue.createTextVNode(
  53364. vue.toDisplayString($setup.t("立即投注")),
  53365. 1
  53366. /* TEXT */
  53367. )
  53368. ]),
  53369. _: 1
  53370. /* STABLE */
  53371. }, 8, ["disabled"])
  53372. ])) : vue.createCommentVNode("v-if", true)
  53373. ])
  53374. ]),
  53375. _: 1
  53376. /* STABLE */
  53377. }, 8, ["modelValue"]),
  53378. vue.createVNode(_component_u_modal, {
  53379. ref: "safeModalRef",
  53380. modelValue: $setup.showSafeModal,
  53381. "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.showSafeModal = $event),
  53382. "async-close": true,
  53383. title: $setup.t("安全验证"),
  53384. "show-cancel-button": true,
  53385. "confirm-text": $setup.t("确定投注"),
  53386. "cancel-text": $setup.t("取消"),
  53387. "confirm-color": "#f8b932",
  53388. onConfirm: $setup.confirmSubmitBet
  53389. }, {
  53390. default: vue.withCtx(() => [
  53391. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  53392. vue.createElementVNode(
  53393. "text",
  53394. { class: "safe-tips" },
  53395. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  53396. 1
  53397. /* TEXT */
  53398. ),
  53399. vue.createVNode(_component_u_input, {
  53400. modelValue: $setup.safeWord,
  53401. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.safeWord = $event),
  53402. type: "password",
  53403. placeholder: $setup.t("请输入资金密码"),
  53404. border: true,
  53405. "border-color": "#e4e7ed",
  53406. clearable: true,
  53407. "input-align": "center"
  53408. }, null, 8, ["modelValue", "placeholder"])
  53409. ])
  53410. ]),
  53411. _: 1
  53412. /* STABLE */
  53413. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"]),
  53414. vue.createVNode(_component_u_popup, {
  53415. modelValue: $setup.historyPopupVisible,
  53416. "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $setup.historyPopupVisible = $event),
  53417. mode: "center",
  53418. "border-radius": "20",
  53419. mask: true,
  53420. "z-index": 990,
  53421. width: "90%"
  53422. }, {
  53423. default: vue.withCtx(() => [
  53424. vue.createElementVNode("view", { class: "popup-wrapper history-popup" }, [
  53425. vue.createElementVNode(
  53426. "view",
  53427. { class: "p-title" },
  53428. vue.toDisplayString($setup.t("近期开奖记录")),
  53429. 1
  53430. /* TEXT */
  53431. ),
  53432. vue.createElementVNode("scroll-view", {
  53433. "scroll-y": "true",
  53434. class: "history-scroll-container"
  53435. }, [
  53436. vue.createElementVNode("view", { class: "history-list-content" }, [
  53437. (vue.openBlock(true), vue.createElementBlock(
  53438. vue.Fragment,
  53439. null,
  53440. vue.renderList($setup.historyLotteryList, (item, idx) => {
  53441. return vue.openBlock(), vue.createElementBlock("view", {
  53442. class: "history-item",
  53443. key: idx
  53444. }, [
  53445. vue.createElementVNode("view", { class: "h-top" }, [
  53446. vue.createElementVNode(
  53447. "text",
  53448. { class: "h-issue" },
  53449. vue.toDisplayString(item.issue) + vue.toDisplayString($setup.t("期")),
  53450. 1
  53451. /* TEXT */
  53452. ),
  53453. vue.createElementVNode(
  53454. "text",
  53455. { class: "h-time" },
  53456. vue.toDisplayString(item.open_time),
  53457. 1
  53458. /* TEXT */
  53459. )
  53460. ]),
  53461. vue.createElementVNode("view", { class: "balls-grid" }, [
  53462. (vue.openBlock(true), vue.createElementBlock(
  53463. vue.Fragment,
  53464. null,
  53465. vue.renderList(item.lottery_codes.slice(0, 6), (b, i) => {
  53466. return vue.openBlock(), vue.createElementBlock("view", {
  53467. class: "ball-group",
  53468. key: i
  53469. }, [
  53470. vue.createElementVNode(
  53471. "view",
  53472. {
  53473. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(b.color)])
  53474. },
  53475. [
  53476. vue.createElementVNode(
  53477. "view",
  53478. { class: "ball-inner" },
  53479. vue.toDisplayString(b.code),
  53480. 1
  53481. /* TEXT */
  53482. )
  53483. ],
  53484. 2
  53485. /* CLASS */
  53486. ),
  53487. vue.createElementVNode(
  53488. "text",
  53489. { class: "l-zodiac" },
  53490. vue.toDisplayString(b.zodiac),
  53491. 1
  53492. /* TEXT */
  53493. )
  53494. ]);
  53495. }),
  53496. 128
  53497. /* KEYED_FRAGMENT */
  53498. )),
  53499. vue.createElementVNode("text", { class: "plus" }, "+"),
  53500. vue.createElementVNode("view", { class: "ball-group" }, [
  53501. vue.createElementVNode(
  53502. "view",
  53503. {
  53504. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass(item.lottery_codes[6].color)])
  53505. },
  53506. [
  53507. vue.createElementVNode(
  53508. "view",
  53509. { class: "ball-inner" },
  53510. vue.toDisplayString(item.lottery_codes[6].code),
  53511. 1
  53512. /* TEXT */
  53513. )
  53514. ],
  53515. 2
  53516. /* CLASS */
  53517. ),
  53518. vue.createElementVNode(
  53519. "text",
  53520. { class: "l-zodiac" },
  53521. vue.toDisplayString(item.lottery_codes[6].zodiac),
  53522. 1
  53523. /* TEXT */
  53524. )
  53525. ])
  53526. ])
  53527. ]);
  53528. }),
  53529. 128
  53530. /* KEYED_FRAGMENT */
  53531. ))
  53532. ])
  53533. ]),
  53534. vue.createElementVNode(
  53535. "view",
  53536. {
  53537. class: "close-btn-bottom",
  53538. onClick: _cache[11] || (_cache[11] = ($event) => $setup.historyPopupVisible = false)
  53539. },
  53540. vue.toDisplayString($setup.t("关闭")),
  53541. 1
  53542. /* TEXT */
  53543. )
  53544. ])
  53545. ]),
  53546. _: 1
  53547. /* STABLE */
  53548. }, 8, ["modelValue"])
  53549. ]),
  53550. _: 1
  53551. /* STABLE */
  53552. },
  53553. 512
  53554. /* NEED_PATCH */
  53555. )
  53556. ]),
  53557. _: 1
  53558. /* STABLE */
  53559. });
  53560. }
  53561. const PagesTabbarEntertainmentViewNewDigitalIndex = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$7], ["__scopeId", "data-v-0e8825e2"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/NewDigital/index.vue"]]);
  53562. const _sfc_main$7 = {
  53563. __name: "index",
  53564. setup(__props, { expose: __expose }) {
  53565. __expose();
  53566. const router2 = useRouter();
  53567. const { t: t2 } = useI18n();
  53568. const PageContainerRef = vue.ref();
  53569. const pagingRef1 = vue.ref(null);
  53570. const safeModalRef = vue.ref(null);
  53571. const cartPopupVisible = vue.ref(false);
  53572. const showSafeModal = vue.ref(false);
  53573. const historyPopupVisible = vue.ref(false);
  53574. const safeWord = vue.ref("");
  53575. const batchStakeValue = vue.ref(uni.getStorageSync("jisu_lhcBatchStakeCache") || "");
  53576. const userMoney = vue.ref(0);
  53577. const WebsocketData = useWebsocketDataStore();
  53578. const isFengpan = vue.ref(false);
  53579. const numberToZodiacMap = vue.ref({});
  53580. const zodiacToNumberMap = vue.ref({});
  53581. const currentIssue = vue.ref("");
  53582. const gameList = vue.ref([]);
  53583. const historyLotteryList = vue.ref([]);
  53584. const numberList = vue.ref([]);
  53585. const lhcGame = vue.ref({});
  53586. const activeGameIndex = vue.ref(0);
  53587. const activePlayIndex = vue.ref(0);
  53588. const selectedBets = vue.ref(uni.getStorageSync("jisu_lhc_selected_bets") || []);
  53589. vue.watch(selectedBets, (newVal) => {
  53590. uni.setStorageSync("jisu_lhc_selected_bets", newVal);
  53591. }, { deep: true });
  53592. const timeData = vue.ref({ days: 0, hours: "00", minutes: "00", seconds: "00" });
  53593. let countdownTimer = null;
  53594. let remainingSeconds = 0;
  53595. const currentGame = vue.computed(() => gameList.value[activeGameIndex.value] || {});
  53596. const currentPlayName = vue.computed(() => {
  53597. var _a2, _b2;
  53598. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.name) || "";
  53599. });
  53600. const currentPlayId = vue.computed(() => {
  53601. var _a2, _b2;
  53602. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.id) || "";
  53603. });
  53604. const lastDraw = vue.computed(() => historyLotteryList.value[0] || null);
  53605. const isBallStyle = vue.computed(() => {
  53606. const ballGames = [t2("特码"), t2("正码"), t2("正码特"), t2("正码1-6")];
  53607. return ballGames.includes(currentGame.value.name);
  53608. });
  53609. const totalBets = vue.computed(() => selectedBets.value.length);
  53610. const totalAmount = vue.computed(() => {
  53611. return selectedBets.value.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
  53612. });
  53613. const onQuery = async () => {
  53614. var _a2;
  53615. await initHowPlayData();
  53616. await fetchBalance();
  53617. (_a2 = pagingRef1.value) == null ? void 0 : _a2.complete([]);
  53618. };
  53619. const fetchBalance = async () => {
  53620. if (uni.getStorageSync("token")) {
  53621. try {
  53622. const res = await getBalance();
  53623. if (res.code === 1) {
  53624. userMoney.value = Number(res.data.money);
  53625. }
  53626. } catch (error) {
  53627. formatAppLog("error", "at pages/Tabbar/Entertainment/view/SpeedDigital/index.vue:377", "获取余额失败", error);
  53628. }
  53629. }
  53630. };
  53631. const initHowPlayData = async () => {
  53632. var _a2;
  53633. try {
  53634. const [infoRes, playRes] = await Promise.all([
  53635. getLHCInfo(),
  53636. getHowPlay({ type: 4 })
  53637. ]);
  53638. if (infoRes.code === 1 && infoRes.data) {
  53639. numberToZodiacMap.value = infoRes.data.number_to_zodiac || {};
  53640. zodiacToNumberMap.value = infoRes.data.zodiac_to_number || {};
  53641. }
  53642. if (playRes.code === 1 && playRes.data) {
  53643. lhcGame.value = playRes.data;
  53644. currentIssue.value = playRes.data.issue;
  53645. gameList.value = playRes.data.games || [];
  53646. if (playRes.data.history_lottery) {
  53647. historyLotteryList.value = playRes.data.history_lottery.map((item) => ({
  53648. ...item,
  53649. lottery_codes: item.lottery_codes.map((codeStr) => ({
  53650. code: codeStr,
  53651. color: calculateBallColor(codeStr),
  53652. zodiac: numberToZodiacMap.value[codeStr] || ""
  53653. }))
  53654. }));
  53655. }
  53656. if (((_a2 = playRes.data) == null ? void 0 : _a2.countdown) != 0) {
  53657. startCountdown(Number(playRes.data.countdown || 0));
  53658. }
  53659. await fetchPlayInfo();
  53660. }
  53661. } catch (error) {
  53662. formatAppLog("error", "at pages/Tabbar/Entertainment/view/SpeedDigital/index.vue:419", "获取数据失败", error);
  53663. }
  53664. };
  53665. vue.onMounted(() => {
  53666. initHowPlayData();
  53667. fetchBalance();
  53668. });
  53669. onShow(() => {
  53670. batchStakeValue.value = uni.getStorageSync("jisu_lhcBatchStakeCache") || "";
  53671. fetchBalance();
  53672. });
  53673. vue.onUnmounted(() => {
  53674. clearInterval(countdownTimer);
  53675. });
  53676. const handleGameClick = (index) => {
  53677. if (activeGameIndex.value === index)
  53678. return;
  53679. activeGameIndex.value = index;
  53680. activePlayIndex.value = 0;
  53681. fetchPlayInfo();
  53682. };
  53683. const handlePlayClick = (index) => {
  53684. if (activePlayIndex.value === index)
  53685. return;
  53686. activePlayIndex.value = index;
  53687. fetchPlayInfo();
  53688. };
  53689. const fetchPlayInfo = async () => {
  53690. if (!currentPlayId.value)
  53691. return;
  53692. numberList.value = [];
  53693. try {
  53694. const res = await getPlayInfo({ id: currentPlayId.value });
  53695. if (res.code === 1 && res.data) {
  53696. numberList.value = res.data.map((item) => {
  53697. let color2 = "";
  53698. if (isBallStyle.value || !isNaN(item.number)) {
  53699. color2 = calculateBallColor(item.number);
  53700. } else {
  53701. if (item.number.includes(t2("红")))
  53702. color2 = t2("红");
  53703. else if (item.number.includes(t2("蓝")))
  53704. color2 = t2("蓝");
  53705. else if (item.number.includes(t2("绿")))
  53706. color2 = t2("绿");
  53707. }
  53708. let tinyNums = [];
  53709. if (zodiacToNumberMap.value[item.number]) {
  53710. tinyNums = zodiacToNumberMap.value[item.number].map((nStr) => ({
  53711. number: nStr,
  53712. color: calculateBallColor(nStr)
  53713. }));
  53714. }
  53715. const isSelected = selectedBets.value.some((b) => b.id === item.id);
  53716. return {
  53717. id: item.id,
  53718. number: item.number,
  53719. odds: item.odds,
  53720. color: color2,
  53721. flag: isSelected,
  53722. numbers: tinyNums,
  53723. mininum: item.mininum,
  53724. maxinum: item.maxinum
  53725. };
  53726. });
  53727. }
  53728. } catch (error) {
  53729. formatAppLog("error", "at pages/Tabbar/Entertainment/view/SpeedDigital/index.vue:494", "获取玩法失败", error);
  53730. } finally {
  53731. uni.hideLoading();
  53732. }
  53733. };
  53734. const toggleSelect = (index) => {
  53735. if (isFengpan.value)
  53736. return;
  53737. const item = numberList.value[index];
  53738. item.flag = !item.flag;
  53739. if (item.flag) {
  53740. const amountToSet = batchStakeValue.value !== "" ? Number(batchStakeValue.value) : item.mininum !== void 0 ? item.mininum : 10;
  53741. selectedBets.value.push({
  53742. id: item.id,
  53743. gameName: currentGame.value.name,
  53744. playName: currentPlayName.value,
  53745. number: item.number,
  53746. odds: item.odds,
  53747. color: item.color,
  53748. mininum: item.mininum,
  53749. maxinum: item.maxinum,
  53750. amount: amountToSet
  53751. });
  53752. } else {
  53753. selectedBets.value = selectedBets.value.filter((b) => b.id !== item.id);
  53754. }
  53755. };
  53756. const quickSelectWave = (colorStr) => {
  53757. if (isFengpan.value)
  53758. return;
  53759. numberList.value.forEach((item, index) => {
  53760. const shouldSelect = item.color === colorStr;
  53761. if (item.flag !== shouldSelect) {
  53762. toggleSelect(index);
  53763. }
  53764. });
  53765. };
  53766. const randomSelect = () => {
  53767. if (isFengpan.value)
  53768. return;
  53769. const unselectedIndices = [];
  53770. numberList.value.forEach((item, index) => {
  53771. if (!item.flag) {
  53772. unselectedIndices.push(index);
  53773. }
  53774. });
  53775. if (unselectedIndices.length > 0) {
  53776. const randomPos = Math.floor(Math.random() * unselectedIndices.length);
  53777. const targetIndex = unselectedIndices[randomPos];
  53778. toggleSelect(targetIndex);
  53779. } else {
  53780. uni.showToast({ title: t2("所有选项已全选"), icon: "none" });
  53781. }
  53782. };
  53783. const clearSelect = () => {
  53784. numberList.value.forEach((item) => item.flag = false);
  53785. selectedBets.value = [];
  53786. cartPopupVisible.value = false;
  53787. };
  53788. const removeSelected = (id) => {
  53789. selectedBets.value = selectedBets.value.filter((b) => b.id !== id);
  53790. const visibleItem = numberList.value.find((n) => n.id === id);
  53791. if (visibleItem) {
  53792. visibleItem.flag = false;
  53793. }
  53794. if (selectedBets.value.length === 0) {
  53795. cartPopupVisible.value = false;
  53796. }
  53797. };
  53798. const applyBatchStake = () => {
  53799. let val = batchStakeValue.value;
  53800. uni.setStorageSync("jisu_lhcBatchStakeCache", val);
  53801. if (val === "") {
  53802. selectedBets.value.forEach((item) => {
  53803. item.amount = "";
  53804. });
  53805. return;
  53806. }
  53807. let numVal = Number(val);
  53808. if (isNaN(numVal) || numVal <= 0) {
  53809. return uni.showToast({ title: t2("请输入大于0的有效金额"), icon: "none" });
  53810. }
  53811. selectedBets.value.forEach((item) => {
  53812. let itemVal = numVal;
  53813. const min = item.mininum !== void 0 ? item.mininum : 10;
  53814. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  53815. if (itemVal < min) {
  53816. itemVal = min;
  53817. }
  53818. if (itemVal > max) {
  53819. itemVal = max;
  53820. }
  53821. if (itemVal > userMoney.value) {
  53822. itemVal = userMoney.value;
  53823. uni.showToast({ title: t2("余额不足"), icon: "none" });
  53824. }
  53825. item.amount = itemVal;
  53826. });
  53827. };
  53828. const validateAmount = (item) => {
  53829. const val = Number(item.amount);
  53830. const min = item.mininum !== void 0 ? item.mininum : 10;
  53831. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  53832. if (isNaN(val) || val <= 0) {
  53833. item.amount = "";
  53834. } else if (val < min) {
  53835. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  53836. item.amount = min;
  53837. } else if (val > max) {
  53838. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  53839. item.amount = max;
  53840. } else if (val > userMoney.value) {
  53841. uni.showToast({ title: t2("余额不足"), icon: "none" });
  53842. item.amount = userMoney.value;
  53843. }
  53844. };
  53845. const changeAmount = (item, delta) => {
  53846. let val = Number(item.amount) || 0;
  53847. val += delta;
  53848. const min = item.mininum !== void 0 ? item.mininum : 10;
  53849. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  53850. if (val < 0) {
  53851. val = 0;
  53852. item.amount = "";
  53853. return;
  53854. }
  53855. if (val > 0 && val < min) {
  53856. val = min;
  53857. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  53858. } else if (val > max) {
  53859. val = max;
  53860. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  53861. } else if (val > userMoney.value) {
  53862. val = userMoney.value;
  53863. uni.showToast({ title: t2("余额不足"), icon: "none" });
  53864. }
  53865. item.amount = val || "";
  53866. };
  53867. const openCartPopup = () => {
  53868. if (totalBets.value === 0)
  53869. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  53870. cartPopupVisible.value = true;
  53871. };
  53872. const handleOneClickBet = () => {
  53873. if (!uni.getStorageSync("token")) {
  53874. uni.showToast({
  53875. title: t2("请先登录"),
  53876. icon: "none"
  53877. });
  53878. return;
  53879. }
  53880. if (isFengpan.value)
  53881. return;
  53882. if (totalBets.value === 0) {
  53883. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  53884. }
  53885. if (totalAmount.value > userMoney.value) {
  53886. return uni.showToast({ title: t2("总投注金额超过可用余额"), icon: "none" });
  53887. }
  53888. const invalidItems = selectedBets.value.filter((item) => {
  53889. const val = Number(item.amount);
  53890. const min = item.mininum !== void 0 ? item.mininum : 10;
  53891. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  53892. return !val || val <= 0 || val < min || val > max || val > userMoney.value;
  53893. });
  53894. if (invalidItems.length > 0) {
  53895. if (!cartPopupVisible.value) {
  53896. cartPopupVisible.value = true;
  53897. }
  53898. return uni.showToast({ title: t2("请检查下注金额、限额及余额"), icon: "none" });
  53899. }
  53900. safeWord.value = "";
  53901. cartPopupVisible.value = false;
  53902. setTimeout(() => {
  53903. confirmSubmitBet();
  53904. }, 300);
  53905. };
  53906. const confirmSubmitBet = async () => {
  53907. uni.showModal({
  53908. title: t2("提示"),
  53909. content: t2("确认提交吗?"),
  53910. success: async (res) => {
  53911. var _a2, _b2, _c;
  53912. if (res.confirm) {
  53913. const payloadData = selectedBets.value.map((item) => ({
  53914. id: item.id,
  53915. amount: Number(item.amount)
  53916. }));
  53917. try {
  53918. const res2 = await submitBetCart({ data: payloadData, safe_word: safeWord.value, type: 4 });
  53919. if (res2.code === 1) {
  53920. showSafeModal.value = false;
  53921. clearSelect();
  53922. fetchBalance();
  53923. (_a2 = PageContainerRef.value) == null ? void 0 : _a2.getData();
  53924. } else {
  53925. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  53926. }
  53927. } catch (error) {
  53928. (_c = safeModalRef.value) == null ? void 0 : _c.clearLoading();
  53929. }
  53930. }
  53931. }
  53932. });
  53933. };
  53934. const goToOrder = () => {
  53935. router2.push({ name: "AllHistory", query: { tab: 2 } });
  53936. };
  53937. const startCountdown = (seconds) => {
  53938. remainingSeconds = seconds;
  53939. clearInterval(countdownTimer);
  53940. countdownTimer = setInterval(() => {
  53941. formatAppLog("log", "at pages/Tabbar/Entertainment/view/SpeedDigital/index.vue:748", remainingSeconds, 622);
  53942. if (remainingSeconds > 0) {
  53943. remainingSeconds--;
  53944. const d = Math.floor(remainingSeconds / 86400);
  53945. const h = Math.floor(remainingSeconds % 86400 / 3600);
  53946. const m = Math.floor(remainingSeconds % 3600 / 60);
  53947. const s = remainingSeconds % 60;
  53948. timeData.value.days = d;
  53949. timeData.value.hours = h.toString().padStart(2, "0");
  53950. timeData.value.minutes = m.toString().padStart(2, "0");
  53951. timeData.value.seconds = s.toString().padStart(2, "0");
  53952. } else {
  53953. clearInterval(countdownTimer);
  53954. initHowPlayData();
  53955. }
  53956. }, 1e3);
  53957. };
  53958. const calculateBallColor = (numStr) => {
  53959. const num = parseInt(numStr, 10);
  53960. if (isNaN(num))
  53961. return "";
  53962. const reds = [1, 2, 7, 8, 12, 13, 18, 19, 23, 24, 29, 30, 34, 35, 40, 45, 46];
  53963. const blues = [3, 4, 9, 10, 14, 15, 20, 25, 26, 31, 36, 37, 41, 42, 47, 48];
  53964. const greens = [5, 6, 11, 16, 17, 21, 22, 27, 28, 32, 33, 38, 39, 43, 44, 49];
  53965. if (reds.includes(num))
  53966. return t2("红");
  53967. if (blues.includes(num))
  53968. return t2("蓝");
  53969. if (greens.includes(num))
  53970. return t2("绿");
  53971. return "";
  53972. };
  53973. const getBgColorClass = (colorName) => {
  53974. if (colorName === t2("红"))
  53975. return "bg-red";
  53976. if (colorName === t2("蓝"))
  53977. return "bg-blue";
  53978. if (colorName === t2("绿"))
  53979. return "bg-green";
  53980. return "bg-gray";
  53981. };
  53982. const getTextColorClass = (colorName) => {
  53983. if (colorName === t2("红"))
  53984. return "text-red";
  53985. if (colorName === t2("蓝"))
  53986. return "text-blue";
  53987. if (colorName === t2("绿"))
  53988. return "text-green";
  53989. return "";
  53990. };
  53991. vue.watch(() => WebsocketData.globalData, (data) => {
  53992. const res = typeof data === "string" ? JSON.parse(data) : data;
  53993. if (res && res.type === "jisu_lhc_fengpan") {
  53994. isFengpan.value = true;
  53995. } else if (res && res.type === "jisu_lhc_kaipan") {
  53996. isFengpan.value = false;
  53997. }
  53998. });
  53999. gameLotteryStatus({ type: 6 }).then((res) => {
  54000. if (res.data.is_kaipan == 0) {
  54001. isFengpan.value = true;
  54002. } else if (res.data.is_kaipan == 1) {
  54003. isFengpan.value = false;
  54004. }
  54005. });
  54006. const __returned__ = { router: router2, t: t2, PageContainerRef, pagingRef1, safeModalRef, cartPopupVisible, showSafeModal, historyPopupVisible, safeWord, batchStakeValue, userMoney, WebsocketData, isFengpan, numberToZodiacMap, zodiacToNumberMap, currentIssue, gameList, historyLotteryList, numberList, lhcGame, activeGameIndex, activePlayIndex, selectedBets, timeData, get countdownTimer() {
  54007. return countdownTimer;
  54008. }, set countdownTimer(v) {
  54009. countdownTimer = v;
  54010. }, get remainingSeconds() {
  54011. return remainingSeconds;
  54012. }, set remainingSeconds(v) {
  54013. remainingSeconds = v;
  54014. }, currentGame, currentPlayName, currentPlayId, lastDraw, isBallStyle, totalBets, totalAmount, onQuery, fetchBalance, initHowPlayData, handleGameClick, handlePlayClick, fetchPlayInfo, toggleSelect, quickSelectWave, randomSelect, clearSelect, removeSelected, applyBatchStake, validateAmount, changeAmount, openCartPopup, handleOneClickBet, confirmSubmitBet, goToOrder, startCountdown, calculateBallColor, getBgColorClass, getTextColorClass, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, watch: vue.watch, get useI18n() {
  54015. return useI18n;
  54016. }, get onShow() {
  54017. return onShow;
  54018. }, get getHowPlay() {
  54019. return getHowPlay;
  54020. }, get getLHCInfo() {
  54021. return getLHCInfo;
  54022. }, get getPlayInfo() {
  54023. return getPlayInfo;
  54024. }, get submitBetCart() {
  54025. return submitBetCart;
  54026. }, get getBalance() {
  54027. return getBalance;
  54028. }, get useWebsocketDataStore() {
  54029. return useWebsocketDataStore;
  54030. }, get gameLotteryStatus() {
  54031. return gameLotteryStatus;
  54032. } };
  54033. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  54034. return __returned__;
  54035. }
  54036. };
  54037. function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
  54038. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  54039. const _component_u_icon = __unplugin_components_0$5;
  54040. const _component_u_button = __unplugin_components_2$1;
  54041. const _component_u_popup = __unplugin_components_2$3;
  54042. const _component_u_input = __unplugin_components_3$2;
  54043. const _component_u_modal = __unplugin_components_4$3;
  54044. const _component_PageContainer = PageContainer;
  54045. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  54046. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  54047. default: vue.withCtx(() => [
  54048. vue.createVNode(
  54049. _component_PageContainer,
  54050. {
  54051. ref: "PageContainerRef",
  54052. navTitle: "极速六合彩"
  54053. },
  54054. {
  54055. default: vue.withCtx(() => [
  54056. vue.createVNode(
  54057. _component_z_paging,
  54058. {
  54059. ref: "pagingRef1",
  54060. onQuery: $setup.onQuery,
  54061. fixed: false,
  54062. "refresher-only": true,
  54063. "refresher-enabled": true,
  54064. "loading-more-enabled": false,
  54065. "auto-show-back-to-top": true
  54066. },
  54067. {
  54068. refresher: vue.withCtx(() => [
  54069. vue.createElementVNode("view", { class: "refresher-ui" }, [
  54070. vue.createElementVNode("view", { class: "spin-loader" }),
  54071. vue.createElementVNode(
  54072. "text",
  54073. { class: "refresher-text" },
  54074. vue.toDisplayString($setup.t("获取最新数据...")),
  54075. 1
  54076. /* TEXT */
  54077. )
  54078. ])
  54079. ]),
  54080. default: vue.withCtx(() => [
  54081. vue.createElementVNode("view", { class: "app-digital-container" }, [
  54082. vue.createElementVNode("view", { class: "calc-card lottery-dashboard" }, [
  54083. vue.createElementVNode("view", { class: "dash-top" }, [
  54084. vue.createElementVNode("view", { class: "lottery-title" }, [
  54085. vue.createElementVNode("text", { class: "issue-text" }, [
  54086. vue.createTextVNode(
  54087. vue.toDisplayString($setup.t("距")) + " ",
  54088. 1
  54089. /* TEXT */
  54090. ),
  54091. vue.createElementVNode(
  54092. "text",
  54093. { class: "highlight" },
  54094. vue.toDisplayString($setup.lhcGame.next_issue),
  54095. 1
  54096. /* TEXT */
  54097. ),
  54098. vue.createTextVNode(
  54099. " " + vue.toDisplayString($setup.t("期截止")),
  54100. 1
  54101. /* TEXT */
  54102. )
  54103. ])
  54104. ]),
  54105. vue.createElementVNode("view", { class: "timer-box" }, [
  54106. !$setup.isFengpan ? (vue.openBlock(), vue.createElementBlock(
  54107. vue.Fragment,
  54108. { key: 0 },
  54109. [
  54110. $setup.timeData.days > 0 ? (vue.openBlock(), vue.createElementBlock(
  54111. vue.Fragment,
  54112. { key: 0 },
  54113. [
  54114. vue.createElementVNode(
  54115. "view",
  54116. { class: "digit" },
  54117. vue.toDisplayString($setup.timeData.days),
  54118. 1
  54119. /* TEXT */
  54120. ),
  54121. vue.createElementVNode(
  54122. "text",
  54123. { class: "colon" },
  54124. vue.toDisplayString($setup.t("天")),
  54125. 1
  54126. /* TEXT */
  54127. )
  54128. ],
  54129. 64
  54130. /* STABLE_FRAGMENT */
  54131. )) : vue.createCommentVNode("v-if", true),
  54132. vue.createElementVNode(
  54133. "view",
  54134. { class: "digit" },
  54135. vue.toDisplayString($setup.timeData.hours),
  54136. 1
  54137. /* TEXT */
  54138. ),
  54139. vue.createElementVNode("text", { class: "colon" }, ":"),
  54140. vue.createElementVNode(
  54141. "view",
  54142. { class: "digit" },
  54143. vue.toDisplayString($setup.timeData.minutes),
  54144. 1
  54145. /* TEXT */
  54146. ),
  54147. vue.createElementVNode("text", { class: "colon" }, ":"),
  54148. vue.createElementVNode(
  54149. "view",
  54150. { class: "digit" },
  54151. vue.toDisplayString($setup.timeData.seconds),
  54152. 1
  54153. /* TEXT */
  54154. )
  54155. ],
  54156. 64
  54157. /* STABLE_FRAGMENT */
  54158. )) : (vue.openBlock(), vue.createElementBlock(
  54159. "text",
  54160. {
  54161. key: 1,
  54162. class: "fengpan-text"
  54163. },
  54164. vue.toDisplayString($setup.t("封盘中")),
  54165. 1
  54166. /* TEXT */
  54167. ))
  54168. ])
  54169. ]),
  54170. $setup.lastDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  54171. key: 0,
  54172. class: "dash-bottom"
  54173. }, [
  54174. vue.createElementVNode("view", { class: "result-header" }, [
  54175. vue.createElementVNode(
  54176. "text",
  54177. { class: "r-title" },
  54178. vue.toDisplayString($setup.t("第")) + " " + vue.toDisplayString($setup.lhcGame.issue) + " " + vue.toDisplayString($setup.t("期开奖")),
  54179. 1
  54180. /* TEXT */
  54181. ),
  54182. vue.createElementVNode("view", { class: "actions" }, [
  54183. vue.createElementVNode(
  54184. "text",
  54185. {
  54186. class: "action-btn tmc",
  54187. onClick: _cache[0] || (_cache[0] = ($event) => $setup.historyPopupVisible = true)
  54188. },
  54189. vue.toDisplayString($setup.t("近期开奖")),
  54190. 1
  54191. /* TEXT */
  54192. ),
  54193. vue.createElementVNode("text", { class: "action-divider" }, "|"),
  54194. vue.createElementVNode(
  54195. "text",
  54196. {
  54197. class: "action-btn tmc",
  54198. onClick: $setup.goToOrder
  54199. },
  54200. vue.toDisplayString($setup.t("购彩记录")),
  54201. 1
  54202. /* TEXT */
  54203. )
  54204. ])
  54205. ]),
  54206. vue.createElementVNode("view", { class: "balls-display" }, [
  54207. (vue.openBlock(true), vue.createElementBlock(
  54208. vue.Fragment,
  54209. null,
  54210. vue.renderList($setup.lastDraw.lottery_codes.slice(0, 6), (ball, idx) => {
  54211. return vue.openBlock(), vue.createElementBlock("view", {
  54212. class: "ball-group",
  54213. key: "norm_" + idx
  54214. }, [
  54215. vue.createElementVNode(
  54216. "view",
  54217. {
  54218. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(ball.color)])
  54219. },
  54220. [
  54221. vue.createElementVNode(
  54222. "view",
  54223. { class: "ball-inner" },
  54224. vue.toDisplayString(ball.code),
  54225. 1
  54226. /* TEXT */
  54227. )
  54228. ],
  54229. 2
  54230. /* CLASS */
  54231. ),
  54232. vue.createElementVNode(
  54233. "text",
  54234. { class: "l-zodiac" },
  54235. vue.toDisplayString(ball.zodiac),
  54236. 1
  54237. /* TEXT */
  54238. )
  54239. ]);
  54240. }),
  54241. 128
  54242. /* KEYED_FRAGMENT */
  54243. )),
  54244. vue.createElementVNode("text", { class: "plus-icon" }, "+"),
  54245. $setup.lastDraw.lottery_codes[6] ? (vue.openBlock(), vue.createElementBlock("view", {
  54246. key: 0,
  54247. class: "ball-group special"
  54248. }, [
  54249. vue.createElementVNode(
  54250. "view",
  54251. {
  54252. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass($setup.lastDraw.lottery_codes[6].color)])
  54253. },
  54254. [
  54255. vue.createElementVNode(
  54256. "view",
  54257. { class: "ball-inner" },
  54258. vue.toDisplayString($setup.lastDraw.lottery_codes[6].code),
  54259. 1
  54260. /* TEXT */
  54261. )
  54262. ],
  54263. 2
  54264. /* CLASS */
  54265. ),
  54266. vue.createElementVNode(
  54267. "text",
  54268. { class: "l-zodiac" },
  54269. vue.toDisplayString($setup.lastDraw.lottery_codes[6].zodiac),
  54270. 1
  54271. /* TEXT */
  54272. )
  54273. ])) : vue.createCommentVNode("v-if", true)
  54274. ])
  54275. ])) : vue.createCommentVNode("v-if", true)
  54276. ]),
  54277. $setup.gameList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  54278. key: 0,
  54279. class: "play-tabs-container"
  54280. }, [
  54281. vue.createElementVNode("scroll-view", {
  54282. "scroll-x": "",
  54283. class: "scroll-x-box",
  54284. "show-scrollbar": false
  54285. }, [
  54286. vue.createElementVNode("view", { class: "main-tabs" }, [
  54287. (vue.openBlock(true), vue.createElementBlock(
  54288. vue.Fragment,
  54289. null,
  54290. vue.renderList($setup.gameList, (game, index) => {
  54291. return vue.openBlock(), vue.createElementBlock("view", {
  54292. class: vue.normalizeClass(["play-tab", { "is-active": $setup.activeGameIndex === index }]),
  54293. key: game.id,
  54294. onClick: ($event) => $setup.handleGameClick(index)
  54295. }, vue.toDisplayString(game.name), 11, ["onClick"]);
  54296. }),
  54297. 128
  54298. /* KEYED_FRAGMENT */
  54299. ))
  54300. ])
  54301. ]),
  54302. $setup.currentGame.gameplay && $setup.currentGame.gameplay.length > 1 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  54303. key: 0,
  54304. "scroll-x": "",
  54305. class: "scroll-x-box",
  54306. "show-scrollbar": false
  54307. }, [
  54308. vue.createElementVNode("view", { class: "sub-tabs" }, [
  54309. (vue.openBlock(true), vue.createElementBlock(
  54310. vue.Fragment,
  54311. null,
  54312. vue.renderList($setup.currentGame.gameplay, (play, index) => {
  54313. return vue.openBlock(), vue.createElementBlock("view", {
  54314. class: vue.normalizeClass(["sub-tab", { "is-active": $setup.activePlayIndex === index }]),
  54315. key: play.id,
  54316. onClick: ($event) => $setup.handlePlayClick(index)
  54317. }, vue.toDisplayString(play.name), 11, ["onClick"]);
  54318. }),
  54319. 128
  54320. /* KEYED_FRAGMENT */
  54321. ))
  54322. ])
  54323. ])) : vue.createCommentVNode("v-if", true)
  54324. ])) : vue.createCommentVNode("v-if", true),
  54325. vue.createElementVNode("view", { class: "play-grid-wrap" }, [
  54326. vue.createElementVNode("view", { class: "play-group-card" }, [
  54327. [$setup.t("特码"), $setup.t("正码"), $setup.t("正码特")].includes($setup.currentGame.name) ? (vue.openBlock(), vue.createElementBlock("view", {
  54328. key: 0,
  54329. class: "calc-tabs quick-actions"
  54330. }, [
  54331. vue.createElementVNode(
  54332. "view",
  54333. {
  54334. class: vue.normalizeClass(["c-tab red", { "is-disabled": $setup.isFengpan }]),
  54335. onClick: _cache[1] || (_cache[1] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("红")))
  54336. },
  54337. vue.toDisplayString($setup.t("红波")),
  54338. 3
  54339. /* TEXT, CLASS */
  54340. ),
  54341. vue.createElementVNode(
  54342. "view",
  54343. {
  54344. class: vue.normalizeClass(["c-tab blue", { "is-disabled": $setup.isFengpan }]),
  54345. onClick: _cache[2] || (_cache[2] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("蓝")))
  54346. },
  54347. vue.toDisplayString($setup.t("蓝波")),
  54348. 3
  54349. /* TEXT, CLASS */
  54350. ),
  54351. vue.createElementVNode(
  54352. "view",
  54353. {
  54354. class: vue.normalizeClass(["c-tab green", { "is-disabled": $setup.isFengpan }]),
  54355. onClick: _cache[3] || (_cache[3] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("绿")))
  54356. },
  54357. vue.toDisplayString($setup.t("绿波")),
  54358. 3
  54359. /* TEXT, CLASS */
  54360. )
  54361. ])) : vue.createCommentVNode("v-if", true),
  54362. vue.createElementVNode(
  54363. "view",
  54364. {
  54365. class: vue.normalizeClass(["number-grid", $setup.isBallStyle ? "is-ball-grid" : "is-box-grid"])
  54366. },
  54367. [
  54368. (vue.openBlock(true), vue.createElementBlock(
  54369. vue.Fragment,
  54370. null,
  54371. vue.renderList($setup.numberList, (item, index) => {
  54372. return vue.openBlock(), vue.createElementBlock("view", {
  54373. class: vue.normalizeClass(["rule-btn num-item", { "is-active": item.flag, "is-disabled": $setup.isFengpan }]),
  54374. key: item.id,
  54375. onClick: ($event) => !$setup.isFengpan && $setup.toggleSelect(index)
  54376. }, [
  54377. $setup.isBallStyle ? (vue.openBlock(), vue.createElementBlock(
  54378. vue.Fragment,
  54379. { key: 0 },
  54380. [
  54381. vue.createElementVNode(
  54382. "view",
  54383. {
  54384. class: vue.normalizeClass(["ball-wrapper", $setup.getBgColorClass(item.color)])
  54385. },
  54386. [
  54387. vue.createElementVNode(
  54388. "text",
  54389. { class: "ball-text" },
  54390. vue.toDisplayString(item.number),
  54391. 1
  54392. /* TEXT */
  54393. )
  54394. ],
  54395. 2
  54396. /* CLASS */
  54397. ),
  54398. vue.createElementVNode(
  54399. "text",
  54400. { class: "odds-text" },
  54401. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  54402. 1
  54403. /* TEXT */
  54404. )
  54405. ],
  54406. 64
  54407. /* STABLE_FRAGMENT */
  54408. )) : (vue.openBlock(), vue.createElementBlock(
  54409. vue.Fragment,
  54410. { key: 1 },
  54411. [
  54412. vue.createElementVNode("view", { class: "box-top" }, [
  54413. vue.createElementVNode(
  54414. "text",
  54415. {
  54416. class: vue.normalizeClass(["box-name", $setup.getTextColorClass(item.color)])
  54417. },
  54418. vue.toDisplayString(item.number),
  54419. 3
  54420. /* TEXT, CLASS */
  54421. ),
  54422. vue.createElementVNode(
  54423. "text",
  54424. { class: "box-odds" },
  54425. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  54426. 1
  54427. /* TEXT */
  54428. )
  54429. ]),
  54430. item.numbers && item.numbers.length ? (vue.openBlock(), vue.createElementBlock("view", {
  54431. key: 0,
  54432. class: "box-bottom"
  54433. }, [
  54434. (vue.openBlock(true), vue.createElementBlock(
  54435. vue.Fragment,
  54436. null,
  54437. vue.renderList(item.numbers, (numObj, nIdx) => {
  54438. return vue.openBlock(), vue.createElementBlock(
  54439. "text",
  54440. {
  54441. key: nIdx,
  54442. class: vue.normalizeClass(["mini-num", $setup.getTextColorClass(numObj.color)])
  54443. },
  54444. vue.toDisplayString(numObj.number),
  54445. 3
  54446. /* TEXT, CLASS */
  54447. );
  54448. }),
  54449. 128
  54450. /* KEYED_FRAGMENT */
  54451. ))
  54452. ])) : vue.createCommentVNode("v-if", true)
  54453. ],
  54454. 64
  54455. /* STABLE_FRAGMENT */
  54456. ))
  54457. ], 10, ["onClick"]);
  54458. }),
  54459. 128
  54460. /* KEYED_FRAGMENT */
  54461. ))
  54462. ],
  54463. 2
  54464. /* CLASS */
  54465. )
  54466. ])
  54467. ]),
  54468. vue.createElementVNode("view", { style: { "height": "80px" } })
  54469. ]),
  54470. vue.createElementVNode("view", { class: "digital-bottom" })
  54471. ]),
  54472. _: 1
  54473. /* STABLE */
  54474. },
  54475. 512
  54476. /* NEED_PATCH */
  54477. ),
  54478. !$setup.cartPopupVisible ? (vue.openBlock(), vue.createElementBlock("view", {
  54479. key: 0,
  54480. class: "sticky-header-bar",
  54481. onClick: $setup.openCartPopup
  54482. }, [
  54483. vue.createElementVNode("view", { class: "betting-sheet-header" }, [
  54484. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  54485. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  54486. "view",
  54487. {
  54488. key: 0,
  54489. class: "sheet-badge"
  54490. },
  54491. vue.toDisplayString($setup.totalBets),
  54492. 1
  54493. /* TEXT */
  54494. )) : vue.createCommentVNode("v-if", true),
  54495. vue.createElementVNode(
  54496. "text",
  54497. { class: "header-text" },
  54498. vue.toDisplayString($setup.t("已选注单")),
  54499. 1
  54500. /* TEXT */
  54501. ),
  54502. vue.createVNode(_component_u_icon, {
  54503. name: "arrow-up",
  54504. color: "#666"
  54505. })
  54506. ]),
  54507. vue.createElementVNode("view", {
  54508. class: "betting-sheet-header-right",
  54509. style: { "display": "flex", "align-items": "center" }
  54510. }, [
  54511. vue.createElementVNode(
  54512. "view",
  54513. {
  54514. class: vue.normalizeClass(["btn-action", { "is-disabled": $setup.isFengpan }]),
  54515. style: { "margin-right": "10px", "background": "#6EC149", "color": "#fff" },
  54516. onClick: _cache[4] || (_cache[4] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.randomSelect(), ["stop"]))
  54517. },
  54518. vue.toDisplayString($setup.t("机选")),
  54519. 3
  54520. /* TEXT, CLASS */
  54521. ),
  54522. vue.createElementVNode(
  54523. "view",
  54524. {
  54525. class: vue.normalizeClass(["btn-action bet-btn", { "is-disabled": $setup.isFengpan }]),
  54526. style: { "background-color": "#f8b932", "color": "#fff", "border-color": "#f8b932" },
  54527. onClick: _cache[5] || (_cache[5] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.openCartPopup(), ["stop"]))
  54528. },
  54529. vue.toDisplayString($setup.t("下注")),
  54530. 3
  54531. /* TEXT, CLASS */
  54532. )
  54533. ])
  54534. ])
  54535. ])) : vue.createCommentVNode("v-if", true),
  54536. vue.createVNode(_component_u_popup, {
  54537. modelValue: $setup.cartPopupVisible,
  54538. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.cartPopupVisible = $event),
  54539. mode: "bottom",
  54540. "border-radius": "24",
  54541. mask: true,
  54542. "mask-close-able": true,
  54543. "z-index": 990,
  54544. "safe-area-inset-bottom": true,
  54545. height: "75%"
  54546. }, {
  54547. default: vue.withCtx(() => [
  54548. vue.createElementVNode("view", { class: "popup-cart-layout" }, [
  54549. vue.createElementVNode("view", { class: "popup-fixed-header" }, [
  54550. vue.createElementVNode("view", {
  54551. class: "betting-sheet-header border-bottom",
  54552. onClick: _cache[6] || (_cache[6] = ($event) => $setup.cartPopupVisible = false)
  54553. }, [
  54554. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  54555. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  54556. "view",
  54557. {
  54558. key: 0,
  54559. class: "sheet-badge"
  54560. },
  54561. vue.toDisplayString($setup.totalBets),
  54562. 1
  54563. /* TEXT */
  54564. )) : vue.createCommentVNode("v-if", true),
  54565. vue.createElementVNode(
  54566. "text",
  54567. { class: "header-text" },
  54568. vue.toDisplayString($setup.t("已选注单明细")),
  54569. 1
  54570. /* TEXT */
  54571. ),
  54572. vue.createVNode(_component_u_icon, {
  54573. name: "arrow-down",
  54574. color: "#666"
  54575. })
  54576. ]),
  54577. vue.createElementVNode("view", {
  54578. class: "betting-sheet-header-right",
  54579. style: { "display": "flex", "align-items": "center" }
  54580. }, [
  54581. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  54582. key: 0,
  54583. class: "settings-btn",
  54584. onClick: vue.withModifiers($setup.clearSelect, ["stop"])
  54585. }, [
  54586. vue.createElementVNode(
  54587. "text",
  54588. {
  54589. style: { "font-size": "12px" },
  54590. class: "tmc"
  54591. },
  54592. vue.toDisplayString($setup.t("清空")),
  54593. 1
  54594. /* TEXT */
  54595. )
  54596. ])) : vue.createCommentVNode("v-if", true)
  54597. ])
  54598. ]),
  54599. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  54600. key: 0,
  54601. class: "batch-stake-box"
  54602. }, [
  54603. vue.createElementVNode(
  54604. "text",
  54605. { class: "batch-label" },
  54606. vue.toDisplayString($setup.t("批量设置金额")),
  54607. 1
  54608. /* TEXT */
  54609. ),
  54610. vue.createElementVNode("view", { class: "batch-input-wrapper" }, [
  54611. vue.withDirectives(vue.createElementVNode("input", {
  54612. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.batchStakeValue = $event),
  54613. class: "batch-input",
  54614. placeholder: $setup.t("请输入金额"),
  54615. type: "number"
  54616. }, null, 8, ["placeholder"]), [
  54617. [vue.vModelText, $setup.batchStakeValue]
  54618. ])
  54619. ]),
  54620. vue.createVNode(_component_u_button, {
  54621. size: "mini",
  54622. type: "primary",
  54623. style: { "margin-left": "10px" },
  54624. onClick: $setup.applyBatchStake
  54625. }, {
  54626. default: vue.withCtx(() => [
  54627. vue.createTextVNode(
  54628. vue.toDisplayString($setup.t("确定")),
  54629. 1
  54630. /* TEXT */
  54631. )
  54632. ]),
  54633. _: 1
  54634. /* STABLE */
  54635. })
  54636. ])) : vue.createCommentVNode("v-if", true)
  54637. ]),
  54638. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  54639. key: 0,
  54640. "scroll-y": "true",
  54641. class: "scroll-view-container"
  54642. }, [
  54643. vue.createElementVNode("view", { class: "bet-list" }, [
  54644. (vue.openBlock(true), vue.createElementBlock(
  54645. vue.Fragment,
  54646. null,
  54647. vue.renderList($setup.selectedBets, (item) => {
  54648. return vue.openBlock(), vue.createElementBlock("view", {
  54649. class: "bet-item",
  54650. key: item.id
  54651. }, [
  54652. vue.createElementVNode("view", { class: "item-header" }, [
  54653. vue.createElementVNode("text", { class: "team-names" }, [
  54654. vue.createTextVNode(
  54655. vue.toDisplayString(item.playName) + " - ",
  54656. 1
  54657. /* TEXT */
  54658. ),
  54659. vue.createElementVNode(
  54660. "text",
  54661. {
  54662. class: vue.normalizeClass($setup.getTextColorClass(item.color))
  54663. },
  54664. vue.toDisplayString(item.number),
  54665. 3
  54666. /* TEXT, CLASS */
  54667. )
  54668. ]),
  54669. vue.createElementVNode("view", {
  54670. class: "close-btn",
  54671. onClick: vue.withModifiers(($event) => $setup.removeSelected(item.id), ["stop"])
  54672. }, [
  54673. vue.createVNode(_component_u_icon, {
  54674. name: "close",
  54675. color: "#666",
  54676. size: "16"
  54677. })
  54678. ], 8, ["onClick"])
  54679. ]),
  54680. vue.createElementVNode("view", { class: "item-info" }, [
  54681. vue.createElementVNode("view", { class: "bet-type" }, [
  54682. vue.createElementVNode(
  54683. "text",
  54684. { class: "type-name" },
  54685. vue.toDisplayString($setup.t("赔率")),
  54686. 1
  54687. /* TEXT */
  54688. ),
  54689. vue.createElementVNode(
  54690. "text",
  54691. {
  54692. class: "limit-text",
  54693. style: { "margin-left": "10px", "font-size": "12px", "color": "#999" }
  54694. },
  54695. vue.toDisplayString($setup.t("单注限额")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10) + " ~ " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  54696. 1
  54697. /* TEXT */
  54698. )
  54699. ]),
  54700. vue.createElementVNode("view", { class: "odds-box" }, [
  54701. vue.createElementVNode(
  54702. "text",
  54703. { class: "odds-val" },
  54704. "@" + vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  54705. 1
  54706. /* TEXT */
  54707. )
  54708. ])
  54709. ]),
  54710. vue.createElementVNode(
  54711. "view",
  54712. {
  54713. class: vue.normalizeClass(["stake-input-box", { "error-border": item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 || item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) || item.maxinum !== void 0 && Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) || Number(item.amount) > $setup.userMoney }])
  54714. },
  54715. [
  54716. vue.createElementVNode("view", {
  54717. class: "stepper-btn",
  54718. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, -10), ["stop"])
  54719. }, "-", 8, ["onClick"]),
  54720. vue.withDirectives(vue.createElementVNode("input", {
  54721. "onUpdate:modelValue": ($event) => item.amount = $event,
  54722. type: "number",
  54723. class: "stake-input",
  54724. placeholder: $setup.t("输入本金"),
  54725. onBlur: ($event) => $setup.validateAmount(item)
  54726. }, null, 40, ["onUpdate:modelValue", "placeholder", "onBlur"]), [
  54727. [vue.vModelText, item.amount]
  54728. ]),
  54729. vue.createElementVNode("view", {
  54730. class: "stepper-btn",
  54731. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, 10), ["stop"])
  54732. }, "+", 8, ["onClick"])
  54733. ],
  54734. 2
  54735. /* CLASS */
  54736. ),
  54737. vue.createElementVNode("view", { class: "item-footer" }, [
  54738. item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 ? (vue.openBlock(), vue.createElementBlock(
  54739. "view",
  54740. {
  54741. key: 0,
  54742. class: "err-msg"
  54743. },
  54744. vue.toDisplayString($setup.t("金额不能小于等于0")),
  54745. 1
  54746. /* TEXT */
  54747. )) : item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) ? (vue.openBlock(), vue.createElementBlock(
  54748. "view",
  54749. {
  54750. key: 1,
  54751. class: "err-msg"
  54752. },
  54753. vue.toDisplayString($setup.t("单注最低限制为")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10),
  54754. 1
  54755. /* TEXT */
  54756. )) : Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) ? (vue.openBlock(), vue.createElementBlock(
  54757. "view",
  54758. {
  54759. key: 2,
  54760. class: "err-msg"
  54761. },
  54762. vue.toDisplayString($setup.t("单注最高限制为")) + " " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  54763. 1
  54764. /* TEXT */
  54765. )) : Number(item.amount) > $setup.userMoney ? (vue.openBlock(), vue.createElementBlock(
  54766. "view",
  54767. {
  54768. key: 3,
  54769. class: "err-msg"
  54770. },
  54771. vue.toDisplayString($setup.t("余额不足")),
  54772. 1
  54773. /* TEXT */
  54774. )) : (vue.openBlock(), vue.createElementBlock("view", {
  54775. key: 4,
  54776. class: "potential-win"
  54777. }, [
  54778. vue.createTextVNode(
  54779. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  54780. 1
  54781. /* TEXT */
  54782. ),
  54783. vue.createElementVNode(
  54784. "text",
  54785. { class: "win-amount" },
  54786. vue.toDisplayString((Number(item.amount) * Number(item.odds)).toFixed(2)),
  54787. 1
  54788. /* TEXT */
  54789. )
  54790. ]))
  54791. ])
  54792. ]);
  54793. }),
  54794. 128
  54795. /* KEYED_FRAGMENT */
  54796. ))
  54797. ]),
  54798. vue.createElementVNode("view", { style: { "height": "100px" } })
  54799. ])) : vue.createCommentVNode("v-if", true),
  54800. $setup.totalBets === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  54801. key: 1,
  54802. class: "empty-sheet"
  54803. }, [
  54804. vue.createElementVNode(
  54805. "text",
  54806. null,
  54807. vue.toDisplayString($setup.t("暂无投注项")),
  54808. 1
  54809. /* TEXT */
  54810. )
  54811. ])) : vue.createCommentVNode("v-if", true),
  54812. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  54813. key: 2,
  54814. class: "sheet-action-bar popup-fixed-footer digital-cart-bottom"
  54815. }, [
  54816. vue.createElementVNode("view", { class: "total-odds-row" }, [
  54817. vue.createElementVNode(
  54818. "text",
  54819. { class: "label" },
  54820. vue.toDisplayString($setup.t("总投注金额")),
  54821. 1
  54822. /* TEXT */
  54823. ),
  54824. vue.createElementVNode(
  54825. "text",
  54826. { class: "val" },
  54827. vue.toDisplayString($setup.totalAmount.toFixed(2)),
  54828. 1
  54829. /* TEXT */
  54830. )
  54831. ]),
  54832. vue.createVNode(_component_u_button, {
  54833. type: "primary",
  54834. onClick: $setup.handleOneClickBet,
  54835. disabled: $setup.isFengpan
  54836. }, {
  54837. default: vue.withCtx(() => [
  54838. vue.createTextVNode(
  54839. vue.toDisplayString($setup.t("立即投注")),
  54840. 1
  54841. /* TEXT */
  54842. )
  54843. ]),
  54844. _: 1
  54845. /* STABLE */
  54846. }, 8, ["disabled"])
  54847. ])) : vue.createCommentVNode("v-if", true)
  54848. ])
  54849. ]),
  54850. _: 1
  54851. /* STABLE */
  54852. }, 8, ["modelValue"]),
  54853. vue.createVNode(_component_u_modal, {
  54854. ref: "safeModalRef",
  54855. modelValue: $setup.showSafeModal,
  54856. "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.showSafeModal = $event),
  54857. "async-close": true,
  54858. title: $setup.t("安全验证"),
  54859. "show-cancel-button": true,
  54860. "confirm-text": $setup.t("确定投注"),
  54861. "cancel-text": $setup.t("取消"),
  54862. "confirm-color": "#f8b932",
  54863. onConfirm: $setup.confirmSubmitBet
  54864. }, {
  54865. default: vue.withCtx(() => [
  54866. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  54867. vue.createElementVNode(
  54868. "text",
  54869. { class: "safe-tips" },
  54870. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  54871. 1
  54872. /* TEXT */
  54873. ),
  54874. vue.createVNode(_component_u_input, {
  54875. modelValue: $setup.safeWord,
  54876. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.safeWord = $event),
  54877. type: "password",
  54878. placeholder: $setup.t("请输入资金密码"),
  54879. border: true,
  54880. "border-color": "#e4e7ed",
  54881. clearable: true,
  54882. "input-align": "center"
  54883. }, null, 8, ["modelValue", "placeholder"])
  54884. ])
  54885. ]),
  54886. _: 1
  54887. /* STABLE */
  54888. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"]),
  54889. vue.createVNode(_component_u_popup, {
  54890. modelValue: $setup.historyPopupVisible,
  54891. "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $setup.historyPopupVisible = $event),
  54892. mode: "center",
  54893. "border-radius": "20",
  54894. mask: true,
  54895. "z-index": 990,
  54896. width: "90%"
  54897. }, {
  54898. default: vue.withCtx(() => [
  54899. vue.createElementVNode("view", { class: "popup-wrapper history-popup" }, [
  54900. vue.createElementVNode(
  54901. "view",
  54902. { class: "p-title" },
  54903. vue.toDisplayString($setup.t("近期开奖记录")),
  54904. 1
  54905. /* TEXT */
  54906. ),
  54907. vue.createElementVNode("scroll-view", {
  54908. "scroll-y": "true",
  54909. class: "history-scroll-container"
  54910. }, [
  54911. vue.createElementVNode("view", { class: "history-list-content" }, [
  54912. (vue.openBlock(true), vue.createElementBlock(
  54913. vue.Fragment,
  54914. null,
  54915. vue.renderList($setup.historyLotteryList, (item, idx) => {
  54916. return vue.openBlock(), vue.createElementBlock("view", {
  54917. class: "history-item",
  54918. key: idx
  54919. }, [
  54920. vue.createElementVNode("view", { class: "h-top" }, [
  54921. vue.createElementVNode(
  54922. "text",
  54923. { class: "h-issue" },
  54924. vue.toDisplayString(item.issue) + vue.toDisplayString($setup.t("期")),
  54925. 1
  54926. /* TEXT */
  54927. ),
  54928. vue.createElementVNode(
  54929. "text",
  54930. { class: "h-time" },
  54931. vue.toDisplayString(item.open_time),
  54932. 1
  54933. /* TEXT */
  54934. )
  54935. ]),
  54936. vue.createElementVNode("view", { class: "balls-grid" }, [
  54937. (vue.openBlock(true), vue.createElementBlock(
  54938. vue.Fragment,
  54939. null,
  54940. vue.renderList(item.lottery_codes.slice(0, 6), (b, i) => {
  54941. return vue.openBlock(), vue.createElementBlock("view", {
  54942. class: "ball-group",
  54943. key: i
  54944. }, [
  54945. vue.createElementVNode(
  54946. "view",
  54947. {
  54948. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(b.color)])
  54949. },
  54950. [
  54951. vue.createElementVNode(
  54952. "view",
  54953. { class: "ball-inner" },
  54954. vue.toDisplayString(b.code),
  54955. 1
  54956. /* TEXT */
  54957. )
  54958. ],
  54959. 2
  54960. /* CLASS */
  54961. ),
  54962. vue.createElementVNode(
  54963. "text",
  54964. { class: "l-zodiac" },
  54965. vue.toDisplayString(b.zodiac),
  54966. 1
  54967. /* TEXT */
  54968. )
  54969. ]);
  54970. }),
  54971. 128
  54972. /* KEYED_FRAGMENT */
  54973. )),
  54974. vue.createElementVNode("text", { class: "plus" }, "+"),
  54975. vue.createElementVNode("view", { class: "ball-group" }, [
  54976. vue.createElementVNode(
  54977. "view",
  54978. {
  54979. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass(item.lottery_codes[6].color)])
  54980. },
  54981. [
  54982. vue.createElementVNode(
  54983. "view",
  54984. { class: "ball-inner" },
  54985. vue.toDisplayString(item.lottery_codes[6].code),
  54986. 1
  54987. /* TEXT */
  54988. )
  54989. ],
  54990. 2
  54991. /* CLASS */
  54992. ),
  54993. vue.createElementVNode(
  54994. "text",
  54995. { class: "l-zodiac" },
  54996. vue.toDisplayString(item.lottery_codes[6].zodiac),
  54997. 1
  54998. /* TEXT */
  54999. )
  55000. ])
  55001. ])
  55002. ]);
  55003. }),
  55004. 128
  55005. /* KEYED_FRAGMENT */
  55006. ))
  55007. ])
  55008. ]),
  55009. vue.createElementVNode(
  55010. "view",
  55011. {
  55012. class: "close-btn-bottom",
  55013. onClick: _cache[11] || (_cache[11] = ($event) => $setup.historyPopupVisible = false)
  55014. },
  55015. vue.toDisplayString($setup.t("关闭")),
  55016. 1
  55017. /* TEXT */
  55018. )
  55019. ])
  55020. ]),
  55021. _: 1
  55022. /* STABLE */
  55023. }, 8, ["modelValue"])
  55024. ]),
  55025. _: 1
  55026. /* STABLE */
  55027. },
  55028. 512
  55029. /* NEED_PATCH */
  55030. )
  55031. ]),
  55032. _: 1
  55033. /* STABLE */
  55034. });
  55035. }
  55036. const PagesTabbarEntertainmentViewSpeedDigitalIndex = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6], ["__scopeId", "data-v-7ae0ed69"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/SpeedDigital/index.vue"]]);
  55037. const _sfc_main$6 = {
  55038. __name: "index",
  55039. setup(__props, { expose: __expose }) {
  55040. __expose();
  55041. const router2 = useRouter();
  55042. const { t: t2 } = useI18n();
  55043. const PageContainerRef = vue.ref();
  55044. const pagingRef1 = vue.ref(null);
  55045. const safeModalRef = vue.ref(null);
  55046. const cartPopupVisible = vue.ref(false);
  55047. const showSafeModal = vue.ref(false);
  55048. const historyPopupVisible = vue.ref(false);
  55049. const safeWord = vue.ref("");
  55050. const batchStakeValue = vue.ref(uni.getStorageSync("hklhcBatchStakeCache") || "");
  55051. const userMoney = vue.ref(0);
  55052. const WebsocketData = useWebsocketDataStore();
  55053. const isFengpan = vue.ref(false);
  55054. const numberToZodiacMap = vue.ref({});
  55055. const zodiacToNumberMap = vue.ref({});
  55056. const currentIssue = vue.ref("");
  55057. const gameList = vue.ref([]);
  55058. const historyLotteryList = vue.ref([]);
  55059. const numberList = vue.ref([]);
  55060. const lhcGame = vue.ref({});
  55061. const activeGameIndex = vue.ref(0);
  55062. const activePlayIndex = vue.ref(0);
  55063. const selectedBets = vue.ref(uni.getStorageSync("lhc_selected_bets_hk") || []);
  55064. vue.watch(selectedBets, (newVal) => {
  55065. uni.setStorageSync("lhc_selected_bets_hk", newVal);
  55066. }, { deep: true });
  55067. const timeData = vue.ref({ days: 0, hours: "00", minutes: "00", seconds: "00" });
  55068. let countdownTimer = null;
  55069. let remainingSeconds = 0;
  55070. const currentGame = vue.computed(() => gameList.value[activeGameIndex.value] || {});
  55071. const currentPlayName = vue.computed(() => {
  55072. var _a2, _b2;
  55073. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.name) || "";
  55074. });
  55075. const currentPlayId = vue.computed(() => {
  55076. var _a2, _b2;
  55077. return ((_b2 = (_a2 = currentGame.value.gameplay) == null ? void 0 : _a2[activePlayIndex.value]) == null ? void 0 : _b2.id) || "";
  55078. });
  55079. const lastDraw = vue.computed(() => historyLotteryList.value[0] || null);
  55080. const isBallStyle = vue.computed(() => {
  55081. const ballGames = [t2("特码"), t2("正码"), t2("正码特"), t2("正码1-6")];
  55082. return ballGames.includes(currentGame.value.name);
  55083. });
  55084. const totalBets = vue.computed(() => selectedBets.value.length);
  55085. const totalAmount = vue.computed(() => {
  55086. return selectedBets.value.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
  55087. });
  55088. const onQuery = async () => {
  55089. var _a2;
  55090. await initHowPlayData();
  55091. await fetchBalance();
  55092. (_a2 = pagingRef1.value) == null ? void 0 : _a2.complete([]);
  55093. };
  55094. const fetchBalance = async () => {
  55095. formatAppLog("log", "at pages/Tabbar/Entertainment/view/HKDigital/index.vue:367", uni.getStorageSync("token"), 367);
  55096. if (uni.getStorageSync("token")) {
  55097. try {
  55098. const res = await getBalance();
  55099. if (res.code === 1 && res.data) {
  55100. userMoney.value = Number(res.data.money) || 0;
  55101. }
  55102. } catch (error) {
  55103. formatAppLog("error", "at pages/Tabbar/Entertainment/view/HKDigital/index.vue:376", "获取余额失败", error);
  55104. }
  55105. } else {
  55106. userMoney.value = 0;
  55107. }
  55108. };
  55109. const initHowPlayData = async () => {
  55110. var _a2;
  55111. try {
  55112. const [infoRes, playRes] = await Promise.all([
  55113. getLHCInfo(),
  55114. getHowPlay({ type: 2 })
  55115. ]);
  55116. if (infoRes.code === 1 && infoRes.data) {
  55117. numberToZodiacMap.value = infoRes.data.number_to_zodiac || {};
  55118. zodiacToNumberMap.value = infoRes.data.zodiac_to_number || {};
  55119. }
  55120. if (playRes.code === 1 && playRes.data) {
  55121. lhcGame.value = playRes.data;
  55122. currentIssue.value = playRes.data.issue;
  55123. gameList.value = playRes.data.games || [];
  55124. if (playRes.data.history_lottery) {
  55125. historyLotteryList.value = playRes.data.history_lottery.map((item) => ({
  55126. ...item,
  55127. lottery_codes: item.lottery_codes.map((codeStr) => ({
  55128. code: codeStr,
  55129. color: calculateBallColor(codeStr),
  55130. zodiac: numberToZodiacMap.value[codeStr] || ""
  55131. }))
  55132. }));
  55133. }
  55134. if (((_a2 = playRes.data) == null ? void 0 : _a2.countdown) != 0) {
  55135. startCountdown(Number(playRes.data.countdown || 0));
  55136. }
  55137. await fetchPlayInfo();
  55138. }
  55139. } catch (error) {
  55140. formatAppLog("error", "at pages/Tabbar/Entertainment/view/HKDigital/index.vue:418", "获取数据失败", error);
  55141. }
  55142. };
  55143. vue.onMounted(() => {
  55144. initHowPlayData();
  55145. fetchBalance();
  55146. });
  55147. onShow(() => {
  55148. batchStakeValue.value = uni.getStorageSync("hklhcBatchStakeCache") || "";
  55149. fetchBalance();
  55150. });
  55151. vue.onUnmounted(() => {
  55152. clearInterval(countdownTimer);
  55153. });
  55154. const handleGameClick = (index) => {
  55155. if (activeGameIndex.value === index)
  55156. return;
  55157. activeGameIndex.value = index;
  55158. activePlayIndex.value = 0;
  55159. fetchPlayInfo();
  55160. };
  55161. const handlePlayClick = (index) => {
  55162. if (activePlayIndex.value === index)
  55163. return;
  55164. activePlayIndex.value = index;
  55165. fetchPlayInfo();
  55166. };
  55167. const fetchPlayInfo = async () => {
  55168. if (!currentPlayId.value)
  55169. return;
  55170. numberList.value = [];
  55171. try {
  55172. const res = await getPlayInfo({ id: currentPlayId.value });
  55173. if (res.code === 1 && res.data) {
  55174. numberList.value = res.data.map((item) => {
  55175. let color2 = "";
  55176. if (isBallStyle.value || !isNaN(item.number)) {
  55177. color2 = calculateBallColor(item.number);
  55178. } else {
  55179. if (item.number.includes(t2("红")))
  55180. color2 = t2("红");
  55181. else if (item.number.includes(t2("蓝")))
  55182. color2 = t2("蓝");
  55183. else if (item.number.includes(t2("绿")))
  55184. color2 = t2("绿");
  55185. }
  55186. let tinyNums = [];
  55187. if (zodiacToNumberMap.value[item.number]) {
  55188. tinyNums = zodiacToNumberMap.value[item.number].map((nStr) => ({
  55189. number: nStr,
  55190. color: calculateBallColor(nStr)
  55191. }));
  55192. }
  55193. const isSelected = selectedBets.value.some((b) => b.id === item.id);
  55194. return {
  55195. id: item.id,
  55196. number: item.number,
  55197. odds: item.odds,
  55198. color: color2,
  55199. flag: isSelected,
  55200. numbers: tinyNums,
  55201. mininum: item.mininum,
  55202. maxinum: item.maxinum
  55203. };
  55204. });
  55205. }
  55206. } catch (error) {
  55207. formatAppLog("error", "at pages/Tabbar/Entertainment/view/HKDigital/index.vue:493", "获取玩法失败", error);
  55208. } finally {
  55209. uni.hideLoading();
  55210. }
  55211. };
  55212. const toggleSelect = (index) => {
  55213. if (isFengpan.value)
  55214. return;
  55215. const item = numberList.value[index];
  55216. item.flag = !item.flag;
  55217. if (item.flag) {
  55218. const amountToSet = batchStakeValue.value !== "" ? Number(batchStakeValue.value) : item.mininum !== void 0 ? item.mininum : 10;
  55219. selectedBets.value.push({
  55220. id: item.id,
  55221. gameName: currentGame.value.name,
  55222. playName: currentPlayName.value,
  55223. number: item.number,
  55224. odds: item.odds,
  55225. color: item.color,
  55226. mininum: item.mininum,
  55227. maxinum: item.maxinum,
  55228. amount: amountToSet
  55229. });
  55230. } else {
  55231. selectedBets.value = selectedBets.value.filter((b) => b.id !== item.id);
  55232. }
  55233. };
  55234. const quickSelectWave = (colorStr) => {
  55235. if (isFengpan.value)
  55236. return;
  55237. numberList.value.forEach((item, index) => {
  55238. const shouldSelect = item.color === colorStr;
  55239. if (item.flag !== shouldSelect) {
  55240. toggleSelect(index);
  55241. }
  55242. });
  55243. };
  55244. const randomSelect = () => {
  55245. if (isFengpan.value)
  55246. return;
  55247. const unselectedIndices = [];
  55248. numberList.value.forEach((item, index) => {
  55249. if (!item.flag) {
  55250. unselectedIndices.push(index);
  55251. }
  55252. });
  55253. if (unselectedIndices.length > 0) {
  55254. const randomPos = Math.floor(Math.random() * unselectedIndices.length);
  55255. const targetIndex = unselectedIndices[randomPos];
  55256. toggleSelect(targetIndex);
  55257. } else {
  55258. uni.showToast({ title: t2("所有选项已全选"), icon: "none" });
  55259. }
  55260. };
  55261. const clearSelect = () => {
  55262. numberList.value.forEach((item) => item.flag = false);
  55263. selectedBets.value = [];
  55264. cartPopupVisible.value = false;
  55265. };
  55266. const removeSelected = (id) => {
  55267. selectedBets.value = selectedBets.value.filter((b) => b.id !== id);
  55268. const visibleItem = numberList.value.find((n) => n.id === id);
  55269. if (visibleItem) {
  55270. visibleItem.flag = false;
  55271. }
  55272. if (selectedBets.value.length === 0) {
  55273. cartPopupVisible.value = false;
  55274. }
  55275. };
  55276. const applyBatchStake = () => {
  55277. let val = batchStakeValue.value;
  55278. uni.setStorageSync("hklhcBatchStakeCache", val);
  55279. if (val === "") {
  55280. selectedBets.value.forEach((item) => {
  55281. item.amount = "";
  55282. });
  55283. return;
  55284. }
  55285. let numVal = Number(val);
  55286. if (isNaN(numVal) || numVal <= 0) {
  55287. return uni.showToast({ title: t2("请输入大于0的有效金额"), icon: "none" });
  55288. }
  55289. selectedBets.value.forEach((item) => {
  55290. let itemVal = numVal;
  55291. const min = item.mininum !== void 0 ? item.mininum : 10;
  55292. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  55293. if (itemVal < min) {
  55294. itemVal = min;
  55295. }
  55296. if (itemVal > max) {
  55297. itemVal = max;
  55298. }
  55299. if (itemVal > userMoney.value) {
  55300. itemVal = userMoney.value;
  55301. uni.showToast({ title: t2("余额不足"), icon: "none" });
  55302. }
  55303. item.amount = itemVal;
  55304. });
  55305. };
  55306. const validateAmount = (item) => {
  55307. const val = Number(item.amount);
  55308. const min = item.mininum !== void 0 ? item.mininum : 10;
  55309. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  55310. if (isNaN(val) || val <= 0) {
  55311. item.amount = "";
  55312. } else if (val < min) {
  55313. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  55314. item.amount = min;
  55315. } else if (val > max) {
  55316. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  55317. item.amount = max;
  55318. } else if (val > userMoney.value) {
  55319. uni.showToast({ title: t2("余额不足"), icon: "none" });
  55320. item.amount = userMoney.value;
  55321. }
  55322. };
  55323. const changeAmount = (item, delta) => {
  55324. let val = Number(item.amount) || 0;
  55325. val += delta;
  55326. const min = item.mininum !== void 0 ? item.mininum : 10;
  55327. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  55328. if (val < 0) {
  55329. val = 0;
  55330. item.amount = "";
  55331. return;
  55332. }
  55333. if (val > 0 && val < min) {
  55334. val = min;
  55335. uni.showToast({ title: t2("单注最低") + ` ${min}`, icon: "none" });
  55336. } else if (val > max) {
  55337. val = max;
  55338. uni.showToast({ title: t2("单注最高") + ` ${max}`, icon: "none" });
  55339. } else if (val > userMoney.value) {
  55340. val = userMoney.value;
  55341. uni.showToast({ title: t2("余额不足"), icon: "none" });
  55342. }
  55343. item.amount = val || "";
  55344. };
  55345. const openCartPopup = () => {
  55346. if (totalBets.value === 0)
  55347. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  55348. cartPopupVisible.value = true;
  55349. };
  55350. const handleOneClickBet = () => {
  55351. if (!uni.getStorageSync("token")) {
  55352. uni.showToast({
  55353. title: t2("请先登录"),
  55354. icon: "none"
  55355. });
  55356. return;
  55357. }
  55358. if (isFengpan.value)
  55359. return;
  55360. if (totalBets.value === 0) {
  55361. return uni.showToast({ title: t2("请先选择投注项"), icon: "none" });
  55362. }
  55363. if (totalAmount.value > userMoney.value) {
  55364. return uni.showToast({ title: t2("总投注金额超过可用余额"), icon: "none" });
  55365. }
  55366. const invalidItems = selectedBets.value.filter((item) => {
  55367. const val = Number(item.amount);
  55368. const min = item.mininum !== void 0 ? item.mininum : 10;
  55369. const max = item.maxinum !== void 0 ? item.maxinum : 1e4;
  55370. return !val || val <= 0 || val < min || val > max || val > userMoney.value;
  55371. });
  55372. if (invalidItems.length > 0) {
  55373. if (!cartPopupVisible.value) {
  55374. cartPopupVisible.value = true;
  55375. }
  55376. return uni.showToast({ title: t2("请检查下注金额、限额及余额"), icon: "none" });
  55377. }
  55378. safeWord.value = "";
  55379. cartPopupVisible.value = false;
  55380. setTimeout(() => {
  55381. confirmSubmitBet();
  55382. }, 300);
  55383. };
  55384. const confirmSubmitBet = async () => {
  55385. uni.showModal({
  55386. title: t2("提示"),
  55387. content: t2("确认提交吗?"),
  55388. success: async (res) => {
  55389. var _a2, _b2, _c;
  55390. if (res.confirm) {
  55391. const payloadData = selectedBets.value.map((item) => ({
  55392. id: item.id,
  55393. amount: Number(item.amount)
  55394. }));
  55395. try {
  55396. const res2 = await submitBetCart({ data: payloadData, safe_word: safeWord.value, type: 2 });
  55397. if (res2.code === 1) {
  55398. showSafeModal.value = false;
  55399. clearSelect();
  55400. fetchBalance();
  55401. (_a2 = PageContainerRef.value) == null ? void 0 : _a2.getData();
  55402. } else {
  55403. (_b2 = safeModalRef.value) == null ? void 0 : _b2.clearLoading();
  55404. }
  55405. } catch (error) {
  55406. (_c = safeModalRef.value) == null ? void 0 : _c.clearLoading();
  55407. }
  55408. }
  55409. }
  55410. });
  55411. };
  55412. const goToOrder = () => {
  55413. router2.push({ name: "AllHistory", query: { tab: 2 } });
  55414. };
  55415. const startCountdown = (seconds) => {
  55416. remainingSeconds = seconds;
  55417. clearInterval(countdownTimer);
  55418. countdownTimer = setInterval(() => {
  55419. if (remainingSeconds > 0) {
  55420. remainingSeconds--;
  55421. const d = Math.floor(remainingSeconds / 86400);
  55422. const h = Math.floor(remainingSeconds % 86400 / 3600);
  55423. const m = Math.floor(remainingSeconds % 3600 / 60);
  55424. const s = remainingSeconds % 60;
  55425. timeData.value.days = d;
  55426. timeData.value.hours = h.toString().padStart(2, "0");
  55427. timeData.value.minutes = m.toString().padStart(2, "0");
  55428. timeData.value.seconds = s.toString().padStart(2, "0");
  55429. } else {
  55430. clearInterval(countdownTimer);
  55431. initHowPlayData();
  55432. }
  55433. }, 1e3);
  55434. };
  55435. const calculateBallColor = (numStr) => {
  55436. const num = parseInt(numStr, 10);
  55437. if (isNaN(num))
  55438. return "";
  55439. const reds = [1, 2, 7, 8, 12, 13, 18, 19, 23, 24, 29, 30, 34, 35, 40, 45, 46];
  55440. const blues = [3, 4, 9, 10, 14, 15, 20, 25, 26, 31, 36, 37, 41, 42, 47, 48];
  55441. const greens = [5, 6, 11, 16, 17, 21, 22, 27, 28, 32, 33, 38, 39, 43, 44, 49];
  55442. if (reds.includes(num))
  55443. return t2("红");
  55444. if (blues.includes(num))
  55445. return t2("蓝");
  55446. if (greens.includes(num))
  55447. return t2("绿");
  55448. return "";
  55449. };
  55450. const getBgColorClass = (colorName) => {
  55451. if (colorName === t2("红"))
  55452. return "bg-red";
  55453. if (colorName === t2("蓝"))
  55454. return "bg-blue";
  55455. if (colorName === t2("绿"))
  55456. return "bg-green";
  55457. return "bg-gray";
  55458. };
  55459. const getTextColorClass = (colorName) => {
  55460. if (colorName === t2("红"))
  55461. return "text-red";
  55462. if (colorName === t2("蓝"))
  55463. return "text-blue";
  55464. if (colorName === t2("绿"))
  55465. return "text-green";
  55466. return "";
  55467. };
  55468. vue.watch(() => WebsocketData.globalData, (data) => {
  55469. const res = typeof data === "string" ? JSON.parse(data) : data;
  55470. if (res && res.type === "hk_lhc_fengpan") {
  55471. isFengpan.value = true;
  55472. } else if (res && res.type === "hk_lhc_kaipan") {
  55473. isFengpan.value = false;
  55474. }
  55475. });
  55476. gameLotteryStatus({ type: 4 }).then((res) => {
  55477. if (res.data.is_kaipan == 0) {
  55478. isFengpan.value = true;
  55479. } else if (res.data.is_kaipan == 1) {
  55480. isFengpan.value = false;
  55481. }
  55482. });
  55483. const __returned__ = { router: router2, t: t2, PageContainerRef, pagingRef1, safeModalRef, cartPopupVisible, showSafeModal, historyPopupVisible, safeWord, batchStakeValue, userMoney, WebsocketData, isFengpan, numberToZodiacMap, zodiacToNumberMap, currentIssue, gameList, historyLotteryList, numberList, lhcGame, activeGameIndex, activePlayIndex, selectedBets, timeData, get countdownTimer() {
  55484. return countdownTimer;
  55485. }, set countdownTimer(v) {
  55486. countdownTimer = v;
  55487. }, get remainingSeconds() {
  55488. return remainingSeconds;
  55489. }, set remainingSeconds(v) {
  55490. remainingSeconds = v;
  55491. }, currentGame, currentPlayName, currentPlayId, lastDraw, isBallStyle, totalBets, totalAmount, onQuery, fetchBalance, initHowPlayData, handleGameClick, handlePlayClick, fetchPlayInfo, toggleSelect, quickSelectWave, randomSelect, clearSelect, removeSelected, applyBatchStake, validateAmount, changeAmount, openCartPopup, handleOneClickBet, confirmSubmitBet, goToOrder, startCountdown, calculateBallColor, getBgColorClass, getTextColorClass, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, watch: vue.watch, get useI18n() {
  55492. return useI18n;
  55493. }, get onShow() {
  55494. return onShow;
  55495. }, get getHowPlay() {
  55496. return getHowPlay;
  55497. }, get getLHCInfo() {
  55498. return getLHCInfo;
  55499. }, get getPlayInfo() {
  55500. return getPlayInfo;
  55501. }, get submitBetCart() {
  55502. return submitBetCart;
  55503. }, get getBalance() {
  55504. return getBalance;
  55505. }, get useWebsocketDataStore() {
  55506. return useWebsocketDataStore;
  55507. }, get gameLotteryStatus() {
  55508. return gameLotteryStatus;
  55509. } };
  55510. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  55511. return __returned__;
  55512. }
  55513. };
  55514. function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
  55515. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  55516. const _component_u_icon = __unplugin_components_0$5;
  55517. const _component_u_button = __unplugin_components_2$1;
  55518. const _component_u_popup = __unplugin_components_2$3;
  55519. const _component_u_input = __unplugin_components_3$2;
  55520. const _component_u_modal = __unplugin_components_4$3;
  55521. const _component_PageContainer = PageContainer;
  55522. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  55523. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  55524. default: vue.withCtx(() => [
  55525. vue.createVNode(
  55526. _component_PageContainer,
  55527. {
  55528. ref: "PageContainerRef",
  55529. navTitle: "香港六合彩"
  55530. },
  55531. {
  55532. default: vue.withCtx(() => [
  55533. vue.createVNode(
  55534. _component_z_paging,
  55535. {
  55536. ref: "pagingRef1",
  55537. onQuery: $setup.onQuery,
  55538. fixed: false,
  55539. "refresher-only": true,
  55540. "refresher-enabled": true,
  55541. "loading-more-enabled": false,
  55542. "auto-show-back-to-top": true
  55543. },
  55544. {
  55545. refresher: vue.withCtx(() => [
  55546. vue.createElementVNode("view", { class: "refresher-ui" }, [
  55547. vue.createElementVNode("view", { class: "spin-loader" }),
  55548. vue.createElementVNode(
  55549. "text",
  55550. { class: "refresher-text" },
  55551. vue.toDisplayString($setup.t("获取最新数据...")),
  55552. 1
  55553. /* TEXT */
  55554. )
  55555. ])
  55556. ]),
  55557. default: vue.withCtx(() => [
  55558. vue.createElementVNode("view", { class: "app-digital-container" }, [
  55559. vue.createElementVNode("view", { class: "calc-card lottery-dashboard" }, [
  55560. vue.createElementVNode("view", { class: "dash-top" }, [
  55561. vue.createElementVNode("view", { class: "lottery-title" }, [
  55562. vue.createElementVNode("text", { class: "issue-text" }, [
  55563. vue.createTextVNode(
  55564. vue.toDisplayString($setup.t("距")) + " ",
  55565. 1
  55566. /* TEXT */
  55567. ),
  55568. vue.createElementVNode(
  55569. "text",
  55570. { class: "highlight" },
  55571. vue.toDisplayString($setup.lhcGame.next_issue),
  55572. 1
  55573. /* TEXT */
  55574. ),
  55575. vue.createTextVNode(
  55576. " " + vue.toDisplayString($setup.t("期截止")),
  55577. 1
  55578. /* TEXT */
  55579. )
  55580. ])
  55581. ]),
  55582. vue.createElementVNode("view", { class: "timer-box" }, [
  55583. !$setup.isFengpan ? (vue.openBlock(), vue.createElementBlock(
  55584. vue.Fragment,
  55585. { key: 0 },
  55586. [
  55587. $setup.timeData.days > 0 ? (vue.openBlock(), vue.createElementBlock(
  55588. vue.Fragment,
  55589. { key: 0 },
  55590. [
  55591. vue.createElementVNode(
  55592. "view",
  55593. { class: "digit" },
  55594. vue.toDisplayString($setup.timeData.days),
  55595. 1
  55596. /* TEXT */
  55597. ),
  55598. vue.createElementVNode(
  55599. "text",
  55600. { class: "colon" },
  55601. vue.toDisplayString($setup.t("天")),
  55602. 1
  55603. /* TEXT */
  55604. )
  55605. ],
  55606. 64
  55607. /* STABLE_FRAGMENT */
  55608. )) : vue.createCommentVNode("v-if", true),
  55609. vue.createElementVNode(
  55610. "view",
  55611. { class: "digit" },
  55612. vue.toDisplayString($setup.timeData.hours),
  55613. 1
  55614. /* TEXT */
  55615. ),
  55616. vue.createElementVNode("text", { class: "colon" }, ":"),
  55617. vue.createElementVNode(
  55618. "view",
  55619. { class: "digit" },
  55620. vue.toDisplayString($setup.timeData.minutes),
  55621. 1
  55622. /* TEXT */
  55623. ),
  55624. vue.createElementVNode("text", { class: "colon" }, ":"),
  55625. vue.createElementVNode(
  55626. "view",
  55627. { class: "digit" },
  55628. vue.toDisplayString($setup.timeData.seconds),
  55629. 1
  55630. /* TEXT */
  55631. )
  55632. ],
  55633. 64
  55634. /* STABLE_FRAGMENT */
  55635. )) : (vue.openBlock(), vue.createElementBlock(
  55636. "text",
  55637. {
  55638. key: 1,
  55639. class: "fengpan-text"
  55640. },
  55641. vue.toDisplayString($setup.t("封盘中")),
  55642. 1
  55643. /* TEXT */
  55644. ))
  55645. ])
  55646. ]),
  55647. $setup.lastDraw ? (vue.openBlock(), vue.createElementBlock("view", {
  55648. key: 0,
  55649. class: "dash-bottom"
  55650. }, [
  55651. vue.createElementVNode("view", { class: "result-header" }, [
  55652. vue.createElementVNode(
  55653. "text",
  55654. { class: "r-title" },
  55655. vue.toDisplayString($setup.t("第")) + " " + vue.toDisplayString($setup.lhcGame.issue) + " " + vue.toDisplayString($setup.t("期开奖")),
  55656. 1
  55657. /* TEXT */
  55658. ),
  55659. vue.createElementVNode("view", { class: "actions" }, [
  55660. vue.createElementVNode(
  55661. "text",
  55662. {
  55663. class: "action-btn tmc",
  55664. onClick: _cache[0] || (_cache[0] = ($event) => $setup.historyPopupVisible = true)
  55665. },
  55666. vue.toDisplayString($setup.t("近期开奖")),
  55667. 1
  55668. /* TEXT */
  55669. ),
  55670. vue.createElementVNode("text", { class: "action-divider" }, "|"),
  55671. vue.createElementVNode(
  55672. "text",
  55673. {
  55674. class: "action-btn tmc",
  55675. onClick: $setup.goToOrder
  55676. },
  55677. vue.toDisplayString($setup.t("购彩记录")),
  55678. 1
  55679. /* TEXT */
  55680. )
  55681. ])
  55682. ]),
  55683. vue.createElementVNode("view", { class: "balls-display" }, [
  55684. (vue.openBlock(true), vue.createElementBlock(
  55685. vue.Fragment,
  55686. null,
  55687. vue.renderList($setup.lastDraw.lottery_codes.slice(0, 6), (ball, idx) => {
  55688. return vue.openBlock(), vue.createElementBlock("view", {
  55689. class: "ball-group",
  55690. key: "norm_" + idx
  55691. }, [
  55692. vue.createElementVNode(
  55693. "view",
  55694. {
  55695. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(ball.color)])
  55696. },
  55697. [
  55698. vue.createElementVNode(
  55699. "view",
  55700. { class: "ball-inner" },
  55701. vue.toDisplayString(ball.code),
  55702. 1
  55703. /* TEXT */
  55704. )
  55705. ],
  55706. 2
  55707. /* CLASS */
  55708. ),
  55709. vue.createElementVNode(
  55710. "text",
  55711. { class: "l-zodiac" },
  55712. vue.toDisplayString(ball.zodiac),
  55713. 1
  55714. /* TEXT */
  55715. )
  55716. ]);
  55717. }),
  55718. 128
  55719. /* KEYED_FRAGMENT */
  55720. )),
  55721. vue.createElementVNode("text", { class: "plus-icon" }, "+"),
  55722. $setup.lastDraw.lottery_codes[6] ? (vue.openBlock(), vue.createElementBlock("view", {
  55723. key: 0,
  55724. class: "ball-group special"
  55725. }, [
  55726. vue.createElementVNode(
  55727. "view",
  55728. {
  55729. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass($setup.lastDraw.lottery_codes[6].color)])
  55730. },
  55731. [
  55732. vue.createElementVNode(
  55733. "view",
  55734. { class: "ball-inner" },
  55735. vue.toDisplayString($setup.lastDraw.lottery_codes[6].code),
  55736. 1
  55737. /* TEXT */
  55738. )
  55739. ],
  55740. 2
  55741. /* CLASS */
  55742. ),
  55743. vue.createElementVNode(
  55744. "text",
  55745. { class: "l-zodiac" },
  55746. vue.toDisplayString($setup.lastDraw.lottery_codes[6].zodiac),
  55747. 1
  55748. /* TEXT */
  55749. )
  55750. ])) : vue.createCommentVNode("v-if", true)
  55751. ])
  55752. ])) : vue.createCommentVNode("v-if", true)
  55753. ]),
  55754. $setup.gameList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  55755. key: 0,
  55756. class: "play-tabs-container"
  55757. }, [
  55758. vue.createElementVNode("scroll-view", {
  55759. "scroll-x": "",
  55760. class: "scroll-x-box",
  55761. "show-scrollbar": false
  55762. }, [
  55763. vue.createElementVNode("view", { class: "main-tabs" }, [
  55764. (vue.openBlock(true), vue.createElementBlock(
  55765. vue.Fragment,
  55766. null,
  55767. vue.renderList($setup.gameList, (game, index) => {
  55768. return vue.openBlock(), vue.createElementBlock("view", {
  55769. class: vue.normalizeClass(["play-tab", { "is-active": $setup.activeGameIndex === index }]),
  55770. key: game.id,
  55771. onClick: ($event) => $setup.handleGameClick(index)
  55772. }, vue.toDisplayString(game.name), 11, ["onClick"]);
  55773. }),
  55774. 128
  55775. /* KEYED_FRAGMENT */
  55776. ))
  55777. ])
  55778. ]),
  55779. $setup.currentGame.gameplay && $setup.currentGame.gameplay.length > 1 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  55780. key: 0,
  55781. "scroll-x": "",
  55782. class: "scroll-x-box",
  55783. "show-scrollbar": false
  55784. }, [
  55785. vue.createElementVNode("view", { class: "sub-tabs" }, [
  55786. (vue.openBlock(true), vue.createElementBlock(
  55787. vue.Fragment,
  55788. null,
  55789. vue.renderList($setup.currentGame.gameplay, (play, index) => {
  55790. return vue.openBlock(), vue.createElementBlock("view", {
  55791. class: vue.normalizeClass(["sub-tab", { "is-active": $setup.activePlayIndex === index }]),
  55792. key: play.id,
  55793. onClick: ($event) => $setup.handlePlayClick(index)
  55794. }, vue.toDisplayString(play.name), 11, ["onClick"]);
  55795. }),
  55796. 128
  55797. /* KEYED_FRAGMENT */
  55798. ))
  55799. ])
  55800. ])) : vue.createCommentVNode("v-if", true)
  55801. ])) : vue.createCommentVNode("v-if", true),
  55802. vue.createElementVNode("view", { class: "play-grid-wrap" }, [
  55803. vue.createElementVNode("view", { class: "play-group-card" }, [
  55804. [$setup.t("特码"), $setup.t("正码"), $setup.t("正码特")].includes($setup.currentGame.name) ? (vue.openBlock(), vue.createElementBlock("view", {
  55805. key: 0,
  55806. class: "calc-tabs quick-actions"
  55807. }, [
  55808. vue.createElementVNode(
  55809. "view",
  55810. {
  55811. class: vue.normalizeClass(["c-tab red", { "is-disabled": $setup.isFengpan }]),
  55812. onClick: _cache[1] || (_cache[1] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("红")))
  55813. },
  55814. vue.toDisplayString($setup.t("红波")),
  55815. 3
  55816. /* TEXT, CLASS */
  55817. ),
  55818. vue.createElementVNode(
  55819. "view",
  55820. {
  55821. class: vue.normalizeClass(["c-tab blue", { "is-disabled": $setup.isFengpan }]),
  55822. onClick: _cache[2] || (_cache[2] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("蓝")))
  55823. },
  55824. vue.toDisplayString($setup.t("蓝波")),
  55825. 3
  55826. /* TEXT, CLASS */
  55827. ),
  55828. vue.createElementVNode(
  55829. "view",
  55830. {
  55831. class: vue.normalizeClass(["c-tab green", { "is-disabled": $setup.isFengpan }]),
  55832. onClick: _cache[3] || (_cache[3] = ($event) => !$setup.isFengpan && $setup.quickSelectWave($setup.t("绿")))
  55833. },
  55834. vue.toDisplayString($setup.t("绿波")),
  55835. 3
  55836. /* TEXT, CLASS */
  55837. )
  55838. ])) : vue.createCommentVNode("v-if", true),
  55839. vue.createElementVNode(
  55840. "view",
  55841. {
  55842. class: vue.normalizeClass(["number-grid", $setup.isBallStyle ? "is-ball-grid" : "is-box-grid"])
  55843. },
  55844. [
  55845. (vue.openBlock(true), vue.createElementBlock(
  55846. vue.Fragment,
  55847. null,
  55848. vue.renderList($setup.numberList, (item, index) => {
  55849. return vue.openBlock(), vue.createElementBlock("view", {
  55850. class: vue.normalizeClass(["rule-btn num-item", { "is-active": item.flag, "is-disabled": $setup.isFengpan }]),
  55851. key: item.id,
  55852. onClick: ($event) => !$setup.isFengpan && $setup.toggleSelect(index)
  55853. }, [
  55854. $setup.isBallStyle ? (vue.openBlock(), vue.createElementBlock(
  55855. vue.Fragment,
  55856. { key: 0 },
  55857. [
  55858. vue.createElementVNode(
  55859. "view",
  55860. {
  55861. class: vue.normalizeClass(["ball-wrapper", $setup.getBgColorClass(item.color)])
  55862. },
  55863. [
  55864. vue.createElementVNode(
  55865. "text",
  55866. { class: "ball-text" },
  55867. vue.toDisplayString(item.number),
  55868. 1
  55869. /* TEXT */
  55870. )
  55871. ],
  55872. 2
  55873. /* CLASS */
  55874. ),
  55875. vue.createElementVNode(
  55876. "text",
  55877. { class: "odds-text" },
  55878. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  55879. 1
  55880. /* TEXT */
  55881. )
  55882. ],
  55883. 64
  55884. /* STABLE_FRAGMENT */
  55885. )) : (vue.openBlock(), vue.createElementBlock(
  55886. vue.Fragment,
  55887. { key: 1 },
  55888. [
  55889. vue.createElementVNode("view", { class: "box-top" }, [
  55890. vue.createElementVNode(
  55891. "text",
  55892. {
  55893. class: vue.normalizeClass(["box-name", $setup.getTextColorClass(item.color)])
  55894. },
  55895. vue.toDisplayString(item.number),
  55896. 3
  55897. /* TEXT, CLASS */
  55898. ),
  55899. vue.createElementVNode(
  55900. "text",
  55901. { class: "box-odds" },
  55902. vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  55903. 1
  55904. /* TEXT */
  55905. )
  55906. ]),
  55907. item.numbers && item.numbers.length ? (vue.openBlock(), vue.createElementBlock("view", {
  55908. key: 0,
  55909. class: "box-bottom"
  55910. }, [
  55911. (vue.openBlock(true), vue.createElementBlock(
  55912. vue.Fragment,
  55913. null,
  55914. vue.renderList(item.numbers, (numObj, nIdx) => {
  55915. return vue.openBlock(), vue.createElementBlock(
  55916. "text",
  55917. {
  55918. key: nIdx,
  55919. class: vue.normalizeClass(["mini-num", $setup.getTextColorClass(numObj.color)])
  55920. },
  55921. vue.toDisplayString(numObj.number),
  55922. 3
  55923. /* TEXT, CLASS */
  55924. );
  55925. }),
  55926. 128
  55927. /* KEYED_FRAGMENT */
  55928. ))
  55929. ])) : vue.createCommentVNode("v-if", true)
  55930. ],
  55931. 64
  55932. /* STABLE_FRAGMENT */
  55933. ))
  55934. ], 10, ["onClick"]);
  55935. }),
  55936. 128
  55937. /* KEYED_FRAGMENT */
  55938. ))
  55939. ],
  55940. 2
  55941. /* CLASS */
  55942. )
  55943. ])
  55944. ]),
  55945. vue.createElementVNode("view", { style: { "height": "80px" } })
  55946. ]),
  55947. vue.createElementVNode("view", { class: "hkdigital-bottom" })
  55948. ]),
  55949. _: 1
  55950. /* STABLE */
  55951. },
  55952. 512
  55953. /* NEED_PATCH */
  55954. ),
  55955. !$setup.cartPopupVisible ? (vue.openBlock(), vue.createElementBlock("view", {
  55956. key: 0,
  55957. class: "sticky-header-bar",
  55958. onClick: $setup.openCartPopup
  55959. }, [
  55960. vue.createElementVNode("view", { class: "betting-sheet-header" }, [
  55961. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  55962. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  55963. "view",
  55964. {
  55965. key: 0,
  55966. class: "sheet-badge"
  55967. },
  55968. vue.toDisplayString($setup.totalBets),
  55969. 1
  55970. /* TEXT */
  55971. )) : vue.createCommentVNode("v-if", true),
  55972. vue.createElementVNode(
  55973. "text",
  55974. { class: "header-text" },
  55975. vue.toDisplayString($setup.t("已选注单")),
  55976. 1
  55977. /* TEXT */
  55978. ),
  55979. vue.createVNode(_component_u_icon, {
  55980. name: "arrow-up",
  55981. color: "#666"
  55982. })
  55983. ]),
  55984. vue.createElementVNode("view", {
  55985. class: "betting-sheet-header-right",
  55986. style: { "display": "flex", "align-items": "center" }
  55987. }, [
  55988. vue.createElementVNode(
  55989. "view",
  55990. {
  55991. class: vue.normalizeClass(["btn-action", { "is-disabled": $setup.isFengpan }]),
  55992. style: { "margin-right": "10px", "background": "#6EC149", "color": "#fff" },
  55993. onClick: _cache[4] || (_cache[4] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.randomSelect(), ["stop"]))
  55994. },
  55995. vue.toDisplayString($setup.t("机选")),
  55996. 3
  55997. /* TEXT, CLASS */
  55998. ),
  55999. vue.createElementVNode(
  56000. "view",
  56001. {
  56002. class: vue.normalizeClass(["btn-action bet-btn", { "is-disabled": $setup.isFengpan }]),
  56003. style: { "background-color": "#f8b932", "color": "#fff", "border-color": "#f8b932" },
  56004. onClick: _cache[5] || (_cache[5] = vue.withModifiers(($event) => !$setup.isFengpan && $setup.openCartPopup(), ["stop"]))
  56005. },
  56006. vue.toDisplayString($setup.t("下注")),
  56007. 3
  56008. /* TEXT, CLASS */
  56009. )
  56010. ])
  56011. ])
  56012. ])) : vue.createCommentVNode("v-if", true),
  56013. vue.createVNode(_component_u_popup, {
  56014. modelValue: $setup.cartPopupVisible,
  56015. "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $setup.cartPopupVisible = $event),
  56016. mode: "bottom",
  56017. "border-radius": "24",
  56018. mask: true,
  56019. "mask-close-able": true,
  56020. "z-index": 990,
  56021. "safe-area-inset-bottom": true,
  56022. height: "75%"
  56023. }, {
  56024. default: vue.withCtx(() => [
  56025. vue.createElementVNode("view", { class: "popup-cart-layout" }, [
  56026. vue.createElementVNode("view", { class: "popup-fixed-header" }, [
  56027. vue.createElementVNode("view", {
  56028. class: "betting-sheet-header border-bottom",
  56029. onClick: _cache[6] || (_cache[6] = ($event) => $setup.cartPopupVisible = false)
  56030. }, [
  56031. vue.createElementVNode("view", { class: "betting-sheet-header-left" }, [
  56032. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock(
  56033. "view",
  56034. {
  56035. key: 0,
  56036. class: "sheet-badge"
  56037. },
  56038. vue.toDisplayString($setup.totalBets),
  56039. 1
  56040. /* TEXT */
  56041. )) : vue.createCommentVNode("v-if", true),
  56042. vue.createElementVNode(
  56043. "text",
  56044. { class: "header-text" },
  56045. vue.toDisplayString($setup.t("已选注单明细")),
  56046. 1
  56047. /* TEXT */
  56048. ),
  56049. vue.createVNode(_component_u_icon, {
  56050. name: "arrow-down",
  56051. color: "#666"
  56052. })
  56053. ]),
  56054. vue.createElementVNode("view", {
  56055. class: "betting-sheet-header-right",
  56056. style: { "display": "flex", "align-items": "center" }
  56057. }, [
  56058. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  56059. key: 0,
  56060. class: "settings-btn",
  56061. onClick: vue.withModifiers($setup.clearSelect, ["stop"])
  56062. }, [
  56063. vue.createElementVNode(
  56064. "text",
  56065. {
  56066. style: { "font-size": "12px" },
  56067. class: "tmc"
  56068. },
  56069. vue.toDisplayString($setup.t("清空")),
  56070. 1
  56071. /* TEXT */
  56072. )
  56073. ])) : vue.createCommentVNode("v-if", true)
  56074. ])
  56075. ]),
  56076. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  56077. key: 0,
  56078. class: "batch-stake-box"
  56079. }, [
  56080. vue.createElementVNode(
  56081. "text",
  56082. { class: "batch-label" },
  56083. vue.toDisplayString($setup.t("批量设置金额")),
  56084. 1
  56085. /* TEXT */
  56086. ),
  56087. vue.createElementVNode("view", { class: "batch-input-wrapper" }, [
  56088. vue.withDirectives(vue.createElementVNode("input", {
  56089. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.batchStakeValue = $event),
  56090. class: "batch-input",
  56091. placeholder: $setup.t("请输入金额"),
  56092. type: "number"
  56093. }, null, 8, ["placeholder"]), [
  56094. [vue.vModelText, $setup.batchStakeValue]
  56095. ])
  56096. ]),
  56097. vue.createVNode(_component_u_button, {
  56098. size: "mini",
  56099. type: "primary",
  56100. style: { "margin-left": "10px" },
  56101. onClick: $setup.applyBatchStake
  56102. }, {
  56103. default: vue.withCtx(() => [
  56104. vue.createTextVNode(
  56105. vue.toDisplayString($setup.t("确定")),
  56106. 1
  56107. /* TEXT */
  56108. )
  56109. ]),
  56110. _: 1
  56111. /* STABLE */
  56112. })
  56113. ])) : vue.createCommentVNode("v-if", true)
  56114. ]),
  56115. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("scroll-view", {
  56116. key: 0,
  56117. "scroll-y": "true",
  56118. class: "scroll-view-container"
  56119. }, [
  56120. vue.createElementVNode("view", { class: "bet-list" }, [
  56121. (vue.openBlock(true), vue.createElementBlock(
  56122. vue.Fragment,
  56123. null,
  56124. vue.renderList($setup.selectedBets, (item) => {
  56125. return vue.openBlock(), vue.createElementBlock("view", {
  56126. class: "bet-item",
  56127. key: item.id
  56128. }, [
  56129. vue.createElementVNode("view", { class: "item-header" }, [
  56130. vue.createElementVNode("text", { class: "team-names" }, [
  56131. vue.createTextVNode(
  56132. vue.toDisplayString(item.playName) + " - ",
  56133. 1
  56134. /* TEXT */
  56135. ),
  56136. vue.createElementVNode(
  56137. "text",
  56138. {
  56139. class: vue.normalizeClass($setup.getTextColorClass(item.color))
  56140. },
  56141. vue.toDisplayString(item.number),
  56142. 3
  56143. /* TEXT, CLASS */
  56144. )
  56145. ]),
  56146. vue.createElementVNode("view", {
  56147. class: "close-btn",
  56148. onClick: vue.withModifiers(($event) => $setup.removeSelected(item.id), ["stop"])
  56149. }, [
  56150. vue.createVNode(_component_u_icon, {
  56151. name: "close",
  56152. color: "#666",
  56153. size: "16"
  56154. })
  56155. ], 8, ["onClick"])
  56156. ]),
  56157. vue.createElementVNode("view", { class: "item-info" }, [
  56158. vue.createElementVNode("view", { class: "bet-type" }, [
  56159. vue.createElementVNode(
  56160. "text",
  56161. { class: "type-name" },
  56162. vue.toDisplayString($setup.t("赔率")),
  56163. 1
  56164. /* TEXT */
  56165. ),
  56166. vue.createElementVNode(
  56167. "text",
  56168. {
  56169. class: "limit-text",
  56170. style: { "margin-left": "10px", "font-size": "12px", "color": "#999" }
  56171. },
  56172. vue.toDisplayString($setup.t("单注限额")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10) + " ~ " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  56173. 1
  56174. /* TEXT */
  56175. )
  56176. ]),
  56177. vue.createElementVNode("view", { class: "odds-box" }, [
  56178. vue.createElementVNode(
  56179. "text",
  56180. { class: "odds-val" },
  56181. "@" + vue.toDisplayString($setup.isFengpan ? "--" : item.odds),
  56182. 1
  56183. /* TEXT */
  56184. )
  56185. ])
  56186. ]),
  56187. vue.createElementVNode(
  56188. "view",
  56189. {
  56190. class: vue.normalizeClass(["stake-input-box", { "error-border": item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 || item.mininum !== void 0 && item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) || item.maxinum !== void 0 && Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) || Number(item.amount) > $setup.userMoney }])
  56191. },
  56192. [
  56193. vue.createElementVNode("view", {
  56194. class: "stepper-btn",
  56195. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, -10), ["stop"])
  56196. }, "-", 8, ["onClick"]),
  56197. vue.withDirectives(vue.createElementVNode("input", {
  56198. "onUpdate:modelValue": ($event) => item.amount = $event,
  56199. type: "number",
  56200. class: "stake-input",
  56201. placeholder: $setup.t("输入本金"),
  56202. onBlur: ($event) => $setup.validateAmount(item)
  56203. }, null, 40, ["onUpdate:modelValue", "placeholder", "onBlur"]), [
  56204. [vue.vModelText, item.amount]
  56205. ]),
  56206. vue.createElementVNode("view", {
  56207. class: "stepper-btn",
  56208. onClick: vue.withModifiers(($event) => $setup.changeAmount(item, 10), ["stop"])
  56209. }, "+", 8, ["onClick"])
  56210. ],
  56211. 2
  56212. /* CLASS */
  56213. ),
  56214. vue.createElementVNode("view", { class: "item-footer" }, [
  56215. item.amount !== "" && item.amount !== void 0 && Number(item.amount) <= 0 ? (vue.openBlock(), vue.createElementBlock(
  56216. "view",
  56217. {
  56218. key: 0,
  56219. class: "err-msg"
  56220. },
  56221. vue.toDisplayString($setup.t("金额不能小于等于0")),
  56222. 1
  56223. /* TEXT */
  56224. )) : item.amount !== "" && item.amount !== void 0 && Number(item.amount) < (item.mininum !== void 0 ? Number(item.mininum) : 10) ? (vue.openBlock(), vue.createElementBlock(
  56225. "view",
  56226. {
  56227. key: 1,
  56228. class: "err-msg"
  56229. },
  56230. vue.toDisplayString($setup.t("单注最低限制为")) + " " + vue.toDisplayString(item.mininum !== void 0 ? item.mininum : 10),
  56231. 1
  56232. /* TEXT */
  56233. )) : Number(item.amount) > (item.maxinum !== void 0 ? Number(item.maxinum) : 1e4) ? (vue.openBlock(), vue.createElementBlock(
  56234. "view",
  56235. {
  56236. key: 2,
  56237. class: "err-msg"
  56238. },
  56239. vue.toDisplayString($setup.t("单注最高限制为")) + " " + vue.toDisplayString(item.maxinum !== void 0 ? item.maxinum : 1e4),
  56240. 1
  56241. /* TEXT */
  56242. )) : Number(item.amount) > $setup.userMoney ? (vue.openBlock(), vue.createElementBlock(
  56243. "view",
  56244. {
  56245. key: 3,
  56246. class: "err-msg"
  56247. },
  56248. vue.toDisplayString($setup.t("余额不足")),
  56249. 1
  56250. /* TEXT */
  56251. )) : (vue.openBlock(), vue.createElementBlock("view", {
  56252. key: 4,
  56253. class: "potential-win"
  56254. }, [
  56255. vue.createTextVNode(
  56256. vue.toDisplayString($setup.t("潜在赢利")) + " ",
  56257. 1
  56258. /* TEXT */
  56259. ),
  56260. vue.createElementVNode(
  56261. "text",
  56262. { class: "win-amount" },
  56263. vue.toDisplayString((Number(item.amount) * Number(item.odds)).toFixed(2)),
  56264. 1
  56265. /* TEXT */
  56266. )
  56267. ]))
  56268. ])
  56269. ]);
  56270. }),
  56271. 128
  56272. /* KEYED_FRAGMENT */
  56273. ))
  56274. ]),
  56275. vue.createElementVNode("view", { style: { "height": "100px" } })
  56276. ])) : vue.createCommentVNode("v-if", true),
  56277. $setup.totalBets === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  56278. key: 1,
  56279. class: "empty-sheet"
  56280. }, [
  56281. vue.createElementVNode(
  56282. "text",
  56283. null,
  56284. vue.toDisplayString($setup.t("暂无投注项")),
  56285. 1
  56286. /* TEXT */
  56287. )
  56288. ])) : vue.createCommentVNode("v-if", true),
  56289. $setup.totalBets > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  56290. key: 2,
  56291. class: "sheet-action-bar popup-fixed-footer digital-cart-bottom"
  56292. }, [
  56293. vue.createElementVNode("view", { class: "total-odds-row" }, [
  56294. vue.createElementVNode(
  56295. "text",
  56296. { class: "label" },
  56297. vue.toDisplayString($setup.t("总投注金额")),
  56298. 1
  56299. /* TEXT */
  56300. ),
  56301. vue.createElementVNode(
  56302. "text",
  56303. { class: "val" },
  56304. vue.toDisplayString($setup.totalAmount.toFixed(2)),
  56305. 1
  56306. /* TEXT */
  56307. )
  56308. ]),
  56309. vue.createVNode(_component_u_button, {
  56310. type: "primary",
  56311. onClick: $setup.handleOneClickBet,
  56312. disabled: $setup.isFengpan
  56313. }, {
  56314. default: vue.withCtx(() => [
  56315. vue.createTextVNode(
  56316. vue.toDisplayString($setup.t("立即投注")),
  56317. 1
  56318. /* TEXT */
  56319. )
  56320. ]),
  56321. _: 1
  56322. /* STABLE */
  56323. }, 8, ["disabled"])
  56324. ])) : vue.createCommentVNode("v-if", true)
  56325. ])
  56326. ]),
  56327. _: 1
  56328. /* STABLE */
  56329. }, 8, ["modelValue"]),
  56330. vue.createVNode(_component_u_modal, {
  56331. ref: "safeModalRef",
  56332. modelValue: $setup.showSafeModal,
  56333. "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.showSafeModal = $event),
  56334. "async-close": true,
  56335. title: $setup.t("安全验证"),
  56336. "show-cancel-button": true,
  56337. "confirm-text": $setup.t("确定投注"),
  56338. "cancel-text": $setup.t("取消"),
  56339. "confirm-color": "#f8b932",
  56340. onConfirm: $setup.confirmSubmitBet
  56341. }, {
  56342. default: vue.withCtx(() => [
  56343. vue.createElementVNode("view", { class: "safe-modal-content" }, [
  56344. vue.createElementVNode(
  56345. "text",
  56346. { class: "safe-tips" },
  56347. vue.toDisplayString($setup.t("为保障您的资金安全,请输入资金密码")),
  56348. 1
  56349. /* TEXT */
  56350. ),
  56351. vue.createVNode(_component_u_input, {
  56352. modelValue: $setup.safeWord,
  56353. "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $setup.safeWord = $event),
  56354. type: "password",
  56355. placeholder: $setup.t("请输入资金密码"),
  56356. border: true,
  56357. "border-color": "#e4e7ed",
  56358. clearable: true,
  56359. "input-align": "center"
  56360. }, null, 8, ["modelValue", "placeholder"])
  56361. ])
  56362. ]),
  56363. _: 1
  56364. /* STABLE */
  56365. }, 8, ["modelValue", "title", "confirm-text", "cancel-text"]),
  56366. vue.createVNode(_component_u_popup, {
  56367. modelValue: $setup.historyPopupVisible,
  56368. "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $setup.historyPopupVisible = $event),
  56369. mode: "center",
  56370. "border-radius": "20",
  56371. mask: true,
  56372. "z-index": 990,
  56373. width: "90%"
  56374. }, {
  56375. default: vue.withCtx(() => [
  56376. vue.createElementVNode("view", { class: "popup-wrapper history-popup" }, [
  56377. vue.createElementVNode(
  56378. "view",
  56379. { class: "p-title" },
  56380. vue.toDisplayString($setup.t("近期开奖记录")),
  56381. 1
  56382. /* TEXT */
  56383. ),
  56384. vue.createElementVNode("scroll-view", {
  56385. "scroll-y": "true",
  56386. class: "history-scroll-container"
  56387. }, [
  56388. vue.createElementVNode("view", { class: "history-list-content" }, [
  56389. (vue.openBlock(true), vue.createElementBlock(
  56390. vue.Fragment,
  56391. null,
  56392. vue.renderList($setup.historyLotteryList, (item, idx) => {
  56393. return vue.openBlock(), vue.createElementBlock("view", {
  56394. class: "history-item",
  56395. key: idx
  56396. }, [
  56397. vue.createElementVNode("view", { class: "h-top" }, [
  56398. vue.createElementVNode(
  56399. "text",
  56400. { class: "h-issue" },
  56401. vue.toDisplayString(item.issue) + vue.toDisplayString($setup.t("期")),
  56402. 1
  56403. /* TEXT */
  56404. ),
  56405. vue.createElementVNode(
  56406. "text",
  56407. { class: "h-time" },
  56408. vue.toDisplayString(item.open_time),
  56409. 1
  56410. /* TEXT */
  56411. )
  56412. ]),
  56413. vue.createElementVNode("view", { class: "balls-grid" }, [
  56414. (vue.openBlock(true), vue.createElementBlock(
  56415. vue.Fragment,
  56416. null,
  56417. vue.renderList(item.lottery_codes.slice(0, 6), (b, i) => {
  56418. return vue.openBlock(), vue.createElementBlock("view", {
  56419. class: "ball-group",
  56420. key: i
  56421. }, [
  56422. vue.createElementVNode(
  56423. "view",
  56424. {
  56425. class: vue.normalizeClass(["l-ball", $setup.getBgColorClass(b.color)])
  56426. },
  56427. [
  56428. vue.createElementVNode(
  56429. "view",
  56430. { class: "ball-inner" },
  56431. vue.toDisplayString(b.code),
  56432. 1
  56433. /* TEXT */
  56434. )
  56435. ],
  56436. 2
  56437. /* CLASS */
  56438. ),
  56439. vue.createElementVNode(
  56440. "text",
  56441. { class: "l-zodiac" },
  56442. vue.toDisplayString(b.zodiac),
  56443. 1
  56444. /* TEXT */
  56445. )
  56446. ]);
  56447. }),
  56448. 128
  56449. /* KEYED_FRAGMENT */
  56450. )),
  56451. vue.createElementVNode("text", { class: "plus" }, "+"),
  56452. vue.createElementVNode("view", { class: "ball-group" }, [
  56453. vue.createElementVNode(
  56454. "view",
  56455. {
  56456. class: vue.normalizeClass(["l-ball special-ball", $setup.getBgColorClass(item.lottery_codes[6].color)])
  56457. },
  56458. [
  56459. vue.createElementVNode(
  56460. "view",
  56461. { class: "ball-inner" },
  56462. vue.toDisplayString(item.lottery_codes[6].code),
  56463. 1
  56464. /* TEXT */
  56465. )
  56466. ],
  56467. 2
  56468. /* CLASS */
  56469. ),
  56470. vue.createElementVNode(
  56471. "text",
  56472. { class: "l-zodiac" },
  56473. vue.toDisplayString(item.lottery_codes[6].zodiac),
  56474. 1
  56475. /* TEXT */
  56476. )
  56477. ])
  56478. ])
  56479. ]);
  56480. }),
  56481. 128
  56482. /* KEYED_FRAGMENT */
  56483. ))
  56484. ])
  56485. ]),
  56486. vue.createElementVNode(
  56487. "view",
  56488. {
  56489. class: "close-btn-bottom",
  56490. onClick: _cache[11] || (_cache[11] = ($event) => $setup.historyPopupVisible = false)
  56491. },
  56492. vue.toDisplayString($setup.t("关闭")),
  56493. 1
  56494. /* TEXT */
  56495. )
  56496. ])
  56497. ]),
  56498. _: 1
  56499. /* STABLE */
  56500. }, 8, ["modelValue"])
  56501. ]),
  56502. _: 1
  56503. /* STABLE */
  56504. },
  56505. 512
  56506. /* NEED_PATCH */
  56507. )
  56508. ]),
  56509. _: 1
  56510. /* STABLE */
  56511. });
  56512. }
  56513. const PagesTabbarEntertainmentViewHKDigitalIndex = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5], ["__scopeId", "data-v-7b9c5ce0"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/HKDigital/index.vue"]]);
  56514. const _sfc_main$5 = {
  56515. __name: "index",
  56516. setup(__props, { expose: __expose }) {
  56517. __expose();
  56518. const { t: t2, locale } = useI18n();
  56519. const pagingRef = vue.ref(null);
  56520. const historyList = vue.ref([]);
  56521. const currentTab = vue.ref(0);
  56522. const calendarShow = vue.ref(false);
  56523. const dateRange = vue.ref("");
  56524. const startTime = vue.ref("");
  56525. const endTime = vue.ref("");
  56526. onLoad((options) => {
  56527. if (options.type === "newPc") {
  56528. currentTab.value = 1;
  56529. } else {
  56530. currentTab.value = 0;
  56531. }
  56532. });
  56533. const getApiBasePath = () => {
  56534. return currentTab.value === 0 ? "issue" : "newPc";
  56535. };
  56536. const isDrawn = (item) => {
  56537. return item.winning_array && item.winning_array.length >= 4 || item.openCode1 !== void 0 && item.openCode1 !== null;
  56538. };
  56539. const switchTab = (index) => {
  56540. var _a2;
  56541. if (currentTab.value === index)
  56542. return;
  56543. currentTab.value = index;
  56544. (_a2 = pagingRef.value) == null ? void 0 : _a2.reload();
  56545. };
  56546. const getHistoryData = (params) => {
  56547. return new Promise((resolve2, reject) => {
  56548. uni.request({
  56549. // url: `https://api.f1bet.bet/api/${getApiBasePath()}`,
  56550. url: `${apiUrl}${getApiBasePath()}`,
  56551. method: "GET",
  56552. data: params,
  56553. success: (res) => resolve2(res.data),
  56554. fail: (err) => reject(err),
  56555. header: {
  56556. lang: locale.value
  56557. }
  56558. });
  56559. });
  56560. };
  56561. const onQuery = async (pageNo, pageSize) => {
  56562. try {
  56563. const params = {
  56564. page: pageNo,
  56565. limit: 50
  56566. };
  56567. if (startTime.value)
  56568. params.start_time = startTime.value;
  56569. if (endTime.value)
  56570. params.end_time = endTime.value;
  56571. const res = await getHistoryData(params);
  56572. if (res.code === 0 && res.data && res.data.data) {
  56573. pagingRef.value.complete(res.data.data);
  56574. } else {
  56575. pagingRef.value.complete(false);
  56576. }
  56577. } catch (error) {
  56578. formatAppLog("error", "at pages/Tabbar/Entertainment/view/history/index.vue:239", error);
  56579. pagingRef.value.complete(false);
  56580. }
  56581. };
  56582. function onCalendarChange(e) {
  56583. if (e.startDate && e.endDate) {
  56584. startTime.value = e.startDate;
  56585. endTime.value = e.endDate;
  56586. dateRange.value = `${e.startDate} ~ ${e.endDate}`;
  56587. handleQuery2();
  56588. }
  56589. }
  56590. function handleQuery2() {
  56591. pagingRef.value.reload();
  56592. }
  56593. function handleReset() {
  56594. dateRange.value = "";
  56595. startTime.value = "";
  56596. endTime.value = "";
  56597. pagingRef.value.reload();
  56598. }
  56599. const getTagColor = (text) => {
  56600. if (["大", "双", "极大"].includes(text))
  56601. return "tag-red";
  56602. if (["小", "单", "极小"].includes(text))
  56603. return "tag-green";
  56604. return "tag-blue";
  56605. };
  56606. const __returned__ = { t: t2, locale, pagingRef, historyList, currentTab, calendarShow, dateRange, startTime, endTime, getApiBasePath, isDrawn, switchTab, getHistoryData, onQuery, onCalendarChange, handleQuery: handleQuery2, handleReset, getTagColor, ref: vue.ref, get onLoad() {
  56607. return onLoad;
  56608. }, get useI18n() {
  56609. return useI18n;
  56610. }, get apiUrl() {
  56611. return apiUrl;
  56612. } };
  56613. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  56614. return __returned__;
  56615. }
  56616. };
  56617. function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
  56618. const _component_u_empty = __unplugin_components_4$2;
  56619. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  56620. const _component_u_calendar = __unplugin_components_6;
  56621. const _component_PageContainer = PageContainer;
  56622. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  56623. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  56624. default: vue.withCtx(() => [
  56625. vue.createVNode(_component_PageContainer, {
  56626. "nav-title": $setup.t("往期历史")
  56627. }, {
  56628. default: vue.withCtx(() => [
  56629. vue.createElementVNode("view", { class: "page-content" }, [
  56630. vue.createVNode(_component_z_paging, {
  56631. ref: "pagingRef",
  56632. modelValue: $setup.historyList,
  56633. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.historyList = $event),
  56634. onQuery: $setup.onQuery,
  56635. fixed: false,
  56636. "refresher-enabled": true,
  56637. "loading-more-enabled": true,
  56638. "auto-show-back-to-top": true,
  56639. "back-to-top-threshold": 300
  56640. }, vue.createSlots({
  56641. refresher: vue.withCtx(() => [
  56642. vue.createElementVNode("view", { class: "refresher-ui" }, [
  56643. vue.createElementVNode("view", { class: "spin-loader" }),
  56644. vue.createElementVNode(
  56645. "text",
  56646. { class: "refresher-text" },
  56647. vue.toDisplayString($setup.t("获取最新数据...")),
  56648. 1
  56649. /* TEXT */
  56650. )
  56651. ])
  56652. ]),
  56653. empty: vue.withCtx(() => [
  56654. vue.createElementVNode("view", { class: "empty-ui" }, [
  56655. vue.createVNode(_component_u_empty, {
  56656. text: $setup.t("暂无历史记录"),
  56657. mode: "list",
  56658. "icon-size": "120"
  56659. }, null, 8, ["text"])
  56660. ])
  56661. ]),
  56662. default: vue.withCtx(() => [
  56663. vue.createElementVNode("view", { class: "history-list" }, [
  56664. (vue.openBlock(true), vue.createElementBlock(
  56665. vue.Fragment,
  56666. null,
  56667. vue.renderList($setup.historyList, (item) => {
  56668. return vue.openBlock(), vue.createElementBlock(
  56669. vue.Fragment,
  56670. {
  56671. key: item.id
  56672. },
  56673. [
  56674. $setup.isDrawn(item) ? (vue.openBlock(), vue.createElementBlock("view", {
  56675. key: 0,
  56676. class: "history-item"
  56677. }, [
  56678. vue.createElementVNode("view", { class: "h-header" }, [
  56679. vue.createElementVNode(
  56680. "text",
  56681. { class: "h-issue" },
  56682. vue.toDisplayString(item.issue_no || item.section) + " " + vue.toDisplayString($setup.t("期")),
  56683. 1
  56684. /* TEXT */
  56685. ),
  56686. vue.createElementVNode(
  56687. "text",
  56688. { class: "h-time" },
  56689. vue.toDisplayString(item.day),
  56690. 1
  56691. /* TEXT */
  56692. )
  56693. ]),
  56694. vue.createElementVNode("view", { class: "h-body" }, [
  56695. item.winning_array && item.winning_array.length >= 4 ? (vue.openBlock(), vue.createElementBlock("view", {
  56696. key: 0,
  56697. class: "h-equation"
  56698. }, [
  56699. vue.createElementVNode(
  56700. "view",
  56701. { class: "h-num" },
  56702. vue.toDisplayString(item.winning_array[0]),
  56703. 1
  56704. /* TEXT */
  56705. ),
  56706. vue.createElementVNode("text", { class: "h-op" }, "+"),
  56707. vue.createElementVNode(
  56708. "view",
  56709. { class: "h-num" },
  56710. vue.toDisplayString(item.winning_array[1]),
  56711. 1
  56712. /* TEXT */
  56713. ),
  56714. vue.createElementVNode("text", { class: "h-op" }, "+"),
  56715. vue.createElementVNode(
  56716. "view",
  56717. { class: "h-num" },
  56718. vue.toDisplayString(item.winning_array[2]),
  56719. 1
  56720. /* TEXT */
  56721. ),
  56722. vue.createElementVNode("text", { class: "h-op" }, "="),
  56723. vue.createElementVNode(
  56724. "view",
  56725. { class: "h-num res" },
  56726. vue.toDisplayString(item.winning_array[3]),
  56727. 1
  56728. /* TEXT */
  56729. )
  56730. ])) : item.openCode1 !== void 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  56731. key: 1,
  56732. class: "h-equation"
  56733. }, [
  56734. vue.createElementVNode(
  56735. "view",
  56736. { class: "h-num" },
  56737. vue.toDisplayString(item.openCode1),
  56738. 1
  56739. /* TEXT */
  56740. ),
  56741. vue.createElementVNode("text", { class: "h-op" }, "+"),
  56742. vue.createElementVNode(
  56743. "view",
  56744. { class: "h-num" },
  56745. vue.toDisplayString(item.openCode2),
  56746. 1
  56747. /* TEXT */
  56748. ),
  56749. vue.createElementVNode("text", { class: "h-op" }, "+"),
  56750. vue.createElementVNode(
  56751. "view",
  56752. { class: "h-num" },
  56753. vue.toDisplayString(item.openCode3),
  56754. 1
  56755. /* TEXT */
  56756. ),
  56757. vue.createElementVNode("text", { class: "h-op" }, "="),
  56758. vue.createElementVNode(
  56759. "view",
  56760. { class: "h-num res" },
  56761. vue.toDisplayString(Number(item.openCode1) + Number(item.openCode2) + Number(item.openCode3)),
  56762. 1
  56763. /* TEXT */
  56764. )
  56765. ])) : vue.createCommentVNode("v-if", true),
  56766. item.combo || item.award ? (vue.openBlock(), vue.createElementBlock("view", {
  56767. key: 2,
  56768. class: "h-tags"
  56769. }, [
  56770. item.combo ? (vue.openBlock(true), vue.createElementBlock(
  56771. vue.Fragment,
  56772. { key: 0 },
  56773. vue.renderList(item.combo, (tag, i) => {
  56774. return vue.openBlock(), vue.createElementBlock(
  56775. "view",
  56776. {
  56777. class: vue.normalizeClass(["tag", $setup.getTagColor(tag)]),
  56778. key: "c" + i
  56779. },
  56780. vue.toDisplayString(tag),
  56781. 3
  56782. /* TEXT, CLASS */
  56783. );
  56784. }),
  56785. 128
  56786. /* KEYED_FRAGMENT */
  56787. )) : item.award ? (vue.openBlock(true), vue.createElementBlock(
  56788. vue.Fragment,
  56789. { key: 1 },
  56790. vue.renderList(item.award.slice(0, 3), (tag, i) => {
  56791. return vue.openBlock(), vue.createElementBlock(
  56792. "view",
  56793. {
  56794. class: vue.normalizeClass(["tag", $setup.getTagColor(tag)]),
  56795. key: "a" + i
  56796. },
  56797. vue.toDisplayString(tag),
  56798. 3
  56799. /* TEXT, CLASS */
  56800. );
  56801. }),
  56802. 128
  56803. /* KEYED_FRAGMENT */
  56804. )) : vue.createCommentVNode("v-if", true)
  56805. ])) : vue.createCommentVNode("v-if", true)
  56806. ])
  56807. ])) : vue.createCommentVNode("v-if", true)
  56808. ],
  56809. 64
  56810. /* STABLE_FRAGMENT */
  56811. );
  56812. }),
  56813. 128
  56814. /* KEYED_FRAGMENT */
  56815. ))
  56816. ])
  56817. ]),
  56818. _: 2
  56819. /* DYNAMIC */
  56820. }, [
  56821. {
  56822. name: "top",
  56823. fn: vue.withCtx(() => [
  56824. vue.createElementVNode("view", { class: "top-tabs" }, [
  56825. vue.createElementVNode(
  56826. "view",
  56827. {
  56828. class: vue.normalizeClass(["tab", { active: $setup.currentTab === 0 }]),
  56829. onClick: _cache[0] || (_cache[0] = ($event) => $setup.switchTab(0))
  56830. },
  56831. vue.toDisplayString($setup.t("加拿大")) + "28 ",
  56832. 3
  56833. /* TEXT, CLASS */
  56834. ),
  56835. vue.createElementVNode(
  56836. "view",
  56837. {
  56838. class: vue.normalizeClass(["tab", { active: $setup.currentTab === 1 }]),
  56839. onClick: _cache[1] || (_cache[1] = ($event) => $setup.switchTab(1))
  56840. },
  56841. vue.toDisplayString($setup.t("极速")) + "28 ",
  56842. 3
  56843. /* TEXT, CLASS */
  56844. )
  56845. ]),
  56846. vue.createCommentVNode("v-if", true)
  56847. ]),
  56848. key: "0"
  56849. }
  56850. ]), 1032, ["modelValue"])
  56851. ]),
  56852. vue.createVNode(_component_u_calendar, {
  56853. modelValue: $setup.calendarShow,
  56854. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.calendarShow = $event),
  56855. mode: "range",
  56856. "active-bg-color": _ctx.$mainColor,
  56857. "range-color": _ctx.$mainColor,
  56858. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  56859. "start-text": $setup.t("开始"),
  56860. "end-text": $setup.t("结束"),
  56861. "btn-type": "primary",
  56862. onChange: $setup.onCalendarChange
  56863. }, null, 8, ["modelValue", "active-bg-color", "range-color", "start-text", "end-text"])
  56864. ]),
  56865. _: 1
  56866. /* STABLE */
  56867. }, 8, ["nav-title"])
  56868. ]),
  56869. _: 1
  56870. /* STABLE */
  56871. });
  56872. }
  56873. const PagesTabbarEntertainmentViewHistoryIndex = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__scopeId", "data-v-1c04c3e9"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/history/index.vue"]]);
  56874. const _sfc_main$4 = {
  56875. __name: "index",
  56876. setup(__props, { expose: __expose }) {
  56877. __expose();
  56878. const { t: t2 } = useI18n();
  56879. const pagingRef = vue.ref(null);
  56880. const betList = vue.ref([]);
  56881. const statusPickerShow = vue.ref(false);
  56882. const calendarShow = vue.ref(false);
  56883. const currentStatus = vue.ref("");
  56884. const dateRange = vue.ref("");
  56885. const startTime = vue.ref("");
  56886. const endTime = vue.ref("");
  56887. const statusColumns = vue.computed(() => [
  56888. { label: t2("全部状态"), value: "" },
  56889. { label: t2("待开奖"), value: 1 },
  56890. { label: t2("已中奖"), value: 2 },
  56891. { label: t2("未中奖"), value: 3 },
  56892. { label: t2("已撤单"), value: 4 }
  56893. ]);
  56894. const statusText = vue.computed(() => {
  56895. const target = statusColumns.value.find((item) => item.value === currentStatus.value);
  56896. return target ? target.label : "";
  56897. });
  56898. const onQuery = async (pageNo, pageSize) => {
  56899. try {
  56900. const params = {
  56901. page: pageNo,
  56902. limit: pageSize,
  56903. status: currentStatus.value,
  56904. start_time: startTime.value,
  56905. end_time: endTime.value
  56906. };
  56907. const res = await getGameBetList(params);
  56908. if (res.code === 1 && res.data && res.data.list) {
  56909. pagingRef.value.complete(res.data.list);
  56910. } else {
  56911. pagingRef.value.complete(false);
  56912. }
  56913. } catch (error) {
  56914. formatAppLog("error", "at pages/Tabbar/Entertainment/view/Pc28BettingHistory/index.vue:202", error);
  56915. pagingRef.value.complete(false);
  56916. }
  56917. };
  56918. const onStatusConfirm = (e) => {
  56919. currentStatus.value = e[0].value;
  56920. handleQuery2();
  56921. };
  56922. const onCalendarChange = (e) => {
  56923. if (e.startDate && e.endDate) {
  56924. startTime.value = e.startDate;
  56925. endTime.value = e.endDate;
  56926. dateRange.value = `${e.startDate} ~ ${e.endDate}`;
  56927. handleQuery2();
  56928. }
  56929. };
  56930. const handleQuery2 = () => {
  56931. pagingRef.value.reload();
  56932. };
  56933. const handleReset = () => {
  56934. currentStatus.value = "";
  56935. dateRange.value = "";
  56936. startTime.value = "";
  56937. endTime.value = "";
  56938. pagingRef.value.reload();
  56939. };
  56940. const getStatusText = (status) => {
  56941. const map = {
  56942. 1: t2("待开奖"),
  56943. 2: t2("已中奖"),
  56944. 3: t2("未中奖"),
  56945. 4: t2("已撤单")
  56946. };
  56947. return map[status] || t2("未知");
  56948. };
  56949. const getStatusClass = (status) => {
  56950. const map = {
  56951. 1: "status-pending",
  56952. // 橙色
  56953. 2: "status-win",
  56954. // 红色/绿色
  56955. 3: "status-lose",
  56956. // 灰色
  56957. 4: "status-cancel"
  56958. // 浅灰
  56959. };
  56960. return map[status] || "status-default";
  56961. };
  56962. const __returned__ = { t: t2, pagingRef, betList, statusPickerShow, calendarShow, currentStatus, dateRange, startTime, endTime, statusColumns, statusText, onQuery, onStatusConfirm, onCalendarChange, handleQuery: handleQuery2, handleReset, getStatusText, getStatusClass, ref: vue.ref, computed: vue.computed, get useI18n() {
  56963. return useI18n;
  56964. }, get getGameBetList() {
  56965. return getGameBetList;
  56966. } };
  56967. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  56968. return __returned__;
  56969. }
  56970. };
  56971. function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
  56972. const _component_u_icon = __unplugin_components_0$5;
  56973. const _component_u_button = __unplugin_components_2$1;
  56974. const _component_u_empty = __unplugin_components_4$2;
  56975. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  56976. const _component_u_select = __unplugin_components_5$1;
  56977. const _component_u_calendar = __unplugin_components_6;
  56978. const _component_PageContainer = PageContainer;
  56979. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  56980. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  56981. default: vue.withCtx(() => [
  56982. vue.createVNode(_component_PageContainer, {
  56983. "nav-title": $setup.t("投注记录")
  56984. }, {
  56985. default: vue.withCtx(() => [
  56986. vue.createElementVNode("view", { class: "page-content" }, [
  56987. vue.createVNode(_component_z_paging, {
  56988. ref: "pagingRef",
  56989. modelValue: $setup.betList,
  56990. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.betList = $event),
  56991. onQuery: $setup.onQuery,
  56992. fixed: false,
  56993. "refresher-enabled": true,
  56994. "loading-more-enabled": true,
  56995. "auto-show-back-to-top": true,
  56996. "back-to-top-threshold": 300
  56997. }, {
  56998. top: vue.withCtx(() => [
  56999. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  57000. vue.createElementVNode("view", { class: "filter-card" }, [
  57001. vue.createElementVNode("view", { class: "filter-header" }, [
  57002. vue.createElementVNode("view", { class: "title-line" }, [
  57003. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  57004. vue.createElementVNode(
  57005. "text",
  57006. { class: "title-text" },
  57007. vue.toDisplayString($setup.t("条件筛选")),
  57008. 1
  57009. /* TEXT */
  57010. )
  57011. ]),
  57012. vue.createElementVNode(
  57013. "text",
  57014. {
  57015. class: "reset-link",
  57016. onClick: $setup.handleReset
  57017. },
  57018. vue.toDisplayString($setup.t("重置全部")),
  57019. 1
  57020. /* TEXT */
  57021. )
  57022. ]),
  57023. vue.createElementVNode("view", { class: "filter-body" }, [
  57024. vue.createElementVNode("view", { class: "filter-row" }, [
  57025. vue.createElementVNode("view", {
  57026. class: "filter-item type-item",
  57027. onClick: _cache[0] || (_cache[0] = ($event) => $setup.statusPickerShow = true)
  57028. }, [
  57029. vue.createVNode(_component_u_icon, {
  57030. name: "list-dot",
  57031. size: "32",
  57032. color: _ctx.$mainColor
  57033. }, null, 8, ["color"]),
  57034. vue.createElementVNode("view", { class: "filter-content" }, [
  57035. vue.withDirectives(vue.createElementVNode(
  57036. "text",
  57037. { class: "filter-value" },
  57038. vue.toDisplayString($setup.statusText),
  57039. 513
  57040. /* TEXT, NEED_PATCH */
  57041. ), [
  57042. [vue.vShow, $setup.statusText]
  57043. ]),
  57044. vue.withDirectives(vue.createElementVNode(
  57045. "text",
  57046. { class: "filter-placeholder" },
  57047. vue.toDisplayString($setup.t("全部状态")),
  57048. 513
  57049. /* TEXT, NEED_PATCH */
  57050. ), [
  57051. [vue.vShow, !$setup.statusText]
  57052. ])
  57053. ]),
  57054. vue.createVNode(_component_u_icon, {
  57055. name: "arrow-down",
  57056. size: "14",
  57057. color: "#ccc"
  57058. })
  57059. ]),
  57060. vue.createElementVNode("view", {
  57061. class: "filter-item date-item",
  57062. onClick: _cache[1] || (_cache[1] = ($event) => $setup.calendarShow = true)
  57063. }, [
  57064. vue.createVNode(_component_u_icon, {
  57065. name: "calendar",
  57066. size: "32",
  57067. color: _ctx.$mainColor
  57068. }, null, 8, ["color"]),
  57069. vue.createElementVNode("view", { class: "filter-content" }, [
  57070. $setup.dateRange ? (vue.openBlock(), vue.createElementBlock(
  57071. "text",
  57072. {
  57073. key: 0,
  57074. class: "filter-value"
  57075. },
  57076. vue.toDisplayString($setup.dateRange),
  57077. 1
  57078. /* TEXT */
  57079. )) : (vue.openBlock(), vue.createElementBlock(
  57080. "text",
  57081. {
  57082. key: 1,
  57083. class: "filter-placeholder"
  57084. },
  57085. vue.toDisplayString($setup.t("日期区间")),
  57086. 1
  57087. /* TEXT */
  57088. ))
  57089. ]),
  57090. vue.createVNode(_component_u_icon, {
  57091. name: "arrow-down",
  57092. size: "14",
  57093. color: "#ccc"
  57094. })
  57095. ])
  57096. ]),
  57097. vue.createElementVNode("view", { class: "button-group" }, [
  57098. vue.createVNode(_component_u_button, {
  57099. type: "primary",
  57100. shape: "circle",
  57101. class: "search-btn",
  57102. onClick: $setup.handleQuery
  57103. }, {
  57104. default: vue.withCtx(() => [
  57105. vue.createVNode(_component_u_icon, {
  57106. name: "search",
  57107. size: "32",
  57108. color: "#fff",
  57109. class: "mr-1"
  57110. }),
  57111. vue.createTextVNode(
  57112. " " + vue.toDisplayString($setup.t("立即查询")),
  57113. 1
  57114. /* TEXT */
  57115. )
  57116. ]),
  57117. _: 1
  57118. /* STABLE */
  57119. })
  57120. ])
  57121. ])
  57122. ])
  57123. ])
  57124. ]),
  57125. refresher: vue.withCtx(() => [
  57126. vue.createElementVNode("view", { class: "refresher-ui" }, [
  57127. vue.createElementVNode("view", { class: "spin-loader" }),
  57128. vue.createElementVNode(
  57129. "text",
  57130. { class: "refresher-text" },
  57131. vue.toDisplayString($setup.t("更新数据中...")),
  57132. 1
  57133. /* TEXT */
  57134. )
  57135. ])
  57136. ]),
  57137. empty: vue.withCtx(() => [
  57138. vue.createElementVNode("view", { class: "empty-ui" }, [
  57139. vue.createVNode(_component_u_empty, {
  57140. text: $setup.t("暂无投注记录"),
  57141. mode: "history",
  57142. "icon-size": "120"
  57143. }, null, 8, ["text"])
  57144. ])
  57145. ]),
  57146. default: vue.withCtx(() => [
  57147. vue.createElementVNode("view", { class: "bet-list-container" }, [
  57148. (vue.openBlock(true), vue.createElementBlock(
  57149. vue.Fragment,
  57150. null,
  57151. vue.renderList($setup.betList, (item) => {
  57152. return vue.openBlock(), vue.createElementBlock("view", {
  57153. key: item.id,
  57154. class: "bet-card"
  57155. }, [
  57156. vue.createElementVNode("view", { class: "card-header" }, [
  57157. vue.createElementVNode("view", { class: "issue-box" }, [
  57158. vue.createElementVNode(
  57159. "text",
  57160. { class: "label" },
  57161. vue.toDisplayString($setup.t("期号")) + ":",
  57162. 1
  57163. /* TEXT */
  57164. ),
  57165. vue.createElementVNode(
  57166. "text",
  57167. { class: "issue-no" },
  57168. vue.toDisplayString(item.issue_no),
  57169. 1
  57170. /* TEXT */
  57171. )
  57172. ]),
  57173. vue.createElementVNode(
  57174. "view",
  57175. {
  57176. class: vue.normalizeClass(["status-badge", $setup.getStatusClass(item.status)])
  57177. },
  57178. vue.toDisplayString($setup.getStatusText(item.status)),
  57179. 3
  57180. /* TEXT, CLASS */
  57181. )
  57182. ]),
  57183. vue.createElementVNode("view", { class: "card-main" }, [
  57184. vue.createElementVNode("view", { class: "bet-content-box" }, [
  57185. vue.createElementVNode(
  57186. "text",
  57187. { class: "bet-label" },
  57188. vue.toDisplayString($setup.t("投注内容")),
  57189. 1
  57190. /* TEXT */
  57191. ),
  57192. vue.createElementVNode(
  57193. "text",
  57194. { class: "bet-keywords" },
  57195. vue.toDisplayString(item.keywords),
  57196. 1
  57197. /* TEXT */
  57198. )
  57199. ]),
  57200. vue.createElementVNode("view", { class: "data-grid" }, [
  57201. vue.createElementVNode("view", { class: "data-item" }, [
  57202. vue.createElementVNode(
  57203. "text",
  57204. { class: "d-label" },
  57205. vue.toDisplayString($setup.t("赔率")),
  57206. 1
  57207. /* TEXT */
  57208. ),
  57209. vue.createElementVNode(
  57210. "text",
  57211. { class: "d-val" },
  57212. vue.toDisplayString(item.odds),
  57213. 1
  57214. /* TEXT */
  57215. )
  57216. ]),
  57217. vue.createElementVNode("view", { class: "data-item" }, [
  57218. vue.createElementVNode(
  57219. "text",
  57220. { class: "d-label" },
  57221. vue.toDisplayString($setup.t("投注本金")),
  57222. 1
  57223. /* TEXT */
  57224. ),
  57225. vue.createElementVNode(
  57226. "text",
  57227. { class: "d-val" },
  57228. vue.toDisplayString(parseFloat(item.amount)),
  57229. 1
  57230. /* TEXT */
  57231. )
  57232. ]),
  57233. vue.createElementVNode("view", { class: "data-item" }, [
  57234. vue.createElementVNode(
  57235. "text",
  57236. { class: "d-label" },
  57237. vue.toDisplayString($setup.t("盈亏/派彩")),
  57238. 1
  57239. /* TEXT */
  57240. ),
  57241. vue.createElementVNode(
  57242. "text",
  57243. {
  57244. class: vue.normalizeClass(["d-val profit-val", Number(item.profit) > 0 ? "is-win" : ""])
  57245. },
  57246. vue.toDisplayString(Number(item.profit) > 0 ? "+" + parseFloat(item.profit) : parseFloat(item.profit)),
  57247. 3
  57248. /* TEXT, CLASS */
  57249. )
  57250. ])
  57251. ])
  57252. ]),
  57253. vue.createElementVNode("view", { class: "card-footer" }, [
  57254. vue.createElementVNode(
  57255. "text",
  57256. { class: "time" },
  57257. vue.toDisplayString(item.created_at),
  57258. 1
  57259. /* TEXT */
  57260. ),
  57261. vue.createCommentVNode(' <text class="order-id">NO.{{ item.id }}</text> ')
  57262. ])
  57263. ]);
  57264. }),
  57265. 128
  57266. /* KEYED_FRAGMENT */
  57267. ))
  57268. ])
  57269. ]),
  57270. _: 1
  57271. /* STABLE */
  57272. }, 8, ["modelValue"])
  57273. ]),
  57274. vue.createVNode(_component_u_select, {
  57275. modelValue: $setup.statusPickerShow,
  57276. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.statusPickerShow = $event),
  57277. mode: "single-column",
  57278. list: $setup.statusColumns,
  57279. "confirm-color": _ctx.$mainColor,
  57280. onConfirm: $setup.onStatusConfirm
  57281. }, null, 8, ["modelValue", "list", "confirm-color"]),
  57282. vue.createVNode(_component_u_calendar, {
  57283. modelValue: $setup.calendarShow,
  57284. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $setup.calendarShow = $event),
  57285. mode: "range",
  57286. "active-bg-color": _ctx.$mainColor,
  57287. "range-color": _ctx.$mainColor,
  57288. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  57289. "start-text": $setup.t("开始"),
  57290. "end-text": $setup.t("结束"),
  57291. "btn-type": "primary",
  57292. onChange: $setup.onCalendarChange
  57293. }, null, 8, ["modelValue", "active-bg-color", "range-color", "start-text", "end-text"])
  57294. ]),
  57295. _: 1
  57296. /* STABLE */
  57297. }, 8, ["nav-title"])
  57298. ]),
  57299. _: 1
  57300. /* STABLE */
  57301. });
  57302. }
  57303. const PagesTabbarEntertainmentViewPc28BettingHistoryIndex = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__scopeId", "data-v-7904c5d9"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/Tabbar/Entertainment/view/Pc28BettingHistory/index.vue"]]);
  57304. const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
  57305. __name: "index",
  57306. setup(__props, { expose: __expose }) {
  57307. __expose();
  57308. const { t: t2, locale } = useI18n();
  57309. const router2 = useRouter();
  57310. const mainTab = vue.ref(0);
  57311. onLoad((options) => {
  57312. if (options.tab !== void 0) {
  57313. mainTab.value = Number(options.tab);
  57314. onGameQuery();
  57315. }
  57316. });
  57317. const switchMainTab = (index) => {
  57318. if (mainTab.value === index)
  57319. return;
  57320. mainTab.value = index;
  57321. };
  57322. const tabList = vue.computed(() => [
  57323. { name: t2("体育"), value: 1 },
  57324. { name: t2("彩票"), value: 0 },
  57325. { name: t2("六合彩"), value: 2 }
  57326. ]);
  57327. const gamePagingRef = vue.ref(null);
  57328. const gameBetList = vue.ref([]);
  57329. const gameStatusShow = vue.ref(false);
  57330. const gameSettleStatusShow = vue.ref(false);
  57331. const gameCalendarShow = vue.ref(false);
  57332. const gameStatus = vue.ref("");
  57333. const gameSettleStatus = vue.ref("");
  57334. const gameDateRange = vue.ref("");
  57335. const gameStart = vue.ref("");
  57336. const gameEnd = vue.ref("");
  57337. const gameStatusColumns = vue.computed(() => [
  57338. { label: t2("中奖"), value: 1 },
  57339. { label: t2("未中奖"), value: 0 }
  57340. ]);
  57341. const gameSettleStatusColumns = vue.computed(() => [
  57342. { label: t2("待结算"), value: 1 },
  57343. { label: t2("已结算"), value: 2 }
  57344. ]);
  57345. const gameStatusText = vue.computed(() => {
  57346. const target = gameStatusColumns.value.find((item) => item.value === gameStatus.value);
  57347. return target ? target.label : "";
  57348. });
  57349. const gameSettleStatusText = vue.computed(() => {
  57350. const target = gameSettleStatusColumns.value.find((item) => item.value === gameSettleStatus.value);
  57351. return target ? target.label : "";
  57352. });
  57353. const onTabChange = (index) => {
  57354. mainTab.value = index;
  57355. };
  57356. const onGameQuery = async (pageNo, pageSize) => {
  57357. try {
  57358. const params = {
  57359. page: pageNo,
  57360. limit: pageSize,
  57361. is_winner: gameStatus.value,
  57362. status: gameSettleStatus.value,
  57363. start_time: gameStart.value,
  57364. end_time: gameEnd.value
  57365. };
  57366. const res = await getGameBetList(params);
  57367. if (res.code === 1 && res.data && res.data.list) {
  57368. gamePagingRef.value.complete(res.data.list);
  57369. } else {
  57370. gamePagingRef.value.complete(false);
  57371. }
  57372. } catch (error) {
  57373. gamePagingRef.value.complete(false);
  57374. }
  57375. };
  57376. const onGameStatusConfirm = (e) => {
  57377. gameStatus.value = e[0].value;
  57378. handleGameQuery();
  57379. };
  57380. const onGameSettleStatusConfirm = (e) => {
  57381. gameSettleStatus.value = e[0].value;
  57382. handleGameQuery();
  57383. };
  57384. const onGameCalendarChange = (e) => {
  57385. if (e.startDate && e.endDate) {
  57386. gameStart.value = e.startDate;
  57387. gameEnd.value = e.endDate;
  57388. gameDateRange.value = `${e.startDate} ~ ${e.endDate}`;
  57389. handleGameQuery();
  57390. }
  57391. };
  57392. const handleGameQuery = () => {
  57393. var _a2;
  57394. (_a2 = gamePagingRef.value) == null ? void 0 : _a2.reload();
  57395. };
  57396. const handleGameReset = () => {
  57397. var _a2;
  57398. gameStatus.value = "";
  57399. gameSettleStatus.value = "";
  57400. gameDateRange.value = "";
  57401. gameStart.value = "";
  57402. gameEnd.value = "";
  57403. (_a2 = gamePagingRef.value) == null ? void 0 : _a2.reload();
  57404. };
  57405. const getGameStatusText = (item) => {
  57406. const status = Number(item.status);
  57407. const isWinner = Number(item.profit) > 0;
  57408. if (status === 1)
  57409. return t2("待结算");
  57410. else if (status === 2)
  57411. return isWinner ? t2("已中奖") : t2("未中奖");
  57412. return t2("未知");
  57413. };
  57414. const getGameStatusClass = (item) => {
  57415. const status = Number(item.status);
  57416. const isWinner = Number(item.profit) > 0;
  57417. if (status === 1)
  57418. return "status-pending";
  57419. else if (status === 2)
  57420. return isWinner ? "status-win" : "status-lose";
  57421. return "status-default";
  57422. };
  57423. const sportPagingRef = vue.ref(null);
  57424. const sportOrderList = vue.ref([]);
  57425. const sportStatusShow = vue.ref(false);
  57426. const sportSettleStatusShow = vue.ref(false);
  57427. const sportCalendarShow = vue.ref(false);
  57428. const sportStatus = vue.ref("");
  57429. const sportSettleStatus = vue.ref("");
  57430. const sportDateRange = vue.ref("");
  57431. const sportStart = vue.ref("");
  57432. const sportEnd = vue.ref("");
  57433. const sportStatusColumns = vue.computed(() => [
  57434. { label: t2("未中奖"), value: 0 },
  57435. { label: t2("中奖"), value: 1 },
  57436. { label: t2("和局"), value: 2 },
  57437. { label: t2("平手半"), value: 3 }
  57438. ]);
  57439. const sportSettleStatusColumns = vue.computed(() => [
  57440. { label: t2("未结算"), value: 0 },
  57441. { label: t2("已结算"), value: 1 },
  57442. { label: t2("结算待发放"), value: 2 }
  57443. ]);
  57444. const sportStatusText = vue.computed(() => {
  57445. const target = sportStatusColumns.value.find((item) => item.value === sportStatus.value);
  57446. return target ? target.label : "";
  57447. });
  57448. const sportSettleStatusText = vue.computed(() => {
  57449. const target = sportSettleStatusColumns.value.find((item) => item.value === sportSettleStatus.value);
  57450. return target ? target.label : "";
  57451. });
  57452. const onSportQuery = async (pageNo, pageSize) => {
  57453. try {
  57454. const params = {
  57455. page: pageNo,
  57456. limit: pageSize,
  57457. is_win: sportStatus.value,
  57458. settlement_status: sportSettleStatus.value,
  57459. start_time: sportStart.value,
  57460. end_time: sportEnd.value
  57461. };
  57462. const res = await getOrderList(params);
  57463. if (res.code === 1) {
  57464. const list2 = (res.data.list || []).map((item) => {
  57465. try {
  57466. item.parsedDetail = item.detail ? JSON.parse(item.detail) : {};
  57467. } catch (e) {
  57468. item.parsedDetail = {};
  57469. }
  57470. return item;
  57471. });
  57472. sportPagingRef.value.complete(list2);
  57473. } else {
  57474. sportPagingRef.value.complete(false);
  57475. }
  57476. } catch (e) {
  57477. sportPagingRef.value.complete(false);
  57478. }
  57479. };
  57480. const getMarketName = (item) => {
  57481. var _a2, _b2, _c;
  57482. return ((_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.name) || "-";
  57483. };
  57484. const getSelectionValue = (item) => {
  57485. var _a2, _b2, _c, _d, _e;
  57486. return ((_e = (_d = (_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.values) == null ? void 0 : _d[0]) == null ? void 0 : _e.value) || "-";
  57487. };
  57488. const getSelectionHandicap = (item) => {
  57489. var _a2, _b2, _c, _d, _e;
  57490. return ((_e = (_d = (_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.values) == null ? void 0 : _d[0]) == null ? void 0 : _e.handicap) || "";
  57491. };
  57492. const getSelectionOdd = (item) => {
  57493. var _a2, _b2, _c, _d, _e;
  57494. return ((_e = (_d = (_c = (_b2 = (_a2 = item.parsedDetail) == null ? void 0 : _a2.odds) == null ? void 0 : _b2[0]) == null ? void 0 : _c.values) == null ? void 0 : _d[0]) == null ? void 0 : _e.odd) || "0.00";
  57495. };
  57496. const onSportStatusConfirm = (e) => {
  57497. sportStatus.value = e[0].value;
  57498. handleSportQuery();
  57499. };
  57500. const onSportSettleStatusConfirm = (e) => {
  57501. sportSettleStatus.value = e[0].value;
  57502. handleSportQuery();
  57503. };
  57504. const onSportCalendarConfirm = (e) => {
  57505. if (e.startDate && e.endDate) {
  57506. sportStart.value = e.startDate;
  57507. sportEnd.value = e.endDate;
  57508. sportDateRange.value = `${e.startDate} ~ ${e.endDate}`;
  57509. handleSportQuery();
  57510. }
  57511. sportCalendarShow.value = false;
  57512. };
  57513. const handleSportQuery = () => {
  57514. var _a2;
  57515. (_a2 = sportPagingRef.value) == null ? void 0 : _a2.reload();
  57516. };
  57517. const handleSportReset = () => {
  57518. var _a2;
  57519. sportStatus.value = "";
  57520. sportSettleStatus.value = "";
  57521. sportDateRange.value = "";
  57522. sportStart.value = "";
  57523. sportEnd.value = "";
  57524. (_a2 = sportPagingRef.value) == null ? void 0 : _a2.reload();
  57525. };
  57526. const getMatchStateText = (state) => {
  57527. const map = {
  57528. 0: t2("未开始"),
  57529. 1: t2("进行中"),
  57530. 2: t2("已完场"),
  57531. 3: t2("延期"),
  57532. 4: t2("取消")
  57533. };
  57534. return map[Number(state)] || t2("未知");
  57535. };
  57536. const getMatchStateType = (state) => {
  57537. const s = Number(state);
  57538. if (s === 0)
  57539. return "info";
  57540. if (s === 1)
  57541. return "primary";
  57542. if (s === 2)
  57543. return "success";
  57544. if (s === 3)
  57545. return "warning";
  57546. if (s === 4)
  57547. return "error";
  57548. return "info";
  57549. };
  57550. const getSportItemStatus = (item) => {
  57551. const settleStatus = Number(item.status);
  57552. const settlementStatus = Number(item.settlement_status);
  57553. const isWin = Number(item.is_win);
  57554. if (settlementStatus === 1) {
  57555. switch (isWin) {
  57556. case 1:
  57557. return { text: t2("中奖"), type: "success" };
  57558. case 2:
  57559. return { text: t2("和局"), type: "primary" };
  57560. case 0:
  57561. default:
  57562. return { text: t2("未中奖"), type: "error" };
  57563. }
  57564. }
  57565. if (settleStatus === 0)
  57566. return { text: t2("下注中"), type: "warning" };
  57567. else if (settleStatus === 1)
  57568. return { text: t2("下注成功"), type: "success" };
  57569. else if (settleStatus === -1)
  57570. return { text: t2("订单已取消"), type: "error" };
  57571. };
  57572. const getSportProfitClass = (item) => {
  57573. if (item.status !== 1)
  57574. return "";
  57575. const profit = Number(item.profit_and_loss);
  57576. if (profit > 0)
  57577. return "text-success";
  57578. if (profit < 0)
  57579. return "text-error";
  57580. return "text-gray";
  57581. };
  57582. const getRefundStatusText = (status) => {
  57583. const map = { 1: t2("退款审核中"), 2: t2("已退款"), 3: t2("退款被驳回") };
  57584. return map[Number(status)] || "";
  57585. };
  57586. const getRefundStatusClass = (status) => {
  57587. const map = { 1: "refund-pending", 2: "refund-success", 3: "refund-reject" };
  57588. return map[Number(status)] || "";
  57589. };
  57590. const copyText = (text) => {
  57591. uni.setClipboardData({ data: text, success: () => uni.showToast({ title: t2("复制成功"), icon: "none" }) });
  57592. };
  57593. const handleSportDetail = (item) => {
  57594. router2.push({ name: "bettingDetail", query: { order_id: item.order_id }, data: { order_id: item.order_id } });
  57595. };
  57596. const handleMatchDetail = (item) => {
  57597. if (item.sport && item.sport.data_id) {
  57598. uni.navigateTo({
  57599. url: `/pages/common/sportDetail/index?data_id=${item.sport.data_id}`
  57600. });
  57601. }
  57602. };
  57603. const lhcPagingRef = vue.ref(null);
  57604. const lhcOrderList = vue.ref([]);
  57605. const lhcStatusShow = vue.ref(false);
  57606. const lhcCalendarShow = vue.ref(false);
  57607. const lhcStatus = vue.ref("");
  57608. const lhcDateRange = vue.ref("");
  57609. const lhcStart = vue.ref("");
  57610. const lhcEnd = vue.ref("");
  57611. const getBallColorClass = (numStr) => {
  57612. const num = parseInt(numStr, 10);
  57613. if (isNaN(num))
  57614. return "bg-gray";
  57615. const reds = [1, 2, 7, 8, 12, 13, 18, 19, 23, 24, 29, 30, 34, 35, 40, 45, 46];
  57616. const blues = [3, 4, 9, 10, 14, 15, 20, 25, 26, 31, 36, 37, 41, 42, 47, 48];
  57617. const greens = [5, 6, 11, 16, 17, 21, 22, 27, 28, 32, 33, 38, 39, 43, 44, 49];
  57618. if (reds.includes(num))
  57619. return "bg-red";
  57620. if (blues.includes(num))
  57621. return "bg-blue";
  57622. if (greens.includes(num))
  57623. return "bg-green";
  57624. return "bg-gray";
  57625. };
  57626. const lhcStatusColumns = vue.computed(() => [
  57627. { value: 0, label: t2("待开奖") },
  57628. { value: 1, label: t2("未中奖") },
  57629. { value: 2, label: t2("已中奖") },
  57630. { value: 3, label: t2("合局") }
  57631. // { value: 4, label: t('购物车') },
  57632. ]);
  57633. const lhcStatusText = vue.computed(() => {
  57634. const target = lhcStatusColumns.value.find((item) => item.value === lhcStatus.value);
  57635. return target ? target.label : "";
  57636. });
  57637. const onLhcQuery = async (pageNo, pageSize) => {
  57638. try {
  57639. const params = {
  57640. page: pageNo,
  57641. limit: pageSize,
  57642. lottery_status: lhcStatus.value,
  57643. start_time: lhcStart.value,
  57644. end_time: lhcEnd.value
  57645. };
  57646. const res = await (typeof getDigitalOrderList === "function" ? getDigitalOrderList(params) : Promise.resolve({ code: 1, data: { list: [] } }));
  57647. if (res.code === 1 && res.data && res.data.list) {
  57648. lhcPagingRef.value.complete(res.data.list);
  57649. } else {
  57650. lhcPagingRef.value.complete(false);
  57651. }
  57652. } catch (error) {
  57653. lhcPagingRef.value.complete(false);
  57654. }
  57655. };
  57656. const onLhcStatusConfirm = (e) => {
  57657. lhcStatus.value = e[0].value;
  57658. handleLhcQuery();
  57659. };
  57660. const onLhcCalendarChange = (e) => {
  57661. if (e.startDate && e.endDate) {
  57662. lhcStart.value = e.startDate;
  57663. lhcEnd.value = e.endDate;
  57664. lhcDateRange.value = `${e.startDate} ~ ${e.endDate}`;
  57665. handleLhcQuery();
  57666. }
  57667. };
  57668. const handleLhcQuery = () => {
  57669. var _a2;
  57670. (_a2 = lhcPagingRef.value) == null ? void 0 : _a2.reload();
  57671. };
  57672. const handleLhcReset = () => {
  57673. var _a2;
  57674. lhcStatus.value = "";
  57675. lhcDateRange.value = "";
  57676. lhcStart.value = "";
  57677. lhcEnd.value = "";
  57678. (_a2 = lhcPagingRef.value) == null ? void 0 : _a2.reload();
  57679. };
  57680. const getLhcStatusText = (status) => {
  57681. const s = Number(status);
  57682. if (s === 0)
  57683. return t2("待开奖");
  57684. if (s === 1)
  57685. return t2("未中奖");
  57686. if (s === 2)
  57687. return t2("已中奖");
  57688. if (s === 3)
  57689. return t2("合局");
  57690. if (s === 4)
  57691. return t2("购物车");
  57692. return t2("未知");
  57693. };
  57694. const getLhcStatusClass = (status) => {
  57695. const s = Number(status);
  57696. if (s === 0)
  57697. return "status-pending";
  57698. if (s === 1)
  57699. return "status-lose";
  57700. if (s === 2)
  57701. return "status-win";
  57702. if (s === 3)
  57703. return "status-default";
  57704. if (s === 4)
  57705. return "status-default";
  57706. return "status-default";
  57707. };
  57708. const getLhcProfitText = (data) => {
  57709. const status = Number(data.lottery_status);
  57710. if (status === 1) {
  57711. return data.profit_and_loss || "--";
  57712. } else if (status === 2) {
  57713. return data.win_amount || "--";
  57714. } else {
  57715. return 0;
  57716. }
  57717. };
  57718. const getLhcProfitClass = (status) => {
  57719. const s = Number(status);
  57720. if (s === 1)
  57721. return "is-lose";
  57722. if (s === 2)
  57723. return "is-win";
  57724. return "";
  57725. };
  57726. const handleLhcDetail = (item) => {
  57727. router2.push({ name: "DigitalDetail", query: { id: item.id } });
  57728. };
  57729. const __returned__ = { t: t2, locale, router: router2, mainTab, switchMainTab, tabList, gamePagingRef, gameBetList, gameStatusShow, gameSettleStatusShow, gameCalendarShow, gameStatus, gameSettleStatus, gameDateRange, gameStart, gameEnd, gameStatusColumns, gameSettleStatusColumns, gameStatusText, gameSettleStatusText, onTabChange, onGameQuery, onGameStatusConfirm, onGameSettleStatusConfirm, onGameCalendarChange, handleGameQuery, handleGameReset, getGameStatusText, getGameStatusClass, sportPagingRef, sportOrderList, sportStatusShow, sportSettleStatusShow, sportCalendarShow, sportStatus, sportSettleStatus, sportDateRange, sportStart, sportEnd, sportStatusColumns, sportSettleStatusColumns, sportStatusText, sportSettleStatusText, onSportQuery, getMarketName, getSelectionValue, getSelectionHandicap, getSelectionOdd, onSportStatusConfirm, onSportSettleStatusConfirm, onSportCalendarConfirm, handleSportQuery, handleSportReset, getMatchStateText, getMatchStateType, getSportItemStatus, getSportProfitClass, getRefundStatusText, getRefundStatusClass, copyText, handleSportDetail, handleMatchDetail, lhcPagingRef, lhcOrderList, lhcStatusShow, lhcCalendarShow, lhcStatus, lhcDateRange, lhcStart, lhcEnd, getBallColorClass, lhcStatusColumns, lhcStatusText, onLhcQuery, onLhcStatusConfirm, onLhcCalendarChange, handleLhcQuery, handleLhcReset, getLhcStatusText, getLhcStatusClass, getLhcProfitText, getLhcProfitClass, handleLhcDetail, get getLocale() {
  57730. return getLocale;
  57731. } };
  57732. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  57733. return __returned__;
  57734. }
  57735. });
  57736. function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
  57737. const _component_u_tabs = __unplugin_components_0$2;
  57738. const _component_u_icon = __unplugin_components_0$5;
  57739. const _component_u_button = __unplugin_components_2$1;
  57740. const _component_u_tag = __unplugin_components_2$2;
  57741. const _component_u_empty = __unplugin_components_4$2;
  57742. const _component_z_paging = resolveEasycom(vue.resolveDynamicComponent("z-paging"), __easycom_0$1);
  57743. const _component_u_select = __unplugin_components_5$1;
  57744. const _component_u_calendar = __unplugin_components_6;
  57745. const _component_PageContainer = PageContainer;
  57746. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  57747. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  57748. default: vue.withCtx(() => [
  57749. vue.createVNode(_component_PageContainer, {
  57750. "nav-title": $setup.mainTab === 0 ? $setup.t("投注记录") : $setup.t("投注历史")
  57751. }, {
  57752. default: vue.withCtx(() => [
  57753. vue.createElementVNode("view", { class: "page-content" }, [
  57754. vue.createVNode(_component_u_tabs, {
  57755. list: $setup.tabList,
  57756. current: $setup.mainTab,
  57757. onChange: $setup.onTabChange,
  57758. "active-color": "#f8b932",
  57759. "inactive-color": "#666",
  57760. "line-color": "#f8b932",
  57761. "is-scroll": $setup.getLocale() != "zh"
  57762. }, null, 8, ["list", "current", "is-scroll"]),
  57763. vue.createElementVNode("view", { class: "main-tabs-wrapper" }),
  57764. vue.createElementVNode("view", { class: "paging-container" }, [
  57765. $setup.mainTab === 1 ? (vue.openBlock(), vue.createBlock(_component_z_paging, {
  57766. key: 0,
  57767. ref: "gamePagingRef",
  57768. modelValue: $setup.gameBetList,
  57769. "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.gameBetList = $event),
  57770. onQuery: $setup.onGameQuery,
  57771. fixed: false,
  57772. "refresher-enabled": true,
  57773. "loading-more-enabled": true,
  57774. "auto-show-back-to-top": true,
  57775. "back-to-top-threshold": 300,
  57776. loadingMoreLoadingText: $setup.t("正在加载"),
  57777. loadingMoreNoMoreText: $setup.t("没有更多了"),
  57778. loadingMoreDefaultText: $setup.t("点击加载更多")
  57779. }, {
  57780. top: vue.withCtx(() => [
  57781. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  57782. vue.createElementVNode("view", { class: "filter-card" }, [
  57783. vue.createElementVNode("view", { class: "filter-header" }, [
  57784. vue.createElementVNode("view", { class: "title-line" }, [
  57785. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  57786. vue.createElementVNode(
  57787. "text",
  57788. { class: "title-text" },
  57789. vue.toDisplayString($setup.t("条件筛选")),
  57790. 1
  57791. /* TEXT */
  57792. )
  57793. ]),
  57794. vue.createElementVNode(
  57795. "text",
  57796. {
  57797. class: "reset-link",
  57798. onClick: $setup.handleGameReset
  57799. },
  57800. vue.toDisplayString($setup.t("重置全部")),
  57801. 1
  57802. /* TEXT */
  57803. )
  57804. ]),
  57805. vue.createElementVNode("view", { class: "filter-body" }, [
  57806. vue.createElementVNode("view", { class: "filter-row" }, [
  57807. vue.createElementVNode("view", {
  57808. class: "filter-item type-item",
  57809. onClick: _cache[0] || (_cache[0] = ($event) => $setup.gameStatusShow = true)
  57810. }, [
  57811. vue.createVNode(_component_u_icon, {
  57812. name: "list-dot",
  57813. size: "32",
  57814. color: _ctx.$mainColor
  57815. }, null, 8, ["color"]),
  57816. vue.createElementVNode("view", { class: "filter-content" }, [
  57817. vue.withDirectives(vue.createElementVNode(
  57818. "text",
  57819. { class: "filter-value" },
  57820. vue.toDisplayString($setup.gameStatusText),
  57821. 513
  57822. /* TEXT, NEED_PATCH */
  57823. ), [
  57824. [vue.vShow, $setup.gameStatusText]
  57825. ]),
  57826. vue.withDirectives(vue.createElementVNode(
  57827. "text",
  57828. { class: "filter-placeholder" },
  57829. vue.toDisplayString($setup.t("是否中奖")),
  57830. 513
  57831. /* TEXT, NEED_PATCH */
  57832. ), [
  57833. [vue.vShow, !$setup.gameStatusText]
  57834. ])
  57835. ]),
  57836. vue.createVNode(_component_u_icon, {
  57837. name: "arrow-down",
  57838. size: "14",
  57839. color: "#ccc"
  57840. })
  57841. ]),
  57842. vue.createElementVNode("view", {
  57843. class: "filter-item date-item",
  57844. onClick: _cache[1] || (_cache[1] = ($event) => $setup.gameCalendarShow = true)
  57845. }, [
  57846. vue.createVNode(_component_u_icon, {
  57847. name: "calendar",
  57848. size: "32",
  57849. color: _ctx.$mainColor
  57850. }, null, 8, ["color"]),
  57851. vue.createElementVNode("view", { class: "filter-content" }, [
  57852. $setup.gameDateRange ? (vue.openBlock(), vue.createElementBlock(
  57853. "text",
  57854. {
  57855. key: 0,
  57856. class: "filter-value"
  57857. },
  57858. vue.toDisplayString($setup.gameDateRange),
  57859. 1
  57860. /* TEXT */
  57861. )) : (vue.openBlock(), vue.createElementBlock(
  57862. "text",
  57863. {
  57864. key: 1,
  57865. class: "filter-placeholder"
  57866. },
  57867. vue.toDisplayString($setup.t("日期区间")),
  57868. 1
  57869. /* TEXT */
  57870. ))
  57871. ]),
  57872. vue.createVNode(_component_u_icon, {
  57873. name: "arrow-down",
  57874. size: "14",
  57875. color: "#ccc"
  57876. })
  57877. ])
  57878. ]),
  57879. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  57880. vue.createElementVNode("view", {
  57881. class: "filter-item type-item",
  57882. onClick: _cache[2] || (_cache[2] = ($event) => $setup.gameSettleStatusShow = true)
  57883. }, [
  57884. vue.createVNode(_component_u_icon, {
  57885. name: "coupon",
  57886. size: "32",
  57887. color: _ctx.$mainColor
  57888. }, null, 8, ["color"]),
  57889. vue.createElementVNode("view", { class: "filter-content" }, [
  57890. vue.withDirectives(vue.createElementVNode(
  57891. "text",
  57892. { class: "filter-value" },
  57893. vue.toDisplayString($setup.gameSettleStatusText),
  57894. 513
  57895. /* TEXT, NEED_PATCH */
  57896. ), [
  57897. [vue.vShow, $setup.gameSettleStatusText]
  57898. ]),
  57899. vue.withDirectives(vue.createElementVNode(
  57900. "text",
  57901. { class: "filter-placeholder" },
  57902. vue.toDisplayString($setup.t("结算状态")),
  57903. 513
  57904. /* TEXT, NEED_PATCH */
  57905. ), [
  57906. [vue.vShow, !$setup.gameSettleStatusText]
  57907. ])
  57908. ]),
  57909. vue.createVNode(_component_u_icon, {
  57910. name: "arrow-down",
  57911. size: "14",
  57912. color: "#ccc"
  57913. })
  57914. ]),
  57915. vue.createElementVNode("view", { class: "button-group" }, [
  57916. vue.createVNode(_component_u_button, {
  57917. type: "primary",
  57918. shape: "circle",
  57919. class: "search-btn",
  57920. onClick: $setup.handleGameQuery,
  57921. "custom-style": "width: 100%; height: 76rpx;"
  57922. }, {
  57923. default: vue.withCtx(() => [
  57924. vue.createVNode(_component_u_icon, {
  57925. name: "search",
  57926. size: "32",
  57927. color: "#fff",
  57928. class: "mr-1"
  57929. }),
  57930. vue.createTextVNode(
  57931. " " + vue.toDisplayString($setup.t("立即查询")),
  57932. 1
  57933. /* TEXT */
  57934. )
  57935. ]),
  57936. _: 1
  57937. /* STABLE */
  57938. })
  57939. ])
  57940. ])
  57941. ])
  57942. ])
  57943. ])
  57944. ]),
  57945. refresher: vue.withCtx(() => [
  57946. vue.createElementVNode("view", { class: "refresher-ui" }, [
  57947. vue.createElementVNode("view", { class: "spin-loader" }),
  57948. vue.createElementVNode(
  57949. "text",
  57950. { class: "refresher-text" },
  57951. vue.toDisplayString($setup.t("更新数据中...")),
  57952. 1
  57953. /* TEXT */
  57954. )
  57955. ])
  57956. ]),
  57957. empty: vue.withCtx(() => [
  57958. vue.createElementVNode("view", { class: "empty-ui" }, [
  57959. vue.createVNode(_component_u_empty, {
  57960. text: $setup.t("暂无投注记录"),
  57961. mode: "history",
  57962. "icon-size": "120"
  57963. }, null, 8, ["text"])
  57964. ])
  57965. ]),
  57966. default: vue.withCtx(() => [
  57967. vue.createElementVNode("view", { class: "bet-list-container" }, [
  57968. (vue.openBlock(true), vue.createElementBlock(
  57969. vue.Fragment,
  57970. null,
  57971. vue.renderList($setup.gameBetList, (item) => {
  57972. var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
  57973. return vue.openBlock(), vue.createElementBlock("view", {
  57974. key: item.id,
  57975. class: "bet-card",
  57976. onClick: ($event) => $setup.router.push({ name: "EntertainmentDetail", query: { id: item.id } })
  57977. }, [
  57978. vue.createElementVNode("view", { class: "card-header" }, [
  57979. vue.createElementVNode("view", { class: "issue-box" }, [
  57980. vue.createElementVNode(
  57981. "text",
  57982. { class: "label" },
  57983. vue.toDisplayString($setup.t("期号")) + ":",
  57984. 1
  57985. /* TEXT */
  57986. ),
  57987. vue.createElementVNode(
  57988. "text",
  57989. { class: "issue-no" },
  57990. vue.toDisplayString(item.issue_no),
  57991. 1
  57992. /* TEXT */
  57993. )
  57994. ]),
  57995. vue.createElementVNode(
  57996. "view",
  57997. {
  57998. class: vue.normalizeClass(["status-badge", $setup.getGameStatusClass(item)])
  57999. },
  58000. vue.toDisplayString($setup.getGameStatusText(item)),
  58001. 3
  58002. /* TEXT, CLASS */
  58003. )
  58004. ]),
  58005. vue.createElementVNode("view", { class: "card-main" }, [
  58006. vue.createElementVNode("view", {
  58007. class: "bet-content-box",
  58008. style: { "margin-bottom": "12rpx" }
  58009. }, [
  58010. vue.createElementVNode(
  58011. "text",
  58012. { class: "bet-label" },
  58013. vue.toDisplayString($setup.t("彩票玩法")),
  58014. 1
  58015. /* TEXT */
  58016. ),
  58017. vue.createVNode(_component_u_tag, {
  58018. text: Number(item.is_pc) === 1 ? $setup.t("极速") + 28 : $setup.t("加拿大") + "28",
  58019. type: "primary",
  58020. plain: "",
  58021. size: "mini"
  58022. }, null, 8, ["text"])
  58023. ]),
  58024. vue.createElementVNode("view", { class: "bet-content-box" }, [
  58025. vue.createElementVNode(
  58026. "text",
  58027. { class: "bet-label" },
  58028. vue.toDisplayString($setup.t("投注内容")),
  58029. 1
  58030. /* TEXT */
  58031. ),
  58032. vue.createElementVNode(
  58033. "text",
  58034. { class: "bet-keywords" },
  58035. vue.toDisplayString(item.keywords),
  58036. 1
  58037. /* TEXT */
  58038. )
  58039. ]),
  58040. item.issue && item.issue.winning_numbers ? (vue.openBlock(), vue.createElementBlock("view", {
  58041. key: 0,
  58042. class: "bet-content-box",
  58043. style: { "align-items": "flex-start" }
  58044. }, [
  58045. vue.createElementVNode(
  58046. "text",
  58047. {
  58048. class: "bet-label",
  58049. style: { "margin-top": "4rpx" }
  58050. },
  58051. vue.toDisplayString($setup.t("开奖结果")),
  58052. 1
  58053. /* TEXT */
  58054. ),
  58055. vue.createElementVNode("view", { style: { "display": "flex", "flex-direction": "column", "gap": "8rpx" } }, [
  58056. vue.createElementVNode("text", { style: { "font-size": "28rpx", "font-weight": "bold", "color": "#ef4444", "letter-spacing": "2rpx" } }, [
  58057. ((_a2 = item.issue) == null ? void 0 : _a2.winning_numbers) && typeof ((_b2 = item.issue) == null ? void 0 : _b2.winning_numbers) === "string" ? (vue.openBlock(), vue.createElementBlock(
  58058. "span",
  58059. { key: 0 },
  58060. vue.toDisplayString((_d = (_c = item.issue) == null ? void 0 : _c.winning_numbers) == null ? void 0 : _d.split(",")[0]) + " + " + vue.toDisplayString((_f = (_e = item.issue) == null ? void 0 : _e.winning_numbers) == null ? void 0 : _f.split(",")[1]) + " + " + vue.toDisplayString((_h = (_g = item.issue) == null ? void 0 : _g.winning_numbers) == null ? void 0 : _h.split(",")[2]) + " = " + vue.toDisplayString((_j = (_i = item.issue) == null ? void 0 : _i.winning_numbers) == null ? void 0 : _j.split(",").reduce((sum, val) => sum + Number(val), 0)),
  58061. 1
  58062. /* TEXT */
  58063. )) : vue.createCommentVNode("v-if", true)
  58064. ]),
  58065. item.issue.combo && item.issue.combo.length ? (vue.openBlock(), vue.createElementBlock("view", {
  58066. key: 0,
  58067. style: { "display": "flex", "flex-wrap": "wrap", "gap": "8rpx" }
  58068. }, [
  58069. (vue.openBlock(true), vue.createElementBlock(
  58070. vue.Fragment,
  58071. null,
  58072. vue.renderList(item.issue.combo, (comboItem, cIndex) => {
  58073. return vue.openBlock(), vue.createBlock(_component_u_tag, {
  58074. key: cIndex,
  58075. text: comboItem,
  58076. type: "info",
  58077. plain: "",
  58078. size: "mini"
  58079. }, null, 8, ["text"]);
  58080. }),
  58081. 128
  58082. /* KEYED_FRAGMENT */
  58083. ))
  58084. ])) : vue.createCommentVNode("v-if", true)
  58085. ])
  58086. ])) : vue.createCommentVNode("v-if", true),
  58087. vue.createElementVNode("view", { class: "data-grid" }, [
  58088. vue.createElementVNode("view", { class: "data-item" }, [
  58089. vue.createElementVNode(
  58090. "text",
  58091. { class: "d-label" },
  58092. vue.toDisplayString($setup.t("赔率")),
  58093. 1
  58094. /* TEXT */
  58095. ),
  58096. vue.createElementVNode(
  58097. "text",
  58098. { class: "d-val" },
  58099. vue.toDisplayString(item.odds),
  58100. 1
  58101. /* TEXT */
  58102. )
  58103. ]),
  58104. vue.createElementVNode("view", { class: "data-item" }, [
  58105. vue.createElementVNode(
  58106. "text",
  58107. { class: "d-label" },
  58108. vue.toDisplayString($setup.t("投注本金")),
  58109. 1
  58110. /* TEXT */
  58111. ),
  58112. vue.createElementVNode(
  58113. "text",
  58114. { class: "d-val" },
  58115. vue.toDisplayString(parseFloat(item.amount)),
  58116. 1
  58117. /* TEXT */
  58118. )
  58119. ]),
  58120. vue.createElementVNode("view", { class: "data-item" }, [
  58121. vue.createElementVNode(
  58122. "text",
  58123. { class: "d-label" },
  58124. vue.toDisplayString($setup.t("盈亏")),
  58125. 1
  58126. /* TEXT */
  58127. ),
  58128. item.status === 2 && !Number(item.profit) > 0 ? (vue.openBlock(), vue.createElementBlock(
  58129. "span",
  58130. {
  58131. key: 0,
  58132. class: "d-val profit-val is-lose"
  58133. },
  58134. " - " + vue.toDisplayString(parseFloat(item.amount)),
  58135. 1
  58136. /* TEXT */
  58137. )) : (vue.openBlock(), vue.createElementBlock(
  58138. "span",
  58139. {
  58140. key: 1,
  58141. class: vue.normalizeClass(["d-val profit-val", Number(item.profit) > 0 ? "is-win" : ""])
  58142. },
  58143. [
  58144. Number(item.profit) > 0 ? (vue.openBlock(), vue.createElementBlock(
  58145. "text",
  58146. { key: 0 },
  58147. " +" + vue.toDisplayString(parseFloat(item.profit)),
  58148. 1
  58149. /* TEXT */
  58150. )) : (vue.openBlock(), vue.createElementBlock(
  58151. "text",
  58152. { key: 1 },
  58153. vue.toDisplayString(parseFloat(item.profit)),
  58154. 1
  58155. /* TEXT */
  58156. ))
  58157. ],
  58158. 2
  58159. /* CLASS */
  58160. ))
  58161. ])
  58162. ])
  58163. ]),
  58164. vue.createElementVNode("view", { class: "card-footer" }, [
  58165. vue.createElementVNode(
  58166. "text",
  58167. { class: "time" },
  58168. vue.toDisplayString(item.created_at),
  58169. 1
  58170. /* TEXT */
  58171. )
  58172. ])
  58173. ], 8, ["onClick"]);
  58174. }),
  58175. 128
  58176. /* KEYED_FRAGMENT */
  58177. ))
  58178. ])
  58179. ]),
  58180. _: 1
  58181. /* STABLE */
  58182. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])) : vue.createCommentVNode("v-if", true),
  58183. $setup.mainTab === 0 ? (vue.openBlock(), vue.createBlock(_component_z_paging, {
  58184. key: 1,
  58185. ref: "sportPagingRef",
  58186. modelValue: $setup.sportOrderList,
  58187. "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $setup.sportOrderList = $event),
  58188. onQuery: $setup.onSportQuery,
  58189. fixed: false,
  58190. "refresher-enabled": true,
  58191. "loading-more-enabled": true,
  58192. "auto-show-back-to-top": true,
  58193. "back-to-top-threshold": 300,
  58194. loadingMoreLoadingText: $setup.t("正在加载"),
  58195. loadingMoreNoMoreText: $setup.t("没有更多了"),
  58196. loadingMoreDefaultText: $setup.t("点击加载更多")
  58197. }, {
  58198. top: vue.withCtx(() => [
  58199. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  58200. vue.createElementVNode("view", { class: "filter-card" }, [
  58201. vue.createElementVNode("view", { class: "filter-header" }, [
  58202. vue.createElementVNode("view", { class: "title-line" }, [
  58203. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  58204. vue.createElementVNode(
  58205. "text",
  58206. { class: "title-text" },
  58207. vue.toDisplayString($setup.t("条件筛选")),
  58208. 1
  58209. /* TEXT */
  58210. )
  58211. ]),
  58212. vue.createElementVNode(
  58213. "text",
  58214. {
  58215. class: "reset-link",
  58216. onClick: $setup.handleSportReset
  58217. },
  58218. vue.toDisplayString($setup.t("重置全部")),
  58219. 1
  58220. /* TEXT */
  58221. )
  58222. ]),
  58223. vue.createElementVNode("view", { class: "filter-body" }, [
  58224. vue.createElementVNode("view", { class: "filter-row" }, [
  58225. vue.createElementVNode("view", {
  58226. class: "filter-item type-item",
  58227. onClick: _cache[4] || (_cache[4] = ($event) => $setup.sportStatusShow = true)
  58228. }, [
  58229. vue.createVNode(_component_u_icon, {
  58230. name: "list-dot",
  58231. size: "32",
  58232. color: _ctx.$mainColor
  58233. }, null, 8, ["color"]),
  58234. vue.createElementVNode("view", { class: "filter-content" }, [
  58235. vue.withDirectives(vue.createElementVNode(
  58236. "text",
  58237. { class: "filter-value" },
  58238. vue.toDisplayString($setup.sportStatusText),
  58239. 513
  58240. /* TEXT, NEED_PATCH */
  58241. ), [
  58242. [vue.vShow, $setup.sportStatusText]
  58243. ]),
  58244. vue.withDirectives(vue.createElementVNode(
  58245. "text",
  58246. { class: "filter-placeholder" },
  58247. vue.toDisplayString($setup.t("是否中奖")),
  58248. 513
  58249. /* TEXT, NEED_PATCH */
  58250. ), [
  58251. [vue.vShow, !$setup.sportStatusText]
  58252. ])
  58253. ]),
  58254. vue.createVNode(_component_u_icon, {
  58255. name: "arrow-down",
  58256. size: "14",
  58257. color: "#ccc"
  58258. })
  58259. ]),
  58260. vue.createElementVNode("view", {
  58261. class: "filter-item date-item",
  58262. onClick: _cache[5] || (_cache[5] = ($event) => $setup.sportCalendarShow = true)
  58263. }, [
  58264. vue.createVNode(_component_u_icon, {
  58265. name: "calendar",
  58266. size: "32",
  58267. color: _ctx.$mainColor
  58268. }, null, 8, ["color"]),
  58269. vue.createElementVNode("view", { class: "filter-content" }, [
  58270. $setup.sportDateRange ? (vue.openBlock(), vue.createElementBlock(
  58271. "text",
  58272. {
  58273. key: 0,
  58274. class: "filter-value"
  58275. },
  58276. vue.toDisplayString($setup.sportDateRange),
  58277. 1
  58278. /* TEXT */
  58279. )) : (vue.openBlock(), vue.createElementBlock(
  58280. "text",
  58281. {
  58282. key: 1,
  58283. class: "filter-placeholder"
  58284. },
  58285. vue.toDisplayString($setup.t("日期区间")),
  58286. 1
  58287. /* TEXT */
  58288. ))
  58289. ]),
  58290. vue.createVNode(_component_u_icon, {
  58291. name: "arrow-down",
  58292. size: "14",
  58293. color: "#ccc"
  58294. })
  58295. ])
  58296. ]),
  58297. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  58298. vue.createElementVNode("view", {
  58299. class: "filter-item type-item",
  58300. onClick: _cache[6] || (_cache[6] = ($event) => $setup.sportSettleStatusShow = true)
  58301. }, [
  58302. vue.createVNode(_component_u_icon, {
  58303. name: "coupon",
  58304. size: "32",
  58305. color: _ctx.$mainColor
  58306. }, null, 8, ["color"]),
  58307. vue.createElementVNode("view", { class: "filter-content" }, [
  58308. vue.withDirectives(vue.createElementVNode(
  58309. "text",
  58310. { class: "filter-value" },
  58311. vue.toDisplayString($setup.sportSettleStatusText),
  58312. 513
  58313. /* TEXT, NEED_PATCH */
  58314. ), [
  58315. [vue.vShow, $setup.sportSettleStatusText]
  58316. ]),
  58317. vue.withDirectives(vue.createElementVNode(
  58318. "text",
  58319. { class: "filter-placeholder" },
  58320. vue.toDisplayString($setup.t("结算状态")),
  58321. 513
  58322. /* TEXT, NEED_PATCH */
  58323. ), [
  58324. [vue.vShow, !$setup.sportSettleStatusText]
  58325. ])
  58326. ]),
  58327. vue.createVNode(_component_u_icon, {
  58328. name: "arrow-down",
  58329. size: "14",
  58330. color: "#ccc"
  58331. })
  58332. ]),
  58333. vue.createElementVNode("view", { class: "button-group" }, [
  58334. vue.createVNode(_component_u_button, {
  58335. type: "primary",
  58336. shape: "circle",
  58337. class: "search-btn",
  58338. onClick: $setup.handleSportQuery,
  58339. "custom-style": "width: 100%; height: 76rpx;"
  58340. }, {
  58341. default: vue.withCtx(() => [
  58342. vue.createVNode(_component_u_icon, {
  58343. name: "search",
  58344. size: "32",
  58345. color: "#fff",
  58346. class: "mr-1"
  58347. }),
  58348. vue.createTextVNode(
  58349. " " + vue.toDisplayString($setup.t("立即查询")),
  58350. 1
  58351. /* TEXT */
  58352. )
  58353. ]),
  58354. _: 1
  58355. /* STABLE */
  58356. })
  58357. ])
  58358. ])
  58359. ])
  58360. ])
  58361. ])
  58362. ]),
  58363. refresher: vue.withCtx(() => [
  58364. vue.createElementVNode("view", { class: "refresher-ui" }, [
  58365. vue.createElementVNode("view", { class: "spin-loader" }),
  58366. vue.createElementVNode(
  58367. "text",
  58368. { class: "refresher-text" },
  58369. vue.toDisplayString($setup.t("加载最新记录...")),
  58370. 1
  58371. /* TEXT */
  58372. )
  58373. ])
  58374. ]),
  58375. empty: vue.withCtx(() => [
  58376. vue.createElementVNode("view", { class: "empty-ui" }, [
  58377. vue.createVNode(_component_u_empty, {
  58378. text: $setup.t("暂无投注记录"),
  58379. mode: "list",
  58380. "icon-size": "120"
  58381. }, null, 8, ["text"])
  58382. ])
  58383. ]),
  58384. default: vue.withCtx(() => [
  58385. vue.createElementVNode("view", { class: "order-list" }, [
  58386. (vue.openBlock(true), vue.createElementBlock(
  58387. vue.Fragment,
  58388. null,
  58389. vue.renderList($setup.sportOrderList, (item, index) => {
  58390. var _a2, _b2, _c, _d, _e;
  58391. return vue.openBlock(), vue.createElementBlock("view", {
  58392. key: item.id || index,
  58393. class: "log-card",
  58394. onClick: ($event) => $setup.handleSportDetail(item)
  58395. }, [
  58396. vue.createElementVNode("view", { class: "card-header" }, [
  58397. vue.createElementVNode("view", { class: "order-info" }, [
  58398. vue.createElementVNode(
  58399. "text",
  58400. { class: "val" },
  58401. vue.toDisplayString(item.order_id),
  58402. 1
  58403. /* TEXT */
  58404. ),
  58405. vue.createElementVNode("view", {
  58406. class: "copy-btn",
  58407. onClick: vue.withModifiers(($event) => $setup.copyText(item.order_id), ["stop"])
  58408. }, [
  58409. vue.createVNode(_component_u_icon, {
  58410. name: "file-text",
  58411. size: "24",
  58412. color: "#999"
  58413. })
  58414. ], 8, ["onClick"])
  58415. ]),
  58416. vue.createElementVNode(
  58417. "text",
  58418. { class: "time" },
  58419. vue.toDisplayString(item.create_time),
  58420. 1
  58421. /* TEXT */
  58422. )
  58423. ]),
  58424. item.sport ? (vue.openBlock(), vue.createElementBlock("view", {
  58425. key: 0,
  58426. class: "sport-match-info"
  58427. }, [
  58428. vue.createElementVNode("view", { class: "league-row" }, [
  58429. item.sport.league_logo ? (vue.openBlock(), vue.createElementBlock("image", {
  58430. key: 0,
  58431. class: "league-logo",
  58432. src: item.sport.league_logo,
  58433. mode: "aspectFit"
  58434. }, null, 8, ["src"])) : vue.createCommentVNode("v-if", true),
  58435. vue.createElementVNode(
  58436. "text",
  58437. { class: "league-name" },
  58438. vue.toDisplayString($setup.locale === "zh" ? item.sport.league : item.sport.league_en),
  58439. 1
  58440. /* TEXT */
  58441. ),
  58442. item.sport.state !== void 0 && item.sport.state !== null ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  58443. key: 1,
  58444. text: $setup.getMatchStateText(item.sport.state),
  58445. type: $setup.getMatchStateType(item.sport.state),
  58446. plain: "",
  58447. size: "mini",
  58448. style: { "margin-left": "12rpx" }
  58449. }, null, 8, ["text", "type"])) : vue.createCommentVNode("v-if", true)
  58450. ]),
  58451. vue.createElementVNode("view", { class: "match-time" }, [
  58452. vue.createElementVNode(
  58453. "text",
  58454. null,
  58455. vue.toDisplayString(item.detail.game_time),
  58456. 1
  58457. /* TEXT */
  58458. ),
  58459. ((_a2 = item.detail) == null ? void 0 : _a2.fixture_status) ? (vue.openBlock(), vue.createElementBlock("text", {
  58460. key: 0,
  58461. class: "fixture-status"
  58462. }, [
  58463. item.detail.fixture_status.long ? (vue.openBlock(), vue.createElementBlock(
  58464. "text",
  58465. {
  58466. key: 0,
  58467. style: { "margin-left": "12rpx", "color": "#f8b932" }
  58468. },
  58469. vue.toDisplayString(item.detail.fixture_status.long),
  58470. 1
  58471. /* TEXT */
  58472. )) : vue.createCommentVNode("v-if", true),
  58473. item.detail.fixture_status.elapsed ? (vue.openBlock(), vue.createElementBlock(
  58474. "text",
  58475. {
  58476. key: 1,
  58477. style: { "margin-left": "6rpx", "color": "#f8b932" }
  58478. },
  58479. vue.toDisplayString(item.detail.fixture_status.seconds) + "'",
  58480. 1
  58481. /* TEXT */
  58482. )) : vue.createCommentVNode("v-if", true)
  58483. ])) : vue.createCommentVNode("v-if", true)
  58484. ]),
  58485. vue.createElementVNode("view", { class: "team-row" }, [
  58486. vue.createElementVNode("view", { class: "team" }, [
  58487. vue.createElementVNode(
  58488. "text",
  58489. {
  58490. class: "team-name",
  58491. style: { "text-align": "right", "flex": "1" }
  58492. },
  58493. vue.toDisplayString($setup.locale === "zh" ? item.sport.home_team : item.sport.home_team_en),
  58494. 1
  58495. /* TEXT */
  58496. ),
  58497. item.sport.home_team_logo ? (vue.openBlock(), vue.createElementBlock("image", {
  58498. key: 0,
  58499. class: "team-logo",
  58500. src: item.sport.home_team_logo,
  58501. mode: "aspectFit"
  58502. }, null, 8, ["src"])) : vue.createCommentVNode("v-if", true)
  58503. ]),
  58504. vue.createElementVNode("view", { class: "vs-text" }, [
  58505. ((_b2 = item.detail) == null ? void 0 : _b2.score) ? (vue.openBlock(), vue.createElementBlock(
  58506. "text",
  58507. { key: 0 },
  58508. vue.toDisplayString(item.detail.score),
  58509. 1
  58510. /* TEXT */
  58511. )) : (vue.openBlock(), vue.createElementBlock("text", { key: 1 }, "VS"))
  58512. ]),
  58513. vue.createElementVNode("view", { class: "team" }, [
  58514. item.sport.guest_team_logo ? (vue.openBlock(), vue.createElementBlock("image", {
  58515. key: 0,
  58516. class: "team-logo",
  58517. src: item.sport.guest_team_logo,
  58518. mode: "aspectFit"
  58519. }, null, 8, ["src"])) : vue.createCommentVNode("v-if", true),
  58520. vue.createElementVNode(
  58521. "text",
  58522. {
  58523. class: "team-name",
  58524. style: { "flex": "1" }
  58525. },
  58526. vue.toDisplayString($setup.locale === "zh" ? item.sport.guest_team : item.sport.guest_team_en),
  58527. 1
  58528. /* TEXT */
  58529. )
  58530. ])
  58531. ]),
  58532. ((_c = item.detail) == null ? void 0 : _c.half_score) || ((_d = item.detail) == null ? void 0 : _d.extra_score) ? (vue.openBlock(), vue.createElementBlock("view", {
  58533. key: 0,
  58534. class: "score-detail-row"
  58535. }, [
  58536. ((_e = item.detail) == null ? void 0 : _e.half_score) ? (vue.openBlock(), vue.createElementBlock(
  58537. "text",
  58538. {
  58539. key: 0,
  58540. class: "score-tag"
  58541. },
  58542. vue.toDisplayString($setup.t("半场")) + ": " + vue.toDisplayString(item.detail.half_score),
  58543. 1
  58544. /* TEXT */
  58545. )) : vue.createCommentVNode("v-if", true)
  58546. ])) : vue.createCommentVNode("v-if", true),
  58547. Number(item.sport.state) !== 0 && (item.sport.score || item.sport.half_score) ? (vue.openBlock(), vue.createElementBlock("view", {
  58548. key: 1,
  58549. class: "live-score-row"
  58550. }, [
  58551. vue.createElementVNode(
  58552. "text",
  58553. { class: "live-label" },
  58554. vue.toDisplayString($setup.t("即时比分")) + ":",
  58555. 1
  58556. /* TEXT */
  58557. ),
  58558. item.sport.score ? (vue.openBlock(), vue.createElementBlock(
  58559. "text",
  58560. {
  58561. key: 0,
  58562. class: "live-val"
  58563. },
  58564. vue.toDisplayString(item.sport.score),
  58565. 1
  58566. /* TEXT */
  58567. )) : vue.createCommentVNode("v-if", true),
  58568. item.sport.half_score && item.sport.half_score !== "-" ? (vue.openBlock(), vue.createElementBlock(
  58569. "text",
  58570. {
  58571. key: 1,
  58572. class: "live-half"
  58573. },
  58574. "(" + vue.toDisplayString($setup.t("半场")) + ": " + vue.toDisplayString(item.sport.half_score) + ")",
  58575. 1
  58576. /* TEXT */
  58577. )) : vue.createCommentVNode("v-if", true)
  58578. ])) : vue.createCommentVNode("v-if", true)
  58579. ])) : vue.createCommentVNode("v-if", true),
  58580. vue.createElementVNode("view", { class: "card-main" }, [
  58581. vue.createElementVNode("view", {
  58582. class: "bet-info",
  58583. style: { "width": "100%" }
  58584. }, [
  58585. vue.createElementVNode("view", {
  58586. class: "bet-type",
  58587. style: { "display": "flex", "justify-content": "space-between" }
  58588. }, [
  58589. vue.createElementVNode("text", { class: "type-name" }, [
  58590. vue.createTextVNode(
  58591. vue.toDisplayString(item.odd_name) + " ",
  58592. 1
  58593. /* TEXT */
  58594. ),
  58595. vue.createElementVNode(
  58596. "text",
  58597. { style: { "color": "#64748b", "font-size": "26rpx", "margin-left": "8rpx", "font-weight": "normal" } },
  58598. " - " + vue.toDisplayString(item.odd_value),
  58599. 1
  58600. /* TEXT */
  58601. ),
  58602. $setup.getSelectionHandicap(item) ? (vue.openBlock(), vue.createElementBlock(
  58603. "text",
  58604. {
  58605. key: 0,
  58606. style: { "color": "#f8b932", "margin-left": "6rpx" }
  58607. },
  58608. " [" + vue.toDisplayString($setup.getSelectionHandicap(item)) + "] ",
  58609. 1
  58610. /* TEXT */
  58611. )) : vue.createCommentVNode("v-if", true)
  58612. ]),
  58613. vue.createElementVNode(
  58614. "view",
  58615. {
  58616. class: vue.normalizeClass(["custom-sport-tag", "tag-" + $setup.getSportItemStatus(item).type])
  58617. },
  58618. vue.toDisplayString($setup.getSportItemStatus(item).text),
  58619. 3
  58620. /* TEXT, CLASS */
  58621. )
  58622. ]),
  58623. vue.createElementVNode("view", { style: { "margin-top": "8rpx", "margin-bottom": "8rpx", "display": "flex", "gap": "8rpx" } }, [
  58624. item.is_roll ? (vue.openBlock(), vue.createBlock(_component_u_tag, {
  58625. key: 0,
  58626. text: $setup.t("滚球"),
  58627. size: "mini",
  58628. type: "primary",
  58629. plain: ""
  58630. }, null, 8, ["text"])) : vue.createCommentVNode("v-if", true)
  58631. ]),
  58632. vue.createElementVNode("view", {
  58633. class: "odds-row",
  58634. style: { "display": "flex", "justify-content": "space-between" }
  58635. }, [
  58636. vue.createElementVNode("view", null, [
  58637. vue.createElementVNode(
  58638. "text",
  58639. { class: "label" },
  58640. vue.toDisplayString($setup.t("赔率")),
  58641. 1
  58642. /* TEXT */
  58643. ),
  58644. vue.createElementVNode(
  58645. "span",
  58646. { style: { "color": "#f8b932", "font-size": "16px", "font-weight": "bold" } },
  58647. vue.toDisplayString(Number(item.odd)),
  58648. 1
  58649. /* TEXT */
  58650. )
  58651. ])
  58652. ]),
  58653. vue.createElementVNode("view", {
  58654. class: "odds-row",
  58655. style: { "margin-top": "4px" }
  58656. }, [
  58657. vue.createElementVNode(
  58658. "text",
  58659. { class: "label" },
  58660. vue.toDisplayString($setup.t("类型")),
  58661. 1
  58662. /* TEXT */
  58663. ),
  58664. vue.createTextVNode(
  58665. ": " + vue.toDisplayString($setup.t("足球")),
  58666. 1
  58667. /* TEXT */
  58668. )
  58669. ])
  58670. ])
  58671. ]),
  58672. item.failure ? (vue.openBlock(), vue.createElementBlock("view", {
  58673. key: 1,
  58674. class: "odds-row"
  58675. }, [
  58676. vue.createElementVNode(
  58677. "span",
  58678. { class: "label" },
  58679. vue.toDisplayString($setup.t("取消原因")) + ":",
  58680. 1
  58681. /* TEXT */
  58682. ),
  58683. vue.createElementVNode(
  58684. "span",
  58685. { style: { "color": "#fa3534" } },
  58686. vue.toDisplayString(item.failure),
  58687. 1
  58688. /* TEXT */
  58689. )
  58690. ])) : vue.createCommentVNode("v-if", true),
  58691. vue.createElementVNode("view", { class: "divider" }),
  58692. vue.createElementVNode("view", { class: "card-footer" }, [
  58693. vue.createElementVNode("view", { class: "info-column" }, [
  58694. vue.createElementVNode(
  58695. "text",
  58696. { class: "info-label" },
  58697. vue.toDisplayString($setup.t("投注金额")),
  58698. 1
  58699. /* TEXT */
  58700. ),
  58701. vue.createElementVNode(
  58702. "text",
  58703. { class: "info-value" },
  58704. vue.toDisplayString(item.amount),
  58705. 1
  58706. /* TEXT */
  58707. ),
  58708. Number(item.return_status) !== 0 ? (vue.openBlock(), vue.createElementBlock(
  58709. "text",
  58710. {
  58711. key: 0,
  58712. class: vue.normalizeClass(["refund-text", $setup.getRefundStatusClass(item.return_status)])
  58713. },
  58714. vue.toDisplayString($setup.getRefundStatusText(item.return_status)),
  58715. 3
  58716. /* TEXT, CLASS */
  58717. )) : vue.createCommentVNode("v-if", true)
  58718. ]),
  58719. vue.createElementVNode("view", { class: "info-column" }, [
  58720. vue.createElementVNode(
  58721. "text",
  58722. { class: "info-label" },
  58723. vue.toDisplayString($setup.t("可赢金额")),
  58724. 1
  58725. /* TEXT */
  58726. ),
  58727. vue.createElementVNode(
  58728. "text",
  58729. {
  58730. class: "info-value",
  58731. style: { "color": "#19be6b" }
  58732. },
  58733. vue.toDisplayString(Number((Number(item.amount) * Number(item.odd) - Number(item.amount)).toFixed(2))),
  58734. 1
  58735. /* TEXT */
  58736. )
  58737. ]),
  58738. vue.createElementVNode("view", { class: "info-column align-right" }, [
  58739. vue.createElementVNode(
  58740. "text",
  58741. { class: "info-label" },
  58742. vue.toDisplayString($setup.t("派彩金额")),
  58743. 1
  58744. /* TEXT */
  58745. ),
  58746. vue.createElementVNode(
  58747. "text",
  58748. {
  58749. class: vue.normalizeClass(["info-value big-num", $setup.getSportProfitClass(item)])
  58750. },
  58751. [
  58752. item.is_win === 0 ? (vue.openBlock(), vue.createElementBlock(
  58753. "span",
  58754. { key: 0 },
  58755. vue.toDisplayString(item.profit_and_loss),
  58756. 1
  58757. /* TEXT */
  58758. )) : item.is_win === 1 ? (vue.openBlock(), vue.createElementBlock(
  58759. "span",
  58760. { key: 1 },
  58761. "+" + vue.toDisplayString(item.win_amount),
  58762. 1
  58763. /* TEXT */
  58764. )) : (vue.openBlock(), vue.createElementBlock("span", { key: 2 }, "0.00"))
  58765. ],
  58766. 2
  58767. /* CLASS */
  58768. )
  58769. ])
  58770. ]),
  58771. vue.createElementVNode("view", { style: { "margin-top": "24rpx", "border-top": "1rpx dashed #f1f5f9", "padding-top": "20rpx", "display": "flex", "justify-content": "center", "gap": "30rpx" } }, [
  58772. vue.createVNode(_component_u_button, {
  58773. type: "primary",
  58774. size: "mini",
  58775. plain: "",
  58776. shape: "circle",
  58777. onClick: vue.withModifiers(($event) => $setup.handleSportDetail(item), ["stop"]),
  58778. "custom-style": "margin: 0; padding: 0 30rpx;"
  58779. }, {
  58780. default: vue.withCtx(() => [
  58781. vue.createTextVNode(
  58782. vue.toDisplayString($setup.t("查看订单详情")),
  58783. 1
  58784. /* TEXT */
  58785. )
  58786. ]),
  58787. _: 2
  58788. /* DYNAMIC */
  58789. }, 1032, ["onClick"]),
  58790. vue.createVNode(_component_u_button, {
  58791. type: "primary",
  58792. size: "mini",
  58793. plain: "",
  58794. shape: "circle",
  58795. onClick: vue.withModifiers(($event) => $setup.handleMatchDetail(item), ["stop"]),
  58796. "custom-style": "margin: 0; padding: 0 30rpx;"
  58797. }, {
  58798. default: vue.withCtx(() => [
  58799. vue.createTextVNode(
  58800. vue.toDisplayString($setup.t("查看赛事详情")),
  58801. 1
  58802. /* TEXT */
  58803. )
  58804. ]),
  58805. _: 2
  58806. /* DYNAMIC */
  58807. }, 1032, ["onClick"])
  58808. ])
  58809. ], 8, ["onClick"]);
  58810. }),
  58811. 128
  58812. /* KEYED_FRAGMENT */
  58813. ))
  58814. ])
  58815. ]),
  58816. _: 1
  58817. /* STABLE */
  58818. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])) : vue.createCommentVNode("v-if", true),
  58819. $setup.mainTab === 2 ? (vue.openBlock(), vue.createBlock(_component_z_paging, {
  58820. key: 2,
  58821. ref: "lhcPagingRef",
  58822. modelValue: $setup.lhcOrderList,
  58823. "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $setup.lhcOrderList = $event),
  58824. onQuery: $setup.onLhcQuery,
  58825. fixed: false,
  58826. "refresher-enabled": true,
  58827. "loading-more-enabled": true,
  58828. "auto-show-back-to-top": true,
  58829. "back-to-top-threshold": 300,
  58830. loadingMoreLoadingText: $setup.t("正在加载"),
  58831. loadingMoreNoMoreText: $setup.t("没有更多了"),
  58832. loadingMoreDefaultText: $setup.t("点击加载更多")
  58833. }, {
  58834. top: vue.withCtx(() => [
  58835. vue.createElementVNode("view", { class: "filter-wrapper" }, [
  58836. vue.createElementVNode("view", { class: "filter-card" }, [
  58837. vue.createElementVNode("view", { class: "filter-header" }, [
  58838. vue.createElementVNode("view", { class: "title-line" }, [
  58839. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  58840. vue.createElementVNode(
  58841. "text",
  58842. { class: "title-text" },
  58843. vue.toDisplayString($setup.t("条件筛选")),
  58844. 1
  58845. /* TEXT */
  58846. )
  58847. ]),
  58848. vue.createElementVNode(
  58849. "text",
  58850. {
  58851. class: "reset-link",
  58852. onClick: $setup.handleLhcReset
  58853. },
  58854. vue.toDisplayString($setup.t("重置全部")),
  58855. 1
  58856. /* TEXT */
  58857. )
  58858. ]),
  58859. vue.createElementVNode("view", { class: "filter-body" }, [
  58860. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  58861. vue.createElementVNode("view", {
  58862. class: "filter-item date-item",
  58863. onClick: _cache[8] || (_cache[8] = ($event) => $setup.lhcCalendarShow = true),
  58864. style: { "margin-bottom": "20rpx" }
  58865. }, [
  58866. vue.createVNode(_component_u_icon, {
  58867. name: "calendar",
  58868. size: "32",
  58869. color: _ctx.$mainColor
  58870. }, null, 8, ["color"]),
  58871. vue.createElementVNode("view", { class: "filter-content" }, [
  58872. $setup.lhcDateRange ? (vue.openBlock(), vue.createElementBlock(
  58873. "text",
  58874. {
  58875. key: 0,
  58876. class: "filter-value"
  58877. },
  58878. vue.toDisplayString($setup.lhcDateRange),
  58879. 1
  58880. /* TEXT */
  58881. )) : (vue.openBlock(), vue.createElementBlock(
  58882. "text",
  58883. {
  58884. key: 1,
  58885. class: "filter-placeholder"
  58886. },
  58887. vue.toDisplayString($setup.t("日期区间")),
  58888. 1
  58889. /* TEXT */
  58890. ))
  58891. ]),
  58892. vue.createVNode(_component_u_icon, {
  58893. name: "arrow-down",
  58894. size: "14",
  58895. color: "#ccc"
  58896. })
  58897. ])
  58898. ]),
  58899. vue.createElementVNode("view", { class: "filter-row action-row" }, [
  58900. vue.createElementVNode("view", {
  58901. class: "filter-item type-item",
  58902. onClick: _cache[9] || (_cache[9] = ($event) => $setup.lhcStatusShow = true)
  58903. }, [
  58904. vue.createVNode(_component_u_icon, {
  58905. name: "list-dot",
  58906. size: "32",
  58907. color: _ctx.$mainColor
  58908. }, null, 8, ["color"]),
  58909. vue.createElementVNode("view", { class: "filter-content" }, [
  58910. vue.withDirectives(vue.createElementVNode(
  58911. "text",
  58912. { class: "filter-value" },
  58913. vue.toDisplayString($setup.lhcStatusText),
  58914. 513
  58915. /* TEXT, NEED_PATCH */
  58916. ), [
  58917. [vue.vShow, $setup.lhcStatusText]
  58918. ]),
  58919. vue.withDirectives(vue.createElementVNode(
  58920. "text",
  58921. { class: "filter-placeholder" },
  58922. vue.toDisplayString($setup.t("状态")),
  58923. 513
  58924. /* TEXT, NEED_PATCH */
  58925. ), [
  58926. [vue.vShow, !$setup.lhcStatusText]
  58927. ])
  58928. ]),
  58929. vue.createVNode(_component_u_icon, {
  58930. name: "arrow-down",
  58931. size: "14",
  58932. color: "#ccc"
  58933. })
  58934. ]),
  58935. vue.createElementVNode("view", {
  58936. class: "button-group",
  58937. style: { "margin-left": "20rpx" }
  58938. }, [
  58939. vue.createVNode(_component_u_button, {
  58940. type: "primary",
  58941. shape: "circle",
  58942. class: "search-btn",
  58943. onClick: $setup.handleLhcQuery,
  58944. "custom-style": "width: 100%; height: 76rpx;"
  58945. }, {
  58946. default: vue.withCtx(() => [
  58947. vue.createVNode(_component_u_icon, {
  58948. name: "search",
  58949. size: "32",
  58950. color: "#fff",
  58951. style: { "margin-right": "20rpx" }
  58952. }),
  58953. vue.createTextVNode(
  58954. " " + vue.toDisplayString($setup.t("查询")),
  58955. 1
  58956. /* TEXT */
  58957. )
  58958. ]),
  58959. _: 1
  58960. /* STABLE */
  58961. })
  58962. ])
  58963. ])
  58964. ])
  58965. ])
  58966. ])
  58967. ]),
  58968. refresher: vue.withCtx(() => [
  58969. vue.createElementVNode("view", { class: "refresher-ui" }, [
  58970. vue.createElementVNode("view", { class: "spin-loader" }),
  58971. vue.createElementVNode(
  58972. "text",
  58973. { class: "refresher-text" },
  58974. vue.toDisplayString($setup.t("更新数据中...")),
  58975. 1
  58976. /* TEXT */
  58977. )
  58978. ])
  58979. ]),
  58980. empty: vue.withCtx(() => [
  58981. vue.createElementVNode("view", { class: "empty-ui" }, [
  58982. vue.createVNode(_component_u_empty, {
  58983. text: $setup.t("暂无投注记录"),
  58984. mode: "history",
  58985. "icon-size": "120"
  58986. }, null, 8, ["text"])
  58987. ])
  58988. ]),
  58989. default: vue.withCtx(() => [
  58990. vue.createElementVNode("view", { class: "bet-list-container" }, [
  58991. (vue.openBlock(true), vue.createElementBlock(
  58992. vue.Fragment,
  58993. null,
  58994. vue.renderList($setup.lhcOrderList, (item) => {
  58995. var _a2;
  58996. return vue.openBlock(), vue.createElementBlock("view", {
  58997. key: item.id,
  58998. class: "bet-card lhc-card",
  58999. onClick: ($event) => $setup.handleLhcDetail(item)
  59000. }, [
  59001. vue.createElementVNode("view", { class: "card-header" }, [
  59002. vue.createElementVNode("view", { class: "issue-box" }, [
  59003. vue.createElementVNode(
  59004. "text",
  59005. { class: "label" },
  59006. vue.toDisplayString($setup.t("期号")) + ":",
  59007. 1
  59008. /* TEXT */
  59009. ),
  59010. vue.createElementVNode(
  59011. "text",
  59012. { class: "issue-no" },
  59013. vue.toDisplayString(item.issue),
  59014. 1
  59015. /* TEXT */
  59016. )
  59017. ]),
  59018. vue.createElementVNode(
  59019. "view",
  59020. {
  59021. class: vue.normalizeClass(["status-badge", $setup.getLhcStatusClass(item.lottery_status)])
  59022. },
  59023. vue.toDisplayString($setup.getLhcStatusText(item.lottery_status)),
  59024. 3
  59025. /* TEXT, CLASS */
  59026. )
  59027. ]),
  59028. vue.createElementVNode("view", { class: "card-main" }, [
  59029. vue.createElementVNode("view", {
  59030. class: "bet-content-box",
  59031. style: { "margin-bottom": "12rpx" }
  59032. }, [
  59033. item.type === 1 ? (vue.openBlock(), vue.createElementBlock(
  59034. "text",
  59035. {
  59036. key: 0,
  59037. class: "bet-label"
  59038. },
  59039. vue.toDisplayString($setup.t("新澳门六合彩")),
  59040. 1
  59041. /* TEXT */
  59042. )) : item.type === 2 ? (vue.openBlock(), vue.createElementBlock(
  59043. "text",
  59044. {
  59045. key: 1,
  59046. class: "bet-label"
  59047. },
  59048. vue.toDisplayString($setup.t("香港六合彩")),
  59049. 1
  59050. /* TEXT */
  59051. )) : item.type === 3 ? (vue.openBlock(), vue.createElementBlock(
  59052. "text",
  59053. {
  59054. key: 2,
  59055. class: "bet-label"
  59056. },
  59057. vue.toDisplayString($setup.t("澳门六合彩")),
  59058. 1
  59059. /* TEXT */
  59060. )) : (vue.openBlock(), vue.createElementBlock(
  59061. "text",
  59062. {
  59063. key: 3,
  59064. class: "bet-label"
  59065. },
  59066. vue.toDisplayString($setup.t("极速六合彩")),
  59067. 1
  59068. /* TEXT */
  59069. )),
  59070. vue.createVNode(_component_u_tag, {
  59071. text: `[${item.game}] - ${item.gameplay}`,
  59072. type: "primary",
  59073. plain: "",
  59074. size: "mini"
  59075. }, null, 8, ["text"])
  59076. ]),
  59077. vue.createElementVNode("view", { class: "bet-content-box" }, [
  59078. vue.createElementVNode(
  59079. "text",
  59080. { class: "bet-label" },
  59081. vue.toDisplayString($setup.t("投注内容")),
  59082. 1
  59083. /* TEXT */
  59084. ),
  59085. vue.createElementVNode(
  59086. "text",
  59087. { class: "bet-keywords" },
  59088. vue.toDisplayString(item.number),
  59089. 1
  59090. /* TEXT */
  59091. )
  59092. ]),
  59093. item.lottery && item.lottery.open_code ? (vue.openBlock(), vue.createElementBlock("view", {
  59094. key: 0,
  59095. class: "bet-content-box",
  59096. style: { "align-items": "flex-start" }
  59097. }, [
  59098. vue.createElementVNode(
  59099. "text",
  59100. {
  59101. class: "bet-label",
  59102. style: { "margin-top": "8rpx" }
  59103. },
  59104. vue.toDisplayString($setup.t("开奖结果")),
  59105. 1
  59106. /* TEXT */
  59107. ),
  59108. vue.createElementVNode("view", { class: "lhc-open-code-box" }, [
  59109. (vue.openBlock(true), vue.createElementBlock(
  59110. vue.Fragment,
  59111. null,
  59112. vue.renderList(item.lottery.open_code.split(","), (code2, index) => {
  59113. return vue.openBlock(), vue.createElementBlock(
  59114. vue.Fragment,
  59115. { key: index },
  59116. [
  59117. index === item.lottery.open_code.split(",").length - 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  59118. key: 0,
  59119. class: "plus-sign"
  59120. }, "+")) : vue.createCommentVNode("v-if", true),
  59121. vue.createElementVNode(
  59122. "view",
  59123. {
  59124. class: vue.normalizeClass(["lhc-ball", $setup.getBallColorClass(code2)])
  59125. },
  59126. vue.toDisplayString(code2),
  59127. 3
  59128. /* TEXT, CLASS */
  59129. )
  59130. ],
  59131. 64
  59132. /* STABLE_FRAGMENT */
  59133. );
  59134. }),
  59135. 128
  59136. /* KEYED_FRAGMENT */
  59137. ))
  59138. ])
  59139. ])) : vue.createCommentVNode("v-if", true),
  59140. item.lottery && item.lottery.open_time ? (vue.openBlock(), vue.createElementBlock("view", {
  59141. key: 1,
  59142. class: "bet-content-box"
  59143. }, [
  59144. vue.createElementVNode(
  59145. "text",
  59146. { class: "bet-label" },
  59147. vue.toDisplayString($setup.t("开奖时间")),
  59148. 1
  59149. /* TEXT */
  59150. ),
  59151. vue.createElementVNode(
  59152. "text",
  59153. { style: { "color": "#999", "font-size": "24rpx" } },
  59154. vue.toDisplayString((_a2 = item.lottery) == null ? void 0 : _a2.open_time),
  59155. 1
  59156. /* TEXT */
  59157. )
  59158. ])) : vue.createCommentVNode("v-if", true),
  59159. vue.createElementVNode("view", { class: "data-grid" }, [
  59160. vue.createElementVNode("view", { class: "data-item" }, [
  59161. vue.createElementVNode(
  59162. "text",
  59163. { class: "d-label" },
  59164. vue.toDisplayString($setup.t("赔率")),
  59165. 1
  59166. /* TEXT */
  59167. ),
  59168. vue.createElementVNode(
  59169. "text",
  59170. { class: "d-val" },
  59171. "@" + vue.toDisplayString(item.odds),
  59172. 1
  59173. /* TEXT */
  59174. )
  59175. ]),
  59176. vue.createElementVNode("view", { class: "data-item" }, [
  59177. vue.createElementVNode(
  59178. "text",
  59179. { class: "d-label" },
  59180. vue.toDisplayString($setup.t("投注本金")),
  59181. 1
  59182. /* TEXT */
  59183. ),
  59184. vue.createElementVNode(
  59185. "text",
  59186. { class: "d-val" },
  59187. vue.toDisplayString(parseFloat(item.amount || 0).toFixed(2)),
  59188. 1
  59189. /* TEXT */
  59190. )
  59191. ]),
  59192. vue.createElementVNode("view", { class: "data-item" }, [
  59193. vue.createElementVNode(
  59194. "text",
  59195. { class: "d-label" },
  59196. vue.toDisplayString($setup.t("盈亏")),
  59197. 1
  59198. /* TEXT */
  59199. ),
  59200. vue.createElementVNode(
  59201. "span",
  59202. {
  59203. class: vue.normalizeClass(["d-val profit-val", $setup.getLhcProfitClass(item.lottery_status)])
  59204. },
  59205. vue.toDisplayString($setup.getLhcProfitText(item)),
  59206. 3
  59207. /* TEXT, CLASS */
  59208. )
  59209. ])
  59210. ])
  59211. ]),
  59212. vue.createElementVNode("view", { class: "card-footer" }, [
  59213. vue.createElementVNode("view", { style: { "display": "flex", "align-items": "center", "gap": "8rpx", "color": "#94a3b8", "font-size": "22rpx" } }, [
  59214. vue.createElementVNode(
  59215. "text",
  59216. null,
  59217. vue.toDisplayString($setup.t("单号")) + ":",
  59218. 1
  59219. /* TEXT */
  59220. ),
  59221. vue.createTextVNode(),
  59222. vue.createElementVNode(
  59223. "text",
  59224. { style: { "font-family": "monospace" } },
  59225. vue.toDisplayString(item.ordernum),
  59226. 1
  59227. /* TEXT */
  59228. )
  59229. ]),
  59230. vue.createElementVNode(
  59231. "text",
  59232. { class: "time" },
  59233. vue.toDisplayString(item.created_at),
  59234. 1
  59235. /* TEXT */
  59236. )
  59237. ])
  59238. ], 8, ["onClick"]);
  59239. }),
  59240. 128
  59241. /* KEYED_FRAGMENT */
  59242. ))
  59243. ])
  59244. ]),
  59245. _: 1
  59246. /* STABLE */
  59247. }, 8, ["modelValue", "loadingMoreLoadingText", "loadingMoreNoMoreText", "loadingMoreDefaultText"])) : vue.createCommentVNode("v-if", true)
  59248. ])
  59249. ]),
  59250. vue.createVNode(_component_u_select, {
  59251. modelValue: $setup.gameStatusShow,
  59252. "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => $setup.gameStatusShow = $event),
  59253. mode: "single-column",
  59254. list: $setup.gameStatusColumns,
  59255. "confirm-color": _ctx.$mainColor,
  59256. onConfirm: $setup.onGameStatusConfirm
  59257. }, null, 8, ["modelValue", "list", "confirm-color"]),
  59258. vue.createVNode(_component_u_select, {
  59259. modelValue: $setup.gameSettleStatusShow,
  59260. "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $setup.gameSettleStatusShow = $event),
  59261. mode: "single-column",
  59262. list: $setup.gameSettleStatusColumns,
  59263. "confirm-color": _ctx.$mainColor,
  59264. onConfirm: $setup.onGameSettleStatusConfirm
  59265. }, null, 8, ["modelValue", "list", "confirm-color"]),
  59266. vue.createVNode(_component_u_calendar, {
  59267. modelValue: $setup.gameCalendarShow,
  59268. "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => $setup.gameCalendarShow = $event),
  59269. mode: "range",
  59270. "active-bg-color": _ctx.$mainColor,
  59271. "range-color": _ctx.$mainColor,
  59272. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  59273. onChange: $setup.onGameCalendarChange
  59274. }, null, 8, ["modelValue", "active-bg-color", "range-color"]),
  59275. vue.createVNode(_component_u_select, {
  59276. modelValue: $setup.sportStatusShow,
  59277. "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => $setup.sportStatusShow = $event),
  59278. mode: "single-column",
  59279. list: $setup.sportStatusColumns,
  59280. "confirm-color": _ctx.$mainColor,
  59281. onConfirm: $setup.onSportStatusConfirm
  59282. }, null, 8, ["modelValue", "list", "confirm-color"]),
  59283. vue.createVNode(_component_u_select, {
  59284. modelValue: $setup.sportSettleStatusShow,
  59285. "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => $setup.sportSettleStatusShow = $event),
  59286. mode: "single-column",
  59287. list: $setup.sportSettleStatusColumns,
  59288. "confirm-color": _ctx.$mainColor,
  59289. onConfirm: $setup.onSportSettleStatusConfirm
  59290. }, null, 8, ["modelValue", "list", "confirm-color"]),
  59291. vue.createVNode(_component_u_calendar, {
  59292. modelValue: $setup.sportCalendarShow,
  59293. "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => $setup.sportCalendarShow = $event),
  59294. mode: "range",
  59295. "active-bg-color": _ctx.$mainColor,
  59296. "range-color": _ctx.$mainColor,
  59297. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  59298. onChange: $setup.onSportCalendarConfirm
  59299. }, null, 8, ["modelValue", "active-bg-color", "range-color"]),
  59300. vue.createVNode(_component_u_select, {
  59301. modelValue: $setup.lhcStatusShow,
  59302. "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => $setup.lhcStatusShow = $event),
  59303. mode: "single-column",
  59304. list: $setup.lhcStatusColumns,
  59305. "confirm-color": _ctx.$mainColor,
  59306. onConfirm: $setup.onLhcStatusConfirm
  59307. }, null, 8, ["modelValue", "list", "confirm-color"]),
  59308. vue.createVNode(_component_u_calendar, {
  59309. modelValue: $setup.lhcCalendarShow,
  59310. "onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => $setup.lhcCalendarShow = $event),
  59311. mode: "range",
  59312. "active-bg-color": _ctx.$mainColor,
  59313. "range-color": _ctx.$mainColor,
  59314. "range-bg-color": "rgba(242, 186, 69, 0.1)",
  59315. onChange: $setup.onLhcCalendarChange
  59316. }, null, 8, ["modelValue", "active-bg-color", "range-color"])
  59317. ]),
  59318. _: 1
  59319. /* STABLE */
  59320. }, 8, ["nav-title"])
  59321. ]),
  59322. _: 1
  59323. /* STABLE */
  59324. });
  59325. }
  59326. const PagesCommonAllHistoryIndex = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__scopeId", "data-v-4115be14"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/AllHistory/index.vue"]]);
  59327. const _sfc_main$2 = {
  59328. __name: "index",
  59329. setup(__props, { expose: __expose }) {
  59330. __expose();
  59331. const gameConfig = vue.reactive({
  59332. name: "加拿大",
  59333. balls: ["2", "8"]
  59334. });
  59335. const drawRules = vue.reactive({
  59336. title: "是根据什么开出的?",
  59337. content: "加拿大公司BCLC每期共开出20个数字。加拿大28将这20个结果号码按照由小到大的顺序依次排列;取其第2/5/8/11/14/17位结果号码相加,和值的末位数作为加拿大28开出第一个数值;取其第3/6/9/12/15/18位开出号码相加,和值的末位数作为加拿大开出第二个数值,取其第4/7/10/13/16/19位开出号码相加,和值的末位数作为加拿大28开出第三个数值;三个数值相加即为加拿大28最终的开出结果。"
  59338. });
  59339. const playInstructions = vue.reactive({
  59340. title: "玩法说明:",
  59341. exampleLabel: "例如:",
  59342. issueInfo: "加拿大BCLC第1749110期数据从小到大排序",
  59343. rawNumbers: "7,8,14,16,17,22,26,34,39,41,42,48,54,58,63,64,69,72,73,79",
  59344. zones: [
  59345. {
  59346. name: "第一区",
  59347. positions: "[第2/5/8/11/14/17位数字]",
  59348. numbers: "8,17,34,42,58,69",
  59349. calculation: "8+17+34+42+58+69",
  59350. sum: 228,
  59351. result: 8
  59352. },
  59353. {
  59354. name: "第二区",
  59355. positions: "[第3/6/9/12/15/18位数字]",
  59356. numbers: "14,22,39,48,63,72",
  59357. calculation: "14+22+39+48+63+72",
  59358. sum: 258,
  59359. result: 8
  59360. },
  59361. {
  59362. name: "第三区",
  59363. positions: "[第4/7/10/13/16/19位数字]",
  59364. numbers: "16,26,41,54,64,73",
  59365. calculation: "16+26+41+54+64+73",
  59366. sum: 274,
  59367. result: 4
  59368. }
  59369. ],
  59370. finalResultLabel: "最终游戏结果为:",
  59371. finalResultStr: "8+8+4=20"
  59372. });
  59373. const playModes = vue.reactive({
  59374. title: "共有以下玩法",
  59375. list: [
  59376. "1、大,小,单,双",
  59377. "2、小单,小双,大单,大双",
  59378. "3、极小值(0-5),极大值(22-27)",
  59379. "4、28个号码定位"
  59380. ]
  59381. });
  59382. const trendChart = vue.reactive({
  59383. title: "走势图怎么看?",
  59384. description: "由于加拿大28为随机开出,为了方便蛋友分析加拿大28结果走势,特别针对近期开出结果进行走势分析展示,以供蛋友参考。",
  59385. terms: [
  59386. { name: "统计数据:", desc: "统计多少期内的开出数据" },
  59387. { name: "标准间隔:", desc: "在标准概率下,间隔多少期会出现这个号码" },
  59388. { name: "当前间隔:", desc: "当前实际数据中,离最近一次出现该号码间隔了多少期" },
  59389. { name: "标准次数:", desc: "在统计期数内,标准概率下,出现该号码的次数" },
  59390. { name: "当前次数:", desc: "在统计期数内,实际出现该号码的次数" }
  59391. ]
  59392. });
  59393. const probabilityData = vue.reactive({
  59394. title: "标准概率",
  59395. headers: ["中奖号码", "标准赔率", "中奖概率"],
  59396. list: [
  59397. { number: 0, odds: 1e3, prob: "0.1%" },
  59398. { number: 1, odds: 333, prob: "0.3%" },
  59399. { number: 2, odds: 166, prob: "0.6%" },
  59400. { number: 3, odds: 100, prob: "1.0%" },
  59401. { number: 4, odds: 66, prob: "1.5%" },
  59402. { number: 5, odds: 48, prob: "2.1%" },
  59403. { number: 6, odds: 36, prob: "2.8%" },
  59404. { number: 7, odds: 28, prob: "3.6%" },
  59405. { number: 8, odds: 22, prob: "4.5%" },
  59406. { number: 9, odds: 18, prob: "5.5%" },
  59407. { number: 10, odds: 16, prob: "6.3%" },
  59408. { number: 11, odds: 15, prob: "6.9%" },
  59409. { number: 12, odds: 14, prob: "7.3%" },
  59410. { number: 13, odds: 13, prob: "7.5%" },
  59411. { number: 14, odds: 13, prob: "7.5%" },
  59412. { number: 15, odds: 14, prob: "7.3%" },
  59413. { number: 16, odds: 15, prob: "6.9%" },
  59414. { number: 17, odds: 16, prob: "6.3%" },
  59415. { number: 18, odds: 18, prob: "5.5%" },
  59416. { number: 19, odds: 22, prob: "4.5%" },
  59417. { number: 20, odds: 28, prob: "3.6%" },
  59418. { number: 21, odds: 36, prob: "2.8%" },
  59419. { number: 22, odds: 48, prob: "2.1%" },
  59420. { number: 23, odds: 66, prob: "1.5%" },
  59421. { number: 24, odds: 100, prob: "1.0%" },
  59422. { number: 25, odds: 166, prob: "0.6%" },
  59423. { number: 26, odds: 333, prob: "0.3%" },
  59424. { number: 27, odds: 1e3, prob: "0.1%" }
  59425. ]
  59426. });
  59427. const __returned__ = { gameConfig, drawRules, playInstructions, playModes, trendChart, probabilityData, reactive: vue.reactive };
  59428. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  59429. return __returned__;
  59430. }
  59431. };
  59432. function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
  59433. const _component_PageContainer = PageContainer;
  59434. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  59435. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  59436. default: vue.withCtx(() => [
  59437. vue.createVNode(_component_PageContainer, { "nav-title": "开奖规则" }, {
  59438. default: vue.withCtx(() => [
  59439. vue.createElementVNode("view", { class: "page-container" }, [
  59440. vue.createElementVNode("view", { class: "section" }, [
  59441. vue.createElementVNode("view", { class: "title-row" }, [
  59442. vue.createElementVNode(
  59443. "text",
  59444. { class: "theme-text" },
  59445. vue.toDisplayString($setup.gameConfig.name),
  59446. 1
  59447. /* TEXT */
  59448. ),
  59449. vue.createElementVNode("view", { class: "balls" }, [
  59450. (vue.openBlock(true), vue.createElementBlock(
  59451. vue.Fragment,
  59452. null,
  59453. vue.renderList($setup.gameConfig.balls, (num, index) => {
  59454. return vue.openBlock(), vue.createElementBlock(
  59455. "text",
  59456. {
  59457. class: "ball",
  59458. key: index
  59459. },
  59460. vue.toDisplayString(num),
  59461. 1
  59462. /* TEXT */
  59463. );
  59464. }),
  59465. 128
  59466. /* KEYED_FRAGMENT */
  59467. ))
  59468. ]),
  59469. vue.createElementVNode(
  59470. "text",
  59471. null,
  59472. vue.toDisplayString($setup.drawRules.title),
  59473. 1
  59474. /* TEXT */
  59475. )
  59476. ]),
  59477. vue.createElementVNode(
  59478. "view",
  59479. { class: "content-text" },
  59480. vue.toDisplayString($setup.drawRules.content),
  59481. 1
  59482. /* TEXT */
  59483. )
  59484. ]),
  59485. vue.createElementVNode("view", { class: "section" }, [
  59486. vue.createElementVNode("view", { class: "title-row" }, [
  59487. vue.createElementVNode(
  59488. "text",
  59489. { class: "theme-text" },
  59490. vue.toDisplayString($setup.gameConfig.name),
  59491. 1
  59492. /* TEXT */
  59493. ),
  59494. vue.createElementVNode("view", { class: "balls" }, [
  59495. (vue.openBlock(true), vue.createElementBlock(
  59496. vue.Fragment,
  59497. null,
  59498. vue.renderList($setup.gameConfig.balls, (num, index) => {
  59499. return vue.openBlock(), vue.createElementBlock(
  59500. "text",
  59501. {
  59502. class: "ball",
  59503. key: index
  59504. },
  59505. vue.toDisplayString(num),
  59506. 1
  59507. /* TEXT */
  59508. );
  59509. }),
  59510. 128
  59511. /* KEYED_FRAGMENT */
  59512. ))
  59513. ]),
  59514. vue.createElementVNode(
  59515. "text",
  59516. null,
  59517. vue.toDisplayString($setup.playInstructions.title),
  59518. 1
  59519. /* TEXT */
  59520. )
  59521. ]),
  59522. vue.createElementVNode("view", { class: "content-text" }, [
  59523. vue.createElementVNode("view", { class: "margin-bottom-sm" }, [
  59524. vue.createElementVNode(
  59525. "text",
  59526. { class: "font-bold" },
  59527. vue.toDisplayString($setup.playInstructions.exampleLabel),
  59528. 1
  59529. /* TEXT */
  59530. ),
  59531. vue.createElementVNode(
  59532. "text",
  59533. null,
  59534. vue.toDisplayString($setup.playInstructions.issueInfo),
  59535. 1
  59536. /* TEXT */
  59537. )
  59538. ]),
  59539. vue.createElementVNode(
  59540. "view",
  59541. { class: "margin-bottom-sm" },
  59542. vue.toDisplayString($setup.playInstructions.rawNumbers),
  59543. 1
  59544. /* TEXT */
  59545. ),
  59546. (vue.openBlock(true), vue.createElementBlock(
  59547. vue.Fragment,
  59548. null,
  59549. vue.renderList($setup.playInstructions.zones, (zone, index) => {
  59550. return vue.openBlock(), vue.createElementBlock("view", {
  59551. class: "zone-block",
  59552. key: index
  59553. }, [
  59554. vue.createElementVNode("view", null, [
  59555. vue.createElementVNode(
  59556. "text",
  59557. { class: "font-bold" },
  59558. vue.toDisplayString(zone.name),
  59559. 1
  59560. /* TEXT */
  59561. ),
  59562. vue.createElementVNode(
  59563. "text",
  59564. null,
  59565. vue.toDisplayString(zone.positions),
  59566. 1
  59567. /* TEXT */
  59568. ),
  59569. vue.createElementVNode(
  59570. "text",
  59571. { class: "margin-left-sm" },
  59572. vue.toDisplayString(zone.numbers),
  59573. 1
  59574. /* TEXT */
  59575. )
  59576. ]),
  59577. vue.createElementVNode(
  59578. "view",
  59579. null,
  59580. "计算:" + vue.toDisplayString(zone.calculation) + " = " + vue.toDisplayString(zone.sum),
  59581. 1
  59582. /* TEXT */
  59583. ),
  59584. vue.createElementVNode(
  59585. "view",
  59586. null,
  59587. "结果为:" + vue.toDisplayString(zone.result),
  59588. 1
  59589. /* TEXT */
  59590. )
  59591. ]);
  59592. }),
  59593. 128
  59594. /* KEYED_FRAGMENT */
  59595. )),
  59596. vue.createElementVNode("view", { class: "final-result margin-top-sm" }, [
  59597. vue.createElementVNode(
  59598. "text",
  59599. { class: "theme-text" },
  59600. vue.toDisplayString($setup.playInstructions.finalResultLabel),
  59601. 1
  59602. /* TEXT */
  59603. ),
  59604. vue.createElementVNode(
  59605. "text",
  59606. { class: "font-bold" },
  59607. vue.toDisplayString($setup.playInstructions.finalResultStr),
  59608. 1
  59609. /* TEXT */
  59610. )
  59611. ])
  59612. ])
  59613. ]),
  59614. vue.createElementVNode("view", { class: "section" }, [
  59615. vue.createElementVNode("view", { class: "title-row" }, [
  59616. vue.createElementVNode(
  59617. "text",
  59618. { class: "theme-text" },
  59619. vue.toDisplayString($setup.gameConfig.name),
  59620. 1
  59621. /* TEXT */
  59622. ),
  59623. vue.createElementVNode("view", { class: "balls" }, [
  59624. (vue.openBlock(true), vue.createElementBlock(
  59625. vue.Fragment,
  59626. null,
  59627. vue.renderList($setup.gameConfig.balls, (num, index) => {
  59628. return vue.openBlock(), vue.createElementBlock(
  59629. "text",
  59630. {
  59631. class: "ball",
  59632. key: index
  59633. },
  59634. vue.toDisplayString(num),
  59635. 1
  59636. /* TEXT */
  59637. );
  59638. }),
  59639. 128
  59640. /* KEYED_FRAGMENT */
  59641. ))
  59642. ]),
  59643. vue.createElementVNode(
  59644. "text",
  59645. null,
  59646. vue.toDisplayString($setup.playModes.title),
  59647. 1
  59648. /* TEXT */
  59649. )
  59650. ]),
  59651. vue.createElementVNode("view", { class: "content-text" }, [
  59652. (vue.openBlock(true), vue.createElementBlock(
  59653. vue.Fragment,
  59654. null,
  59655. vue.renderList($setup.playModes.list, (mode, index) => {
  59656. return vue.openBlock(), vue.createElementBlock(
  59657. "view",
  59658. { key: index },
  59659. vue.toDisplayString(mode),
  59660. 1
  59661. /* TEXT */
  59662. );
  59663. }),
  59664. 128
  59665. /* KEYED_FRAGMENT */
  59666. ))
  59667. ])
  59668. ]),
  59669. vue.createElementVNode("view", { class: "section" }, [
  59670. vue.createElementVNode("view", { class: "title-row" }, [
  59671. vue.createElementVNode(
  59672. "text",
  59673. { class: "theme-text" },
  59674. vue.toDisplayString($setup.gameConfig.name),
  59675. 1
  59676. /* TEXT */
  59677. ),
  59678. vue.createElementVNode("view", { class: "balls" }, [
  59679. (vue.openBlock(true), vue.createElementBlock(
  59680. vue.Fragment,
  59681. null,
  59682. vue.renderList($setup.gameConfig.balls, (num, index) => {
  59683. return vue.openBlock(), vue.createElementBlock(
  59684. "text",
  59685. {
  59686. class: "ball",
  59687. key: index
  59688. },
  59689. vue.toDisplayString(num),
  59690. 1
  59691. /* TEXT */
  59692. );
  59693. }),
  59694. 128
  59695. /* KEYED_FRAGMENT */
  59696. ))
  59697. ]),
  59698. vue.createElementVNode(
  59699. "text",
  59700. null,
  59701. vue.toDisplayString($setup.trendChart.title),
  59702. 1
  59703. /* TEXT */
  59704. )
  59705. ]),
  59706. vue.createElementVNode("view", { class: "content-text" }, [
  59707. vue.createElementVNode(
  59708. "view",
  59709. { class: "margin-bottom-sm" },
  59710. vue.toDisplayString($setup.trendChart.description),
  59711. 1
  59712. /* TEXT */
  59713. ),
  59714. (vue.openBlock(true), vue.createElementBlock(
  59715. vue.Fragment,
  59716. null,
  59717. vue.renderList($setup.trendChart.terms, (term, index) => {
  59718. return vue.openBlock(), vue.createElementBlock("view", {
  59719. key: index,
  59720. class: "margin-bottom-xs"
  59721. }, [
  59722. vue.createElementVNode(
  59723. "text",
  59724. { class: "font-bold" },
  59725. vue.toDisplayString(term.name),
  59726. 1
  59727. /* TEXT */
  59728. ),
  59729. vue.createElementVNode(
  59730. "text",
  59731. null,
  59732. vue.toDisplayString(term.desc),
  59733. 1
  59734. /* TEXT */
  59735. )
  59736. ]);
  59737. }),
  59738. 128
  59739. /* KEYED_FRAGMENT */
  59740. ))
  59741. ])
  59742. ]),
  59743. vue.createElementVNode("view", { class: "section" }, [
  59744. vue.createElementVNode("view", { class: "title-row" }, [
  59745. vue.createElementVNode(
  59746. "text",
  59747. { class: "theme-text" },
  59748. vue.toDisplayString($setup.gameConfig.name),
  59749. 1
  59750. /* TEXT */
  59751. ),
  59752. vue.createElementVNode("view", { class: "balls" }, [
  59753. (vue.openBlock(true), vue.createElementBlock(
  59754. vue.Fragment,
  59755. null,
  59756. vue.renderList($setup.gameConfig.balls, (num, index) => {
  59757. return vue.openBlock(), vue.createElementBlock(
  59758. "text",
  59759. {
  59760. class: "ball",
  59761. key: index
  59762. },
  59763. vue.toDisplayString(num),
  59764. 1
  59765. /* TEXT */
  59766. );
  59767. }),
  59768. 128
  59769. /* KEYED_FRAGMENT */
  59770. ))
  59771. ]),
  59772. vue.createElementVNode(
  59773. "text",
  59774. null,
  59775. vue.toDisplayString($setup.probabilityData.title),
  59776. 1
  59777. /* TEXT */
  59778. )
  59779. ]),
  59780. vue.createElementVNode("view", { class: "table" }, [
  59781. vue.createElementVNode("view", { class: "tr th" }, [
  59782. (vue.openBlock(true), vue.createElementBlock(
  59783. vue.Fragment,
  59784. null,
  59785. vue.renderList($setup.probabilityData.headers, (head, index) => {
  59786. return vue.openBlock(), vue.createElementBlock(
  59787. "view",
  59788. {
  59789. class: "td",
  59790. key: index
  59791. },
  59792. vue.toDisplayString(head),
  59793. 1
  59794. /* TEXT */
  59795. );
  59796. }),
  59797. 128
  59798. /* KEYED_FRAGMENT */
  59799. ))
  59800. ]),
  59801. (vue.openBlock(true), vue.createElementBlock(
  59802. vue.Fragment,
  59803. null,
  59804. vue.renderList($setup.probabilityData.list, (row, index) => {
  59805. return vue.openBlock(), vue.createElementBlock("view", {
  59806. class: "tr",
  59807. key: index
  59808. }, [
  59809. vue.createElementVNode(
  59810. "view",
  59811. { class: "td" },
  59812. vue.toDisplayString(row.number),
  59813. 1
  59814. /* TEXT */
  59815. ),
  59816. vue.createElementVNode(
  59817. "view",
  59818. { class: "td" },
  59819. vue.toDisplayString(row.odds),
  59820. 1
  59821. /* TEXT */
  59822. ),
  59823. vue.createElementVNode(
  59824. "view",
  59825. { class: "td" },
  59826. vue.toDisplayString(row.prob),
  59827. 1
  59828. /* TEXT */
  59829. )
  59830. ]);
  59831. }),
  59832. 128
  59833. /* KEYED_FRAGMENT */
  59834. ))
  59835. ])
  59836. ]),
  59837. vue.createElementVNode("view", { class: "pc28-rule" })
  59838. ])
  59839. ]),
  59840. _: 1
  59841. /* STABLE */
  59842. })
  59843. ]),
  59844. _: 1
  59845. /* STABLE */
  59846. });
  59847. }
  59848. const PagesCommonPC28RuleIndex = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__scopeId", "data-v-9b0db2d6"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/common/PC28Rule/index.vue"]]);
  59849. const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
  59850. __name: "index",
  59851. setup(__props, { expose: __expose }) {
  59852. __expose();
  59853. const { t: t2 } = useI18n();
  59854. const orderInfo = vue.ref(null);
  59855. const id = vue.ref("");
  59856. onLoad((options) => {
  59857. if (options && options.id) {
  59858. id.value = options.id;
  59859. fetchDetail();
  59860. }
  59861. });
  59862. const fetchDetail = async () => {
  59863. try {
  59864. uni.showLoading({ title: t2("加载中") });
  59865. const res = await betInfo({ id: id.value });
  59866. if (res.code === 1) {
  59867. orderInfo.value = res.data;
  59868. } else {
  59869. uni.showToast({ title: res.msg || t2("获取详情失败"), icon: "none" });
  59870. }
  59871. } catch (error) {
  59872. formatAppLog("error", "at pages/WorkModule/Entertainment/Detail/index.vue:143", error);
  59873. } finally {
  59874. uni.hideLoading();
  59875. }
  59876. };
  59877. const isWin = vue.computed(() => {
  59878. if (!orderInfo.value)
  59879. return false;
  59880. return Number(orderInfo.value.profit) > 0 || orderInfo.value.is_winner === 1;
  59881. });
  59882. const statusClass = vue.computed(() => {
  59883. if (!orderInfo.value)
  59884. return "";
  59885. const status = Number(orderInfo.value.status);
  59886. if (status === 1)
  59887. return "bg-pending";
  59888. if (status === 2) {
  59889. return isWin.value ? "bg-win" : "bg-loss";
  59890. }
  59891. return "bg-cancel";
  59892. });
  59893. const statusIcon = vue.computed(() => {
  59894. if (!orderInfo.value)
  59895. return "";
  59896. const status = Number(orderInfo.value.status);
  59897. if (status === 1)
  59898. return "clock";
  59899. if (status === 2) {
  59900. return isWin.value ? "checkmark-circle" : "close-circle";
  59901. }
  59902. return "info-circle";
  59903. });
  59904. const statusText = vue.computed(() => {
  59905. if (!orderInfo.value)
  59906. return "";
  59907. const status = Number(orderInfo.value.status);
  59908. if (status === 1)
  59909. return t2("待结算");
  59910. if (status === 2) {
  59911. return isWin.value ? t2("已中奖") : t2("未中奖");
  59912. }
  59913. return t2("未知");
  59914. });
  59915. const balls = vue.computed(() => {
  59916. var _a2, _b2;
  59917. if (!((_b2 = (_a2 = orderInfo.value) == null ? void 0 : _a2.issue) == null ? void 0 : _b2.winning_numbers))
  59918. return [];
  59919. return orderInfo.value.issue.winning_numbers.split(",");
  59920. });
  59921. const ballSum = vue.computed(() => {
  59922. if (balls.value.length === 0)
  59923. return 0;
  59924. return balls.value.reduce((sum, val) => sum + Number(val), 0);
  59925. });
  59926. const getTagColor = (text) => {
  59927. if (["大", "双", "极大"].includes(text))
  59928. return "tag-red";
  59929. if (["小", "单", "极小"].includes(text))
  59930. return "tag-green";
  59931. return "tag-blue";
  59932. };
  59933. const previewImage = (url2) => {
  59934. if (!url2)
  59935. return;
  59936. uni.previewImage({
  59937. urls: [url2]
  59938. });
  59939. };
  59940. const copyText = (text) => {
  59941. uni.setClipboardData({
  59942. data: text,
  59943. success: () => uni.showToast({ title: t2("复制成功"), icon: "none" })
  59944. });
  59945. };
  59946. const __returned__ = { t: t2, orderInfo, id, fetchDetail, isWin, statusClass, statusIcon, statusText, balls, ballSum, getTagColor, previewImage, copyText };
  59947. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  59948. return __returned__;
  59949. }
  59950. });
  59951. function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
  59952. const _component_u_icon = __unplugin_components_0$5;
  59953. const _component_u_image = __unplugin_components_1$1;
  59954. const _component_u_tag = __unplugin_components_2$2;
  59955. const _component_u_loading = __unplugin_components_3$3;
  59956. const _component_PageContainer = PageContainer;
  59957. const _component_global_ku_root = vue.resolveComponent("global-ku-root");
  59958. return vue.openBlock(), vue.createBlock(_component_global_ku_root, null, {
  59959. default: vue.withCtx(() => [
  59960. vue.createVNode(_component_PageContainer, {
  59961. "nav-title": $setup.t("注单详情")
  59962. }, {
  59963. default: vue.withCtx(() => [
  59964. $setup.orderInfo ? (vue.openBlock(), vue.createElementBlock("view", {
  59965. key: 0,
  59966. class: "detail-content"
  59967. }, [
  59968. vue.createElementVNode(
  59969. "view",
  59970. {
  59971. class: vue.normalizeClass(["status-card", $setup.statusClass])
  59972. },
  59973. [
  59974. vue.createElementVNode("view", { class: "status-top" }, [
  59975. vue.createElementVNode("view", { class: "status-icon-row" }, [
  59976. vue.createVNode(_component_u_icon, {
  59977. name: $setup.statusIcon,
  59978. size: "40",
  59979. color: "#fff"
  59980. }, null, 8, ["name"]),
  59981. vue.createElementVNode(
  59982. "text",
  59983. { class: "status-text" },
  59984. vue.toDisplayString($setup.statusText),
  59985. 1
  59986. /* TEXT */
  59987. )
  59988. ])
  59989. ]),
  59990. vue.createElementVNode("view", { class: "profit-row" }, [
  59991. vue.createElementVNode(
  59992. "text",
  59993. { class: "label" },
  59994. vue.toDisplayString($setup.t("盈亏金额")),
  59995. 1
  59996. /* TEXT */
  59997. ),
  59998. $setup.orderInfo.status === 2 && !Number($setup.orderInfo.profit) > 0 ? (vue.openBlock(), vue.createElementBlock(
  59999. "text",
  60000. {
  60001. key: 0,
  60002. class: "value"
  60003. },
  60004. " -" + vue.toDisplayString(Number($setup.orderInfo.amount).toFixed(2)),
  60005. 1
  60006. /* TEXT */
  60007. )) : (vue.openBlock(), vue.createElementBlock(
  60008. "text",
  60009. {
  60010. key: 1,
  60011. class: "value"
  60012. },
  60013. " +" + vue.toDisplayString(Number($setup.orderInfo.profit).toFixed(2)),
  60014. 1
  60015. /* TEXT */
  60016. ))
  60017. ])
  60018. ],
  60019. 2
  60020. /* CLASS */
  60021. ),
  60022. $setup.orderInfo.issue ? (vue.openBlock(), vue.createElementBlock("view", {
  60023. key: 0,
  60024. class: "info-card"
  60025. }, [
  60026. vue.createElementVNode("view", { class: "card-header" }, [
  60027. vue.createElementVNode("view", { class: "title-row" }, [
  60028. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  60029. vue.createElementVNode(
  60030. "text",
  60031. { class: "title" },
  60032. vue.toDisplayString($setup.t("开奖信息")),
  60033. 1
  60034. /* TEXT */
  60035. )
  60036. ]),
  60037. vue.createElementVNode("view", { class: "match-status-tag" }, [
  60038. vue.createElementVNode(
  60039. "text",
  60040. { class: "issue-text" },
  60041. vue.toDisplayString($setup.orderInfo.issue.issue_no) + " " + vue.toDisplayString($setup.t("期")),
  60042. 1
  60043. /* TEXT */
  60044. )
  60045. ])
  60046. ]),
  60047. vue.createElementVNode("view", { class: "lottery-info-box" }, [
  60048. $setup.balls.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  60049. key: 0,
  60050. class: "draw-result"
  60051. }, [
  60052. vue.createElementVNode("view", { class: "equation" }, [
  60053. vue.createElementVNode(
  60054. "view",
  60055. { class: "circle" },
  60056. vue.toDisplayString($setup.balls[0]),
  60057. 1
  60058. /* TEXT */
  60059. ),
  60060. vue.createElementVNode("text", { class: "operator" }, "+"),
  60061. vue.createElementVNode(
  60062. "view",
  60063. { class: "circle" },
  60064. vue.toDisplayString($setup.balls[1]),
  60065. 1
  60066. /* TEXT */
  60067. ),
  60068. vue.createElementVNode("text", { class: "operator" }, "+"),
  60069. vue.createElementVNode(
  60070. "view",
  60071. { class: "circle" },
  60072. vue.toDisplayString($setup.balls[2]),
  60073. 1
  60074. /* TEXT */
  60075. ),
  60076. vue.createElementVNode("text", { class: "operator" }, "="),
  60077. vue.createElementVNode(
  60078. "view",
  60079. { class: "circle result" },
  60080. vue.toDisplayString($setup.ballSum),
  60081. 1
  60082. /* TEXT */
  60083. )
  60084. ])
  60085. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  60086. key: 1,
  60087. class: "pending-draw"
  60088. }, [
  60089. vue.createElementVNode(
  60090. "text",
  60091. null,
  60092. vue.toDisplayString($setup.t("等待开奖中...")),
  60093. 1
  60094. /* TEXT */
  60095. )
  60096. ])),
  60097. $setup.orderInfo.issue.combo ? (vue.openBlock(), vue.createElementBlock("view", {
  60098. key: 2,
  60099. class: "draw-tags"
  60100. }, [
  60101. (vue.openBlock(true), vue.createElementBlock(
  60102. vue.Fragment,
  60103. null,
  60104. vue.renderList($setup.orderInfo.issue.combo, (tag, i) => {
  60105. return vue.openBlock(), vue.createElementBlock(
  60106. "view",
  60107. {
  60108. class: vue.normalizeClass(["tag", $setup.getTagColor(tag)]),
  60109. key: i
  60110. },
  60111. vue.toDisplayString(tag),
  60112. 3
  60113. /* TEXT, CLASS */
  60114. );
  60115. }),
  60116. 128
  60117. /* KEYED_FRAGMENT */
  60118. ))
  60119. ])) : vue.createCommentVNode("v-if", true),
  60120. $setup.orderInfo.issue.image ? (vue.openBlock(), vue.createElementBlock("view", {
  60121. key: 3,
  60122. class: "draw-image"
  60123. }, [
  60124. vue.createElementVNode(
  60125. "text",
  60126. { class: "img-label" },
  60127. vue.toDisplayString($setup.t("开奖截图")) + ":",
  60128. 1
  60129. /* TEXT */
  60130. ),
  60131. vue.createVNode(_component_u_image, {
  60132. src: $setup.orderInfo.issue.image,
  60133. width: "120rpx",
  60134. height: "120rpx",
  60135. "border-radius": "12rpx",
  60136. onClick: _cache[0] || (_cache[0] = ($event) => $setup.previewImage($setup.orderInfo.issue.image))
  60137. }, null, 8, ["src"])
  60138. ])) : vue.createCommentVNode("v-if", true)
  60139. ])
  60140. ])) : vue.createCommentVNode("v-if", true),
  60141. vue.createElementVNode("view", { class: "info-card" }, [
  60142. vue.createElementVNode("view", { class: "card-header" }, [
  60143. vue.createElementVNode("view", { class: "title-row" }, [
  60144. vue.createElementVNode("view", { class: "blue-bar bmc" }),
  60145. vue.createElementVNode(
  60146. "text",
  60147. { class: "title" },
  60148. vue.toDisplayString($setup.t("投注内容")),
  60149. 1
  60150. /* TEXT */
  60151. )
  60152. ]),
  60153. vue.createVNode(_component_u_tag, {
  60154. text: Number($setup.orderInfo.is_pc) === 1 ? $setup.t("加拿大") + 28 : $setup.t("极速") + 28,
  60155. type: "primary",
  60156. plain: "",
  60157. size: "mini"
  60158. }, null, 8, ["text"])
  60159. ]),
  60160. vue.createElementVNode("view", { class: "bet-list-group" }, [
  60161. vue.createElementVNode("view", { class: "list-row" }, [
  60162. vue.createElementVNode(
  60163. "text",
  60164. { class: "label" },
  60165. vue.toDisplayString($setup.t("投注项")),
  60166. 1
  60167. /* TEXT */
  60168. ),
  60169. vue.createElementVNode(
  60170. "text",
  60171. { class: "val highlight-keyword" },
  60172. vue.toDisplayString($setup.orderInfo.keywords || "-"),
  60173. 1
  60174. /* TEXT */
  60175. )
  60176. ]),
  60177. vue.createElementVNode("view", { class: "list-row" }, [
  60178. vue.createElementVNode(
  60179. "text",
  60180. { class: "label" },
  60181. vue.toDisplayString($setup.t("赔率")),
  60182. 1
  60183. /* TEXT */
  60184. ),
  60185. vue.createElementVNode(
  60186. "text",
  60187. { class: "val odds" },
  60188. "@" + vue.toDisplayString($setup.orderInfo.odds || "0.00"),
  60189. 1
  60190. /* TEXT */
  60191. )
  60192. ]),
  60193. vue.createElementVNode("view", { class: "list-row" }, [
  60194. vue.createElementVNode(
  60195. "text",
  60196. { class: "label" },
  60197. vue.toDisplayString($setup.t("下注金额")),
  60198. 1
  60199. /* TEXT */
  60200. ),
  60201. vue.createElementVNode(
  60202. "text",
  60203. { class: "val amount-val" },
  60204. vue.toDisplayString(parseFloat($setup.orderInfo.amount)),
  60205. 1
  60206. /* TEXT */
  60207. )
  60208. ]),
  60209. vue.createElementVNode("view", { class: "list-row no-border" }, [
  60210. vue.createElementVNode(
  60211. "text",
  60212. { class: "label" },
  60213. vue.toDisplayString($setup.t("下注时间")),
  60214. 1
  60215. /* TEXT */
  60216. ),
  60217. vue.createElementVNode(
  60218. "text",
  60219. { class: "val time-val" },
  60220. vue.toDisplayString($setup.orderInfo.created_at || "-"),
  60221. 1
  60222. /* TEXT */
  60223. )
  60224. ])
  60225. ])
  60226. ])
  60227. ])) : (vue.openBlock(), vue.createElementBlock("view", {
  60228. key: 1,
  60229. class: "loading-container"
  60230. }, [
  60231. vue.createVNode(_component_u_loading, {
  60232. mode: "circle",
  60233. size: "36"
  60234. }),
  60235. vue.createElementVNode(
  60236. "text",
  60237. { class: "loading-text" },
  60238. vue.toDisplayString($setup.t("加载中...")),
  60239. 1
  60240. /* TEXT */
  60241. )
  60242. ]))
  60243. ]),
  60244. _: 1
  60245. /* STABLE */
  60246. }, 8, ["nav-title"])
  60247. ]),
  60248. _: 1
  60249. /* STABLE */
  60250. });
  60251. }
  60252. const PagesWorkModuleEntertainmentDetailIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-3c052a28"], ["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/pages/WorkModule/Entertainment/Detail/index.vue"]]);
  60253. __definePage("pages/Tabbar/Home/index", PagesTabbarHomeIndex);
  60254. __definePage("pages/Tabbar/RollingBall/index", PagesTabbarRollingBallIndex);
  60255. __definePage("pages/Tabbar/SportsBetting/index", PagesTabbarSportsBettingIndex);
  60256. __definePage("pages/Tabbar/WorldCup/index", PagesTabbarWorldCupIndex);
  60257. __definePage("pages/Tabbar/Entertainment/index", PagesTabbarEntertainmentIndex);
  60258. __definePage("pages/Tabbar/BettingHistory/index", PagesTabbarBettingHistoryIndex);
  60259. __definePage("pages/Tabbar/My/index", PagesTabbarMyIndex);
  60260. __definePage("pages/Tabbar/Entertainment/components/Digital/detail", PagesTabbarEntertainmentComponentsDigitalDetail);
  60261. __definePage("pages/login/index", PagesLoginIndex);
  60262. __definePage("pages/register/index", PagesRegisterIndex);
  60263. __definePage("pages/setAccount/index", PagesSetAccountIndex);
  60264. __definePage("pages/index/example/index", PagesIndexExampleIndex);
  60265. __definePage("pages/index/user/index", PagesIndexUserIndex);
  60266. __definePage("pages/common/web-view/index", PagesCommonWebViewIndex);
  60267. __definePage("pages/common/rich-view/index", PagesCommonRichViewIndex);
  60268. __definePage("pages/tips/middleware/index", PagesTipsMiddlewareIndex);
  60269. __definePage("pages/template/paging/index", PagesTemplatePagingIndex);
  60270. __definePage("pages/oldPage/personal/index", PagesOldPagePersonalIndex);
  60271. __definePage("pages/oldPage/contact/index", PagesOldPageContactIndex);
  60272. __definePage("pages/oldPage/preference/index", PagesOldPagePreferenceIndex);
  60273. __definePage("pages/oldPage/feedback/index", PagesOldPageFeedbackIndex);
  60274. __definePage("pages/WorkModule/my/promotion/index", PagesWorkModuleMyPromotionIndex);
  60275. __definePage("pages/WorkModule/my/promotion/detail/index", PagesWorkModuleMyPromotionDetailIndex);
  60276. __definePage("pages/WorkModule/my/safety/index", PagesWorkModuleMySafetyIndex);
  60277. __definePage("pages/WorkModule/my/userInfo/index", PagesWorkModuleMyUserInfoIndex);
  60278. __definePage("pages/WorkModule/my/topUp/index", PagesWorkModuleMyTopUpIndex);
  60279. __definePage("pages/WorkModule/my/rechargeRecord/index", PagesWorkModuleMyRechargeRecordIndex);
  60280. __definePage("pages/WorkModule/my/withdraw/index", PagesWorkModuleMyWithdrawIndex);
  60281. __definePage("pages/WorkModule/my/withdrawalHistory/index", PagesWorkModuleMyWithdrawalHistoryIndex);
  60282. __definePage("pages/WorkModule/my/Yuebao/index", PagesWorkModuleMyYuebaoIndex);
  60283. __definePage("pages/WorkModule/my/Yuebao/itemList", PagesWorkModuleMyYuebaoItemList);
  60284. __definePage("pages/WorkModule/my/WalletManagement/index", PagesWorkModuleMyWalletManagementIndex);
  60285. __definePage("pages/WorkModule/my/changePassword/index", PagesWorkModuleMyChangePasswordIndex);
  60286. __definePage("pages/WorkModule/my/changeFundPassword/index", PagesWorkModuleMyChangeFundPasswordIndex);
  60287. __definePage("pages/WorkModule/my/fundRecord/index", PagesWorkModuleMyFundRecordIndex);
  60288. __definePage("pages/common/betSlip/index", PagesCommonBetSlipIndex);
  60289. __definePage("pages/common/customerService/index", PagesCommonCustomerServiceIndex);
  60290. __definePage("pages/WorkModule/bettingHistory/bettingDetail/index", PagesWorkModuleBettingHistoryBettingDetailIndex);
  60291. __definePage("pages/common/sportDetail/index", PagesCommonSportDetailIndex);
  60292. __definePage("pages/Tabbar/Entertainment/view/PC28/index", PagesTabbarEntertainmentViewPC28Index);
  60293. __definePage("pages/Tabbar/Entertainment/view/ExtremeSpeed28/index", PagesTabbarEntertainmentViewExtremeSpeed28Index);
  60294. __definePage("pages/Tabbar/Entertainment/view/Digital/index", PagesTabbarEntertainmentViewDigitalIndex);
  60295. __definePage("pages/Tabbar/Entertainment/view/NewDigital/index", PagesTabbarEntertainmentViewNewDigitalIndex);
  60296. __definePage("pages/Tabbar/Entertainment/view/SpeedDigital/index", PagesTabbarEntertainmentViewSpeedDigitalIndex);
  60297. __definePage("pages/Tabbar/Entertainment/view/HKDigital/index", PagesTabbarEntertainmentViewHKDigitalIndex);
  60298. __definePage("pages/Tabbar/Entertainment/view/history/index", PagesTabbarEntertainmentViewHistoryIndex);
  60299. __definePage("pages/Tabbar/Entertainment/view/Pc28BettingHistory/index", PagesTabbarEntertainmentViewPc28BettingHistoryIndex);
  60300. __definePage("pages/common/AllHistory/index", PagesCommonAllHistoryIndex);
  60301. __definePage("pages/common/PC28Rule/index", PagesCommonPC28RuleIndex);
  60302. __definePage("pages/WorkModule/Entertainment/Detail/index", PagesWorkModuleEntertainmentDetailIndex);
  60303. const _sfc_main = {
  60304. __name: "App",
  60305. setup(__props, { expose: __expose }) {
  60306. __expose();
  60307. onLaunch(() => {
  60308. let token = uni.getStorageSync("token");
  60309. socket.connect(token);
  60310. if (isAddedToHomeScreen && isAddedToHomeScreen()) {
  60311. document.body.classList.add("is-standalone");
  60312. }
  60313. });
  60314. onShow(() => {
  60315. formatAppLog("log", "at App.vue:17", "App Show");
  60316. });
  60317. onHide(() => {
  60318. formatAppLog("log", "at App.vue:20", "App Hide");
  60319. });
  60320. const appStore = useAppStore();
  60321. uni.onTabBarMidButtonTap(() => {
  60322. uni.navigateTo({
  60323. url: "/pages/Tabbar/WorldCup/index"
  60324. });
  60325. });
  60326. const __returned__ = { appStore, get socket() {
  60327. return socket;
  60328. } };
  60329. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  60330. return __returned__;
  60331. }
  60332. };
  60333. const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/Chad/Code/ViteMelBet/vite-melbet/src/App.vue"]]);
  60334. function isObject(v) {
  60335. return typeof v === "object" && v !== null;
  60336. }
  60337. function normalizeOptions(options, factoryOptions) {
  60338. options = isObject(options) ? options : /* @__PURE__ */ Object.create(null);
  60339. return new Proxy(options, {
  60340. get(target, key, receiver) {
  60341. if (key === "key")
  60342. return Reflect.get(target, key, receiver);
  60343. return Reflect.get(target, key, receiver) || Reflect.get(factoryOptions, key, receiver);
  60344. }
  60345. });
  60346. }
  60347. function get(state, path) {
  60348. return path.reduce((obj, p) => {
  60349. return obj == null ? void 0 : obj[p];
  60350. }, state);
  60351. }
  60352. function set(state, path, val) {
  60353. return path.slice(0, -1).reduce((obj, p) => {
  60354. if (/^(__proto__)$/.test(p))
  60355. return {};
  60356. else
  60357. return obj[p] = obj[p] || {};
  60358. }, state)[path[path.length - 1]] = val, state;
  60359. }
  60360. function pick(baseState, paths) {
  60361. return paths.reduce((substate, path) => {
  60362. const pathArray = path.split(".");
  60363. return set(substate, pathArray, get(baseState, pathArray));
  60364. }, {});
  60365. }
  60366. function parsePersistence(factoryOptions, store2) {
  60367. return (o) => {
  60368. var _a2;
  60369. try {
  60370. const {
  60371. storage = localStorage,
  60372. beforeRestore = void 0,
  60373. afterRestore = void 0,
  60374. serializer = {
  60375. serialize: JSON.stringify,
  60376. deserialize: JSON.parse
  60377. },
  60378. key = store2.$id,
  60379. paths = null,
  60380. debug = false
  60381. } = o;
  60382. return {
  60383. storage,
  60384. beforeRestore,
  60385. afterRestore,
  60386. serializer,
  60387. key: ((_a2 = factoryOptions.key) != null ? _a2 : (k) => k)(typeof key == "string" ? key : key(store2.$id)),
  60388. paths,
  60389. debug
  60390. };
  60391. } catch (e) {
  60392. if (o.debug)
  60393. console.error("[pinia-plugin-persistedstate]", e);
  60394. return null;
  60395. }
  60396. };
  60397. }
  60398. function hydrateStore(store2, { storage, serializer, key, debug }) {
  60399. try {
  60400. const fromStorage = storage == null ? void 0 : storage.getItem(key);
  60401. if (fromStorage)
  60402. store2.$patch(serializer == null ? void 0 : serializer.deserialize(fromStorage));
  60403. } catch (e) {
  60404. if (debug)
  60405. console.error("[pinia-plugin-persistedstate]", e);
  60406. }
  60407. }
  60408. function persistState(state, { storage, serializer, key, paths, debug }) {
  60409. try {
  60410. const toStore = Array.isArray(paths) ? pick(state, paths) : state;
  60411. storage.setItem(key, serializer.serialize(toStore));
  60412. } catch (e) {
  60413. if (debug)
  60414. console.error("[pinia-plugin-persistedstate]", e);
  60415. }
  60416. }
  60417. function createPersistedState(factoryOptions = {}) {
  60418. return (context) => {
  60419. const { auto = false } = factoryOptions;
  60420. const {
  60421. options: { persist = auto },
  60422. store: store2,
  60423. pinia
  60424. } = context;
  60425. if (!persist)
  60426. return;
  60427. if (!(store2.$id in pinia.state.value)) {
  60428. const original_store = pinia._s.get(store2.$id.replace("__hot:", ""));
  60429. if (original_store)
  60430. Promise.resolve().then(() => original_store.$persist());
  60431. return;
  60432. }
  60433. const persistences = (Array.isArray(persist) ? persist.map((p) => normalizeOptions(p, factoryOptions)) : [normalizeOptions(persist, factoryOptions)]).map(parsePersistence(factoryOptions, store2)).filter(Boolean);
  60434. store2.$persist = () => {
  60435. persistences.forEach((persistence) => {
  60436. persistState(store2.$state, persistence);
  60437. });
  60438. };
  60439. store2.$hydrate = ({ runHooks = true } = {}) => {
  60440. persistences.forEach((persistence) => {
  60441. const { beforeRestore, afterRestore } = persistence;
  60442. if (runHooks)
  60443. beforeRestore == null ? void 0 : beforeRestore(context);
  60444. hydrateStore(store2, persistence);
  60445. if (runHooks)
  60446. afterRestore == null ? void 0 : afterRestore(context);
  60447. });
  60448. };
  60449. persistences.forEach((persistence) => {
  60450. const { beforeRestore, afterRestore } = persistence;
  60451. beforeRestore == null ? void 0 : beforeRestore(context);
  60452. hydrateStore(store2, persistence);
  60453. afterRestore == null ? void 0 : afterRestore(context);
  60454. store2.$subscribe(
  60455. (_mutation, state) => {
  60456. persistState(state, persistence);
  60457. },
  60458. {
  60459. detached: true
  60460. }
  60461. );
  60462. });
  60463. };
  60464. }
  60465. const store = createPinia();
  60466. store.use(
  60467. createPersistedState({
  60468. storage: {
  60469. getItem: uni.getStorageSync,
  60470. setItem: uni.setStorageSync
  60471. }
  60472. })
  60473. );
  60474. function createApp() {
  60475. const app = vue.createVueApp(App);
  60476. app.use(uViewPro, {
  60477. theme
  60478. });
  60479. app.config.globalProperties.$t = i18n.global.t;
  60480. app.config.globalProperties.$currency = "RMB";
  60481. uni.$t = i18n.global.t;
  60482. uni.$currency = "RMB";
  60483. app.config.globalProperties.$mainColor = "#f8b932";
  60484. app.config.globalProperties.$mainBgColor = "#212121";
  60485. app.config.globalProperties.$mainTextColor = "#9ca3af";
  60486. app.component("PageContainer", PageContainer);
  60487. app.use(router);
  60488. app.use(store);
  60489. app.use(i18n);
  60490. app.component("global-ku-root", GlobalKuRoot);
  60491. return {
  60492. app
  60493. };
  60494. }
  60495. const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp();
  60496. uni.Vuex = __Vuex__;
  60497. uni.Pinia = __Pinia__;
  60498. __app__.provide("__globalStyles", __uniConfig.styles);
  60499. __app__._component.mpType = "app";
  60500. __app__._component.render = () => {
  60501. };
  60502. __app__.mount("#app");
  60503. })(Vue);