app-service.js 329 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792
  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. function formatAppLog(type, filename, ...args) {
  35. if (uni.__log__) {
  36. uni.__log__(type, filename, ...args);
  37. } else {
  38. console[type].apply(console, [...args, filename]);
  39. }
  40. }
  41. function resolveEasycom(component, easycom) {
  42. return typeof component === "string" ? easycom : component;
  43. }
  44. const icons = {
  45. "uicon-level": "",
  46. "uicon-column-line": "",
  47. "uicon-checkbox-mark": "",
  48. "uicon-folder": "",
  49. "uicon-movie": "",
  50. "uicon-star-fill": "",
  51. "uicon-star": "",
  52. "uicon-phone-fill": "",
  53. "uicon-phone": "",
  54. "uicon-apple-fill": "",
  55. "uicon-chrome-circle-fill": "",
  56. "uicon-backspace": "",
  57. "uicon-attach": "",
  58. "uicon-cut": "",
  59. "uicon-empty-car": "",
  60. "uicon-empty-coupon": "",
  61. "uicon-empty-address": "",
  62. "uicon-empty-favor": "",
  63. "uicon-empty-permission": "",
  64. "uicon-empty-news": "",
  65. "uicon-empty-search": "",
  66. "uicon-github-circle-fill": "",
  67. "uicon-rmb": "",
  68. "uicon-person-delete-fill": "",
  69. "uicon-reload": "",
  70. "uicon-order": "",
  71. "uicon-server-man": "",
  72. "uicon-search": "",
  73. "uicon-fingerprint": "",
  74. "uicon-more-dot-fill": "",
  75. "uicon-scan": "",
  76. "uicon-share-square": "",
  77. "uicon-map": "",
  78. "uicon-map-fill": "",
  79. "uicon-tags": "",
  80. "uicon-tags-fill": "",
  81. "uicon-bookmark-fill": "",
  82. "uicon-bookmark": "",
  83. "uicon-eye": "",
  84. "uicon-eye-fill": "",
  85. "uicon-mic": "",
  86. "uicon-mic-off": "",
  87. "uicon-calendar": "",
  88. "uicon-calendar-fill": "",
  89. "uicon-trash": "",
  90. "uicon-trash-fill": "",
  91. "uicon-play-left": "",
  92. "uicon-play-right": "",
  93. "uicon-minus": "",
  94. "uicon-plus": "",
  95. "uicon-info": "",
  96. "uicon-info-circle": "",
  97. "uicon-info-circle-fill": "",
  98. "uicon-question": "",
  99. "uicon-error": "",
  100. "uicon-close": "",
  101. "uicon-checkmark": "",
  102. "uicon-android-circle-fill": "",
  103. "uicon-android-fill": "",
  104. "uicon-ie": "",
  105. "uicon-IE-circle-fill": "",
  106. "uicon-google": "",
  107. "uicon-google-circle-fill": "",
  108. "uicon-setting-fill": "",
  109. "uicon-setting": "",
  110. "uicon-minus-square-fill": "",
  111. "uicon-plus-square-fill": "",
  112. "uicon-heart": "",
  113. "uicon-heart-fill": "",
  114. "uicon-camera": "",
  115. "uicon-camera-fill": "",
  116. "uicon-more-circle": "",
  117. "uicon-more-circle-fill": "",
  118. "uicon-chat": "",
  119. "uicon-chat-fill": "",
  120. "uicon-bag-fill": "",
  121. "uicon-bag": "",
  122. "uicon-error-circle-fill": "",
  123. "uicon-error-circle": "",
  124. "uicon-close-circle": "",
  125. "uicon-close-circle-fill": "",
  126. "uicon-checkmark-circle": "",
  127. "uicon-checkmark-circle-fill": "",
  128. "uicon-question-circle-fill": "",
  129. "uicon-question-circle": "",
  130. "uicon-share": "",
  131. "uicon-share-fill": "",
  132. "uicon-shopping-cart": "",
  133. "uicon-shopping-cart-fill": "",
  134. "uicon-bell": "",
  135. "uicon-bell-fill": "",
  136. "uicon-list": "",
  137. "uicon-list-dot": "",
  138. "uicon-zhihu": "",
  139. "uicon-zhihu-circle-fill": "",
  140. "uicon-zhifubao": "",
  141. "uicon-zhifubao-circle-fill": "",
  142. "uicon-weixin-circle-fill": "",
  143. "uicon-weixin-fill": "",
  144. "uicon-twitter-circle-fill": "",
  145. "uicon-twitter": "",
  146. "uicon-taobao-circle-fill": "",
  147. "uicon-taobao": "",
  148. "uicon-weibo-circle-fill": "",
  149. "uicon-weibo": "",
  150. "uicon-qq-fill": "",
  151. "uicon-qq-circle-fill": "",
  152. "uicon-moments-circel-fill": "",
  153. "uicon-moments": "",
  154. "uicon-qzone": "",
  155. "uicon-qzone-circle-fill": "",
  156. "uicon-baidu-circle-fill": "",
  157. "uicon-baidu": "",
  158. "uicon-facebook-circle-fill": "",
  159. "uicon-facebook": "",
  160. "uicon-car": "",
  161. "uicon-car-fill": "",
  162. "uicon-warning-fill": "",
  163. "uicon-warning": "",
  164. "uicon-clock-fill": "",
  165. "uicon-clock": "",
  166. "uicon-edit-pen": "",
  167. "uicon-edit-pen-fill": "",
  168. "uicon-email": "",
  169. "uicon-email-fill": "",
  170. "uicon-minus-circle": "",
  171. "uicon-minus-circle-fill": "",
  172. "uicon-plus-circle": "",
  173. "uicon-plus-circle-fill": "",
  174. "uicon-file-text": "",
  175. "uicon-file-text-fill": "",
  176. "uicon-pushpin": "",
  177. "uicon-pushpin-fill": "",
  178. "uicon-grid": "",
  179. "uicon-grid-fill": "",
  180. "uicon-play-circle": "",
  181. "uicon-play-circle-fill": "",
  182. "uicon-pause-circle-fill": "",
  183. "uicon-pause": "",
  184. "uicon-pause-circle": "",
  185. "uicon-eye-off": "",
  186. "uicon-eye-off-outline": "",
  187. "uicon-gift-fill": "",
  188. "uicon-gift": "",
  189. "uicon-rmb-circle-fill": "",
  190. "uicon-rmb-circle": "",
  191. "uicon-kefu-ermai": "",
  192. "uicon-server-fill": "",
  193. "uicon-coupon-fill": "",
  194. "uicon-coupon": "",
  195. "uicon-integral": "",
  196. "uicon-integral-fill": "",
  197. "uicon-home-fill": "",
  198. "uicon-home": "",
  199. "uicon-hourglass-half-fill": "",
  200. "uicon-hourglass": "",
  201. "uicon-account": "",
  202. "uicon-plus-people-fill": "",
  203. "uicon-minus-people-fill": "",
  204. "uicon-account-fill": "",
  205. "uicon-thumb-down-fill": "",
  206. "uicon-thumb-down": "",
  207. "uicon-thumb-up": "",
  208. "uicon-thumb-up-fill": "",
  209. "uicon-lock-fill": "",
  210. "uicon-lock-open": "",
  211. "uicon-lock-opened-fill": "",
  212. "uicon-lock": "",
  213. "uicon-red-packet-fill": "",
  214. "uicon-photo-fill": "",
  215. "uicon-photo": "",
  216. "uicon-volume-off-fill": "",
  217. "uicon-volume-off": "",
  218. "uicon-volume-fill": "",
  219. "uicon-volume": "",
  220. "uicon-red-packet": "",
  221. "uicon-download": "",
  222. "uicon-arrow-up-fill": "",
  223. "uicon-arrow-down-fill": "",
  224. "uicon-play-left-fill": "",
  225. "uicon-play-right-fill": "",
  226. "uicon-rewind-left-fill": "",
  227. "uicon-rewind-right-fill": "",
  228. "uicon-arrow-downward": "",
  229. "uicon-arrow-leftward": "",
  230. "uicon-arrow-rightward": "",
  231. "uicon-arrow-upward": "",
  232. "uicon-arrow-down": "",
  233. "uicon-arrow-right": "",
  234. "uicon-arrow-left": "",
  235. "uicon-arrow-up": "",
  236. "uicon-skip-back-left": "",
  237. "uicon-skip-forward-right": "",
  238. "uicon-rewind-right": "",
  239. "uicon-rewind-left": "",
  240. "uicon-arrow-right-double": "",
  241. "uicon-arrow-left-double": "",
  242. "uicon-wifi-off": "",
  243. "uicon-wifi": "",
  244. "uicon-empty-data": "",
  245. "uicon-empty-history": "",
  246. "uicon-empty-list": "",
  247. "uicon-empty-page": "",
  248. "uicon-empty-order": "",
  249. "uicon-man": "",
  250. "uicon-woman": "",
  251. "uicon-man-add": "",
  252. "uicon-man-add-fill": "",
  253. "uicon-man-delete": "",
  254. "uicon-man-delete-fill": "",
  255. "uicon-zh": "",
  256. "uicon-en": ""
  257. };
  258. const version = "3";
  259. {
  260. formatAppLog("log", "at uni_modules/uview-plus/libs/config/config.js:5", `
  261. %c uview-plus V${version} %c https://ijry.github.io/uview-plus/
  262. `, "color: #ffffff; background: #3c9cff; padding:5px 0;", "color: #3c9cff;background: #ffffff; padding:5px 0;");
  263. }
  264. const config$1 = {
  265. v: version,
  266. version,
  267. // 主题名称
  268. type: [
  269. "primary",
  270. "success",
  271. "info",
  272. "error",
  273. "warning"
  274. ],
  275. // 颜色部分,本来可以通过scss的:export导出供js使用,但是奈何nvue不支持
  276. color: {
  277. "u-primary": "#2979ff",
  278. "u-warning": "#ff9900",
  279. "u-success": "#19be6b",
  280. "u-error": "#fa3534",
  281. "u-info": "#909399",
  282. "u-main-color": "#303133",
  283. "u-content-color": "#606266",
  284. "u-tips-color": "#909399",
  285. "u-light-color": "#c0c4cc"
  286. },
  287. // 默认单位,可以通过配置为rpx,那么在用于传入组件大小参数为数值时,就默认为rpx
  288. unit: "px"
  289. };
  290. const ActionSheet = {
  291. // action-sheet组件
  292. actionSheet: {
  293. show: false,
  294. title: "",
  295. description: "",
  296. actions: [],
  297. index: "",
  298. cancelText: "",
  299. closeOnClickAction: true,
  300. safeAreaInsetBottom: true,
  301. openType: "",
  302. closeOnClickOverlay: true,
  303. round: 0
  304. }
  305. };
  306. const Album = {
  307. // album 组件
  308. album: {
  309. urls: [],
  310. keyName: "",
  311. singleSize: 180,
  312. multipleSize: 70,
  313. space: 6,
  314. singleMode: "scaleToFill",
  315. multipleMode: "aspectFill",
  316. maxCount: 9,
  317. previewFullImage: true,
  318. rowCount: 3,
  319. showMore: true
  320. }
  321. };
  322. const Alert = {
  323. // alert警告组件
  324. alert: {
  325. title: "",
  326. type: "warning",
  327. description: "",
  328. closable: false,
  329. showIcon: false,
  330. effect: "light",
  331. center: false,
  332. fontSize: 14
  333. }
  334. };
  335. const Avatar = {
  336. // avatar 组件
  337. avatar: {
  338. src: "",
  339. shape: "circle",
  340. size: 40,
  341. mode: "scaleToFill",
  342. text: "",
  343. bgColor: "#c0c4cc",
  344. color: "#ffffff",
  345. fontSize: 18,
  346. icon: "",
  347. mpAvatar: false,
  348. randomBgColor: false,
  349. defaultUrl: "",
  350. colorIndex: "",
  351. name: ""
  352. }
  353. };
  354. const AvatarGroup = {
  355. // avatarGroup 组件
  356. avatarGroup: {
  357. urls: [],
  358. maxCount: 5,
  359. shape: "circle",
  360. mode: "scaleToFill",
  361. showMore: true,
  362. size: 40,
  363. keyName: "",
  364. gap: 0.5,
  365. extraValue: 0
  366. }
  367. };
  368. const Backtop = {
  369. // backtop组件
  370. backtop: {
  371. mode: "circle",
  372. icon: "arrow-upward",
  373. text: "",
  374. duration: 100,
  375. scrollTop: 0,
  376. top: 400,
  377. bottom: 100,
  378. right: 20,
  379. zIndex: 9,
  380. iconStyle: {
  381. color: "#909399",
  382. fontSize: "19px"
  383. }
  384. }
  385. };
  386. const Badge = {
  387. // 徽标数组件
  388. badge: {
  389. isDot: false,
  390. value: "",
  391. show: true,
  392. max: 999,
  393. type: "error",
  394. showZero: false,
  395. bgColor: null,
  396. color: null,
  397. shape: "circle",
  398. numberType: "overflow",
  399. offset: [],
  400. inverted: false,
  401. absolute: false
  402. }
  403. };
  404. const Button = {
  405. // button组件
  406. button: {
  407. hairline: false,
  408. type: "info",
  409. size: "normal",
  410. shape: "square",
  411. plain: false,
  412. disabled: false,
  413. loading: false,
  414. loadingText: "",
  415. loadingMode: "spinner",
  416. loadingSize: 15,
  417. openType: "",
  418. formType: "",
  419. appParameter: "",
  420. hoverStopPropagation: true,
  421. lang: "en",
  422. sessionFrom: "",
  423. sendMessageTitle: "",
  424. sendMessagePath: "",
  425. sendMessageImg: "",
  426. showMessageCard: false,
  427. dataName: "",
  428. throttleTime: 0,
  429. hoverStartTime: 0,
  430. hoverStayTime: 200,
  431. text: "",
  432. icon: "",
  433. iconColor: "",
  434. color: ""
  435. }
  436. };
  437. const Calendar = {
  438. // calendar 组件
  439. calendar: {
  440. title: "日期选择",
  441. showTitle: true,
  442. showSubtitle: true,
  443. mode: "single",
  444. startText: "开始",
  445. endText: "结束",
  446. customList: [],
  447. color: "#3c9cff",
  448. minDate: 0,
  449. maxDate: 0,
  450. defaultDate: null,
  451. maxCount: Number.MAX_SAFE_INTEGER,
  452. // Infinity
  453. rowHeight: 56,
  454. formatter: null,
  455. showLunar: false,
  456. showMark: true,
  457. confirmText: "确定",
  458. confirmDisabledText: "确定",
  459. show: false,
  460. closeOnClickOverlay: false,
  461. readonly: false,
  462. showConfirm: true,
  463. maxRange: Number.MAX_SAFE_INTEGER,
  464. // Infinity
  465. rangePrompt: "",
  466. showRangePrompt: true,
  467. allowSameDay: false,
  468. round: 0,
  469. monthNum: 3
  470. }
  471. };
  472. const CarKeyboard = {
  473. // 车牌号键盘
  474. carKeyboard: {
  475. random: false
  476. }
  477. };
  478. const Cell = {
  479. // cell组件的props
  480. cell: {
  481. customClass: "",
  482. title: "",
  483. label: "",
  484. value: "",
  485. icon: "",
  486. disabled: false,
  487. border: true,
  488. center: false,
  489. url: "",
  490. linkType: "navigateTo",
  491. clickable: false,
  492. isLink: false,
  493. required: false,
  494. arrowDirection: "",
  495. iconStyle: {},
  496. rightIconStyle: {},
  497. rightIcon: "arrow-right",
  498. titleStyle: {},
  499. size: "",
  500. stop: true,
  501. name: ""
  502. }
  503. };
  504. const CellGroup = {
  505. // cell-group组件的props
  506. cellGroup: {
  507. title: "",
  508. border: true,
  509. customStyle: {}
  510. }
  511. };
  512. const Checkbox = {
  513. // checkbox组件
  514. checkbox: {
  515. name: "",
  516. shape: "",
  517. size: "",
  518. checkbox: false,
  519. disabled: "",
  520. activeColor: "",
  521. inactiveColor: "",
  522. iconSize: "",
  523. iconColor: "",
  524. label: "",
  525. labelSize: "",
  526. labelColor: "",
  527. labelDisabled: ""
  528. }
  529. };
  530. const CheckboxGroup = {
  531. // checkbox-group组件
  532. checkboxGroup: {
  533. name: "",
  534. value: [],
  535. shape: "square",
  536. disabled: false,
  537. activeColor: "#2979ff",
  538. inactiveColor: "#c8c9cc",
  539. size: 18,
  540. placement: "row",
  541. labelSize: 14,
  542. labelColor: "#303133",
  543. labelDisabled: false,
  544. iconColor: "#ffffff",
  545. iconSize: 12,
  546. iconPlacement: "left",
  547. borderBottom: false
  548. }
  549. };
  550. const CircleProgress = {
  551. // circleProgress 组件
  552. circleProgress: {
  553. percentage: 30
  554. }
  555. };
  556. const Code = {
  557. // code 组件
  558. code: {
  559. seconds: 60,
  560. startText: "获取验证码",
  561. changeText: "X秒重新获取",
  562. endText: "重新获取",
  563. keepRunning: false,
  564. uniqueKey: ""
  565. }
  566. };
  567. const CodeInput = {
  568. // codeInput 组件
  569. codeInput: {
  570. adjustPosition: true,
  571. maxlength: 6,
  572. dot: false,
  573. mode: "box",
  574. hairline: false,
  575. space: 10,
  576. value: "",
  577. focus: false,
  578. bold: false,
  579. color: "#606266",
  580. fontSize: 18,
  581. size: 35,
  582. disabledKeyboard: false,
  583. borderColor: "#c9cacc",
  584. disabledDot: true
  585. }
  586. };
  587. const Col = {
  588. // col 组件
  589. col: {
  590. span: 12,
  591. offset: 0,
  592. justify: "start",
  593. align: "stretch",
  594. textAlign: "left"
  595. }
  596. };
  597. const Collapse = {
  598. // collapse 组件
  599. collapse: {
  600. value: null,
  601. accordion: false,
  602. border: true
  603. }
  604. };
  605. const CollapseItem = {
  606. // collapseItem 组件
  607. collapseItem: {
  608. title: "",
  609. value: "",
  610. label: "",
  611. disabled: false,
  612. isLink: true,
  613. clickable: true,
  614. border: true,
  615. align: "left",
  616. name: "",
  617. icon: "",
  618. duration: 300
  619. }
  620. };
  621. const ColumnNotice = {
  622. // columnNotice 组件
  623. columnNotice: {
  624. text: "",
  625. icon: "volume",
  626. mode: "",
  627. color: "#f9ae3d",
  628. bgColor: "#fdf6ec",
  629. fontSize: 14,
  630. speed: 80,
  631. step: false,
  632. duration: 1500,
  633. disableTouch: true
  634. }
  635. };
  636. const CountDown = {
  637. // u-count-down 计时器组件
  638. countDown: {
  639. time: 0,
  640. format: "HH:mm:ss",
  641. autoStart: true,
  642. millisecond: false
  643. }
  644. };
  645. const CountTo = {
  646. // countTo 组件
  647. countTo: {
  648. startVal: 0,
  649. endVal: 0,
  650. duration: 2e3,
  651. autoplay: true,
  652. decimals: 0,
  653. useEasing: true,
  654. decimal: ".",
  655. color: "#606266",
  656. fontSize: 22,
  657. bold: false,
  658. separator: ""
  659. }
  660. };
  661. const DatetimePicker = {
  662. // datetimePicker 组件
  663. datetimePicker: {
  664. show: false,
  665. popupMode: "bottom",
  666. showToolbar: true,
  667. value: "",
  668. title: "",
  669. mode: "datetime",
  670. maxDate: new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 0, 1).getTime(),
  671. minDate: new Date((/* @__PURE__ */ new Date()).getFullYear() - 10, 0, 1).getTime(),
  672. minHour: 0,
  673. maxHour: 23,
  674. minMinute: 0,
  675. maxMinute: 59,
  676. filter: null,
  677. formatter: null,
  678. loading: false,
  679. itemHeight: 44,
  680. cancelText: "取消",
  681. confirmText: "确认",
  682. cancelColor: "#909193",
  683. confirmColor: "#3c9cff",
  684. visibleItemCount: 5,
  685. closeOnClickOverlay: false,
  686. defaultIndex: []
  687. }
  688. };
  689. const Divider = {
  690. // divider组件
  691. divider: {
  692. dashed: false,
  693. hairline: true,
  694. dot: false,
  695. textPosition: "center",
  696. text: "",
  697. textSize: 14,
  698. textColor: "#909399",
  699. lineColor: "#dcdfe6"
  700. }
  701. };
  702. const Empty = {
  703. // empty组件
  704. empty: {
  705. icon: "",
  706. text: "",
  707. textColor: "#c0c4cc",
  708. textSize: 14,
  709. iconColor: "#c0c4cc",
  710. iconSize: 90,
  711. mode: "data",
  712. width: 160,
  713. height: 160,
  714. show: true,
  715. marginTop: 0
  716. }
  717. };
  718. const Form = {
  719. // form 组件
  720. form: {
  721. model: {},
  722. rules: {},
  723. errorType: "message",
  724. borderBottom: true,
  725. labelPosition: "left",
  726. labelWidth: 45,
  727. labelAlign: "left",
  728. labelStyle: {}
  729. }
  730. };
  731. const GormItem = {
  732. // formItem 组件
  733. formItem: {
  734. label: "",
  735. prop: "",
  736. rule: "",
  737. borderBottom: "",
  738. labelPosition: "",
  739. labelWidth: "",
  740. rightIcon: "",
  741. leftIcon: "",
  742. required: false,
  743. leftIconStyle: ""
  744. }
  745. };
  746. const Gap = {
  747. // gap组件
  748. gap: {
  749. bgColor: "transparent",
  750. height: 20,
  751. marginTop: 0,
  752. marginBottom: 0,
  753. customStyle: {}
  754. }
  755. };
  756. const Grid = {
  757. // grid组件
  758. grid: {
  759. col: 3,
  760. border: false,
  761. align: "left"
  762. }
  763. };
  764. const GridItem = {
  765. // grid-item组件
  766. gridItem: {
  767. name: null,
  768. bgColor: "transparent"
  769. }
  770. };
  771. const {
  772. color: color$3
  773. } = config$1;
  774. const Icon = {
  775. // icon组件
  776. icon: {
  777. name: "",
  778. color: color$3["u-content-color"],
  779. size: "16px",
  780. bold: false,
  781. index: "",
  782. hoverClass: "",
  783. customPrefix: "uicon",
  784. label: "",
  785. labelPos: "right",
  786. labelSize: "15px",
  787. labelColor: color$3["u-content-color"],
  788. space: "3px",
  789. imgMode: "",
  790. width: "",
  791. height: "",
  792. top: 0,
  793. stop: false
  794. }
  795. };
  796. const Image = {
  797. // image组件
  798. image: {
  799. src: "",
  800. mode: "aspectFill",
  801. width: "300",
  802. height: "225",
  803. shape: "square",
  804. radius: 0,
  805. lazyLoad: true,
  806. showMenuByLongpress: true,
  807. loadingIcon: "photo",
  808. errorIcon: "error-circle",
  809. showLoading: true,
  810. showError: true,
  811. fade: true,
  812. webp: false,
  813. duration: 500,
  814. bgColor: "#f3f4f6"
  815. }
  816. };
  817. const IndexAnchor = {
  818. // indexAnchor 组件
  819. indexAnchor: {
  820. text: "",
  821. color: "#606266",
  822. size: 14,
  823. bgColor: "#dedede",
  824. height: 32
  825. }
  826. };
  827. const IndexList = {
  828. // indexList 组件
  829. indexList: {
  830. inactiveColor: "#606266",
  831. activeColor: "#5677fc",
  832. indexList: [],
  833. sticky: true,
  834. customNavHeight: 0
  835. }
  836. };
  837. const Input = {
  838. // index 组件
  839. input: {
  840. value: "",
  841. type: "text",
  842. fixed: false,
  843. disabled: false,
  844. disabledColor: "#f5f7fa",
  845. clearable: false,
  846. password: false,
  847. maxlength: -1,
  848. placeholder: null,
  849. placeholderClass: "input-placeholder",
  850. placeholderStyle: "color: #c0c4cc",
  851. showWordLimit: false,
  852. confirmType: "done",
  853. confirmHold: false,
  854. holdKeyboard: false,
  855. focus: false,
  856. autoBlur: false,
  857. disableDefaultPadding: false,
  858. cursor: -1,
  859. cursorSpacing: 30,
  860. selectionStart: -1,
  861. selectionEnd: -1,
  862. adjustPosition: true,
  863. inputAlign: "left",
  864. fontSize: "15px",
  865. color: "#303133",
  866. prefixIcon: "",
  867. prefixIconStyle: "",
  868. suffixIcon: "",
  869. suffixIconStyle: "",
  870. border: "surround",
  871. readonly: false,
  872. shape: "square",
  873. formatter: null
  874. }
  875. };
  876. const Keyboard = {
  877. // 键盘组件
  878. keyboard: {
  879. mode: "number",
  880. dotDisabled: false,
  881. tooltip: true,
  882. showTips: true,
  883. tips: "",
  884. showCancel: true,
  885. showConfirm: true,
  886. random: false,
  887. safeAreaInsetBottom: true,
  888. closeOnClickOverlay: true,
  889. show: false,
  890. overlay: true,
  891. zIndex: 10075,
  892. cancelText: "取消",
  893. confirmText: "确定",
  894. autoChange: false
  895. }
  896. };
  897. const Line = {
  898. // line组件
  899. line: {
  900. color: "#d6d7d9",
  901. length: "100%",
  902. direction: "row",
  903. hairline: true,
  904. margin: 0,
  905. dashed: false
  906. }
  907. };
  908. const LineProgress = {
  909. // lineProgress 组件
  910. lineProgress: {
  911. activeColor: "#19be6b",
  912. inactiveColor: "#ececec",
  913. percentage: 0,
  914. showText: true,
  915. height: 12
  916. }
  917. };
  918. const {
  919. color: color$2
  920. } = config$1;
  921. const Link = {
  922. // link超链接组件props参数
  923. link: {
  924. color: color$2["u-primary"],
  925. fontSize: 15,
  926. underLine: false,
  927. href: "",
  928. mpTips: "链接已复制,请在浏览器打开",
  929. lineColor: "",
  930. text: ""
  931. }
  932. };
  933. const List = {
  934. // list 组件
  935. list: {
  936. showScrollbar: false,
  937. lowerThreshold: 50,
  938. upperThreshold: 0,
  939. scrollTop: 0,
  940. offsetAccuracy: 10,
  941. enableFlex: false,
  942. pagingEnabled: false,
  943. scrollable: true,
  944. scrollIntoView: "",
  945. scrollWithAnimation: false,
  946. enableBackToTop: false,
  947. height: 0,
  948. width: 0,
  949. preLoadScreen: 1
  950. }
  951. };
  952. const ListItem = {
  953. // listItem 组件
  954. listItem: {
  955. anchor: ""
  956. }
  957. };
  958. const {
  959. color: color$1
  960. } = config$1;
  961. const LoadingIcon = {
  962. // loading-icon加载中图标组件
  963. loadingIcon: {
  964. show: true,
  965. color: color$1["u-tips-color"],
  966. textColor: color$1["u-tips-color"],
  967. vertical: false,
  968. mode: "spinner",
  969. size: 24,
  970. textSize: 15,
  971. text: "",
  972. timingFunction: "ease-in-out",
  973. duration: 1200,
  974. inactiveColor: ""
  975. }
  976. };
  977. const LoadingPage = {
  978. // loading-page组件
  979. loadingPage: {
  980. loadingText: "正在加载",
  981. image: "",
  982. loadingMode: "circle",
  983. loading: false,
  984. bgColor: "#ffffff",
  985. color: "#C8C8C8",
  986. fontSize: 19,
  987. iconSize: 28,
  988. loadingColor: "#C8C8C8"
  989. }
  990. };
  991. const Loadmore = {
  992. // loadmore 组件
  993. loadmore: {
  994. status: "loadmore",
  995. bgColor: "transparent",
  996. icon: true,
  997. fontSize: 14,
  998. iconSize: 17,
  999. color: "#606266",
  1000. loadingIcon: "spinner",
  1001. loadmoreText: "加载更多",
  1002. loadingText: "正在加载...",
  1003. nomoreText: "没有更多了",
  1004. isDot: false,
  1005. iconColor: "#b7b7b7",
  1006. marginTop: 10,
  1007. marginBottom: 10,
  1008. height: "auto",
  1009. line: false,
  1010. lineColor: "#E6E8EB",
  1011. dashed: false
  1012. }
  1013. };
  1014. const Modal = {
  1015. // modal 组件
  1016. modal: {
  1017. show: false,
  1018. title: "",
  1019. content: "",
  1020. confirmText: "确认",
  1021. cancelText: "取消",
  1022. showConfirmButton: true,
  1023. showCancelButton: false,
  1024. confirmColor: "#2979ff",
  1025. cancelColor: "#606266",
  1026. buttonReverse: false,
  1027. zoom: true,
  1028. asyncClose: false,
  1029. closeOnClickOverlay: false,
  1030. negativeTop: 0,
  1031. width: "650rpx",
  1032. confirmButtonShape: ""
  1033. }
  1034. };
  1035. const color = {
  1036. primary: "#3c9cff",
  1037. info: "#909399",
  1038. default: "#909399",
  1039. warning: "#f9ae3d",
  1040. error: "#f56c6c",
  1041. success: "#5ac725",
  1042. mainColor: "#303133",
  1043. contentColor: "#606266",
  1044. tipsColor: "#909399",
  1045. lightColor: "#c0c4cc",
  1046. borderColor: "#e4e7ed"
  1047. };
  1048. const Navbar = {
  1049. // navbar 组件
  1050. navbar: {
  1051. safeAreaInsetTop: true,
  1052. placeholder: false,
  1053. fixed: true,
  1054. border: false,
  1055. leftIcon: "arrow-left",
  1056. leftText: "",
  1057. rightText: "",
  1058. rightIcon: "",
  1059. title: "",
  1060. bgColor: "#ffffff",
  1061. titleWidth: "400rpx",
  1062. height: "44px",
  1063. leftIconSize: 20,
  1064. leftIconColor: color.mainColor,
  1065. autoBack: false,
  1066. titleStyle: ""
  1067. }
  1068. };
  1069. const NoNetwork = {
  1070. // noNetwork
  1071. noNetwork: {
  1072. tips: "哎呀,网络信号丢失",
  1073. zIndex: "",
  1074. image: "data:image/png;base64,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"
  1075. }
  1076. };
  1077. const NoticeBar = {
  1078. // noticeBar
  1079. noticeBar: {
  1080. text: [],
  1081. direction: "row",
  1082. step: false,
  1083. icon: "volume",
  1084. mode: "",
  1085. color: "#f9ae3d",
  1086. bgColor: "#fdf6ec",
  1087. speed: 80,
  1088. fontSize: 14,
  1089. duration: 2e3,
  1090. disableTouch: true,
  1091. url: "",
  1092. linkType: "navigateTo"
  1093. }
  1094. };
  1095. const Notify = {
  1096. // notify组件
  1097. notify: {
  1098. top: 0,
  1099. type: "primary",
  1100. color: "#ffffff",
  1101. bgColor: "",
  1102. message: "",
  1103. duration: 3e3,
  1104. fontSize: 15,
  1105. safeAreaInsetTop: false
  1106. }
  1107. };
  1108. const NumberBox = {
  1109. // 步进器组件
  1110. numberBox: {
  1111. name: "",
  1112. value: 0,
  1113. min: 1,
  1114. max: Number.MAX_SAFE_INTEGER,
  1115. step: 1,
  1116. integer: false,
  1117. disabled: false,
  1118. disabledInput: false,
  1119. asyncChange: false,
  1120. inputWidth: 35,
  1121. showMinus: true,
  1122. showPlus: true,
  1123. decimalLength: null,
  1124. longPress: true,
  1125. color: "#323233",
  1126. buttonSize: 30,
  1127. bgColor: "#EBECEE",
  1128. cursorSpacing: 100,
  1129. disableMinus: false,
  1130. disablePlus: false,
  1131. iconStyle: ""
  1132. }
  1133. };
  1134. const NumberKeyboard = {
  1135. // 数字键盘
  1136. numberKeyboard: {
  1137. mode: "number",
  1138. dotDisabled: false,
  1139. random: false
  1140. }
  1141. };
  1142. const Overlay = {
  1143. // overlay组件
  1144. overlay: {
  1145. show: false,
  1146. zIndex: 10070,
  1147. duration: 300,
  1148. opacity: 0.5
  1149. }
  1150. };
  1151. const Parse = {
  1152. // parse
  1153. parse: {
  1154. copyLink: true,
  1155. errorImg: "",
  1156. lazyLoad: false,
  1157. loadingImg: "",
  1158. pauseVideo: true,
  1159. previewImg: true,
  1160. setTitle: true,
  1161. showImgMenu: true
  1162. }
  1163. };
  1164. const Picker = {
  1165. // picker
  1166. picker: {
  1167. show: false,
  1168. popupMode: "bottom",
  1169. showToolbar: true,
  1170. title: "",
  1171. columns: [],
  1172. loading: false,
  1173. itemHeight: 44,
  1174. cancelText: "取消",
  1175. confirmText: "确定",
  1176. cancelColor: "#909193",
  1177. confirmColor: "#3c9cff",
  1178. visibleItemCount: 5,
  1179. keyName: "text",
  1180. closeOnClickOverlay: false,
  1181. defaultIndex: [],
  1182. immediateChange: false
  1183. }
  1184. };
  1185. const Popup = {
  1186. // popup组件
  1187. popup: {
  1188. show: false,
  1189. overlay: true,
  1190. mode: "bottom",
  1191. duration: 300,
  1192. closeable: false,
  1193. overlayStyle: {},
  1194. closeOnClickOverlay: true,
  1195. zIndex: 10075,
  1196. safeAreaInsetBottom: true,
  1197. safeAreaInsetTop: false,
  1198. closeIconPos: "top-right",
  1199. round: 0,
  1200. zoom: true,
  1201. bgColor: "",
  1202. overlayOpacity: 0.5
  1203. }
  1204. };
  1205. const Radio = {
  1206. // radio组件
  1207. radio: {
  1208. name: "",
  1209. shape: "",
  1210. disabled: "",
  1211. labelDisabled: "",
  1212. activeColor: "",
  1213. inactiveColor: "",
  1214. iconSize: "",
  1215. labelSize: "",
  1216. label: "",
  1217. labelColor: "",
  1218. size: "",
  1219. iconColor: "",
  1220. placement: ""
  1221. }
  1222. };
  1223. const RadioGroup = {
  1224. // radio-group组件
  1225. radioGroup: {
  1226. value: "",
  1227. disabled: false,
  1228. shape: "circle",
  1229. activeColor: "#2979ff",
  1230. inactiveColor: "#c8c9cc",
  1231. name: "",
  1232. size: 18,
  1233. placement: "row",
  1234. label: "",
  1235. labelColor: "#303133",
  1236. labelSize: 14,
  1237. labelDisabled: false,
  1238. iconColor: "#ffffff",
  1239. iconSize: 12,
  1240. borderBottom: false,
  1241. iconPlacement: "left"
  1242. }
  1243. };
  1244. const Rate = {
  1245. // rate组件
  1246. rate: {
  1247. value: 1,
  1248. count: 5,
  1249. disabled: false,
  1250. size: 18,
  1251. inactiveColor: "#b2b2b2",
  1252. activeColor: "#FA3534",
  1253. gutter: 4,
  1254. minCount: 1,
  1255. allowHalf: false,
  1256. activeIcon: "star-fill",
  1257. inactiveIcon: "star",
  1258. touchable: true
  1259. }
  1260. };
  1261. const ReadMore = {
  1262. // readMore
  1263. readMore: {
  1264. showHeight: 400,
  1265. toggle: false,
  1266. closeText: "展开阅读全文",
  1267. openText: "收起",
  1268. color: "#2979ff",
  1269. fontSize: 14,
  1270. textIndent: "2em",
  1271. name: ""
  1272. }
  1273. };
  1274. const Row = {
  1275. // row
  1276. row: {
  1277. gutter: 0,
  1278. justify: "start",
  1279. align: "center"
  1280. }
  1281. };
  1282. const RowNotice = {
  1283. // rowNotice
  1284. rowNotice: {
  1285. text: "",
  1286. icon: "volume",
  1287. mode: "",
  1288. color: "#f9ae3d",
  1289. bgColor: "#fdf6ec",
  1290. fontSize: 14,
  1291. speed: 80
  1292. }
  1293. };
  1294. const ScrollList = {
  1295. // scrollList
  1296. scrollList: {
  1297. indicatorWidth: 50,
  1298. indicatorBarWidth: 20,
  1299. indicator: true,
  1300. indicatorColor: "#f2f2f2",
  1301. indicatorActiveColor: "#3c9cff",
  1302. indicatorStyle: ""
  1303. }
  1304. };
  1305. const Search = {
  1306. // search
  1307. search: {
  1308. shape: "round",
  1309. bgColor: "#f2f2f2",
  1310. placeholder: "请输入关键字",
  1311. clearabled: true,
  1312. focus: false,
  1313. showAction: true,
  1314. actionStyle: {},
  1315. actionText: "搜索",
  1316. inputAlign: "left",
  1317. inputStyle: {},
  1318. disabled: false,
  1319. borderColor: "transparent",
  1320. searchIconColor: "#909399",
  1321. searchIconSize: 22,
  1322. color: "#606266",
  1323. placeholderColor: "#909399",
  1324. searchIcon: "search",
  1325. margin: "0",
  1326. animation: false,
  1327. value: "",
  1328. maxlength: "-1",
  1329. height: 32,
  1330. label: null
  1331. }
  1332. };
  1333. const Section = {
  1334. // u-section组件
  1335. section: {
  1336. title: "",
  1337. subTitle: "更多",
  1338. right: true,
  1339. fontSize: 15,
  1340. bold: true,
  1341. color: "#303133",
  1342. subColor: "#909399",
  1343. showLine: true,
  1344. lineColor: "",
  1345. arrow: true
  1346. }
  1347. };
  1348. const Skeleton = {
  1349. // skeleton
  1350. skeleton: {
  1351. loading: true,
  1352. animate: true,
  1353. rows: 0,
  1354. rowsWidth: "100%",
  1355. rowsHeight: 18,
  1356. title: true,
  1357. titleWidth: "50%",
  1358. titleHeight: 18,
  1359. avatar: false,
  1360. avatarSize: 32,
  1361. avatarShape: "circle"
  1362. }
  1363. };
  1364. const Slider = {
  1365. // slider组件
  1366. slider: {
  1367. value: 0,
  1368. blockSize: 18,
  1369. min: 0,
  1370. max: 100,
  1371. step: 1,
  1372. activeColor: "#2979ff",
  1373. inactiveColor: "#c0c4cc",
  1374. blockColor: "#ffffff",
  1375. showValue: false,
  1376. disabled: false,
  1377. blockStyle: {}
  1378. }
  1379. };
  1380. const StatusBar = {
  1381. // statusBar
  1382. statusBar: {
  1383. bgColor: "transparent"
  1384. }
  1385. };
  1386. const Steps = {
  1387. // steps组件
  1388. steps: {
  1389. direction: "row",
  1390. current: 0,
  1391. activeColor: "#3c9cff",
  1392. inactiveColor: "#969799",
  1393. activeIcon: "",
  1394. inactiveIcon: "",
  1395. dot: false
  1396. }
  1397. };
  1398. const StepsItem = {
  1399. // steps-item组件
  1400. stepsItem: {
  1401. title: "",
  1402. desc: "",
  1403. iconSize: 17,
  1404. error: false
  1405. }
  1406. };
  1407. const Sticky = {
  1408. // sticky组件
  1409. sticky: {
  1410. offsetTop: 0,
  1411. customNavHeight: 0,
  1412. disabled: false,
  1413. bgColor: "transparent",
  1414. zIndex: "",
  1415. index: ""
  1416. }
  1417. };
  1418. const Subsection = {
  1419. // subsection组件
  1420. subsection: {
  1421. list: [],
  1422. current: 0,
  1423. activeColor: "#3c9cff",
  1424. inactiveColor: "#303133",
  1425. mode: "button",
  1426. fontSize: 12,
  1427. bold: true,
  1428. bgColor: "#eeeeef",
  1429. keyName: "name"
  1430. }
  1431. };
  1432. const SwipeAction = {
  1433. // swipe-action组件
  1434. swipeAction: {
  1435. autoClose: true
  1436. }
  1437. };
  1438. const SwipeActionItem = {
  1439. // swipeActionItem 组件
  1440. swipeActionItem: {
  1441. show: false,
  1442. name: "",
  1443. disabled: false,
  1444. threshold: 20,
  1445. autoClose: true,
  1446. options: [],
  1447. duration: 300
  1448. }
  1449. };
  1450. const Swiper = {
  1451. // swiper 组件
  1452. swiper: {
  1453. list: [],
  1454. indicator: false,
  1455. indicatorActiveColor: "#FFFFFF",
  1456. indicatorInactiveColor: "rgba(255, 255, 255, 0.35)",
  1457. indicatorStyle: "",
  1458. indicatorMode: "line",
  1459. autoplay: true,
  1460. current: 0,
  1461. currentItemId: "",
  1462. interval: 3e3,
  1463. duration: 300,
  1464. circular: false,
  1465. previousMargin: 0,
  1466. nextMargin: 0,
  1467. acceleration: false,
  1468. displayMultipleItems: 1,
  1469. easingFunction: "default",
  1470. keyName: "url",
  1471. imgMode: "aspectFill",
  1472. height: 130,
  1473. bgColor: "#f3f4f6",
  1474. radius: 4,
  1475. loading: false,
  1476. showTitle: false
  1477. }
  1478. };
  1479. const SwipterIndicator = {
  1480. // swiperIndicator 组件
  1481. swiperIndicator: {
  1482. length: 0,
  1483. current: 0,
  1484. indicatorActiveColor: "",
  1485. indicatorInactiveColor: "",
  1486. indicatorMode: "line"
  1487. }
  1488. };
  1489. const Switch = {
  1490. // switch
  1491. switch: {
  1492. loading: false,
  1493. disabled: false,
  1494. size: 25,
  1495. activeColor: "#2979ff",
  1496. inactiveColor: "#ffffff",
  1497. value: false,
  1498. activeValue: true,
  1499. inactiveValue: false,
  1500. asyncChange: false,
  1501. space: 0
  1502. }
  1503. };
  1504. const Tabbar = {
  1505. // tabbar
  1506. tabbar: {
  1507. value: null,
  1508. safeAreaInsetBottom: true,
  1509. border: true,
  1510. zIndex: 1,
  1511. activeColor: "#1989fa",
  1512. inactiveColor: "#7d7e80",
  1513. fixed: true,
  1514. placeholder: true
  1515. }
  1516. };
  1517. const TabbarItem = {
  1518. //
  1519. tabbarItem: {
  1520. name: null,
  1521. icon: "",
  1522. badge: null,
  1523. dot: false,
  1524. text: "",
  1525. badgeStyle: "top: 6px;right:2px;"
  1526. }
  1527. };
  1528. const Tabs = {
  1529. //
  1530. tabs: {
  1531. duration: 300,
  1532. list: [],
  1533. lineColor: "#3c9cff",
  1534. activeStyle: {
  1535. color: "#303133"
  1536. },
  1537. inactiveStyle: {
  1538. color: "#606266"
  1539. },
  1540. lineWidth: 20,
  1541. lineHeight: 3,
  1542. lineBgSize: "cover",
  1543. itemStyle: {
  1544. height: "44px"
  1545. },
  1546. scrollable: true,
  1547. current: 0,
  1548. keyName: "name"
  1549. }
  1550. };
  1551. const Tag = {
  1552. // tag 组件
  1553. tag: {
  1554. type: "primary",
  1555. disabled: false,
  1556. size: "medium",
  1557. shape: "square",
  1558. text: "",
  1559. bgColor: "",
  1560. color: "",
  1561. borderColor: "",
  1562. closeColor: "#C6C7CB",
  1563. name: "",
  1564. plainFill: false,
  1565. plain: false,
  1566. closable: false,
  1567. show: true,
  1568. icon: "",
  1569. iconColor: ""
  1570. }
  1571. };
  1572. const Text = {
  1573. // text 组件
  1574. text: {
  1575. type: "",
  1576. show: true,
  1577. text: "",
  1578. prefixIcon: "",
  1579. suffixIcon: "",
  1580. mode: "",
  1581. href: "",
  1582. format: "",
  1583. call: false,
  1584. openType: "",
  1585. bold: false,
  1586. block: false,
  1587. lines: "",
  1588. color: "#303133",
  1589. size: 15,
  1590. iconStyle: {
  1591. fontSize: "15px"
  1592. },
  1593. decoration: "none",
  1594. margin: 0,
  1595. lineHeight: "",
  1596. align: "left",
  1597. wordWrap: "normal"
  1598. }
  1599. };
  1600. const Textarea = {
  1601. // textarea 组件
  1602. textarea: {
  1603. value: "",
  1604. placeholder: "",
  1605. placeholderClass: "textarea-placeholder",
  1606. placeholderStyle: "color: #c0c4cc",
  1607. height: 70,
  1608. confirmType: "done",
  1609. disabled: false,
  1610. count: false,
  1611. focus: false,
  1612. autoHeight: false,
  1613. fixed: false,
  1614. cursorSpacing: 0,
  1615. cursor: "",
  1616. showConfirmBar: true,
  1617. selectionStart: -1,
  1618. selectionEnd: -1,
  1619. adjustPosition: true,
  1620. disableDefaultPadding: false,
  1621. holdKeyboard: false,
  1622. maxlength: 140,
  1623. border: "surround",
  1624. formatter: null
  1625. }
  1626. };
  1627. const Toast = {
  1628. // toast组件
  1629. toast: {
  1630. zIndex: 10090,
  1631. loading: false,
  1632. text: "",
  1633. icon: "",
  1634. type: "",
  1635. loadingMode: "",
  1636. show: "",
  1637. overlay: false,
  1638. position: "center",
  1639. params: {},
  1640. duration: 2e3,
  1641. isTab: false,
  1642. url: "",
  1643. callback: null,
  1644. back: false
  1645. }
  1646. };
  1647. const Toolbar = {
  1648. // toolbar 组件
  1649. toolbar: {
  1650. show: true,
  1651. cancelText: "取消",
  1652. confirmText: "确认",
  1653. cancelColor: "#909193",
  1654. confirmColor: "#3c9cff",
  1655. title: ""
  1656. }
  1657. };
  1658. const Tooltip = {
  1659. // tooltip 组件
  1660. tooltip: {
  1661. text: "",
  1662. copyText: "",
  1663. size: 14,
  1664. color: "#606266",
  1665. bgColor: "transparent",
  1666. direction: "top",
  1667. zIndex: 10071,
  1668. showCopy: true,
  1669. buttons: [],
  1670. overlay: true,
  1671. showToast: true
  1672. }
  1673. };
  1674. const Transition = {
  1675. // transition动画组件的props
  1676. transition: {
  1677. show: false,
  1678. mode: "fade",
  1679. duration: "300",
  1680. timingFunction: "ease-out"
  1681. }
  1682. };
  1683. const Upload = {
  1684. // upload组件
  1685. upload: {
  1686. accept: "image",
  1687. capture: ["album", "camera"],
  1688. compressed: true,
  1689. camera: "back",
  1690. maxDuration: 60,
  1691. uploadIcon: "camera-fill",
  1692. uploadIconColor: "#D3D4D6",
  1693. useBeforeRead: false,
  1694. previewFullImage: true,
  1695. maxCount: 52,
  1696. disabled: false,
  1697. imageMode: "aspectFill",
  1698. name: "",
  1699. sizeType: ["original", "compressed"],
  1700. multiple: false,
  1701. deletable: true,
  1702. maxSize: Number.MAX_VALUE,
  1703. fileList: [],
  1704. uploadText: "",
  1705. width: 80,
  1706. height: 80,
  1707. previewImage: true
  1708. }
  1709. };
  1710. const props$c = {
  1711. ...ActionSheet,
  1712. ...Album,
  1713. ...Alert,
  1714. ...Avatar,
  1715. ...AvatarGroup,
  1716. ...Backtop,
  1717. ...Badge,
  1718. ...Button,
  1719. ...Calendar,
  1720. ...CarKeyboard,
  1721. ...Cell,
  1722. ...CellGroup,
  1723. ...Checkbox,
  1724. ...CheckboxGroup,
  1725. ...CircleProgress,
  1726. ...Code,
  1727. ...CodeInput,
  1728. ...Col,
  1729. ...Collapse,
  1730. ...CollapseItem,
  1731. ...ColumnNotice,
  1732. ...CountDown,
  1733. ...CountTo,
  1734. ...DatetimePicker,
  1735. ...Divider,
  1736. ...Empty,
  1737. ...Form,
  1738. ...GormItem,
  1739. ...Gap,
  1740. ...Grid,
  1741. ...GridItem,
  1742. ...Icon,
  1743. ...Image,
  1744. ...IndexAnchor,
  1745. ...IndexList,
  1746. ...Input,
  1747. ...Keyboard,
  1748. ...Line,
  1749. ...LineProgress,
  1750. ...Link,
  1751. ...List,
  1752. ...ListItem,
  1753. ...LoadingIcon,
  1754. ...LoadingPage,
  1755. ...Loadmore,
  1756. ...Modal,
  1757. ...Navbar,
  1758. ...NoNetwork,
  1759. ...NoticeBar,
  1760. ...Notify,
  1761. ...NumberBox,
  1762. ...NumberKeyboard,
  1763. ...Overlay,
  1764. ...Parse,
  1765. ...Picker,
  1766. ...Popup,
  1767. ...Radio,
  1768. ...RadioGroup,
  1769. ...Rate,
  1770. ...ReadMore,
  1771. ...Row,
  1772. ...RowNotice,
  1773. ...ScrollList,
  1774. ...Search,
  1775. ...Section,
  1776. ...Skeleton,
  1777. ...Slider,
  1778. ...StatusBar,
  1779. ...Steps,
  1780. ...StepsItem,
  1781. ...Sticky,
  1782. ...Subsection,
  1783. ...SwipeAction,
  1784. ...SwipeActionItem,
  1785. ...Swiper,
  1786. ...SwipterIndicator,
  1787. ...Switch,
  1788. ...Tabbar,
  1789. ...TabbarItem,
  1790. ...Tabs,
  1791. ...Tag,
  1792. ...Text,
  1793. ...Textarea,
  1794. ...Toast,
  1795. ...Toolbar,
  1796. ...Tooltip,
  1797. ...Transition,
  1798. ...Upload
  1799. };
  1800. const props$b = {
  1801. props: {
  1802. // 图标类名
  1803. name: {
  1804. type: String,
  1805. default: () => props$c.icon.name
  1806. },
  1807. // 图标颜色,可接受主题色
  1808. color: {
  1809. type: String,
  1810. default: () => props$c.icon.color
  1811. },
  1812. // 字体大小,单位px
  1813. size: {
  1814. type: [String, Number],
  1815. default: () => props$c.icon.size
  1816. },
  1817. // 是否显示粗体
  1818. bold: {
  1819. type: Boolean,
  1820. default: () => props$c.icon.bold
  1821. },
  1822. // 点击图标的时候传递事件出去的index(用于区分点击了哪一个)
  1823. index: {
  1824. type: [String, Number],
  1825. default: () => props$c.icon.index
  1826. },
  1827. // 触摸图标时的类名
  1828. hoverClass: {
  1829. type: String,
  1830. default: () => props$c.icon.hoverClass
  1831. },
  1832. // 自定义扩展前缀,方便用户扩展自己的图标库
  1833. customPrefix: {
  1834. type: String,
  1835. default: () => props$c.icon.customPrefix
  1836. },
  1837. // 图标右边或者下面的文字
  1838. label: {
  1839. type: [String, Number],
  1840. default: () => props$c.icon.label
  1841. },
  1842. // label的位置,只能右边或者下边
  1843. labelPos: {
  1844. type: String,
  1845. default: () => props$c.icon.labelPos
  1846. },
  1847. // label的大小
  1848. labelSize: {
  1849. type: [String, Number],
  1850. default: () => props$c.icon.labelSize
  1851. },
  1852. // label的颜色
  1853. labelColor: {
  1854. type: String,
  1855. default: () => props$c.icon.labelColor
  1856. },
  1857. // label与图标的距离
  1858. space: {
  1859. type: [String, Number],
  1860. default: () => props$c.icon.space
  1861. },
  1862. // 图片的mode
  1863. imgMode: {
  1864. type: String,
  1865. default: () => props$c.icon.imgMode
  1866. },
  1867. // 用于显示图片小图标时,图片的宽度
  1868. width: {
  1869. type: [String, Number],
  1870. default: () => props$c.icon.width
  1871. },
  1872. // 用于显示图片小图标时,图片的高度
  1873. height: {
  1874. type: [String, Number],
  1875. default: () => props$c.icon.height
  1876. },
  1877. // 用于解决某些情况下,让图标垂直居中的用途
  1878. top: {
  1879. type: [String, Number],
  1880. default: () => props$c.icon.top
  1881. },
  1882. // 是否阻止事件传播
  1883. stop: {
  1884. type: Boolean,
  1885. default: () => props$c.icon.stop
  1886. }
  1887. }
  1888. };
  1889. const mpMixin = {};
  1890. function email(value2) {
  1891. return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value2);
  1892. }
  1893. function mobile(value2) {
  1894. return /^1[23456789]\d{9}$/.test(value2);
  1895. }
  1896. function url(value2) {
  1897. return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(value2);
  1898. }
  1899. function date(value2) {
  1900. if (!value2)
  1901. return false;
  1902. if (number(value2))
  1903. value2 = +value2;
  1904. return !/Invalid|NaN/.test(new Date(value2).toString());
  1905. }
  1906. function dateISO(value2) {
  1907. return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value2);
  1908. }
  1909. function number(value2) {
  1910. return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value2);
  1911. }
  1912. function string(value2) {
  1913. return typeof value2 === "string";
  1914. }
  1915. function digits(value2) {
  1916. return /^\d+$/.test(value2);
  1917. }
  1918. function idCard(value2) {
  1919. 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(
  1920. value2
  1921. );
  1922. }
  1923. function carNo(value2) {
  1924. const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
  1925. const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
  1926. if (value2.length === 7) {
  1927. return creg.test(value2);
  1928. }
  1929. if (value2.length === 8) {
  1930. return xreg.test(value2);
  1931. }
  1932. return false;
  1933. }
  1934. function amount(value2) {
  1935. return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value2);
  1936. }
  1937. function chinese(value2) {
  1938. const reg = /^[\u4e00-\u9fa5]+$/gi;
  1939. return reg.test(value2);
  1940. }
  1941. function letter(value2) {
  1942. return /^[a-zA-Z]*$/.test(value2);
  1943. }
  1944. function enOrNum(value2) {
  1945. const reg = /^[0-9a-zA-Z]*$/g;
  1946. return reg.test(value2);
  1947. }
  1948. function contains(value2, param) {
  1949. return value2.indexOf(param) >= 0;
  1950. }
  1951. function range$1(value2, param) {
  1952. return value2 >= param[0] && value2 <= param[1];
  1953. }
  1954. function rangeLength(value2, param) {
  1955. return value2.length >= param[0] && value2.length <= param[1];
  1956. }
  1957. function landline(value2) {
  1958. const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
  1959. return reg.test(value2);
  1960. }
  1961. function empty(value2) {
  1962. switch (typeof value2) {
  1963. case "undefined":
  1964. return true;
  1965. case "string":
  1966. if (value2.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, "").length == 0)
  1967. return true;
  1968. break;
  1969. case "boolean":
  1970. if (!value2)
  1971. return true;
  1972. break;
  1973. case "number":
  1974. if (value2 === 0 || isNaN(value2))
  1975. return true;
  1976. break;
  1977. case "object":
  1978. if (value2 === null || value2.length === 0)
  1979. return true;
  1980. for (const i in value2) {
  1981. return false;
  1982. }
  1983. return true;
  1984. }
  1985. return false;
  1986. }
  1987. function jsonString(value2) {
  1988. if (typeof value2 === "string") {
  1989. try {
  1990. const obj = JSON.parse(value2);
  1991. if (typeof obj === "object" && obj) {
  1992. return true;
  1993. }
  1994. return false;
  1995. } catch (e) {
  1996. return false;
  1997. }
  1998. }
  1999. return false;
  2000. }
  2001. function array(value2) {
  2002. if (typeof Array.isArray === "function") {
  2003. return Array.isArray(value2);
  2004. }
  2005. return Object.prototype.toString.call(value2) === "[object Array]";
  2006. }
  2007. function object(value2) {
  2008. return Object.prototype.toString.call(value2) === "[object Object]";
  2009. }
  2010. function code(value2, len = 6) {
  2011. return new RegExp(`^\\d{${len}}$`).test(value2);
  2012. }
  2013. function func(value2) {
  2014. return typeof value2 === "function";
  2015. }
  2016. function promise(value2) {
  2017. return object(value2) && func(value2.then) && func(value2.catch);
  2018. }
  2019. function image(value2) {
  2020. const newValue = value2.split("?")[0];
  2021. const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
  2022. return IMAGE_REGEXP.test(newValue);
  2023. }
  2024. function video(value2) {
  2025. const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
  2026. return VIDEO_REGEXP.test(value2);
  2027. }
  2028. function regExp(o) {
  2029. return o && Object.prototype.toString.call(o) === "[object RegExp]";
  2030. }
  2031. const test = {
  2032. email,
  2033. mobile,
  2034. url,
  2035. date,
  2036. dateISO,
  2037. number,
  2038. digits,
  2039. idCard,
  2040. carNo,
  2041. amount,
  2042. chinese,
  2043. letter,
  2044. enOrNum,
  2045. contains,
  2046. range: range$1,
  2047. rangeLength,
  2048. empty,
  2049. isEmpty: empty,
  2050. jsonString,
  2051. landline,
  2052. object,
  2053. array,
  2054. code,
  2055. func,
  2056. promise,
  2057. video,
  2058. image,
  2059. regExp,
  2060. string
  2061. };
  2062. function strip(num, precision = 15) {
  2063. return +parseFloat(Number(num).toPrecision(precision));
  2064. }
  2065. function digitLength(num) {
  2066. const eSplit = num.toString().split(/[eE]/);
  2067. const len = (eSplit[0].split(".")[1] || "").length - +(eSplit[1] || 0);
  2068. return len > 0 ? len : 0;
  2069. }
  2070. function float2Fixed(num) {
  2071. if (num.toString().indexOf("e") === -1) {
  2072. return Number(num.toString().replace(".", ""));
  2073. }
  2074. const dLen = digitLength(num);
  2075. return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num);
  2076. }
  2077. function checkBoundary(num) {
  2078. {
  2079. if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
  2080. formatAppLog("warn", "at uni_modules/uview-plus/libs/function/digit.js:45", `${num} 超出了精度限制,结果可能不正确`);
  2081. }
  2082. }
  2083. }
  2084. function iteratorOperation(arr, operation) {
  2085. const [num1, num2, ...others] = arr;
  2086. let res = operation(num1, num2);
  2087. others.forEach((num) => {
  2088. res = operation(res, num);
  2089. });
  2090. return res;
  2091. }
  2092. function times(...nums) {
  2093. if (nums.length > 2) {
  2094. return iteratorOperation(nums, times);
  2095. }
  2096. const [num1, num2] = nums;
  2097. const num1Changed = float2Fixed(num1);
  2098. const num2Changed = float2Fixed(num2);
  2099. const baseNum = digitLength(num1) + digitLength(num2);
  2100. const leftValue = num1Changed * num2Changed;
  2101. checkBoundary(leftValue);
  2102. return leftValue / Math.pow(10, baseNum);
  2103. }
  2104. function divide(...nums) {
  2105. if (nums.length > 2) {
  2106. return iteratorOperation(nums, divide);
  2107. }
  2108. const [num1, num2] = nums;
  2109. const num1Changed = float2Fixed(num1);
  2110. const num2Changed = float2Fixed(num2);
  2111. checkBoundary(num1Changed);
  2112. checkBoundary(num2Changed);
  2113. return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));
  2114. }
  2115. function round(num, ratio) {
  2116. const base = Math.pow(10, ratio);
  2117. let result = divide(Math.round(Math.abs(times(num, base))), base);
  2118. if (num < 0 && result !== 0) {
  2119. result = times(result, -1);
  2120. }
  2121. return result;
  2122. }
  2123. function range(min = 0, max = 0, value2 = 0) {
  2124. return Math.max(min, Math.min(max, Number(value2)));
  2125. }
  2126. function getPx(value2, unit = false) {
  2127. if (number(value2)) {
  2128. return unit ? `${value2}px` : Number(value2);
  2129. }
  2130. if (/(rpx|upx)$/.test(value2)) {
  2131. return unit ? `${uni.rpx2px(parseInt(value2))}px` : Number(uni.rpx2px(parseInt(value2)));
  2132. }
  2133. return unit ? `${parseInt(value2)}px` : parseInt(value2);
  2134. }
  2135. function sleep(value2 = 30) {
  2136. return new Promise((resolve) => {
  2137. setTimeout(() => {
  2138. resolve();
  2139. }, value2);
  2140. });
  2141. }
  2142. function os() {
  2143. return uni.getSystemInfoSync().platform.toLowerCase();
  2144. }
  2145. function sys() {
  2146. return uni.getSystemInfoSync();
  2147. }
  2148. function random(min, max) {
  2149. if (min >= 0 && max > 0 && max >= min) {
  2150. const gab = max - min + 1;
  2151. return Math.floor(Math.random() * gab + min);
  2152. }
  2153. return 0;
  2154. }
  2155. function guid(len = 32, firstU = true, radix = null) {
  2156. const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
  2157. const uuid = [];
  2158. radix = radix || chars.length;
  2159. if (len) {
  2160. for (let i = 0; i < len; i++)
  2161. uuid[i] = chars[0 | Math.random() * radix];
  2162. } else {
  2163. let r;
  2164. uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
  2165. uuid[14] = "4";
  2166. for (let i = 0; i < 36; i++) {
  2167. if (!uuid[i]) {
  2168. r = 0 | Math.random() * 16;
  2169. uuid[i] = chars[i == 19 ? r & 3 | 8 : r];
  2170. }
  2171. }
  2172. }
  2173. if (firstU) {
  2174. uuid.shift();
  2175. return `u${uuid.join("")}`;
  2176. }
  2177. return uuid.join("");
  2178. }
  2179. function $parent(name = void 0) {
  2180. let parent = this.$parent;
  2181. while (parent) {
  2182. if (parent.$options && parent.$options.name !== name) {
  2183. parent = parent.$parent;
  2184. } else {
  2185. return parent;
  2186. }
  2187. }
  2188. return false;
  2189. }
  2190. function addStyle(customStyle, target = "object") {
  2191. if (empty(customStyle) || typeof customStyle === "object" && target === "object" || target === "string" && typeof customStyle === "string") {
  2192. return customStyle;
  2193. }
  2194. if (target === "object") {
  2195. customStyle = trim(customStyle);
  2196. const styleArray = customStyle.split(";");
  2197. const style = {};
  2198. for (let i = 0; i < styleArray.length; i++) {
  2199. if (styleArray[i]) {
  2200. const item = styleArray[i].split(":");
  2201. style[trim(item[0])] = trim(item[1]);
  2202. }
  2203. }
  2204. return style;
  2205. }
  2206. let string2 = "";
  2207. if (typeof customStyle === "object") {
  2208. customStyle.forEach((val, i) => {
  2209. const key = i.replace(/([A-Z])/g, "-$1").toLowerCase();
  2210. string2 += `${key}:${val};`;
  2211. });
  2212. }
  2213. return trim(string2);
  2214. }
  2215. function addUnit(value2 = "auto", unit = "") {
  2216. if (!unit) {
  2217. unit = config$1.unit || "px";
  2218. }
  2219. value2 = String(value2);
  2220. return number(value2) ? `${value2}${unit}` : value2;
  2221. }
  2222. function deepClone(obj) {
  2223. if ([null, void 0, NaN, false].includes(obj))
  2224. return obj;
  2225. if (typeof obj !== "object" && typeof obj !== "function") {
  2226. return obj;
  2227. }
  2228. const o = array(obj) ? [] : {};
  2229. for (const i in obj) {
  2230. if (obj.hasOwnProperty(i)) {
  2231. o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
  2232. }
  2233. }
  2234. return o;
  2235. }
  2236. function deepMerge$1(targetOrigin = {}, source = {}) {
  2237. let target = deepClone(targetOrigin);
  2238. if (typeof target !== "object" || typeof source !== "object")
  2239. return false;
  2240. for (const prop in source) {
  2241. if (!source.hasOwnProperty(prop))
  2242. continue;
  2243. if (prop in target) {
  2244. if (source[prop] == null) {
  2245. target[prop] = source[prop];
  2246. } else if (typeof target[prop] !== "object") {
  2247. target[prop] = source[prop];
  2248. } else if (typeof source[prop] !== "object") {
  2249. target[prop] = source[prop];
  2250. } else if (target[prop].concat && source[prop].concat) {
  2251. target[prop] = target[prop].concat(source[prop]);
  2252. } else {
  2253. target[prop] = deepMerge$1(target[prop], source[prop]);
  2254. }
  2255. } else {
  2256. target[prop] = source[prop];
  2257. }
  2258. }
  2259. return target;
  2260. }
  2261. function shallowMerge(target, source = {}) {
  2262. if (typeof target !== "object" || typeof source !== "object")
  2263. return false;
  2264. for (const prop in source) {
  2265. if (!source.hasOwnProperty(prop))
  2266. continue;
  2267. if (prop in target) {
  2268. if (source[prop] == null) {
  2269. target[prop] = source[prop];
  2270. } else if (typeof target[prop] !== "object") {
  2271. target[prop] = source[prop];
  2272. } else if (typeof source[prop] !== "object") {
  2273. target[prop] = source[prop];
  2274. } else if (target[prop].concat && source[prop].concat) {
  2275. target[prop] = target[prop].concat(source[prop]);
  2276. } else {
  2277. target[prop] = shallowMerge(target[prop], source[prop]);
  2278. }
  2279. } else {
  2280. target[prop] = source[prop];
  2281. }
  2282. }
  2283. return target;
  2284. }
  2285. function error(err) {
  2286. {
  2287. formatAppLog("error", "at uni_modules/uview-plus/libs/function/index.js:275", `uView提示:${err}`);
  2288. }
  2289. }
  2290. function randomArray(array2 = []) {
  2291. return array2.sort(() => Math.random() - 0.5);
  2292. }
  2293. if (!String.prototype.padStart) {
  2294. String.prototype.padStart = function(maxLength, fillString = " ") {
  2295. if (Object.prototype.toString.call(fillString) !== "[object String]") {
  2296. throw new TypeError(
  2297. "fillString must be String"
  2298. );
  2299. }
  2300. const str = this;
  2301. if (str.length >= maxLength)
  2302. return String(str);
  2303. const fillLength = maxLength - str.length;
  2304. let times2 = Math.ceil(fillLength / fillString.length);
  2305. while (times2 >>= 1) {
  2306. fillString += fillString;
  2307. if (times2 === 1) {
  2308. fillString += fillString;
  2309. }
  2310. }
  2311. return fillString.slice(0, fillLength) + str;
  2312. };
  2313. }
  2314. function timeFormat(dateTime = null, formatStr = "yyyy-mm-dd") {
  2315. let date2;
  2316. if (!dateTime) {
  2317. date2 = /* @__PURE__ */ new Date();
  2318. } else if (/^\d{10}$/.test(dateTime.toString().trim())) {
  2319. date2 = new Date(dateTime * 1e3);
  2320. } else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) {
  2321. date2 = new Date(Number(dateTime));
  2322. } else {
  2323. date2 = new Date(
  2324. typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime
  2325. );
  2326. }
  2327. const timeSource = {
  2328. "y": date2.getFullYear().toString(),
  2329. // 年
  2330. "m": (date2.getMonth() + 1).toString().padStart(2, "0"),
  2331. // 月
  2332. "d": date2.getDate().toString().padStart(2, "0"),
  2333. // 日
  2334. "h": date2.getHours().toString().padStart(2, "0"),
  2335. // 时
  2336. "M": date2.getMinutes().toString().padStart(2, "0"),
  2337. // 分
  2338. "s": date2.getSeconds().toString().padStart(2, "0")
  2339. // 秒
  2340. // 有其他格式化字符需求可以继续添加,必须转化成字符串
  2341. };
  2342. for (const key in timeSource) {
  2343. const [ret] = new RegExp(`${key}+`).exec(formatStr) || [];
  2344. if (ret) {
  2345. const beginIndex = key === "y" && ret.length === 2 ? 2 : 0;
  2346. formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex));
  2347. }
  2348. }
  2349. return formatStr;
  2350. }
  2351. function timeFrom(timestamp = null, format = "yyyy-mm-dd") {
  2352. if (timestamp == null)
  2353. timestamp = Number(/* @__PURE__ */ new Date());
  2354. timestamp = parseInt(timestamp);
  2355. if (timestamp.toString().length == 10)
  2356. timestamp *= 1e3;
  2357. let timer = (/* @__PURE__ */ new Date()).getTime() - timestamp;
  2358. timer = parseInt(timer / 1e3);
  2359. let tips = "";
  2360. switch (true) {
  2361. case timer < 300:
  2362. tips = "刚刚";
  2363. break;
  2364. case (timer >= 300 && timer < 3600):
  2365. tips = `${parseInt(timer / 60)}分钟前`;
  2366. break;
  2367. case (timer >= 3600 && timer < 86400):
  2368. tips = `${parseInt(timer / 3600)}小时前`;
  2369. break;
  2370. case (timer >= 86400 && timer < 2592e3):
  2371. tips = `${parseInt(timer / 86400)}天前`;
  2372. break;
  2373. default:
  2374. if (format === false) {
  2375. if (timer >= 2592e3 && timer < 365 * 86400) {
  2376. tips = `${parseInt(timer / (86400 * 30))}个月前`;
  2377. } else {
  2378. tips = `${parseInt(timer / (86400 * 365))}年前`;
  2379. }
  2380. } else {
  2381. tips = timeFormat(timestamp, format);
  2382. }
  2383. }
  2384. return tips;
  2385. }
  2386. function trim(str, pos = "both") {
  2387. str = String(str);
  2388. if (pos == "both") {
  2389. return str.replace(/^\s+|\s+$/g, "");
  2390. }
  2391. if (pos == "left") {
  2392. return str.replace(/^\s*/, "");
  2393. }
  2394. if (pos == "right") {
  2395. return str.replace(/(\s*$)/g, "");
  2396. }
  2397. if (pos == "all") {
  2398. return str.replace(/\s+/g, "");
  2399. }
  2400. return str;
  2401. }
  2402. function queryParams(data = {}, isPrefix = true, arrayFormat = "brackets") {
  2403. const prefix = isPrefix ? "?" : "";
  2404. const _result = [];
  2405. if (["indices", "brackets", "repeat", "comma"].indexOf(arrayFormat) == -1)
  2406. arrayFormat = "brackets";
  2407. for (const key in data) {
  2408. const value2 = data[key];
  2409. if (["", void 0, null].indexOf(value2) >= 0) {
  2410. continue;
  2411. }
  2412. if (value2.constructor === Array) {
  2413. switch (arrayFormat) {
  2414. case "indices":
  2415. for (let i = 0; i < value2.length; i++) {
  2416. _result.push(`${key}[${i}]=${value2[i]}`);
  2417. }
  2418. break;
  2419. case "brackets":
  2420. value2.forEach((_value) => {
  2421. _result.push(`${key}[]=${_value}`);
  2422. });
  2423. break;
  2424. case "repeat":
  2425. value2.forEach((_value) => {
  2426. _result.push(`${key}=${_value}`);
  2427. });
  2428. break;
  2429. case "comma":
  2430. let commaStr = "";
  2431. value2.forEach((_value) => {
  2432. commaStr += (commaStr ? "," : "") + _value;
  2433. });
  2434. _result.push(`${key}=${commaStr}`);
  2435. break;
  2436. default:
  2437. value2.forEach((_value) => {
  2438. _result.push(`${key}[]=${_value}`);
  2439. });
  2440. }
  2441. } else {
  2442. _result.push(`${key}=${value2}`);
  2443. }
  2444. }
  2445. return _result.length ? prefix + _result.join("&") : "";
  2446. }
  2447. function toast(title, duration = 2e3) {
  2448. uni.showToast({
  2449. title: String(title),
  2450. icon: "none",
  2451. duration
  2452. });
  2453. }
  2454. function type2icon(type = "success", fill = false) {
  2455. if (["primary", "info", "error", "warning", "success"].indexOf(type) == -1)
  2456. type = "success";
  2457. let iconName = "";
  2458. switch (type) {
  2459. case "primary":
  2460. iconName = "info-circle";
  2461. break;
  2462. case "info":
  2463. iconName = "info-circle";
  2464. break;
  2465. case "error":
  2466. iconName = "close-circle";
  2467. break;
  2468. case "warning":
  2469. iconName = "error-circle";
  2470. break;
  2471. case "success":
  2472. iconName = "checkmark-circle";
  2473. break;
  2474. default:
  2475. iconName = "checkmark-circle";
  2476. }
  2477. if (fill)
  2478. iconName += "-fill";
  2479. return iconName;
  2480. }
  2481. function priceFormat(number2, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
  2482. number2 = `${number2}`.replace(/[^0-9+-Ee.]/g, "");
  2483. const n = !isFinite(+number2) ? 0 : +number2;
  2484. const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
  2485. const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
  2486. const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
  2487. let s = "";
  2488. s = (prec ? round(n, prec) + "" : `${Math.round(n)}`).split(".");
  2489. const re = /(-?\d+)(\d{3})/;
  2490. while (re.test(s[0])) {
  2491. s[0] = s[0].replace(re, `$1${sep}$2`);
  2492. }
  2493. if ((s[1] || "").length < prec) {
  2494. s[1] = s[1] || "";
  2495. s[1] += new Array(prec - s[1].length + 1).join("0");
  2496. }
  2497. return s.join(dec);
  2498. }
  2499. function getDuration(value2, unit = true) {
  2500. const valueNum = parseInt(value2);
  2501. if (unit) {
  2502. if (/s$/.test(value2))
  2503. return value2;
  2504. return value2 > 30 ? `${value2}ms` : `${value2}s`;
  2505. }
  2506. if (/ms$/.test(value2))
  2507. return valueNum;
  2508. if (/s$/.test(value2))
  2509. return valueNum > 30 ? valueNum : valueNum * 1e3;
  2510. return valueNum;
  2511. }
  2512. function padZero(value2) {
  2513. return `00${value2}`.slice(-2);
  2514. }
  2515. function formValidate(instance, event) {
  2516. const formItem = $parent.call(instance, "u-form-item");
  2517. const form = $parent.call(instance, "u-form");
  2518. if (formItem && form) {
  2519. form.validateField(formItem.prop, () => {
  2520. }, event);
  2521. }
  2522. }
  2523. function getProperty(obj, key) {
  2524. if (typeof obj !== "object" || null == obj) {
  2525. return "";
  2526. }
  2527. if (typeof key !== "string" || key === "") {
  2528. return "";
  2529. }
  2530. if (key.indexOf(".") !== -1) {
  2531. const keys = key.split(".");
  2532. let firstObj = obj[keys[0]] || {};
  2533. for (let i = 1; i < keys.length; i++) {
  2534. if (firstObj) {
  2535. firstObj = firstObj[keys[i]];
  2536. }
  2537. }
  2538. return firstObj;
  2539. }
  2540. return obj[key];
  2541. }
  2542. function setProperty(obj, key, value2) {
  2543. if (typeof obj !== "object" || null == obj) {
  2544. return;
  2545. }
  2546. const inFn = function(_obj, keys, v) {
  2547. if (keys.length === 1) {
  2548. _obj[keys[0]] = v;
  2549. return;
  2550. }
  2551. while (keys.length > 1) {
  2552. const k = keys[0];
  2553. if (!_obj[k] || typeof _obj[k] !== "object") {
  2554. _obj[k] = {};
  2555. }
  2556. keys.shift();
  2557. inFn(_obj[k], keys, v);
  2558. }
  2559. };
  2560. if (typeof key !== "string" || key === "")
  2561. ;
  2562. else if (key.indexOf(".") !== -1) {
  2563. const keys = key.split(".");
  2564. inFn(obj, keys, value2);
  2565. } else {
  2566. obj[key] = value2;
  2567. }
  2568. }
  2569. function page() {
  2570. const pages2 = getCurrentPages();
  2571. return `/${pages2[pages2.length - 1].route || ""}`;
  2572. }
  2573. function pages() {
  2574. const pages2 = getCurrentPages();
  2575. return pages2;
  2576. }
  2577. const index = {
  2578. range,
  2579. getPx,
  2580. sleep,
  2581. os,
  2582. sys,
  2583. random,
  2584. guid,
  2585. $parent,
  2586. addStyle,
  2587. addUnit,
  2588. deepClone,
  2589. deepMerge: deepMerge$1,
  2590. shallowMerge,
  2591. error,
  2592. randomArray,
  2593. timeFormat,
  2594. timeFrom,
  2595. trim,
  2596. queryParams,
  2597. toast,
  2598. type2icon,
  2599. priceFormat,
  2600. getDuration,
  2601. padZero,
  2602. formValidate,
  2603. getProperty,
  2604. setProperty,
  2605. page,
  2606. pages
  2607. // setConfig
  2608. };
  2609. class Router {
  2610. constructor() {
  2611. this.config = {
  2612. type: "navigateTo",
  2613. url: "",
  2614. delta: 1,
  2615. // navigateBack页面后退时,回退的层数
  2616. params: {},
  2617. // 传递的参数
  2618. animationType: "pop-in",
  2619. // 窗口动画,只在APP有效
  2620. animationDuration: 300,
  2621. // 窗口动画持续时间,单位毫秒,只在APP有效
  2622. intercept: false
  2623. // 是否需要拦截
  2624. };
  2625. this.route = this.route.bind(this);
  2626. }
  2627. // 判断url前面是否有"/",如果没有则加上,否则无法跳转
  2628. addRootPath(url2) {
  2629. return url2[0] === "/" ? url2 : `/${url2}`;
  2630. }
  2631. // 整合路由参数
  2632. mixinParam(url2, params) {
  2633. url2 = url2 && this.addRootPath(url2);
  2634. let query = "";
  2635. if (/.*\/.*\?.*=.*/.test(url2)) {
  2636. query = queryParams(params, false);
  2637. return url2 += `&${query}`;
  2638. }
  2639. query = queryParams(params);
  2640. return url2 += query;
  2641. }
  2642. // 对外的方法名称
  2643. async route(options = {}, params = {}) {
  2644. let mergeConfig2 = {};
  2645. if (typeof options === "string") {
  2646. mergeConfig2.url = this.mixinParam(options, params);
  2647. mergeConfig2.type = "navigateTo";
  2648. } else {
  2649. mergeConfig2 = deepMerge$1(this.config, options);
  2650. mergeConfig2.url = this.mixinParam(options.url, options.params);
  2651. }
  2652. if (mergeConfig2.url === page())
  2653. return;
  2654. if (params.intercept) {
  2655. this.config.intercept = params.intercept;
  2656. }
  2657. mergeConfig2.params = params;
  2658. mergeConfig2 = deepMerge$1(this.config, mergeConfig2);
  2659. if (typeof uni.$u.routeIntercept === "function") {
  2660. const isNext = await new Promise((resolve, reject) => {
  2661. uni.$u.routeIntercept(mergeConfig2, resolve);
  2662. });
  2663. isNext && this.openPage(mergeConfig2);
  2664. } else {
  2665. this.openPage(mergeConfig2);
  2666. }
  2667. }
  2668. // 执行路由跳转
  2669. openPage(config2) {
  2670. const {
  2671. url: url2,
  2672. type,
  2673. delta,
  2674. animationType,
  2675. animationDuration
  2676. } = config2;
  2677. if (config2.type == "navigateTo" || config2.type == "to") {
  2678. uni.navigateTo({
  2679. url: url2,
  2680. animationType,
  2681. animationDuration
  2682. });
  2683. }
  2684. if (config2.type == "redirectTo" || config2.type == "redirect") {
  2685. uni.redirectTo({
  2686. url: url2
  2687. });
  2688. }
  2689. if (config2.type == "switchTab" || config2.type == "tab") {
  2690. uni.switchTab({
  2691. url: url2
  2692. });
  2693. }
  2694. if (config2.type == "reLaunch" || config2.type == "launch") {
  2695. uni.reLaunch({
  2696. url: url2
  2697. });
  2698. }
  2699. if (config2.type == "navigateBack" || config2.type == "back") {
  2700. uni.navigateBack({
  2701. delta
  2702. });
  2703. }
  2704. }
  2705. }
  2706. const route = new Router().route;
  2707. const mixin$1 = {
  2708. // 定义每个组件都可能需要用到的外部样式以及类名
  2709. props: {
  2710. // 每个组件都有的父组件传递的样式,可以为字符串或者对象形式
  2711. customStyle: {
  2712. type: [Object, String],
  2713. default: () => ({})
  2714. },
  2715. customClass: {
  2716. type: String,
  2717. default: ""
  2718. },
  2719. // 跳转的页面路径
  2720. url: {
  2721. type: String,
  2722. default: ""
  2723. },
  2724. // 页面跳转的类型
  2725. linkType: {
  2726. type: String,
  2727. default: "navigateTo"
  2728. }
  2729. },
  2730. data() {
  2731. return {};
  2732. },
  2733. onLoad() {
  2734. this.$u.getRect = this.$uGetRect;
  2735. },
  2736. created() {
  2737. this.$u.getRect = this.$uGetRect;
  2738. },
  2739. computed: {
  2740. // 在2.x版本中,将会把$u挂载到uni对象下,导致在模板中无法使用uni.$u.xxx形式
  2741. // 所以这里通过computed计算属性将其附加到this.$u上,就可以在模板或者js中使用uni.$u.xxx
  2742. // 只在nvue环境通过此方式引入完整的$u,其他平台会出现性能问题,非nvue则按需引入(主要原因是props过大)
  2743. $u() {
  2744. return deepMerge$1(uni.$u, {
  2745. props: void 0,
  2746. http: void 0,
  2747. mixin: void 0
  2748. });
  2749. },
  2750. /**
  2751. * 生成bem规则类名
  2752. * 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用
  2753. * 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
  2754. * @param {String} name 组件名称
  2755. * @param {Array} fixed 一直会存在的类名
  2756. * @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
  2757. * @returns {Array|string}
  2758. */
  2759. bem() {
  2760. return function(name, fixed, change) {
  2761. const prefix = `u-${name}--`;
  2762. const classes = {};
  2763. if (fixed) {
  2764. fixed.map((item) => {
  2765. classes[prefix + this[item]] = true;
  2766. });
  2767. }
  2768. if (change) {
  2769. change.map((item) => {
  2770. this[item] ? classes[prefix + item] = this[item] : delete classes[prefix + item];
  2771. });
  2772. }
  2773. return Object.keys(classes);
  2774. };
  2775. }
  2776. },
  2777. methods: {
  2778. // 跳转某一个页面
  2779. openPage(urlKey = "url") {
  2780. const url2 = this[urlKey];
  2781. if (url2) {
  2782. route({ type: this.linkType, url: url2 });
  2783. }
  2784. },
  2785. // 查询节点信息
  2786. // 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
  2787. // 解决办法为在组件根部再套一个没有任何作用的view元素
  2788. $uGetRect(selector, all) {
  2789. return new Promise((resolve) => {
  2790. uni.createSelectorQuery().in(this)[all ? "selectAll" : "select"](selector).boundingClientRect((rect) => {
  2791. if (all && Array.isArray(rect) && rect.length) {
  2792. resolve(rect);
  2793. }
  2794. if (!all && rect) {
  2795. resolve(rect);
  2796. }
  2797. }).exec();
  2798. });
  2799. },
  2800. getParentData(parentName = "") {
  2801. if (!this.parent)
  2802. this.parent = {};
  2803. this.parent = $parent.call(this, parentName);
  2804. if (this.parent.children) {
  2805. this.parent.children.indexOf(this) === -1 && this.parent.children.push(this);
  2806. }
  2807. if (this.parent && this.parentData) {
  2808. Object.keys(this.parentData).map((key) => {
  2809. this.parentData[key] = this.parent[key];
  2810. });
  2811. }
  2812. },
  2813. // 阻止事件冒泡
  2814. preventEvent(e) {
  2815. e && typeof e.stopPropagation === "function" && e.stopPropagation();
  2816. },
  2817. // 空操作
  2818. noop(e) {
  2819. this.preventEvent(e);
  2820. }
  2821. },
  2822. onReachBottom() {
  2823. uni.$emit("uOnReachBottom");
  2824. },
  2825. beforeUnmount() {
  2826. if (this.parent && test.array(this.parent.children)) {
  2827. const childrenList = this.parent.children;
  2828. childrenList.map((child, index2) => {
  2829. if (child === this) {
  2830. childrenList.splice(index2, 1);
  2831. }
  2832. });
  2833. }
  2834. }
  2835. };
  2836. const _export_sfc = (sfc, props2) => {
  2837. const target = sfc.__vccOpts || sfc;
  2838. for (const [key, val] of props2) {
  2839. target[key] = val;
  2840. }
  2841. return target;
  2842. };
  2843. const _sfc_main$i = {
  2844. name: "u-icon",
  2845. data() {
  2846. return {};
  2847. },
  2848. emits: ["click"],
  2849. mixins: [mpMixin, mixin$1, props$b],
  2850. computed: {
  2851. uClasses() {
  2852. let classes = [];
  2853. classes.push(this.customPrefix + "-" + this.name);
  2854. if (this.customPrefix == "uicon") {
  2855. classes.push("u-iconfont");
  2856. } else {
  2857. classes.push(this.customPrefix);
  2858. }
  2859. if (this.color && config$1.type.includes(this.color))
  2860. classes.push("u-icon__icon--" + this.color);
  2861. return classes;
  2862. },
  2863. iconStyle() {
  2864. let style = {};
  2865. style = {
  2866. fontSize: addUnit(this.size),
  2867. lineHeight: addUnit(this.size),
  2868. fontWeight: this.bold ? "bold" : "normal",
  2869. // 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
  2870. top: addUnit(this.top)
  2871. };
  2872. if (this.color && !config$1.type.includes(this.color))
  2873. style.color = this.color;
  2874. return style;
  2875. },
  2876. // 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式
  2877. isImg() {
  2878. return this.name.indexOf("/") !== -1;
  2879. },
  2880. imgStyle() {
  2881. let style = {};
  2882. style.width = this.width ? addUnit(this.width) : addUnit(this.size);
  2883. style.height = this.height ? addUnit(this.height) : addUnit(this.size);
  2884. return style;
  2885. },
  2886. // 通过图标名,查找对应的图标
  2887. icon() {
  2888. if (this.customPrefix !== "uicon")
  2889. return "";
  2890. return icons["uicon-" + this.name] || this.name;
  2891. }
  2892. },
  2893. methods: {
  2894. addStyle,
  2895. addUnit,
  2896. clickHandler(e) {
  2897. this.$emit("click", this.index);
  2898. this.stop && this.preventEvent(e);
  2899. }
  2900. }
  2901. };
  2902. function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
  2903. return vue.openBlock(), vue.createElementBlock(
  2904. "view",
  2905. {
  2906. class: vue.normalizeClass(["u-icon", ["u-icon--" + _ctx.labelPos]]),
  2907. onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args))
  2908. },
  2909. [
  2910. $options.isImg ? (vue.openBlock(), vue.createElementBlock("image", {
  2911. key: 0,
  2912. class: "u-icon__img",
  2913. src: _ctx.name,
  2914. mode: _ctx.imgMode,
  2915. style: vue.normalizeStyle([$options.imgStyle, $options.addStyle(_ctx.customStyle)])
  2916. }, null, 12, ["src", "mode"])) : (vue.openBlock(), vue.createElementBlock("text", {
  2917. key: 1,
  2918. class: vue.normalizeClass(["u-icon__icon", $options.uClasses]),
  2919. style: vue.normalizeStyle([$options.iconStyle, $options.addStyle(_ctx.customStyle)]),
  2920. "hover-class": _ctx.hoverClass
  2921. }, vue.toDisplayString($options.icon), 15, ["hover-class"])),
  2922. vue.createCommentVNode(' 这里进行空字符串判断,如果仅仅是v-if="label",可能会出现传递0的时候,结果也无法显示 '),
  2923. _ctx.label !== "" ? (vue.openBlock(), vue.createElementBlock(
  2924. "text",
  2925. {
  2926. key: 2,
  2927. class: "u-icon__label",
  2928. style: vue.normalizeStyle({
  2929. color: _ctx.labelColor,
  2930. fontSize: $options.addUnit(_ctx.labelSize),
  2931. marginLeft: _ctx.labelPos == "right" ? $options.addUnit(_ctx.space) : 0,
  2932. marginTop: _ctx.labelPos == "bottom" ? $options.addUnit(_ctx.space) : 0,
  2933. marginRight: _ctx.labelPos == "left" ? $options.addUnit(_ctx.space) : 0,
  2934. marginBottom: _ctx.labelPos == "top" ? $options.addUnit(_ctx.space) : 0
  2935. })
  2936. },
  2937. vue.toDisplayString(_ctx.label),
  2938. 5
  2939. /* TEXT, STYLE */
  2940. )) : vue.createCommentVNode("v-if", true)
  2941. ],
  2942. 2
  2943. /* CLASS */
  2944. );
  2945. }
  2946. const __easycom_2 = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$h], ["__scopeId", "data-v-ac70166d"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-icon/u-icon.vue"]]);
  2947. const props$a = {
  2948. props: {
  2949. // 是否展示组件
  2950. show: {
  2951. type: Boolean,
  2952. default: () => props$c.transition.show
  2953. },
  2954. // 使用的动画模式
  2955. mode: {
  2956. type: String,
  2957. default: () => props$c.transition.mode
  2958. },
  2959. // 动画的执行时间,单位ms
  2960. duration: {
  2961. type: [String, Number],
  2962. default: () => props$c.transition.duration
  2963. },
  2964. // 使用的动画过渡函数
  2965. timingFunction: {
  2966. type: String,
  2967. default: () => props$c.transition.timingFunction
  2968. }
  2969. }
  2970. };
  2971. const getClassNames = (name) => ({
  2972. enter: `u-${name}-enter u-${name}-enter-active`,
  2973. "enter-to": `u-${name}-enter-to u-${name}-enter-active`,
  2974. leave: `u-${name}-leave u-${name}-leave-active`,
  2975. "leave-to": `u-${name}-leave-to u-${name}-leave-active`
  2976. });
  2977. const transition = {
  2978. methods: {
  2979. // 组件被点击发出事件
  2980. clickHandler() {
  2981. this.$emit("click");
  2982. },
  2983. // vue版本的组件进场处理
  2984. async vueEnter() {
  2985. const classNames = getClassNames(this.mode);
  2986. this.status = "enter";
  2987. this.$emit("beforeEnter");
  2988. this.inited = true;
  2989. this.display = true;
  2990. this.classes = classNames.enter;
  2991. await vue.nextTick();
  2992. {
  2993. await sleep(20);
  2994. this.$emit("enter");
  2995. this.transitionEnded = false;
  2996. this.$emit("afterEnter");
  2997. this.classes = classNames["enter-to"];
  2998. }
  2999. },
  3000. // 动画离场处理
  3001. async vueLeave() {
  3002. if (!this.display)
  3003. return;
  3004. const classNames = getClassNames(this.mode);
  3005. this.status = "leave";
  3006. this.$emit("beforeLeave");
  3007. this.classes = classNames.leave;
  3008. await vue.nextTick();
  3009. {
  3010. this.transitionEnded = false;
  3011. this.$emit("leave");
  3012. setTimeout(this.onTransitionEnd, this.duration);
  3013. this.classes = classNames["leave-to"];
  3014. }
  3015. },
  3016. // 完成过渡后触发
  3017. onTransitionEnd() {
  3018. if (this.transitionEnded)
  3019. return;
  3020. this.transitionEnded = true;
  3021. this.$emit(this.status === "leave" ? "afterLeave" : "afterEnter");
  3022. if (!this.show && this.display) {
  3023. this.display = false;
  3024. this.inited = false;
  3025. }
  3026. }
  3027. }
  3028. };
  3029. const _sfc_main$h = {
  3030. name: "u-transition",
  3031. data() {
  3032. return {
  3033. inited: false,
  3034. // 是否显示/隐藏组件
  3035. viewStyle: {},
  3036. // 组件内部的样式
  3037. status: "",
  3038. // 记录组件动画的状态
  3039. transitionEnded: false,
  3040. // 组件是否结束的标记
  3041. display: false,
  3042. // 组件是否展示
  3043. classes: ""
  3044. // 应用的类名
  3045. };
  3046. },
  3047. emits: ["click", "beforeEnter", "enter", "afterEnter", "beforeLeave", "leave", "afterLeave"],
  3048. computed: {
  3049. mergeStyle() {
  3050. const { viewStyle, customStyle } = this;
  3051. return {
  3052. transitionDuration: `${this.duration}ms`,
  3053. // display: `${this.display ? '' : 'none'}`,
  3054. transitionTimingFunction: this.timingFunction,
  3055. // 避免自定义样式影响到动画属性,所以写在viewStyle前面
  3056. ...addStyle(customStyle),
  3057. ...viewStyle
  3058. };
  3059. }
  3060. },
  3061. // 将mixin挂在到组件中,实际上为一个vue格式对象。
  3062. mixins: [mpMixin, mixin$1, transition, props$a],
  3063. watch: {
  3064. show: {
  3065. handler(newVal) {
  3066. newVal ? this.vueEnter() : this.vueLeave();
  3067. },
  3068. // 表示同时监听初始化时的props的show的意思
  3069. immediate: true
  3070. }
  3071. }
  3072. };
  3073. function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
  3074. return $data.inited ? (vue.openBlock(), vue.createElementBlock(
  3075. "view",
  3076. {
  3077. key: 0,
  3078. class: vue.normalizeClass(["u-transition", $data.classes]),
  3079. ref: "u-transition",
  3080. onClick: _cache[0] || (_cache[0] = (...args) => _ctx.clickHandler && _ctx.clickHandler(...args)),
  3081. style: vue.normalizeStyle([$options.mergeStyle]),
  3082. onTouchmove: _cache[1] || (_cache[1] = (...args) => _ctx.noop && _ctx.noop(...args))
  3083. },
  3084. [
  3085. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  3086. ],
  3087. 38
  3088. /* CLASS, STYLE, NEED_HYDRATION */
  3089. )) : vue.createCommentVNode("v-if", true);
  3090. }
  3091. const __easycom_4 = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$g], ["__scopeId", "data-v-5cec8177"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-transition/u-transition.vue"]]);
  3092. const props$9 = {
  3093. props: {
  3094. // 是否显示遮罩
  3095. show: {
  3096. type: Boolean,
  3097. default: () => props$c.overlay.show
  3098. },
  3099. // 层级z-index
  3100. zIndex: {
  3101. type: [String, Number],
  3102. default: () => props$c.overlay.zIndex
  3103. },
  3104. // 遮罩的过渡时间,单位为ms
  3105. duration: {
  3106. type: [String, Number],
  3107. default: () => props$c.overlay.duration
  3108. },
  3109. // 不透明度值,当做rgba的第四个参数
  3110. opacity: {
  3111. type: [String, Number],
  3112. default: () => props$c.overlay.opacity
  3113. }
  3114. }
  3115. };
  3116. const _sfc_main$g = {
  3117. name: "u-overlay",
  3118. mixins: [mpMixin, mixin$1, props$9],
  3119. computed: {
  3120. overlayStyle() {
  3121. const style = {
  3122. position: "fixed",
  3123. top: 0,
  3124. left: 0,
  3125. right: 0,
  3126. zIndex: this.zIndex,
  3127. bottom: 0,
  3128. "background-color": `rgba(0, 0, 0, ${this.opacity})`
  3129. };
  3130. return deepMerge$1(style, addStyle(this.customStyle));
  3131. }
  3132. },
  3133. emits: ["click"],
  3134. methods: {
  3135. clickHandler() {
  3136. this.$emit("click");
  3137. }
  3138. }
  3139. };
  3140. function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
  3141. const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_4);
  3142. return vue.openBlock(), vue.createBlock(_component_u_transition, {
  3143. show: _ctx.show,
  3144. "custom-class": "u-overlay",
  3145. duration: _ctx.duration,
  3146. "custom-style": $options.overlayStyle,
  3147. onClick: $options.clickHandler
  3148. }, {
  3149. default: vue.withCtx(() => [
  3150. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  3151. ]),
  3152. _: 3
  3153. /* FORWARDED */
  3154. }, 8, ["show", "duration", "custom-style", "onClick"]);
  3155. }
  3156. const __easycom_0$3 = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$f], ["__scopeId", "data-v-9112bed9"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-overlay/u-overlay.vue"]]);
  3157. const props$8 = {
  3158. props: {
  3159. bgColor: {
  3160. type: String,
  3161. default: () => props$c.statusBar.bgColor
  3162. }
  3163. }
  3164. };
  3165. const _sfc_main$f = {
  3166. name: "u-status-bar",
  3167. mixins: [mpMixin, mixin$1, props$8],
  3168. data() {
  3169. return {};
  3170. },
  3171. computed: {
  3172. style() {
  3173. const style = {};
  3174. style.height = addUnit(sys().statusBarHeight, "px");
  3175. style.backgroundColor = this.bgColor;
  3176. return deepMerge$1(style, addStyle(this.customStyle));
  3177. }
  3178. }
  3179. };
  3180. function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
  3181. return vue.openBlock(), vue.createElementBlock(
  3182. "view",
  3183. {
  3184. style: vue.normalizeStyle([$options.style]),
  3185. class: "u-status-bar"
  3186. },
  3187. [
  3188. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
  3189. ],
  3190. 4
  3191. /* STYLE */
  3192. );
  3193. }
  3194. const __easycom_1$3 = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$e], ["__scopeId", "data-v-eb8e0cdd"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-status-bar/u-status-bar.vue"]]);
  3195. const props$7 = {
  3196. props: {}
  3197. };
  3198. const _sfc_main$e = {
  3199. name: "u-safe-bottom",
  3200. mixins: [mpMixin, mixin$1, props$7],
  3201. data() {
  3202. return {
  3203. safeAreaBottomHeight: 0,
  3204. isNvue: false
  3205. };
  3206. },
  3207. computed: {
  3208. style() {
  3209. const style = {};
  3210. return deepMerge$1(style, addStyle(this.customStyle));
  3211. }
  3212. },
  3213. mounted() {
  3214. }
  3215. };
  3216. function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
  3217. return vue.openBlock(), vue.createElementBlock(
  3218. "view",
  3219. {
  3220. class: vue.normalizeClass(["u-safe-bottom", [!$data.isNvue && "u-safe-area-inset-bottom"]]),
  3221. style: vue.normalizeStyle([$options.style])
  3222. },
  3223. null,
  3224. 6
  3225. /* CLASS, STYLE */
  3226. );
  3227. }
  3228. const __easycom_3$1 = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$d], ["__scopeId", "data-v-f3d22cfe"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-safe-bottom/u-safe-bottom.vue"]]);
  3229. const props$6 = {
  3230. props: {
  3231. // 是否展示弹窗
  3232. show: {
  3233. type: Boolean,
  3234. default: () => props$c.popup.show
  3235. },
  3236. // 是否显示遮罩
  3237. overlay: {
  3238. type: Boolean,
  3239. default: () => props$c.popup.overlay
  3240. },
  3241. // 弹出的方向,可选值为 top bottom right left center
  3242. mode: {
  3243. type: String,
  3244. default: () => props$c.popup.mode
  3245. },
  3246. // 动画时长,单位ms
  3247. duration: {
  3248. type: [String, Number],
  3249. default: () => props$c.popup.duration
  3250. },
  3251. // 是否显示关闭图标
  3252. closeable: {
  3253. type: Boolean,
  3254. default: () => props$c.popup.closeable
  3255. },
  3256. // 自定义遮罩的样式
  3257. overlayStyle: {
  3258. type: [Object, String],
  3259. default: () => props$c.popup.overlayStyle
  3260. },
  3261. // 点击遮罩是否关闭弹窗
  3262. closeOnClickOverlay: {
  3263. type: Boolean,
  3264. default: () => props$c.popup.closeOnClickOverlay
  3265. },
  3266. // 层级
  3267. zIndex: {
  3268. type: [String, Number],
  3269. default: () => props$c.popup.zIndex
  3270. },
  3271. // 是否为iPhoneX留出底部安全距离
  3272. safeAreaInsetBottom: {
  3273. type: Boolean,
  3274. default: () => props$c.popup.safeAreaInsetBottom
  3275. },
  3276. // 是否留出顶部安全距离(状态栏高度)
  3277. safeAreaInsetTop: {
  3278. type: Boolean,
  3279. default: () => props$c.popup.safeAreaInsetTop
  3280. },
  3281. // 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角
  3282. closeIconPos: {
  3283. type: String,
  3284. default: () => props$c.popup.closeIconPos
  3285. },
  3286. // 是否显示圆角
  3287. round: {
  3288. type: [Boolean, String, Number],
  3289. default: () => props$c.popup.round
  3290. },
  3291. // mode=center,也即中部弹出时,是否使用缩放模式
  3292. zoom: {
  3293. type: Boolean,
  3294. default: () => props$c.popup.zoom
  3295. },
  3296. // 弹窗背景色,设置为transparent可去除白色背景
  3297. bgColor: {
  3298. type: String,
  3299. default: () => props$c.popup.bgColor
  3300. },
  3301. // 遮罩的透明度,0-1之间
  3302. overlayOpacity: {
  3303. type: [Number, String],
  3304. default: () => props$c.popup.overlayOpacity
  3305. }
  3306. }
  3307. };
  3308. const _sfc_main$d = {
  3309. name: "u-popup",
  3310. mixins: [mpMixin, mixin$1, props$6],
  3311. data() {
  3312. return {
  3313. overlayDuration: this.duration + 50
  3314. };
  3315. },
  3316. watch: {
  3317. show(newValue, oldValue) {
  3318. }
  3319. },
  3320. computed: {
  3321. transitionStyle() {
  3322. const style = {
  3323. zIndex: this.zIndex,
  3324. position: "fixed",
  3325. display: "flex"
  3326. };
  3327. style[this.mode] = 0;
  3328. if (this.mode === "left") {
  3329. return deepMerge$1(style, {
  3330. bottom: 0,
  3331. top: 0
  3332. });
  3333. } else if (this.mode === "right") {
  3334. return deepMerge$1(style, {
  3335. bottom: 0,
  3336. top: 0
  3337. });
  3338. } else if (this.mode === "top") {
  3339. return deepMerge$1(style, {
  3340. left: 0,
  3341. right: 0
  3342. });
  3343. } else if (this.mode === "bottom") {
  3344. return deepMerge$1(style, {
  3345. left: 0,
  3346. right: 0
  3347. });
  3348. } else if (this.mode === "center") {
  3349. return deepMerge$1(style, {
  3350. alignItems: "center",
  3351. "justify-content": "center",
  3352. top: 0,
  3353. left: 0,
  3354. right: 0,
  3355. bottom: 0
  3356. });
  3357. }
  3358. },
  3359. contentStyle() {
  3360. const style = {};
  3361. sys();
  3362. if (this.mode !== "center") {
  3363. style.flex = 1;
  3364. }
  3365. if (this.bgColor) {
  3366. style.backgroundColor = this.bgColor;
  3367. }
  3368. if (this.round) {
  3369. const value2 = addUnit(this.round);
  3370. if (this.mode === "top") {
  3371. style.borderBottomLeftRadius = value2;
  3372. style.borderBottomRightRadius = value2;
  3373. } else if (this.mode === "bottom") {
  3374. style.borderTopLeftRadius = value2;
  3375. style.borderTopRightRadius = value2;
  3376. } else if (this.mode === "center") {
  3377. style.borderRadius = value2;
  3378. }
  3379. }
  3380. return deepMerge$1(style, addStyle(this.customStyle));
  3381. },
  3382. position() {
  3383. if (this.mode === "center") {
  3384. return this.zoom ? "fade-zoom" : "fade";
  3385. }
  3386. if (this.mode === "left") {
  3387. return "slide-left";
  3388. }
  3389. if (this.mode === "right") {
  3390. return "slide-right";
  3391. }
  3392. if (this.mode === "bottom") {
  3393. return "slide-up";
  3394. }
  3395. if (this.mode === "top") {
  3396. return "slide-down";
  3397. }
  3398. }
  3399. },
  3400. emits: ["open", "close", "click"],
  3401. methods: {
  3402. // 点击遮罩
  3403. overlayClick() {
  3404. if (this.closeOnClickOverlay) {
  3405. this.$emit("close");
  3406. }
  3407. },
  3408. close(e) {
  3409. this.$emit("close");
  3410. },
  3411. afterEnter() {
  3412. this.$emit("open");
  3413. },
  3414. clickHandler() {
  3415. if (this.mode === "center") {
  3416. this.overlayClick();
  3417. }
  3418. this.$emit("click");
  3419. }
  3420. }
  3421. };
  3422. function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
  3423. const _component_u_overlay = resolveEasycom(vue.resolveDynamicComponent("u-overlay"), __easycom_0$3);
  3424. const _component_u_status_bar = resolveEasycom(vue.resolveDynamicComponent("u-status-bar"), __easycom_1$3);
  3425. const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
  3426. const _component_u_safe_bottom = resolveEasycom(vue.resolveDynamicComponent("u-safe-bottom"), __easycom_3$1);
  3427. const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_4);
  3428. return vue.openBlock(), vue.createElementBlock("view", { class: "u-popup" }, [
  3429. _ctx.overlay ? (vue.openBlock(), vue.createBlock(_component_u_overlay, {
  3430. key: 0,
  3431. show: _ctx.show,
  3432. onClick: $options.overlayClick,
  3433. duration: $data.overlayDuration,
  3434. customStyle: _ctx.overlayStyle,
  3435. opacity: _ctx.overlayOpacity
  3436. }, null, 8, ["show", "onClick", "duration", "customStyle", "opacity"])) : vue.createCommentVNode("v-if", true),
  3437. vue.createVNode(_component_u_transition, {
  3438. show: _ctx.show,
  3439. customStyle: $options.transitionStyle,
  3440. mode: $options.position,
  3441. duration: _ctx.duration,
  3442. onAfterEnter: $options.afterEnter,
  3443. onClick: $options.clickHandler
  3444. }, {
  3445. default: vue.withCtx(() => [
  3446. vue.createElementVNode(
  3447. "view",
  3448. {
  3449. class: "u-popup__content",
  3450. style: vue.normalizeStyle([$options.contentStyle]),
  3451. onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => _ctx.noop && _ctx.noop(...args), ["stop"]))
  3452. },
  3453. [
  3454. _ctx.safeAreaInsetTop ? (vue.openBlock(), vue.createBlock(_component_u_status_bar, { key: 0 })) : vue.createCommentVNode("v-if", true),
  3455. vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
  3456. _ctx.closeable ? (vue.openBlock(), vue.createElementBlock(
  3457. "view",
  3458. {
  3459. key: 1,
  3460. onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.close && $options.close(...args), ["stop"])),
  3461. class: vue.normalizeClass(["u-popup__content__close", ["u-popup__content__close--" + _ctx.closeIconPos]]),
  3462. "hover-class": "u-popup__content__close--hover",
  3463. "hover-stay-time": "150"
  3464. },
  3465. [
  3466. vue.createVNode(_component_u_icon, {
  3467. name: "close",
  3468. color: "#909399",
  3469. size: "18",
  3470. bold: ""
  3471. })
  3472. ],
  3473. 2
  3474. /* CLASS */
  3475. )) : vue.createCommentVNode("v-if", true),
  3476. _ctx.safeAreaInsetBottom ? (vue.openBlock(), vue.createBlock(_component_u_safe_bottom, { key: 2 })) : vue.createCommentVNode("v-if", true)
  3477. ],
  3478. 4
  3479. /* STYLE */
  3480. )
  3481. ]),
  3482. _: 3
  3483. /* FORWARDED */
  3484. }, 8, ["show", "customStyle", "mode", "duration", "onAfterEnter", "onClick"])
  3485. ]);
  3486. }
  3487. const __easycom_3 = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$c], ["__scopeId", "data-v-05c24e9b"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-popup/u-popup.vue"]]);
  3488. let Request$1 = class Request {
  3489. http(router, data = {}, method, contentType) {
  3490. let path = "http://192.168.10.125:7114";
  3491. uni.setStorageSync("requestPath", path);
  3492. uni.showLoading({
  3493. title: "加载中"
  3494. });
  3495. return new Promise((resolve, reject) => {
  3496. let token = uni.getStorageSync("AppToken");
  3497. var httpContentType = "application/x-www-form-urlencoded";
  3498. if (contentType != void 0) {
  3499. httpContentType = contentType;
  3500. }
  3501. uni.request({
  3502. header: {
  3503. // 'Content-Type': 'application/x-www-form-urlencoded',
  3504. "Content-Type": httpContentType,
  3505. "AppToken": token
  3506. },
  3507. url: `${path}${router}`,
  3508. data,
  3509. method,
  3510. success: (res) => {
  3511. if (res.code == 401) {
  3512. let pages2 = getCurrentPages();
  3513. let url2 = pages2[pages2.length - 1];
  3514. 如果登录界面已打开, 自动关闭;
  3515. if (url2 != void 0 && url2.route == "/pages/home/index") {
  3516. resolve(res.data);
  3517. return;
  3518. }
  3519. uni.reLaunch({
  3520. url: "/pages/home/index",
  3521. success: () => {
  3522. uni.hideLoading();
  3523. },
  3524. fail: () => {
  3525. uni.hideLoading();
  3526. }
  3527. });
  3528. return;
  3529. }
  3530. if (res.token) {
  3531. uni.setStorageSync("AppToken", res.token);
  3532. }
  3533. resolve(res.data);
  3534. },
  3535. fail: (res) => {
  3536. },
  3537. complete: (res) => {
  3538. if (res.data.code == 401) {
  3539. return false;
  3540. }
  3541. uni.hideLoading();
  3542. }
  3543. });
  3544. });
  3545. }
  3546. };
  3547. let request$1 = new Request$1().http;
  3548. function loginByMp(data) {
  3549. return request$1("/app/user/loginByMp", data, "POST", "application/json;charset=UTF-8");
  3550. }
  3551. function getlive(data) {
  3552. return request$1("/app/live/live", data, "GET", "application/json;charset=UTF-8");
  3553. }
  3554. function gettextlist(data) {
  3555. return request$1("/app/live/msgList", data, "GET", "application/json;charset=UTF-8");
  3556. }
  3557. function getAnswerlist(data) {
  3558. return request$1("/app/question/questionList", data, "GET", "application/json;charset=UTF-8");
  3559. }
  3560. function submitAnswer(data) {
  3561. return request$1("/app/question/answer", data, "POST", "application/json;charset=UTF-8");
  3562. }
  3563. const _imports_0$2 = "/static/images/shipin.png";
  3564. const isWechat = () => {
  3565. return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
  3566. };
  3567. const _sfc_main$c = {
  3568. data() {
  3569. return {
  3570. code: "",
  3571. livedata: {},
  3572. path: "http://live.ylrzcloud.com/prod-api",
  3573. iskefu: false,
  3574. isLongPress: false,
  3575. // 是否长按
  3576. timeout: null,
  3577. // 计时器
  3578. liveId: 2
  3579. };
  3580. },
  3581. onLoad(option) {
  3582. },
  3583. onShow() {
  3584. if (uni.getStorageSync("AppToken")) {
  3585. this.getliving();
  3586. }
  3587. },
  3588. methods: {
  3589. open() {
  3590. },
  3591. close() {
  3592. this.iskefu = !this.iskefu;
  3593. },
  3594. longPress() {
  3595. this.timeout = setTimeout(() => {
  3596. this.isLongPress = true;
  3597. uni.saveImageToPhotosAlbum({
  3598. filePath: this.livedata.qwQrCode,
  3599. // 图片的本地路径或网络路径
  3600. success: () => {
  3601. uni.showToast({
  3602. title: "保存成功"
  3603. });
  3604. },
  3605. fail: () => {
  3606. uni.showToast({
  3607. title: "保存失败",
  3608. icon: "none"
  3609. });
  3610. }
  3611. });
  3612. }, 500);
  3613. },
  3614. cancelLongPress() {
  3615. clearTimeout(this.timeout);
  3616. this.isLongPress = false;
  3617. },
  3618. getliving() {
  3619. const param = {
  3620. id: this.liveId
  3621. };
  3622. getlive(param).then((res) => {
  3623. if (res.code == 200) {
  3624. this.livedata = res.data;
  3625. } else {
  3626. uni.showToast({
  3627. title: res.msg,
  3628. icon: "none",
  3629. duration: 2e3
  3630. });
  3631. }
  3632. });
  3633. },
  3634. getWechatCode() {
  3635. if (isWechat) {
  3636. let appid = "wx93ce67750e3cfba3";
  3637. let code2 = this.getUrlCode().code;
  3638. let local = window.location.href.split("#")[0];
  3639. if (code2 == null || code2 === "") {
  3640. window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + encodeURIComponent(local) + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
  3641. } else {
  3642. this.code = code2;
  3643. this.loginByMp();
  3644. }
  3645. }
  3646. },
  3647. loginByMp() {
  3648. if (this.code == null) {
  3649. return;
  3650. }
  3651. uni.showLoading({
  3652. title: "处理中..."
  3653. });
  3654. var data = {
  3655. code: this.code
  3656. };
  3657. loginByMp(data).then(
  3658. (res) => {
  3659. uni.hideLoading();
  3660. if (res.code == 200) {
  3661. formatAppLog("log", "at pages/home/index.vue:157", res);
  3662. uni.setStorageSync("AppToken", res.token);
  3663. uni.setStorageSync("userInfo", JSON.stringify(res.user));
  3664. let beforLoginUrl = uni.getStorageSync("beforLoginPage");
  3665. uni.reLaunch({
  3666. url: beforLoginUrl
  3667. });
  3668. uni.showToast({
  3669. title: "登录成功",
  3670. icon: "none"
  3671. });
  3672. this.getliving();
  3673. } else {
  3674. uni.showToast({
  3675. title: res.msg,
  3676. icon: "none"
  3677. });
  3678. }
  3679. },
  3680. (err) => {
  3681. }
  3682. );
  3683. },
  3684. getUrlCode() {
  3685. var url2 = location.search;
  3686. var theRequest = new Object();
  3687. if (url2.indexOf("?") != -1) {
  3688. var str = url2.substr(1);
  3689. var strs = str.split("&");
  3690. for (var i = 0; i < strs.length; i++) {
  3691. theRequest[strs[i].split("=")[0]] = strs[i].split("=")[1];
  3692. }
  3693. }
  3694. return theRequest;
  3695. },
  3696. comelive() {
  3697. uni.navigateTo({
  3698. url: "/pages/home/living"
  3699. });
  3700. }
  3701. }
  3702. };
  3703. function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
  3704. const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
  3705. const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3);
  3706. return vue.openBlock(), vue.createElementBlock("view", { class: "home column" }, [
  3707. vue.createElementVNode("view", { class: "justify-start align-center" }, [
  3708. vue.createElementVNode("image", {
  3709. src: _imports_0$2,
  3710. class: "wh50 p20"
  3711. }),
  3712. vue.createElementVNode("view", { class: "fs32 bold" }, "道中")
  3713. ]),
  3714. vue.createElementVNode("image", {
  3715. src: $data.livedata.liveImgUrl,
  3716. mode: "widthFix",
  3717. class: "w100"
  3718. }, null, 8, ["src"]),
  3719. vue.createElementVNode("view", { class: "p20" }, [
  3720. vue.createElementVNode("view", { class: "column" }, [
  3721. vue.createElementVNode(
  3722. "text",
  3723. { class: "fs32" },
  3724. vue.toDisplayString($data.livedata.liveName),
  3725. 1
  3726. /* TEXT */
  3727. ),
  3728. vue.createElementVNode(
  3729. "text",
  3730. { class: "color9 fs24 mt20" },
  3731. " 直播时间 " + vue.toDisplayString($data.livedata.startTime) + " —— " + vue.toDisplayString($data.livedata.finishTime),
  3732. 1
  3733. /* TEXT */
  3734. )
  3735. ])
  3736. ]),
  3737. vue.createElementVNode("view", { class: "p20 detail" }, [
  3738. vue.createElementVNode("view", { class: "jianjie mb20" }, "简介"),
  3739. vue.createElementVNode("view", {
  3740. class: "fs24 lh36",
  3741. innerHTML: $data.livedata.liveDesc
  3742. }, null, 8, ["innerHTML"])
  3743. ]),
  3744. vue.createElementVNode("view", { class: "p12 bgf bot-box" }, [
  3745. vue.createElementVNode("view", {
  3746. class: "center",
  3747. onClick: _cache[0] || (_cache[0] = (...args) => $options.comelive && $options.comelive(...args))
  3748. }, "进入直播间")
  3749. ]),
  3750. vue.createVNode(_component_u_popup, {
  3751. show: $data.iskefu,
  3752. onClose: $options.close,
  3753. onOpen: $options.open,
  3754. round: "20rpx",
  3755. bgColor: "#fffee1"
  3756. }, {
  3757. default: vue.withCtx(() => [
  3758. vue.createElementVNode("view", { class: "addchat p20" }, [
  3759. vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
  3760. vue.createVNode(_component_u_icon, {
  3761. name: "close",
  3762. size: "18",
  3763. onClick: _cache[1] || (_cache[1] = ($event) => _ctx.showadd = !_ctx.showadd)
  3764. })
  3765. ]),
  3766. vue.createElementVNode("view", { class: "column align-center" }, [
  3767. vue.createElementVNode("view", {
  3768. class: "fs36",
  3769. style: { "color": "#ff5c03" }
  3770. }, "扫码添加助教老师"),
  3771. vue.createElementVNode("view", { class: "fs28 color6" }, "扫码添加助教老师"),
  3772. vue.createElementVNode("view", {
  3773. class: "p10 mt40",
  3774. style: { "border": "#ff5c03 solid 2rpx" }
  3775. }, [
  3776. vue.createElementVNode("image", {
  3777. src: _ctx.codeimg,
  3778. class: "wh180",
  3779. onTouchstart: _cache[2] || (_cache[2] = (...args) => $options.longPress && $options.longPress(...args)),
  3780. onTouchend: _cache[3] || (_cache[3] = (...args) => $options.cancelLongPress && $options.cancelLongPress(...args))
  3781. }, null, 40, ["src"])
  3782. ]),
  3783. vue.createElementVNode("view", { class: "color6 mt20" }, "长按识别二维码")
  3784. ])
  3785. ])
  3786. ]),
  3787. _: 1
  3788. /* STABLE */
  3789. }, 8, ["show", "onClose", "onOpen"])
  3790. ]);
  3791. }
  3792. const PagesHomeIndex = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$b], ["__scopeId", "data-v-4978fed5"], ["__file", "F:/project/liveH5-v3/pages/home/index.vue"]]);
  3793. const _sfc_main$b = {};
  3794. function _sfc_render$a(_ctx, _cache) {
  3795. return vue.openBlock(), vue.createElementBlock("view", { class: "column" });
  3796. }
  3797. const PagesUserIndex = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$a], ["__file", "F:/project/liveH5-v3/pages/user/index.vue"]]);
  3798. const _sfc_main$a = {};
  3799. function _sfc_render$9(_ctx, _cache) {
  3800. return vue.openBlock(), vue.createElementBlock("view", { class: "games column" });
  3801. }
  3802. const PagesGamesIndex = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$9], ["__file", "F:/project/liveH5-v3/pages/games/index.vue"]]);
  3803. const _sfc_main$9 = {};
  3804. function _sfc_render$8(_ctx, _cache) {
  3805. return vue.openBlock(), vue.createElementBlock("view", { class: "column" });
  3806. }
  3807. const PagesListIndex = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$8], ["__file", "F:/project/liveH5-v3/pages/list/index.vue"]]);
  3808. const props$5 = {
  3809. props: {
  3810. // 是否显示圆点
  3811. isDot: {
  3812. type: Boolean,
  3813. default: () => props$c.badge.isDot
  3814. },
  3815. // 显示的内容
  3816. value: {
  3817. type: [Number, String],
  3818. default: () => props$c.badge.value
  3819. },
  3820. // 显示的内容
  3821. modelValue: {
  3822. type: [Number, String],
  3823. default: () => props$c.badge.modelValue
  3824. },
  3825. // 是否显示
  3826. show: {
  3827. type: Boolean,
  3828. default: () => props$c.badge.show
  3829. },
  3830. // 最大值,超过最大值会显示 '{max}+'
  3831. max: {
  3832. type: [Number, String],
  3833. default: () => props$c.badge.max
  3834. },
  3835. // 主题类型,error|warning|success|primary
  3836. type: {
  3837. type: String,
  3838. default: () => props$c.badge.type
  3839. },
  3840. // 当数值为 0 时,是否展示 Badge
  3841. showZero: {
  3842. type: Boolean,
  3843. default: () => props$c.badge.showZero
  3844. },
  3845. // 背景颜色,优先级比type高,如设置,type参数会失效
  3846. bgColor: {
  3847. type: [String, null],
  3848. default: () => props$c.badge.bgColor
  3849. },
  3850. // 字体颜色
  3851. color: {
  3852. type: [String, null],
  3853. default: () => props$c.badge.color
  3854. },
  3855. // 徽标形状,circle-四角均为圆角,horn-左下角为直角
  3856. shape: {
  3857. type: String,
  3858. default: () => props$c.badge.shape
  3859. },
  3860. // 设置数字的显示方式,overflow|ellipsis|limit
  3861. // overflow会根据max字段判断,超出显示`${max}+`
  3862. // ellipsis会根据max判断,超出显示`${max}...`
  3863. // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数
  3864. numberType: {
  3865. type: String,
  3866. default: () => props$c.badge.numberType
  3867. },
  3868. // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
  3869. offset: {
  3870. type: Array,
  3871. default: () => props$c.badge.offset
  3872. },
  3873. // 是否反转背景和字体颜色
  3874. inverted: {
  3875. type: Boolean,
  3876. default: () => props$c.badge.inverted
  3877. },
  3878. // 是否绝对定位
  3879. absolute: {
  3880. type: Boolean,
  3881. default: () => props$c.badge.absolute
  3882. }
  3883. }
  3884. };
  3885. const _sfc_main$8 = {
  3886. name: "u-badge",
  3887. mixins: [mpMixin, props$5, mixin$1],
  3888. computed: {
  3889. // 是否将badge中心与父组件右上角重合
  3890. boxStyle() {
  3891. let style = {};
  3892. return style;
  3893. },
  3894. // 整个组件的样式
  3895. badgeStyle() {
  3896. const style = {};
  3897. if (this.color) {
  3898. style.color = this.color;
  3899. }
  3900. if (this.bgColor && !this.inverted) {
  3901. style.backgroundColor = this.bgColor;
  3902. }
  3903. if (this.absolute) {
  3904. style.position = "absolute";
  3905. if (this.offset.length) {
  3906. const top = this.offset[0];
  3907. const right = this.offset[1] || top;
  3908. style.top = addUnit(top);
  3909. style.right = addUnit(right);
  3910. }
  3911. }
  3912. return style;
  3913. },
  3914. showValue() {
  3915. switch (this.numberType) {
  3916. case "overflow":
  3917. return Number(this.value) > Number(this.max) ? this.max + "+" : this.value;
  3918. case "ellipsis":
  3919. return Number(this.value) > Number(this.max) ? "..." : this.value;
  3920. case "limit":
  3921. return Number(this.value) > 999 ? Number(this.value) >= 9999 ? Math.floor(this.value / 1e4 * 100) / 100 + "w" : Math.floor(this.value / 1e3 * 100) / 100 + "k" : this.value;
  3922. default:
  3923. return Number(this.value);
  3924. }
  3925. }
  3926. },
  3927. methods: {
  3928. addStyle
  3929. }
  3930. };
  3931. function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
  3932. return _ctx.show && ((Number(_ctx.value) === 0 ? _ctx.showZero : true) || _ctx.isDot) ? (vue.openBlock(), vue.createElementBlock(
  3933. "text",
  3934. {
  3935. key: 0,
  3936. class: vue.normalizeClass([[_ctx.isDot ? "u-badge--dot" : "u-badge--not-dot", _ctx.inverted && "u-badge--inverted", _ctx.shape === "horn" && "u-badge--horn", `u-badge--${_ctx.type}${_ctx.inverted ? "--inverted" : ""}`], "u-badge"]),
  3937. style: vue.normalizeStyle([$options.addStyle(_ctx.customStyle), $options.badgeStyle])
  3938. },
  3939. vue.toDisplayString(_ctx.isDot ? "" : $options.showValue),
  3940. 7
  3941. /* TEXT, CLASS, STYLE */
  3942. )) : vue.createCommentVNode("v-if", true);
  3943. }
  3944. const __easycom_0$2 = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$7], ["__scopeId", "data-v-06cca9b7"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-badge/u-badge.vue"]]);
  3945. const props$4 = {
  3946. props: {
  3947. // 滑块的移动过渡时间,单位ms
  3948. duration: {
  3949. type: Number,
  3950. default: () => props$c.tabs.duration
  3951. },
  3952. // tabs标签数组
  3953. list: {
  3954. type: Array,
  3955. default: () => props$c.tabs.list
  3956. },
  3957. // 滑块颜色
  3958. lineColor: {
  3959. type: String,
  3960. default: () => props$c.tabs.lineColor
  3961. },
  3962. // 菜单选择中时的样式
  3963. activeStyle: {
  3964. type: [String, Object],
  3965. default: () => props$c.tabs.activeStyle
  3966. },
  3967. // 菜单非选中时的样式
  3968. inactiveStyle: {
  3969. type: [String, Object],
  3970. default: () => props$c.tabs.inactiveStyle
  3971. },
  3972. // 滑块长度
  3973. lineWidth: {
  3974. type: [String, Number],
  3975. default: () => props$c.tabs.lineWidth
  3976. },
  3977. // 滑块高度
  3978. lineHeight: {
  3979. type: [String, Number],
  3980. default: () => props$c.tabs.lineHeight
  3981. },
  3982. // 滑块背景显示大小,当滑块背景设置为图片时使用
  3983. lineBgSize: {
  3984. type: String,
  3985. default: () => props$c.tabs.lineBgSize
  3986. },
  3987. // 菜单item的样式
  3988. itemStyle: {
  3989. type: [String, Object],
  3990. default: () => props$c.tabs.itemStyle
  3991. },
  3992. // 菜单是否可滚动
  3993. scrollable: {
  3994. type: Boolean,
  3995. default: () => props$c.tabs.scrollable
  3996. },
  3997. // 当前选中标签的索引
  3998. current: {
  3999. type: [Number, String],
  4000. default: () => props$c.tabs.current
  4001. },
  4002. // 默认读取的键名
  4003. keyName: {
  4004. type: String,
  4005. default: () => props$c.tabs.keyName
  4006. }
  4007. }
  4008. };
  4009. const _sfc_main$7 = {
  4010. name: "u-tabs",
  4011. mixins: [mpMixin, mixin$1, props$4],
  4012. data() {
  4013. return {
  4014. firstTime: true,
  4015. scrollLeft: 0,
  4016. scrollViewWidth: 0,
  4017. lineOffsetLeft: 0,
  4018. tabsRect: {
  4019. left: 0
  4020. },
  4021. innerCurrent: 0,
  4022. moving: false
  4023. };
  4024. },
  4025. watch: {
  4026. current: {
  4027. immediate: true,
  4028. handler(newValue, oldValue) {
  4029. if (newValue !== this.innerCurrent) {
  4030. this.innerCurrent = newValue;
  4031. this.$nextTick(() => {
  4032. this.resize();
  4033. });
  4034. }
  4035. }
  4036. },
  4037. // list变化时,重新渲染list各项信息
  4038. list() {
  4039. this.$nextTick(() => {
  4040. this.resize();
  4041. });
  4042. }
  4043. },
  4044. computed: {
  4045. textStyle() {
  4046. return (index2) => {
  4047. const style = {};
  4048. const customeStyle = index2 === this.innerCurrent ? addStyle(this.activeStyle) : uni.$u.addStyle(
  4049. this.inactiveStyle
  4050. );
  4051. if (this.list[index2].disabled) {
  4052. style.color = "#c8c9cc";
  4053. }
  4054. return deepMerge$1(customeStyle, style);
  4055. };
  4056. },
  4057. propsBadge() {
  4058. return props$c.badge;
  4059. }
  4060. },
  4061. async mounted() {
  4062. this.init();
  4063. },
  4064. emits: ["click", "change"],
  4065. methods: {
  4066. addStyle,
  4067. addUnit,
  4068. setLineLeft() {
  4069. const tabItem = this.list[this.innerCurrent];
  4070. if (!tabItem) {
  4071. return;
  4072. }
  4073. let lineOffsetLeft = this.list.slice(0, this.innerCurrent).reduce((total, curr) => total + curr.rect.width, 0);
  4074. const lineWidth = getPx(this.lineWidth);
  4075. this.lineOffsetLeft = lineOffsetLeft + (tabItem.rect.width - lineWidth) / 2;
  4076. if (this.firstTime) {
  4077. setTimeout(() => {
  4078. this.firstTime = false;
  4079. }, 10);
  4080. }
  4081. },
  4082. // nvue下设置滑块的位置
  4083. animation(x, duration = 0) {
  4084. },
  4085. // 点击某一个标签
  4086. clickHandler(item, index2) {
  4087. this.$emit("click", {
  4088. ...item,
  4089. index: index2
  4090. });
  4091. if (item.disabled)
  4092. return;
  4093. this.innerCurrent = index2;
  4094. this.resize();
  4095. this.$emit("change", {
  4096. ...item,
  4097. index: index2
  4098. });
  4099. },
  4100. init() {
  4101. sleep().then(() => {
  4102. this.resize();
  4103. });
  4104. },
  4105. setScrollLeft() {
  4106. const tabRect = this.list[this.innerCurrent];
  4107. const offsetLeft = this.list.slice(0, this.innerCurrent).reduce((total, curr) => {
  4108. return total + curr.rect.width;
  4109. }, 0);
  4110. const windowWidth = sys().windowWidth;
  4111. let scrollLeft = offsetLeft - (this.tabsRect.width - tabRect.rect.width) / 2 - (windowWidth - this.tabsRect.right) / 2 + this.tabsRect.left / 2;
  4112. scrollLeft = Math.min(scrollLeft, this.scrollViewWidth - this.tabsRect.width);
  4113. this.scrollLeft = Math.max(0, scrollLeft);
  4114. },
  4115. // 获取所有标签的尺寸
  4116. resize() {
  4117. if (this.list.length === 0) {
  4118. return;
  4119. }
  4120. Promise.all([this.getTabsRect(), this.getAllItemRect()]).then(([tabsRect, itemRect = []]) => {
  4121. this.tabsRect = tabsRect;
  4122. this.scrollViewWidth = 0;
  4123. itemRect.map((item, index2) => {
  4124. this.scrollViewWidth += item.width;
  4125. this.list[index2].rect = item;
  4126. });
  4127. this.setLineLeft();
  4128. this.setScrollLeft();
  4129. });
  4130. },
  4131. // 获取导航菜单的尺寸
  4132. getTabsRect() {
  4133. return new Promise((resolve) => {
  4134. this.queryRect("u-tabs__wrapper__scroll-view").then((size) => resolve(size));
  4135. });
  4136. },
  4137. // 获取所有标签的尺寸
  4138. getAllItemRect() {
  4139. return new Promise((resolve) => {
  4140. const promiseAllArr = this.list.map((item, index2) => this.queryRect(
  4141. `u-tabs__wrapper__nav__item-${index2}`,
  4142. true
  4143. ));
  4144. Promise.all(promiseAllArr).then((sizes) => resolve(sizes));
  4145. });
  4146. },
  4147. // 获取各个标签的尺寸
  4148. queryRect(el, item) {
  4149. return new Promise((resolve) => {
  4150. this.$uGetRect(`.${el}`).then((size) => {
  4151. resolve(size);
  4152. });
  4153. });
  4154. }
  4155. }
  4156. };
  4157. function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
  4158. const _component_u_badge = resolveEasycom(vue.resolveDynamicComponent("u-badge"), __easycom_0$2);
  4159. return vue.openBlock(), vue.createElementBlock("view", { class: "u-tabs" }, [
  4160. vue.createElementVNode("view", { class: "u-tabs__wrapper" }, [
  4161. vue.renderSlot(_ctx.$slots, "left", {}, void 0, true),
  4162. vue.createElementVNode("view", { class: "u-tabs__wrapper__scroll-view-wrapper" }, [
  4163. vue.createElementVNode("scroll-view", {
  4164. "scroll-x": _ctx.scrollable,
  4165. "scroll-left": $data.scrollLeft,
  4166. "scroll-with-animation": "",
  4167. class: "u-tabs__wrapper__scroll-view",
  4168. "show-scrollbar": false,
  4169. ref: "u-tabs__wrapper__scroll-view"
  4170. }, [
  4171. vue.createElementVNode(
  4172. "view",
  4173. {
  4174. class: "u-tabs__wrapper__nav",
  4175. ref: "u-tabs__wrapper__nav"
  4176. },
  4177. [
  4178. (vue.openBlock(true), vue.createElementBlock(
  4179. vue.Fragment,
  4180. null,
  4181. vue.renderList(_ctx.list, (item, index2) => {
  4182. return vue.openBlock(), vue.createElementBlock("view", {
  4183. class: vue.normalizeClass(["u-tabs__wrapper__nav__item", [`u-tabs__wrapper__nav__item-${index2}`, item.disabled && "u-tabs__wrapper__nav__item--disabled"]]),
  4184. key: index2,
  4185. onClick: ($event) => $options.clickHandler(item, index2),
  4186. ref_for: true,
  4187. ref: `u-tabs__wrapper__nav__item-${index2}`,
  4188. style: vue.normalizeStyle([$options.addStyle(_ctx.itemStyle), { flex: _ctx.scrollable ? "" : 1 }])
  4189. }, [
  4190. vue.createElementVNode(
  4191. "text",
  4192. {
  4193. class: vue.normalizeClass([[item.disabled && "u-tabs__wrapper__nav__item__text--disabled"], "u-tabs__wrapper__nav__item__text"]),
  4194. style: vue.normalizeStyle([$options.textStyle(index2)])
  4195. },
  4196. vue.toDisplayString(item[_ctx.keyName]),
  4197. 7
  4198. /* TEXT, CLASS, STYLE */
  4199. ),
  4200. vue.createVNode(_component_u_badge, {
  4201. show: !!(item.badge && (item.badge.show || item.badge.isDot || item.badge.value)),
  4202. isDot: item.badge && item.badge.isDot || $options.propsBadge.isDot,
  4203. value: item.badge && item.badge.value || $options.propsBadge.value,
  4204. max: item.badge && item.badge.max || $options.propsBadge.max,
  4205. type: item.badge && item.badge.type || $options.propsBadge.type,
  4206. showZero: item.badge && item.badge.showZero || $options.propsBadge.showZero,
  4207. bgColor: item.badge && item.badge.bgColor || $options.propsBadge.bgColor,
  4208. color: item.badge && item.badge.color || $options.propsBadge.color,
  4209. shape: item.badge && item.badge.shape || $options.propsBadge.shape,
  4210. numberType: item.badge && item.badge.numberType || $options.propsBadge.numberType,
  4211. inverted: item.badge && item.badge.inverted || $options.propsBadge.inverted,
  4212. customStyle: "margin-left: 4px;"
  4213. }, null, 8, ["show", "isDot", "value", "max", "type", "showZero", "bgColor", "color", "shape", "numberType", "inverted"])
  4214. ], 14, ["onClick"]);
  4215. }),
  4216. 128
  4217. /* KEYED_FRAGMENT */
  4218. )),
  4219. vue.createElementVNode(
  4220. "view",
  4221. {
  4222. class: "u-tabs__wrapper__nav__line",
  4223. ref: "u-tabs__wrapper__nav__line",
  4224. style: vue.normalizeStyle([{
  4225. width: $options.addUnit(_ctx.lineWidth),
  4226. transform: `translate(${$data.lineOffsetLeft}px)`,
  4227. transitionDuration: `${$data.firstTime ? 0 : _ctx.duration}ms`,
  4228. height: $options.addUnit(_ctx.lineHeight),
  4229. background: _ctx.lineColor,
  4230. backgroundSize: _ctx.lineBgSize
  4231. }])
  4232. },
  4233. null,
  4234. 4
  4235. /* STYLE */
  4236. )
  4237. ],
  4238. 512
  4239. /* NEED_PATCH */
  4240. )
  4241. ], 8, ["scroll-x", "scroll-left"])
  4242. ]),
  4243. vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
  4244. ])
  4245. ]);
  4246. }
  4247. const __easycom_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6], ["__scopeId", "data-v-02b0c54f"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-tabs/u-tabs.vue"]]);
  4248. const props$3 = {
  4249. props: {
  4250. // 文字颜色
  4251. color: {
  4252. type: String,
  4253. default: () => props$c.link.color
  4254. },
  4255. // 字体大小,单位px
  4256. fontSize: {
  4257. type: [String, Number],
  4258. default: () => props$c.link.fontSize
  4259. },
  4260. // 是否显示下划线
  4261. underLine: {
  4262. type: Boolean,
  4263. default: () => props$c.link.underLine
  4264. },
  4265. // 要跳转的链接
  4266. href: {
  4267. type: String,
  4268. default: () => props$c.link.href
  4269. },
  4270. // 小程序中复制到粘贴板的提示语
  4271. mpTips: {
  4272. type: String,
  4273. default: () => props$c.link.mpTips
  4274. },
  4275. // 下划线颜色
  4276. lineColor: {
  4277. type: String,
  4278. default: () => props$c.link.lineColor
  4279. },
  4280. // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色
  4281. text: {
  4282. type: String,
  4283. default: () => props$c.link.text
  4284. }
  4285. }
  4286. };
  4287. const _sfc_main$6 = {
  4288. name: "u-link",
  4289. mixins: [mpMixin, mixin$1, props$3],
  4290. computed: {
  4291. linkStyle() {
  4292. const style = {
  4293. color: this.color,
  4294. fontSize: addUnit(this.fontSize),
  4295. // line-height设置为比字体大小多2px
  4296. lineHeight: addUnit(getPx(this.fontSize) + 2),
  4297. textDecoration: this.underLine ? "underline" : "none"
  4298. };
  4299. return style;
  4300. }
  4301. },
  4302. emits: ["click"],
  4303. methods: {
  4304. addStyle,
  4305. openLink() {
  4306. plus.runtime.openURL(this.href);
  4307. this.$emit("click");
  4308. }
  4309. }
  4310. };
  4311. function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
  4312. return vue.openBlock(), vue.createElementBlock(
  4313. "text",
  4314. {
  4315. class: "u-link",
  4316. onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.openLink && $options.openLink(...args), ["stop"])),
  4317. style: vue.normalizeStyle([$options.linkStyle, $options.addStyle(_ctx.customStyle)])
  4318. },
  4319. vue.toDisplayString(_ctx.text),
  4320. 5
  4321. /* TEXT, STYLE */
  4322. );
  4323. }
  4324. const __easycom_1$2 = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5], ["__scopeId", "data-v-12f6646d"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-link/u-link.vue"]]);
  4325. const props$2 = {
  4326. props: {
  4327. // 主题颜色
  4328. type: {
  4329. type: String,
  4330. default: () => props$c.text.type
  4331. },
  4332. // 是否显示
  4333. show: {
  4334. type: Boolean,
  4335. default: () => props$c.text.show
  4336. },
  4337. // 显示的值
  4338. text: {
  4339. type: [String, Number],
  4340. default: () => props$c.text.text
  4341. },
  4342. // 前置图标
  4343. prefixIcon: {
  4344. type: String,
  4345. default: () => props$c.text.prefixIcon
  4346. },
  4347. // 后置图标
  4348. suffixIcon: {
  4349. type: String,
  4350. default: () => props$c.text.suffixIcon
  4351. },
  4352. // 文本处理的匹配模式
  4353. // text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接
  4354. mode: {
  4355. type: String,
  4356. default: () => props$c.text.mode
  4357. },
  4358. // mode=link下,配置的链接
  4359. href: {
  4360. type: String,
  4361. default: () => props$c.text.href
  4362. },
  4363. // 格式化规则
  4364. format: {
  4365. type: [String, Function],
  4366. default: () => props$c.text.format
  4367. },
  4368. // mode=phone时,点击文本是否拨打电话
  4369. call: {
  4370. type: Boolean,
  4371. default: () => props$c.text.call
  4372. },
  4373. // 小程序的打开方式
  4374. openType: {
  4375. type: String,
  4376. default: () => props$c.text.openType
  4377. },
  4378. // 是否粗体,默认normal
  4379. bold: {
  4380. type: Boolean,
  4381. default: () => props$c.text.bold
  4382. },
  4383. // 是否块状
  4384. block: {
  4385. type: Boolean,
  4386. default: () => props$c.text.block
  4387. },
  4388. // 文本显示的行数,如果设置,超出此行数,将会显示省略号
  4389. lines: {
  4390. type: [String, Number],
  4391. default: () => props$c.text.lines
  4392. },
  4393. // 文本颜色
  4394. color: {
  4395. type: String,
  4396. default: () => props$c.text.color
  4397. },
  4398. // 字体大小
  4399. size: {
  4400. type: [String, Number],
  4401. default: () => props$c.text.size
  4402. },
  4403. // 图标的样式
  4404. iconStyle: {
  4405. type: [Object, String],
  4406. default: () => props$c.text.iconStyle
  4407. },
  4408. // 文字装饰,下划线,中划线等,可选值 none|underline|line-through
  4409. decoration: {
  4410. tepe: String,
  4411. default: () => props$c.text.decoration
  4412. },
  4413. // 外边距,对象、字符串,数值形式均可
  4414. margin: {
  4415. type: [Object, String, Number],
  4416. default: () => props$c.text.margin
  4417. },
  4418. // 文本行高
  4419. lineHeight: {
  4420. type: [String, Number],
  4421. default: () => props$c.text.lineHeight
  4422. },
  4423. // 文本对齐方式,可选值left|center|right
  4424. align: {
  4425. type: String,
  4426. default: () => props$c.text.align
  4427. },
  4428. // 文字换行,可选值break-word|normal|anywhere
  4429. wordWrap: {
  4430. type: String,
  4431. default: () => props$c.text.wordWrap
  4432. }
  4433. }
  4434. };
  4435. const value = {
  4436. computed: {
  4437. // 经处理后需要显示的值
  4438. value() {
  4439. const {
  4440. text,
  4441. mode,
  4442. format,
  4443. href
  4444. } = this;
  4445. if (mode === "price") {
  4446. if (!/^\d+(\.\d+)?$/.test(text)) {
  4447. error("金额模式下,text参数需要为金额格式");
  4448. }
  4449. if (test.func(format)) {
  4450. return format(text);
  4451. }
  4452. return priceFormat(text, 2);
  4453. }
  4454. if (mode === "date") {
  4455. !test.date(text) && error("日期模式下,text参数需要为日期或时间戳格式");
  4456. if (test.func(format)) {
  4457. return format(text);
  4458. }
  4459. if (format) {
  4460. return timeFormat(text, format);
  4461. }
  4462. return timeFormat(text, "yyyy-mm-dd");
  4463. }
  4464. if (mode === "phone") {
  4465. if (test.func(format)) {
  4466. return format(text);
  4467. }
  4468. if (format === "encrypt") {
  4469. return `${text.substr(0, 3)}****${text.substr(7)}`;
  4470. }
  4471. return text;
  4472. }
  4473. if (mode === "name") {
  4474. !(typeof text === "string") && error("姓名模式下,text参数需要为字符串格式");
  4475. if (test.func(format)) {
  4476. return format(text);
  4477. }
  4478. if (format === "encrypt") {
  4479. return this.formatName(text);
  4480. }
  4481. return text;
  4482. }
  4483. if (mode === "link") {
  4484. !test.url(href) && error("超链接模式下,href参数需要为URL格式");
  4485. return text;
  4486. }
  4487. return text;
  4488. }
  4489. },
  4490. methods: {
  4491. // 默认的姓名脱敏规则
  4492. formatName(name) {
  4493. let value2 = "";
  4494. if (name.length === 2) {
  4495. value2 = name.substr(0, 1) + "*";
  4496. } else if (name.length > 2) {
  4497. let char = "";
  4498. for (let i = 0, len = name.length - 2; i < len; i++) {
  4499. char += "*";
  4500. }
  4501. value2 = name.substr(0, 1) + char + name.substr(-1, 1);
  4502. } else {
  4503. value2 = name;
  4504. }
  4505. return value2;
  4506. }
  4507. }
  4508. };
  4509. const _sfc_main$5 = {
  4510. name: "u--text",
  4511. mixins: [mpMixin, mixin$1, value, props$2],
  4512. emits: ["click"],
  4513. computed: {
  4514. valueStyle() {
  4515. const style = {
  4516. textDecoration: this.decoration,
  4517. fontWeight: this.bold ? "bold" : "normal",
  4518. wordWrap: this.wordWrap,
  4519. fontSize: addUnit(this.size)
  4520. };
  4521. !this.type && (style.color = this.color);
  4522. this.isNvue && this.lines && (style.lines = this.lines);
  4523. this.lineHeight && (style.lineHeight = addUnit(this.lineHeight));
  4524. !this.isNvue && this.block && (style.display = "block");
  4525. return deepMerge$1(style, addStyle(this.customStyle));
  4526. },
  4527. isNvue() {
  4528. let nvue = false;
  4529. return nvue;
  4530. },
  4531. isMp() {
  4532. let mp = false;
  4533. return mp;
  4534. }
  4535. },
  4536. data() {
  4537. return {};
  4538. },
  4539. methods: {
  4540. addStyle,
  4541. clickHandler() {
  4542. if (this.call && this.mode === "phone") {
  4543. uni.makePhoneCall({
  4544. phoneNumber: this.text
  4545. });
  4546. }
  4547. this.$emit("click");
  4548. }
  4549. }
  4550. };
  4551. function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
  4552. const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
  4553. const _component_u_link = resolveEasycom(vue.resolveDynamicComponent("u-link"), __easycom_1$2);
  4554. return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
  4555. "view",
  4556. {
  4557. key: 0,
  4558. class: vue.normalizeClass(["u-text", []]),
  4559. style: vue.normalizeStyle({
  4560. margin: _ctx.margin,
  4561. justifyContent: _ctx.align === "left" ? "flex-start" : _ctx.align === "center" ? "center" : "flex-end"
  4562. }),
  4563. onClick: _cache[6] || (_cache[6] = (...args) => $options.clickHandler && $options.clickHandler(...args))
  4564. },
  4565. [
  4566. _ctx.mode === "price" ? (vue.openBlock(), vue.createElementBlock(
  4567. "text",
  4568. {
  4569. key: 0,
  4570. class: vue.normalizeClass(["u-text__price", _ctx.type && `u-text__value--${_ctx.type}`]),
  4571. style: vue.normalizeStyle([$options.valueStyle])
  4572. },
  4573. "¥",
  4574. 6
  4575. /* CLASS, STYLE */
  4576. )) : vue.createCommentVNode("v-if", true),
  4577. _ctx.prefixIcon ? (vue.openBlock(), vue.createElementBlock("view", {
  4578. key: 1,
  4579. class: "u-text__prefix-icon"
  4580. }, [
  4581. vue.createVNode(_component_u_icon, {
  4582. name: _ctx.prefixIcon,
  4583. customStyle: $options.addStyle(_ctx.iconStyle)
  4584. }, null, 8, ["name", "customStyle"])
  4585. ])) : vue.createCommentVNode("v-if", true),
  4586. _ctx.mode === "link" ? (vue.openBlock(), vue.createBlock(_component_u_link, {
  4587. key: 2,
  4588. class: vue.normalizeClass(["u-text__value", [_ctx.type && `u-text__value--${_ctx.type}`, _ctx.lines && `u-line-${_ctx.lines}`]]),
  4589. style: vue.normalizeStyle({ fontWeight: $options.valueStyle.fontWeight, wordWrap: $options.valueStyle.wordWrap, fontSize: $options.valueStyle.fontSize }),
  4590. text: _ctx.value,
  4591. href: _ctx.href,
  4592. underLine: ""
  4593. }, null, 8, ["style", "class", "text", "href"])) : _ctx.openType && $options.isMp ? (vue.openBlock(), vue.createElementBlock("button", {
  4594. key: 3,
  4595. class: "u-reset-button u-text__value",
  4596. style: vue.normalizeStyle([$options.valueStyle]),
  4597. "data-index": _ctx.index,
  4598. openType: _ctx.openType,
  4599. onGetuserinfo: _cache[0] || (_cache[0] = (...args) => _ctx.onGetUserInfo && _ctx.onGetUserInfo(...args)),
  4600. onContact: _cache[1] || (_cache[1] = (...args) => _ctx.onContact && _ctx.onContact(...args)),
  4601. onGetphonenumber: _cache[2] || (_cache[2] = (...args) => _ctx.onGetPhoneNumber && _ctx.onGetPhoneNumber(...args)),
  4602. onError: _cache[3] || (_cache[3] = (...args) => _ctx.onError && _ctx.onError(...args)),
  4603. onLaunchapp: _cache[4] || (_cache[4] = (...args) => _ctx.onLaunchApp && _ctx.onLaunchApp(...args)),
  4604. onOpensetting: _cache[5] || (_cache[5] = (...args) => _ctx.onOpenSetting && _ctx.onOpenSetting(...args)),
  4605. lang: _ctx.lang,
  4606. "session-from": _ctx.sessionFrom,
  4607. "send-message-title": _ctx.sendMessageTitle,
  4608. "send-message-path": _ctx.sendMessagePath,
  4609. "send-message-img": _ctx.sendMessageImg,
  4610. "show-message-card": _ctx.showMessageCard,
  4611. "app-parameter": _ctx.appParameter
  4612. }, vue.toDisplayString(_ctx.value), 45, ["data-index", "openType", "lang", "session-from", "send-message-title", "send-message-path", "send-message-img", "show-message-card", "app-parameter"])) : (vue.openBlock(), vue.createElementBlock(
  4613. "text",
  4614. {
  4615. key: 4,
  4616. class: vue.normalizeClass(["u-text__value", [
  4617. _ctx.type && `u-text__value--${_ctx.type}`,
  4618. _ctx.lines && `u-line-${_ctx.lines}`
  4619. ]]),
  4620. style: vue.normalizeStyle([$options.valueStyle])
  4621. },
  4622. vue.toDisplayString(_ctx.value),
  4623. 7
  4624. /* TEXT, CLASS, STYLE */
  4625. )),
  4626. _ctx.suffixIcon ? (vue.openBlock(), vue.createElementBlock("view", {
  4627. key: 5,
  4628. class: "u-text__suffix-icon"
  4629. }, [
  4630. vue.createVNode(_component_u_icon, {
  4631. name: _ctx.suffixIcon,
  4632. customStyle: $options.addStyle(_ctx.iconStyle)
  4633. }, null, 8, ["name", "customStyle"])
  4634. ])) : vue.createCommentVNode("v-if", true)
  4635. ],
  4636. 4
  4637. /* STYLE */
  4638. )) : vue.createCommentVNode("v-if", true);
  4639. }
  4640. const __easycom_1$1 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__scopeId", "data-v-0a574502"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-text/u-text.vue"]]);
  4641. const props$1 = {
  4642. props: {
  4643. // 头像图片路径(不能为相对路径)
  4644. src: {
  4645. type: String,
  4646. default: () => props$c.avatar.src
  4647. },
  4648. // 头像形状,circle-圆形,square-方形
  4649. shape: {
  4650. type: String,
  4651. default: () => props$c.avatar.shape
  4652. },
  4653. // 头像尺寸
  4654. size: {
  4655. type: [String, Number],
  4656. default: () => props$c.avatar.size
  4657. },
  4658. // 裁剪模式
  4659. mode: {
  4660. type: String,
  4661. default: () => props$c.avatar.mode
  4662. },
  4663. // 显示的文字
  4664. text: {
  4665. type: String,
  4666. default: () => props$c.avatar.text
  4667. },
  4668. // 背景色
  4669. bgColor: {
  4670. type: String,
  4671. default: () => props$c.avatar.bgColor
  4672. },
  4673. // 文字颜色
  4674. color: {
  4675. type: String,
  4676. default: () => props$c.avatar.color
  4677. },
  4678. // 文字大小
  4679. fontSize: {
  4680. type: [String, Number],
  4681. default: () => props$c.avatar.fontSize
  4682. },
  4683. // 显示的图标
  4684. icon: {
  4685. type: String,
  4686. default: () => props$c.avatar.icon
  4687. },
  4688. // 显示小程序头像,只对百度,微信,QQ小程序有效
  4689. mpAvatar: {
  4690. type: Boolean,
  4691. default: () => props$c.avatar.mpAvatar
  4692. },
  4693. // 是否使用随机背景色
  4694. randomBgColor: {
  4695. type: Boolean,
  4696. default: () => props$c.avatar.randomBgColor
  4697. },
  4698. // 加载失败的默认头像(组件有内置默认图片)
  4699. defaultUrl: {
  4700. type: String,
  4701. default: () => props$c.avatar.defaultUrl
  4702. },
  4703. // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
  4704. colorIndex: {
  4705. type: [String, Number],
  4706. // 校验参数规则,索引在0-19之间
  4707. validator(n) {
  4708. return test.range(n, [0, 19]) || n === "";
  4709. },
  4710. default: () => props$c.avatar.colorIndex
  4711. },
  4712. // 组件标识符
  4713. name: {
  4714. type: String,
  4715. default: () => props$c.avatar.name
  4716. }
  4717. }
  4718. };
  4719. const base64Avatar = "data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjREMEQwRkY0RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjREMEQwRkY1RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQwRDBGRjJGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEQwRDBGRjNGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYG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";
  4720. const _sfc_main$4 = {
  4721. name: "u-avatar",
  4722. mixins: [mpMixin, mixin$1, props$1],
  4723. data() {
  4724. return {
  4725. // 如果配置randomBgColor参数为true,在图标或者文字的模式下,会随机从中取出一个颜色值当做背景色
  4726. colors: [
  4727. "#ffb34b",
  4728. "#f2bba9",
  4729. "#f7a196",
  4730. "#f18080",
  4731. "#88a867",
  4732. "#bfbf39",
  4733. "#89c152",
  4734. "#94d554",
  4735. "#f19ec2",
  4736. "#afaae4",
  4737. "#e1b0df",
  4738. "#c38cc1",
  4739. "#72dcdc",
  4740. "#9acdcb",
  4741. "#77b1cc",
  4742. "#448aca",
  4743. "#86cefa",
  4744. "#98d1ee",
  4745. "#73d1f1",
  4746. "#80a7dc"
  4747. ],
  4748. avatarUrl: this.src,
  4749. allowMp: false
  4750. };
  4751. },
  4752. watch: {
  4753. // 监听头像src的变化,赋值给内部的avatarUrl变量,因为图片加载失败时,需要修改图片的src为默认值
  4754. // 而组件内部不能直接修改props的值,所以需要一个中间变量
  4755. src: {
  4756. immediate: true,
  4757. handler(newVal) {
  4758. this.avatarUrl = newVal;
  4759. if (!newVal) {
  4760. this.errorHandler();
  4761. }
  4762. }
  4763. }
  4764. },
  4765. computed: {
  4766. imageStyle() {
  4767. const style = {};
  4768. return style;
  4769. }
  4770. },
  4771. created() {
  4772. this.init();
  4773. },
  4774. emits: ["click"],
  4775. methods: {
  4776. addStyle,
  4777. addUnit,
  4778. random,
  4779. init() {
  4780. },
  4781. // 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式
  4782. isImg() {
  4783. return this.src.indexOf("/") !== -1;
  4784. },
  4785. // 图片加载时失败时触发
  4786. errorHandler() {
  4787. this.avatarUrl = this.defaultUrl || base64Avatar;
  4788. },
  4789. clickHandler() {
  4790. this.$emit("click", this.name);
  4791. }
  4792. }
  4793. };
  4794. function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
  4795. const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
  4796. const _component_u_text = resolveEasycom(vue.resolveDynamicComponent("u-text"), __easycom_1$1);
  4797. return vue.openBlock(), vue.createElementBlock(
  4798. "view",
  4799. {
  4800. class: vue.normalizeClass(["u-avatar", [`u-avatar--${_ctx.shape}`]]),
  4801. style: vue.normalizeStyle([{
  4802. backgroundColor: _ctx.text || _ctx.icon ? _ctx.randomBgColor ? $data.colors[_ctx.colorIndex !== "" ? _ctx.colorIndex : $options.random(0, 19)] : _ctx.bgColor : "transparent",
  4803. width: $options.addUnit(_ctx.size),
  4804. height: $options.addUnit(_ctx.size)
  4805. }, $options.addStyle(_ctx.customStyle)]),
  4806. onClick: _cache[1] || (_cache[1] = (...args) => $options.clickHandler && $options.clickHandler(...args))
  4807. },
  4808. [
  4809. vue.renderSlot(_ctx.$slots, "default", {}, () => [
  4810. _ctx.mpAvatar && $data.allowMp ? (vue.openBlock(), vue.createElementBlock(
  4811. vue.Fragment,
  4812. { key: 0 },
  4813. [],
  4814. 64
  4815. /* STABLE_FRAGMENT */
  4816. )) : _ctx.icon ? (vue.openBlock(), vue.createBlock(_component_u_icon, {
  4817. key: 1,
  4818. name: _ctx.icon,
  4819. size: _ctx.fontSize,
  4820. color: _ctx.color
  4821. }, null, 8, ["name", "size", "color"])) : _ctx.text ? (vue.openBlock(), vue.createBlock(_component_u_text, {
  4822. key: 2,
  4823. text: _ctx.text,
  4824. size: _ctx.fontSize,
  4825. color: _ctx.color,
  4826. align: "center",
  4827. customStyle: "justify-content: center"
  4828. }, null, 8, ["text", "size", "color"])) : (vue.openBlock(), vue.createElementBlock("image", {
  4829. key: 3,
  4830. class: vue.normalizeClass(["u-avatar__image", [`u-avatar__image--${_ctx.shape}`]]),
  4831. src: $data.avatarUrl || _ctx.defaultUrl,
  4832. mode: _ctx.mode,
  4833. onError: _cache[0] || (_cache[0] = (...args) => $options.errorHandler && $options.errorHandler(...args)),
  4834. style: vue.normalizeStyle([{
  4835. width: $options.addUnit(_ctx.size),
  4836. height: $options.addUnit(_ctx.size)
  4837. }])
  4838. }, null, 46, ["src", "mode"]))
  4839. ], true)
  4840. ],
  4841. 6
  4842. /* CLASS, STYLE */
  4843. );
  4844. }
  4845. const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__scopeId", "data-v-34d954f9"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-avatar/u-avatar.vue"]]);
  4846. const props = {
  4847. props: {
  4848. // 绑定的值
  4849. modelValue: {
  4850. type: [String, Number],
  4851. default: () => props$c.input.value
  4852. },
  4853. // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数
  4854. // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序
  4855. // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序
  4856. // text-文本输入键盘
  4857. type: {
  4858. type: String,
  4859. default: () => props$c.input.type
  4860. },
  4861. // 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true,
  4862. // 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序
  4863. fixed: {
  4864. type: Boolean,
  4865. default: () => props$c.input.fixed
  4866. },
  4867. // 是否禁用输入框
  4868. disabled: {
  4869. type: Boolean,
  4870. default: () => props$c.input.disabled
  4871. },
  4872. // 禁用状态时的背景色
  4873. disabledColor: {
  4874. type: String,
  4875. default: () => props$c.input.disabledColor
  4876. },
  4877. // 是否显示清除控件
  4878. clearable: {
  4879. type: Boolean,
  4880. default: () => props$c.input.clearable
  4881. },
  4882. // 是否密码类型
  4883. password: {
  4884. type: Boolean,
  4885. default: () => props$c.input.password
  4886. },
  4887. // 最大输入长度,设置为 -1 的时候不限制最大长度
  4888. maxlength: {
  4889. type: [String, Number],
  4890. default: () => props$c.input.maxlength
  4891. },
  4892. // 输入框为空时的占位符
  4893. placeholder: {
  4894. type: String,
  4895. default: () => props$c.input.placeholder
  4896. },
  4897. // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/
  4898. placeholderClass: {
  4899. type: String,
  4900. default: () => props$c.input.placeholderClass
  4901. },
  4902. // 指定placeholder的样式
  4903. placeholderStyle: {
  4904. type: [String, Object],
  4905. default: () => props$c.input.placeholderStyle
  4906. },
  4907. // 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效
  4908. showWordLimit: {
  4909. type: Boolean,
  4910. default: () => props$c.input.showWordLimit
  4911. },
  4912. // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档
  4913. // https://uniapp.dcloud.io/component/input
  4914. // https://uniapp.dcloud.io/component/textarea
  4915. confirmType: {
  4916. type: String,
  4917. default: () => props$c.input.confirmType
  4918. },
  4919. // 点击键盘右下角按钮时是否保持键盘不收起,H5无效
  4920. confirmHold: {
  4921. type: Boolean,
  4922. default: () => props$c.input.confirmHold
  4923. },
  4924. // focus时,点击页面的时候不收起键盘,微信小程序有效
  4925. holdKeyboard: {
  4926. type: Boolean,
  4927. default: () => props$c.input.holdKeyboard
  4928. },
  4929. // 自动获取焦点
  4930. // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点
  4931. focus: {
  4932. type: Boolean,
  4933. default: () => props$c.input.focus
  4934. },
  4935. // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效
  4936. autoBlur: {
  4937. type: Boolean,
  4938. default: () => props$c.input.autoBlur
  4939. },
  4940. // 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效
  4941. disableDefaultPadding: {
  4942. type: Boolean,
  4943. default: () => props$c.input.disableDefaultPadding
  4944. },
  4945. // 指定focus时光标的位置
  4946. cursor: {
  4947. type: [String, Number],
  4948. default: () => props$c.input.cursor
  4949. },
  4950. // 输入框聚焦时底部与键盘的距离
  4951. cursorSpacing: {
  4952. type: [String, Number],
  4953. default: () => props$c.input.cursorSpacing
  4954. },
  4955. // 光标起始位置,自动聚集时有效,需与selection-end搭配使用
  4956. selectionStart: {
  4957. type: [String, Number],
  4958. default: () => props$c.input.selectionStart
  4959. },
  4960. // 光标结束位置,自动聚集时有效,需与selection-start搭配使用
  4961. selectionEnd: {
  4962. type: [String, Number],
  4963. default: () => props$c.input.selectionEnd
  4964. },
  4965. // 键盘弹起时,是否自动上推页面
  4966. adjustPosition: {
  4967. type: Boolean,
  4968. default: () => props$c.input.adjustPosition
  4969. },
  4970. // 输入框内容对齐方式,可选值为:left|center|right
  4971. inputAlign: {
  4972. type: String,
  4973. default: () => props$c.input.inputAlign
  4974. },
  4975. // 输入框字体的大小
  4976. fontSize: {
  4977. type: [String, Number],
  4978. default: () => props$c.input.fontSize
  4979. },
  4980. // 输入框字体颜色
  4981. color: {
  4982. type: String,
  4983. default: () => props$c.input.color
  4984. },
  4985. // 输入框前置图标
  4986. prefixIcon: {
  4987. type: String,
  4988. default: () => props$c.input.prefixIcon
  4989. },
  4990. // 前置图标样式,对象或字符串
  4991. prefixIconStyle: {
  4992. type: [String, Object],
  4993. default: () => props$c.input.prefixIconStyle
  4994. },
  4995. // 输入框后置图标
  4996. suffixIcon: {
  4997. type: String,
  4998. default: () => props$c.input.suffixIcon
  4999. },
  5000. // 后置图标样式,对象或字符串
  5001. suffixIconStyle: {
  5002. type: [String, Object],
  5003. default: () => props$c.input.suffixIconStyle
  5004. },
  5005. // 边框类型,surround-四周边框,bottom-底部边框,none-无边框
  5006. border: {
  5007. type: String,
  5008. default: () => props$c.input.border
  5009. },
  5010. // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会
  5011. readonly: {
  5012. type: Boolean,
  5013. default: () => props$c.input.readonly
  5014. },
  5015. // 输入框形状,circle-圆形,square-方形
  5016. shape: {
  5017. type: String,
  5018. default: () => props$c.input.shape
  5019. },
  5020. // 用于处理或者过滤输入框内容的方法
  5021. formatter: {
  5022. type: [Function, null],
  5023. default: () => props$c.input.formatter
  5024. },
  5025. // 是否忽略组件内对文本合成系统事件的处理
  5026. ignoreCompositionEvent: {
  5027. type: Boolean,
  5028. default: true
  5029. }
  5030. }
  5031. };
  5032. const _sfc_main$3 = {
  5033. name: "u-input",
  5034. mixins: [mpMixin, mixin$1, props],
  5035. data() {
  5036. return {
  5037. // 清除操作
  5038. clearInput: false,
  5039. // 输入框的值
  5040. innerValue: "",
  5041. // 是否处于获得焦点状态
  5042. focused: false,
  5043. // value是否第一次变化,在watch中,由于加入immediate属性,会在第一次触发,此时不应该认为value发生了变化
  5044. firstChange: true,
  5045. // value绑定值的变化是由内部还是外部引起的
  5046. changeFromInner: false,
  5047. // 过滤处理方法
  5048. innerFormatter: (value2) => value2
  5049. };
  5050. },
  5051. watch: {
  5052. modelValue: {
  5053. immediate: true,
  5054. handler(newVal, oldVal) {
  5055. this.innerValue = newVal;
  5056. this.firstChange = false;
  5057. this.changeFromInner = false;
  5058. }
  5059. }
  5060. },
  5061. computed: {
  5062. // 是否显示清除控件
  5063. isShowClear() {
  5064. const { clearable, readonly, focused, innerValue } = this;
  5065. return !!clearable && !readonly && !!focused && innerValue !== "";
  5066. },
  5067. // 组件的类名
  5068. inputClass() {
  5069. let classes = [], { border, disabled, shape } = this;
  5070. border === "surround" && (classes = classes.concat(["u-border", "u-input--radius"]));
  5071. classes.push(`u-input--${shape}`);
  5072. border === "bottom" && (classes = classes.concat([
  5073. "u-border-bottom",
  5074. "u-input--no-radius"
  5075. ]));
  5076. return classes.join(" ");
  5077. },
  5078. // 组件的样式
  5079. wrapperStyle() {
  5080. const style = {};
  5081. if (this.disabled) {
  5082. style.backgroundColor = this.disabledColor;
  5083. }
  5084. if (this.border === "none") {
  5085. style.padding = "0";
  5086. } else {
  5087. style.paddingTop = "6px";
  5088. style.paddingBottom = "6px";
  5089. style.paddingLeft = "9px";
  5090. style.paddingRight = "9px";
  5091. }
  5092. return deepMerge$1(style, addStyle(this.customStyle));
  5093. },
  5094. // 输入框的样式
  5095. inputStyle() {
  5096. const style = {
  5097. color: this.color,
  5098. fontSize: addUnit(this.fontSize),
  5099. textAlign: this.inputAlign
  5100. };
  5101. return style;
  5102. }
  5103. },
  5104. emits: ["update:modelValue", "focus", "blur", "change", "confirm", "clear", "keyboardheightchange"],
  5105. methods: {
  5106. // 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
  5107. setFormatter(e) {
  5108. this.innerFormatter = e;
  5109. },
  5110. // 当键盘输入时,触发input事件
  5111. onInput(e) {
  5112. let { value: value2 = "" } = e.detail || {};
  5113. const formatter = this.formatter || this.innerFormatter;
  5114. const formatValue = formatter(value2);
  5115. this.innerValue = value2;
  5116. this.$nextTick(() => {
  5117. this.innerValue = formatValue;
  5118. this.valueChange();
  5119. });
  5120. },
  5121. // 输入框失去焦点时触发
  5122. onBlur(event) {
  5123. this.$emit("blur", event.detail.value);
  5124. sleep(150).then(() => {
  5125. this.focused = false;
  5126. });
  5127. formValidate(this, "blur");
  5128. },
  5129. // 输入框聚焦时触发
  5130. onFocus(event) {
  5131. this.focused = true;
  5132. this.$emit("focus");
  5133. },
  5134. // 点击完成按钮时触发
  5135. onConfirm(event) {
  5136. this.$emit("confirm", this.innerValue);
  5137. },
  5138. // 键盘高度发生变化的时候触发此事件
  5139. // 兼容性:微信小程序2.7.0+、App 3.1.0+
  5140. onkeyboardheightchange(event) {
  5141. this.$emit("keyboardheightchange", event);
  5142. },
  5143. // 内容发生变化,进行处理
  5144. valueChange() {
  5145. if (this.clearInput) {
  5146. this.innerValue = "";
  5147. this.clearInput = false;
  5148. }
  5149. const value2 = this.innerValue;
  5150. this.$nextTick(() => {
  5151. this.$emit("update:modelValue", value2);
  5152. this.changeFromInner = true;
  5153. this.$emit("change", value2);
  5154. formValidate(this, "change");
  5155. });
  5156. },
  5157. // 点击清除控件
  5158. onClear() {
  5159. this.clearInput = true;
  5160. this.innerValue = "";
  5161. this.$nextTick(() => {
  5162. this.valueChange();
  5163. this.$emit("clear");
  5164. });
  5165. },
  5166. /**
  5167. * 在安卓nvue上,事件无法冒泡
  5168. * 在某些时间,我们希望监听u-from-item的点击事件,此时会导致点击u-form-item内的u-input后
  5169. * 无法触发u-form-item的点击事件,这里通过手动调用u-form-item的方法进行触发
  5170. */
  5171. clickHandler() {
  5172. }
  5173. }
  5174. };
  5175. function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
  5176. const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
  5177. return vue.openBlock(), vue.createElementBlock(
  5178. "view",
  5179. {
  5180. class: vue.normalizeClass(["u-input", $options.inputClass]),
  5181. style: vue.normalizeStyle([$options.wrapperStyle])
  5182. },
  5183. [
  5184. vue.createElementVNode("view", { class: "u-input__content" }, [
  5185. _ctx.prefixIcon || _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("view", {
  5186. key: 0,
  5187. class: "u-input__content__prefix-icon"
  5188. }, [
  5189. vue.renderSlot(_ctx.$slots, "prefix", {}, () => [
  5190. vue.createVNode(_component_u_icon, {
  5191. name: _ctx.prefixIcon,
  5192. size: "18",
  5193. customStyle: _ctx.prefixIconStyle
  5194. }, null, 8, ["name", "customStyle"])
  5195. ], true)
  5196. ])) : vue.createCommentVNode("v-if", true),
  5197. vue.createElementVNode("view", {
  5198. class: "u-input__content__field-wrapper",
  5199. onClick: _cache[5] || (_cache[5] = (...args) => $options.clickHandler && $options.clickHandler(...args))
  5200. }, [
  5201. vue.createCommentVNode(" 根据uni-app的input组件文档,H5和APP中只要声明了password参数(无论true还是false),type均失效,此时\n 为了防止type=number时,又存在password属性,type无效,此时需要设置password为undefined\n "),
  5202. vue.createElementVNode("input", {
  5203. class: "u-input__content__field-wrapper__field",
  5204. style: vue.normalizeStyle([$options.inputStyle]),
  5205. type: _ctx.type,
  5206. focus: _ctx.focus,
  5207. cursor: _ctx.cursor,
  5208. value: $data.innerValue,
  5209. "auto-blur": _ctx.autoBlur,
  5210. disabled: _ctx.disabled || _ctx.readonly,
  5211. maxlength: _ctx.maxlength,
  5212. placeholder: _ctx.placeholder,
  5213. "placeholder-style": _ctx.placeholderStyle,
  5214. "placeholder-class": _ctx.placeholderClass,
  5215. "confirm-type": _ctx.confirmType,
  5216. "confirm-hold": _ctx.confirmHold,
  5217. "hold-keyboard": _ctx.holdKeyboard,
  5218. "cursor-spacing": _ctx.cursorSpacing,
  5219. "adjust-position": _ctx.adjustPosition,
  5220. "selection-end": _ctx.selectionEnd,
  5221. "selection-start": _ctx.selectionStart,
  5222. password: _ctx.password || _ctx.type === "password" || false,
  5223. ignoreCompositionEvent: _ctx.ignoreCompositionEvent,
  5224. onInput: _cache[0] || (_cache[0] = (...args) => $options.onInput && $options.onInput(...args)),
  5225. onBlur: _cache[1] || (_cache[1] = (...args) => $options.onBlur && $options.onBlur(...args)),
  5226. onFocus: _cache[2] || (_cache[2] = (...args) => $options.onFocus && $options.onFocus(...args)),
  5227. onConfirm: _cache[3] || (_cache[3] = (...args) => $options.onConfirm && $options.onConfirm(...args)),
  5228. onKeyboardheightchange: _cache[4] || (_cache[4] = (...args) => $options.onkeyboardheightchange && $options.onkeyboardheightchange(...args))
  5229. }, null, 44, ["type", "focus", "cursor", "value", "auto-blur", "disabled", "maxlength", "placeholder", "placeholder-style", "placeholder-class", "confirm-type", "confirm-hold", "hold-keyboard", "cursor-spacing", "adjust-position", "selection-end", "selection-start", "password", "ignoreCompositionEvent"])
  5230. ]),
  5231. $options.isShowClear ? (vue.openBlock(), vue.createElementBlock("view", {
  5232. key: 1,
  5233. class: "u-input__content__clear",
  5234. onClick: _cache[6] || (_cache[6] = (...args) => $options.onClear && $options.onClear(...args))
  5235. }, [
  5236. vue.createVNode(_component_u_icon, {
  5237. name: "close",
  5238. size: "11",
  5239. color: "#ffffff",
  5240. customStyle: "line-height: 12px"
  5241. })
  5242. ])) : vue.createCommentVNode("v-if", true),
  5243. _ctx.suffixIcon || _ctx.$slots.suffix ? (vue.openBlock(), vue.createElementBlock("view", {
  5244. key: 2,
  5245. class: "u-input__content__subfix-icon"
  5246. }, [
  5247. vue.renderSlot(_ctx.$slots, "suffix", {}, () => [
  5248. vue.createVNode(_component_u_icon, {
  5249. name: _ctx.suffixIcon,
  5250. size: "18",
  5251. customStyle: _ctx.suffixIconStyle
  5252. }, null, 8, ["name", "customStyle"])
  5253. ], true)
  5254. ])) : vue.createCommentVNode("v-if", true)
  5255. ])
  5256. ],
  5257. 6
  5258. /* CLASS, STYLE */
  5259. );
  5260. }
  5261. const __easycom_1 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__scopeId", "data-v-df79975b"], ["__file", "F:/project/liveH5-v3/uni_modules/uview-plus/components/u-input/u-input.vue"]]);
  5262. const _imports_0$1 = "/static/images/top.png";
  5263. const _imports_1$1 = "/static/images/up-down.png";
  5264. const _imports_2$1 = "/static/images/wechat.png";
  5265. var wsUrl$1 = "ws://192.168.10.125:7114/app/webSocket";
  5266. var pingpangTimes$1 = null;
  5267. var isSocketOpen$1 = false;
  5268. var socket$1 = null;
  5269. const _sfc_main$2 = {
  5270. data() {
  5271. return {
  5272. icon: "公告:",
  5273. icon2: "广播:",
  5274. text1: "组件功能丰富多端兼容让您快速集成开箱即用",
  5275. text2: "丰富多端兼容让您快速集成开箱即用",
  5276. srcAvatar: "",
  5277. acttab: 0,
  5278. value: "",
  5279. talkdisabled: false,
  5280. //是否禁用
  5281. placeholderText: "请输入内容",
  5282. showadd: false,
  5283. autoplay: true,
  5284. //自动播放
  5285. userinfo: "",
  5286. //用户信息
  5287. path: "http://192.168.10.150/dev-api",
  5288. livedata: {},
  5289. bufferRate: 0,
  5290. // 缓冲时间
  5291. playDuration: 0,
  5292. //视频播放时间
  5293. videoContext: "",
  5294. thistime: uni.$u.timeFormat(/* @__PURE__ */ new Date(), "yyyy-mm-dd hh:MM:ss"),
  5295. codeimg: "",
  5296. userid: "4",
  5297. liveId: "5",
  5298. upDown: true,
  5299. //是否视频显示隐藏
  5300. isLongPress: false,
  5301. // 是否长按
  5302. timeout: null,
  5303. // 计时器
  5304. list1: [
  5305. {
  5306. name: "讨论"
  5307. },
  5308. // {
  5309. // name: '问答'
  5310. // },
  5311. {
  5312. name: "资料"
  5313. }
  5314. ],
  5315. talklist: [],
  5316. scrollIntoView: "",
  5317. showWelcomeMessage: false,
  5318. messageContent: ""
  5319. };
  5320. },
  5321. mounted() {
  5322. this.initSocket();
  5323. var that = this;
  5324. uni.$on("initSocket", () => {
  5325. that.initSocket();
  5326. });
  5327. uni.$on("sendMsg", (item) => {
  5328. that.sendMsg(item);
  5329. });
  5330. uni.$on("closeWebSocket", () => {
  5331. that.closeWebSocket();
  5332. });
  5333. this.getEWechatSdk();
  5334. this.userinfo = JSON.parse(uni.getStorageSync("userInfo"));
  5335. this.getliving();
  5336. this.gettalklist();
  5337. },
  5338. onReady: function(res) {
  5339. this.videoContext = uni.createVideoContext("myVideo");
  5340. },
  5341. onLoad() {
  5342. },
  5343. methods: {
  5344. gettalklist() {
  5345. const param = {
  5346. id: this.liveId
  5347. };
  5348. gettextlist(param).then((res) => {
  5349. if (res.code == 200) {
  5350. this.talklist = res.data;
  5351. this.$nextTick(() => {
  5352. this.scrollIntoView = `list_${this.talklist.length - 1}`;
  5353. });
  5354. }
  5355. });
  5356. },
  5357. longPress() {
  5358. this.timeout = setTimeout(() => {
  5359. this.isLongPress = true;
  5360. uni.saveImageToPhotosAlbum({
  5361. filePath: this.livedata.qwQrCode,
  5362. // 图片的本地路径或网络路径
  5363. success: () => {
  5364. uni.showToast({
  5365. title: "保存成功"
  5366. });
  5367. },
  5368. fail: () => {
  5369. uni.showToast({
  5370. title: "保存失败",
  5371. icon: "none"
  5372. });
  5373. }
  5374. });
  5375. }, 500);
  5376. },
  5377. cancelLongPress() {
  5378. clearTimeout(this.timeout);
  5379. this.isLongPress = false;
  5380. },
  5381. getliving() {
  5382. this.gettalklist();
  5383. const param = {
  5384. id: this.liveId
  5385. };
  5386. getlive(param).then((res) => {
  5387. if (res.code == 200) {
  5388. this.livedata = res.data;
  5389. this.codeimg = res.data.qwQrCode;
  5390. if (this.livedata.status == 2) {
  5391. this.autoplay = true;
  5392. this.videoContext.seek(this.livedata.nowDuration);
  5393. } else {
  5394. this.autoplay = false;
  5395. this.placeholderText = "直播开始才能发言讨论";
  5396. this.talkdisabled = true;
  5397. }
  5398. } else {
  5399. uni.showToast({
  5400. title: res.msg,
  5401. icon: "none",
  5402. duration: 2e3
  5403. });
  5404. }
  5405. });
  5406. },
  5407. addwechat() {
  5408. this.showadd = !this.showadd;
  5409. },
  5410. open() {
  5411. },
  5412. close() {
  5413. this.showadd = !this.showadd;
  5414. },
  5415. tabClick(e) {
  5416. this.acttab = e.index;
  5417. if (e.index == 0) {
  5418. this.$nextTick(() => {
  5419. this.gettalklist();
  5420. });
  5421. }
  5422. },
  5423. getEWechatSdk() {
  5424. let eWechatSdk = "";
  5425. if (/(Android)/i.test(navigator.userAgent)) {
  5426. eWechatSdk = "jWeixin";
  5427. } else if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  5428. eWechatSdk = "wx";
  5429. } else {
  5430. eWechatSdk = "jWeixin";
  5431. }
  5432. uni.setStorageSync("wxSdk", eWechatSdk);
  5433. },
  5434. closeWebSocket() {
  5435. if (socket$1 != null) {
  5436. uni.closeSocket();
  5437. }
  5438. clearInterval(pingpangTimes$1);
  5439. },
  5440. reConnect() {
  5441. var that = this;
  5442. try {
  5443. uni.closeSocket();
  5444. } catch (e) {
  5445. }
  5446. setTimeout(function() {
  5447. that.initSocket();
  5448. }, 1e4);
  5449. },
  5450. initSocket() {
  5451. var that = this;
  5452. socket$1 = uni.connectSocket({
  5453. // url: wsUrl+"?userId=40486&liveId=2",
  5454. url: wsUrl$1 + "?userId=" + this.userid + "&liveId=" + this.liveId + "&AppToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI0IiwiaWF0IjoxNzQwNzIxMDQ1LCJleHAiOjE3NDEzMjU4NDV9.PgS83JTMSJgVFD6vGAhUsEPbS6Az4yMyX8wVug61TZNTB3092CtvANo-AB9ZG4NdSBLgLrf4litM3vvTk-FK0g",
  5455. multiple: true,
  5456. success: (res) => {
  5457. clearInterval(pingpangTimes$1);
  5458. uni.onSocketMessage((res2) => {
  5459. const redata = JSON.parse(res2.data);
  5460. this.talklist.push(redata.data);
  5461. this.$nextTick(() => {
  5462. this.scrollIntoView = `list_${this.talklist.length - 1}`;
  5463. });
  5464. if (redata.cmd == "deleteId") {
  5465. uni.$emit("deleteId");
  5466. } else if (redata.cmd == "init") {
  5467. uni.$emit("init", redata.data);
  5468. } else if (redata.cmd == "reload") {
  5469. uni.$emit("reload");
  5470. } else if (redata.cmd == "sendStatus") {
  5471. uni.$emit("sendStatus", redata.data);
  5472. } else if (redata.data.cmd == "entry") {
  5473. this.showWelcomeMessage = true;
  5474. uni.$emit("entry", redata.data);
  5475. formatAppLog("log", "at pages/home/live.vue:338", redata.data);
  5476. }
  5477. });
  5478. },
  5479. error: (res) => {
  5480. uni.$emit("websocket", 0);
  5481. }
  5482. });
  5483. uni.onSocketOpen(() => {
  5484. isSocketOpen$1 = true;
  5485. formatAppLog("log", "at pages/home/live.vue:351", "WebSocket连接已打开!!");
  5486. uni.showToast({
  5487. title: "插件已打开",
  5488. icon: "none"
  5489. });
  5490. });
  5491. uni.onSocketClose(() => {
  5492. isSocketOpen$1 = false;
  5493. clearInterval(pingpangTimes$1);
  5494. formatAppLog("log", "at pages/home/live.vue:362", "WebSocket连接已关闭!");
  5495. uni.showToast({
  5496. title: "插件离线",
  5497. icon: "none"
  5498. });
  5499. that.reConnect();
  5500. });
  5501. uni.onSocketError(() => {
  5502. isSocketOpen$1 = false;
  5503. clearInterval(pingpangTimes$1);
  5504. formatAppLog("log", "at pages/home/live.vue:375", "WebSocket连接打开失败");
  5505. uni.showToast({
  5506. title: "插件离线",
  5507. icon: "none"
  5508. });
  5509. uni.showModal({
  5510. content: "聊天连接失败是否重新尝试连接",
  5511. success() {
  5512. that.reConnect();
  5513. }
  5514. });
  5515. });
  5516. },
  5517. sendMsg() {
  5518. if (isSocketOpen$1) {
  5519. const data = {
  5520. liveId: this.livedata.liveId,
  5521. userId: this.userinfo.userId,
  5522. userType: 0,
  5523. cmd: "sendMsg",
  5524. msg: this.value,
  5525. nickName: this.userinfo.nickName,
  5526. avatar: this.userinfo.avatar
  5527. };
  5528. if (this.value == "") {
  5529. uni.showToast({
  5530. title: "不能发送空消息",
  5531. icon: "none"
  5532. });
  5533. } else {
  5534. socket$1.send({
  5535. data: JSON.stringify(data),
  5536. success: () => {
  5537. formatAppLog("log", "at pages/home/live.vue:411", "发送成功");
  5538. this.value = "";
  5539. },
  5540. fail: () => {
  5541. formatAppLog("log", "at pages/home/live.vue:415", "发送失败");
  5542. }
  5543. });
  5544. }
  5545. }
  5546. }
  5547. }
  5548. };
  5549. function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
  5550. const _component_u_tabs = resolveEasycom(vue.resolveDynamicComponent("u-tabs"), __easycom_0$1);
  5551. const _component_u_avatar = resolveEasycom(vue.resolveDynamicComponent("u-avatar"), __easycom_0);
  5552. const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_1);
  5553. const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
  5554. const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3);
  5555. return vue.openBlock(), vue.createElementBlock("view", { class: "live column flex-1" }, [
  5556. $data.upDown ? (vue.openBlock(), vue.createElementBlock("view", {
  5557. key: 0,
  5558. class: "videolist"
  5559. }, [
  5560. vue.createElementVNode("view", { class: "vedio" }, [
  5561. vue.createCommentVNode(` <view class="p20 textscll">\r
  5562. <u-notice-bar :icon="icon" :text="text1" mode="closable" bgColor='rgba(0,0,0,0.7)' color='#fff'\r
  5563. style="border-radius: 10rpx;"></u-notice-bar>\r
  5564. </view> `),
  5565. vue.createElementVNode("video", {
  5566. id: "myVideo",
  5567. class: "videotop",
  5568. src: $data.path + $data.livedata.videoUrl,
  5569. autoplay: $data.autoplay,
  5570. controls: false,
  5571. poster: $data.livedata.liveImgUrl,
  5572. "vslide-gesture-in-fullscreen": "true",
  5573. "show-center-play-btn": false
  5574. }, null, 8, ["src", "autoplay", "poster"])
  5575. ]),
  5576. !$data.autoplay ? (vue.openBlock(), vue.createElementBlock("view", {
  5577. key: 0,
  5578. class: "popup-video"
  5579. }, [
  5580. $data.livedata.status == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  5581. key: 0,
  5582. class: "fs36 bold"
  5583. }, "——直播还未开始——")) : vue.createCommentVNode("v-if", true),
  5584. $data.livedata.status == 3 ? (vue.openBlock(), vue.createElementBlock("view", {
  5585. key: 1,
  5586. class: "fs36 bold"
  5587. }, "——直播已经结束——")) : vue.createCommentVNode("v-if", true),
  5588. vue.createElementVNode("view", { class: "fs28 mtb20" }, "了解更多,点击下方联系老师"),
  5589. vue.createElementVNode("view", {
  5590. class: "more",
  5591. onClick: _cache[0] || (_cache[0] = ($event) => $data.showadd = !$data.showadd)
  5592. }, "联系老师")
  5593. ])) : vue.createCommentVNode("v-if", true)
  5594. ])) : vue.createCommentVNode("v-if", true),
  5595. vue.createElementVNode("view", {
  5596. class: "justify-between align-center bgf",
  5597. style: { "border-bottom": "#dedede solid 2rpx" }
  5598. }, [
  5599. vue.createVNode(_component_u_tabs, {
  5600. list: $data.list1,
  5601. onClick: $options.tabClick,
  5602. inactiveStyle: "color:#888",
  5603. itemStyle: "width:120rpx;height: 80rpx;"
  5604. }, null, 8, ["list", "onClick"]),
  5605. vue.createElementVNode("view", { class: "justify-around flex-1 align-center" }, [
  5606. vue.createElementVNode("view", {
  5607. class: "reflash",
  5608. onClick: _cache[1] || (_cache[1] = ($event) => $options.getliving())
  5609. }, "刷新"),
  5610. vue.withDirectives(vue.createElementVNode(
  5611. "image",
  5612. {
  5613. src: _imports_0$1,
  5614. class: "wh48",
  5615. onClick: _cache[2] || (_cache[2] = ($event) => $data.upDown = !$data.upDown)
  5616. },
  5617. null,
  5618. 512
  5619. /* NEED_PATCH */
  5620. ), [
  5621. [vue.vShow, $data.upDown]
  5622. ]),
  5623. vue.withDirectives(vue.createElementVNode(
  5624. "image",
  5625. {
  5626. src: _imports_1$1,
  5627. class: "wh48",
  5628. onClick: _cache[3] || (_cache[3] = ($event) => $data.upDown = !$data.upDown)
  5629. },
  5630. null,
  5631. 512
  5632. /* NEED_PATCH */
  5633. ), [
  5634. [vue.vShow, !$data.upDown]
  5635. ])
  5636. ])
  5637. ]),
  5638. $data.acttab == 0 ? (vue.openBlock(), vue.createElementBlock("view", {
  5639. key: 1,
  5640. class: "talkbox column flex-1 hidden",
  5641. style: { "height": "100%" }
  5642. }, [
  5643. vue.createCommentVNode(` <u-notice-bar :icon="icon2" :text="text2" mode="closable" bgColor='rgba(254,253,235)' color='#FF5C03'\r
  5644. style=" height: 30rpx;line-height: 40rpx;"></u-notice-bar> `),
  5645. vue.createElementVNode("scroll-view", {
  5646. "scroll-y": "true",
  5647. class: "talk p20 scrolly flex-1 column",
  5648. style: { "width": "calc(100% - 40rpx)", "height": "calc(100% - 40rpx)" },
  5649. "scroll-into-view": $data.scrollIntoView
  5650. }, [
  5651. (vue.openBlock(true), vue.createElementBlock(
  5652. vue.Fragment,
  5653. null,
  5654. vue.renderList($data.talklist, (item, index2) => {
  5655. return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  5656. class: "list justify-start",
  5657. key: item.index,
  5658. id: `list_${index2}`
  5659. }, [
  5660. vue.createVNode(_component_u_avatar, {
  5661. src: item.avatar,
  5662. size: "30"
  5663. }, null, 8, ["src"]),
  5664. vue.createElementVNode("view", { class: "ml16" }, [
  5665. vue.createElementVNode("view", { class: "fs24" }, [
  5666. item.userId == $data.userinfo.userId && item.cmd == "sendMsg" ? (vue.openBlock(), vue.createElementBlock("text", {
  5667. key: 0,
  5668. style: { "color": "#3fc69b", "transform": "scale(0.8)", "display": "inline-block" }
  5669. }, "[ 我 ]")) : vue.createCommentVNode("v-if", true),
  5670. item.userType == 1 ? (vue.openBlock(), vue.createElementBlock("text", {
  5671. key: 1,
  5672. style: { "color": "#c84e1e", "transform": "scale(0.8)", "display": "inline-block" }
  5673. }, " [ 管理员 ]")) : vue.createCommentVNode("v-if", true),
  5674. vue.createElementVNode(
  5675. "text",
  5676. null,
  5677. vue.toDisplayString(item.nickName),
  5678. 1
  5679. /* TEXT */
  5680. )
  5681. ]),
  5682. vue.createElementVNode("view", { class: "talktext bgf p20 mt12" }, [
  5683. vue.createElementVNode(
  5684. "view",
  5685. { class: "fs24" },
  5686. vue.toDisplayString(item.msg),
  5687. 1
  5688. /* TEXT */
  5689. )
  5690. ])
  5691. ])
  5692. ], 8, ["id"])), [
  5693. [vue.vShow, item.cmd == "sendMsg"]
  5694. ]);
  5695. }),
  5696. 128
  5697. /* KEYED_FRAGMENT */
  5698. )),
  5699. $data.showWelcomeMessage ? (vue.openBlock(), vue.createElementBlock("view", {
  5700. key: 0,
  5701. class: "welcome-message"
  5702. }, [
  5703. (vue.openBlock(true), vue.createElementBlock(
  5704. vue.Fragment,
  5705. null,
  5706. vue.renderList($data.talklist, (item, index2) => {
  5707. return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  5708. class: "list justify-start",
  5709. key: item.index,
  5710. id: `list_${index2}`
  5711. }, [
  5712. vue.createElementVNode("view", { class: "ml16" }, [
  5713. vue.createElementVNode("view", { class: "fs24" }, [
  5714. item.userType == 1 ? (vue.openBlock(), vue.createElementBlock("text", {
  5715. key: 0,
  5716. style: { "color": "#c84e1e", "transform": "scale(0.8)", "display": "inline-block" }
  5717. }, " [ 管理员 ]")) : vue.createCommentVNode("v-if", true)
  5718. ]),
  5719. vue.createElementVNode("view", { class: "talktext bgf p20 mt12 justify-start" }, [
  5720. vue.createElementVNode(
  5721. "text",
  5722. {
  5723. style: { "color": "#9e5584" },
  5724. class: "fs24"
  5725. },
  5726. vue.toDisplayString(item.nickName),
  5727. 1
  5728. /* TEXT */
  5729. ),
  5730. vue.createElementVNode(
  5731. "view",
  5732. { class: "fs24 flex-1" },
  5733. vue.toDisplayString(item.msg) + "直播间",
  5734. 1
  5735. /* TEXT */
  5736. )
  5737. ])
  5738. ])
  5739. ], 8, ["id"])), [
  5740. [vue.vShow, item.cmd == "entry" || item.cmd == "out"]
  5741. ]);
  5742. }),
  5743. 128
  5744. /* KEYED_FRAGMENT */
  5745. ))
  5746. ])) : vue.createCommentVNode("v-if", true)
  5747. ], 8, ["scroll-into-view"]),
  5748. vue.createElementVNode("view", { class: "pb90 mb20" }),
  5749. vue.createElementVNode("view", { class: "bot_talk bgf" }, [
  5750. vue.createVNode(_component_u_input, {
  5751. placeholder: $data.placeholderText,
  5752. border: "none",
  5753. customStyle: "background:#f1f7f7;padding:12rpx;padding-left:40rpx",
  5754. modelValue: $data.value,
  5755. "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $data.value = $event),
  5756. shape: "circle"
  5757. }, null, 8, ["placeholder", "modelValue"]),
  5758. vue.createCommentVNode(" :disabled='talkdisabled'></u-input> "),
  5759. vue.createElementVNode("view", {
  5760. class: "sent ml20",
  5761. onClick: _cache[5] || (_cache[5] = (...args) => $options.sendMsg && $options.sendMsg(...args))
  5762. }, "发送")
  5763. ])
  5764. ])) : vue.createCommentVNode("v-if", true),
  5765. vue.createCommentVNode(' <view class="answerbox" v-if="acttab==1">\r\n 问答\r\n </view> '),
  5766. $data.acttab == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  5767. key: 2,
  5768. class: "informationbox"
  5769. }, [
  5770. vue.createElementVNode("view", { class: "p20 bgf m20 radius20" }, [
  5771. vue.createElementVNode("view", {
  5772. innerHTML: $data.livedata.liveDesc
  5773. }, null, 8, ["innerHTML"]),
  5774. vue.withDirectives(vue.createElementVNode(
  5775. "view",
  5776. null,
  5777. "暂无资料",
  5778. 512
  5779. /* NEED_PATCH */
  5780. ), [
  5781. [vue.vShow, !$data.livedata.liveDesc]
  5782. ])
  5783. ])
  5784. ])) : vue.createCommentVNode("v-if", true),
  5785. vue.createElementVNode("view", {
  5786. class: "invite-member",
  5787. onClick: _cache[6] || (_cache[6] = (...args) => $options.addwechat && $options.addwechat(...args))
  5788. }, [
  5789. vue.createElementVNode("image", {
  5790. src: _imports_2$1,
  5791. class: "wh80 weimg"
  5792. }),
  5793. vue.createElementVNode("view", { class: "addwe" }, "加微信")
  5794. ]),
  5795. vue.createElementVNode("view", { class: "" }, [
  5796. vue.createVNode(_component_u_popup, {
  5797. show: $data.showadd,
  5798. onClose: $options.close,
  5799. onOpen: $options.open,
  5800. round: "20rpx",
  5801. bgColor: "#fffee1"
  5802. }, {
  5803. default: vue.withCtx(() => [
  5804. vue.createElementVNode("view", { class: "addchat p20" }, [
  5805. vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
  5806. vue.createVNode(_component_u_icon, {
  5807. name: "close",
  5808. size: "18",
  5809. onClick: _cache[7] || (_cache[7] = ($event) => $data.showadd = !$data.showadd)
  5810. })
  5811. ]),
  5812. vue.createElementVNode("view", { class: "column align-center" }, [
  5813. vue.createElementVNode("view", {
  5814. class: "fs36",
  5815. style: { "color": "#ff5c03" }
  5816. }, "扫码添加助教老师"),
  5817. vue.createElementVNode("view", { class: "fs28 color6" }, "扫码添加助教老师"),
  5818. vue.createElementVNode("view", {
  5819. class: "p10 mt40",
  5820. style: { "border": "#ff5c03 solid 2rpx" }
  5821. }, [
  5822. vue.createElementVNode("image", {
  5823. src: $data.codeimg,
  5824. class: "wh180",
  5825. onTouchstart: _cache[8] || (_cache[8] = (...args) => $options.longPress && $options.longPress(...args)),
  5826. onTouchend: _cache[9] || (_cache[9] = (...args) => $options.cancelLongPress && $options.cancelLongPress(...args))
  5827. }, null, 40, ["src"])
  5828. ]),
  5829. vue.createElementVNode("view", { class: "color6 mt20" }, "长按识别二维码")
  5830. ])
  5831. ])
  5832. ]),
  5833. _: 1
  5834. /* STABLE */
  5835. }, 8, ["show", "onClose", "onOpen"])
  5836. ])
  5837. ]);
  5838. }
  5839. const PagesHomeLive = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__scopeId", "data-v-81fcd0c9"], ["__file", "F:/project/liveH5-v3/pages/home/live.vue"]]);
  5840. const _imports_0 = "/static/images/more-icon.png";
  5841. const _imports_1 = "/static/images/redbag.png";
  5842. const _imports_2 = "/static/images/dianzan.png";
  5843. var wsUrl = "ws://192.168.10.125:17114/app/webSocket";
  5844. var pingpangTimes = null;
  5845. var isSocketOpen = false;
  5846. var socket = null;
  5847. const _sfc_main$1 = {
  5848. data() {
  5849. return {
  5850. liveId: "9",
  5851. userid: "4",
  5852. livedata: {},
  5853. codeimg: "",
  5854. placeholderText: "请输入讨论内容",
  5855. isZoom: false,
  5856. //点赞按钮控制是否放大
  5857. userinfo: "",
  5858. //用户信息
  5859. path: "http://192.168.10.150/dev-api",
  5860. value: "",
  5861. talkdisabled: false,
  5862. //输入框是否禁用
  5863. autoplay: false,
  5864. //视频自动播放
  5865. showadd: false,
  5866. talklist: [],
  5867. scrollIntoView: "",
  5868. bufferRate: 0,
  5869. //视频缓冲时间
  5870. playDuration: 0,
  5871. //视频播放时间
  5872. videoContext: "",
  5873. thistime: uni.$u.timeFormat(/* @__PURE__ */ new Date(), "yyyy-mm-dd hh:MM:ss"),
  5874. upDown: true,
  5875. //是否视频显示隐藏
  5876. isLongPress: false,
  5877. // 是否长按
  5878. timeout: null,
  5879. // 计时器
  5880. showWelcomeMessage: false,
  5881. isSubmit: false,
  5882. messageContent: "",
  5883. showziliao: false,
  5884. isScreen: true,
  5885. showAnswer: false,
  5886. //展示答题
  5887. Answerlistall: {},
  5888. //所有题目
  5889. answerlist: {},
  5890. //当前题目
  5891. answerfrist: 0,
  5892. //当前选择
  5893. checkboxValue: [],
  5894. //多选数据
  5895. checkboxFormValue: "",
  5896. //多选数据
  5897. allAnswerLists: []
  5898. // 新增:存储所有题目列表
  5899. };
  5900. },
  5901. mounted() {
  5902. this.initSocket();
  5903. var that = this;
  5904. uni.$on("initSocket", () => {
  5905. that.initSocket();
  5906. });
  5907. uni.$on("sendMsg", (item) => {
  5908. that.sendMsg(item);
  5909. });
  5910. uni.$on("closeWebSocket", () => {
  5911. that.closeWebSocket();
  5912. });
  5913. this.getEWechatSdk();
  5914. this.getliving();
  5915. this.gettalklist();
  5916. this.userinfo = JSON.parse(uni.getStorageSync("userInfo"));
  5917. this.getAnswerlists();
  5918. },
  5919. onReady: function(res) {
  5920. this.videoContext = uni.createVideoContext("myVideo");
  5921. },
  5922. methods: {
  5923. submitAnswers() {
  5924. if (this.isSubmit)
  5925. return;
  5926. this.isSubmit = true;
  5927. const data = {
  5928. questionId: this.answerlist.id,
  5929. answer: this.checkboxFormValue
  5930. };
  5931. submitAnswer(data).then((res) => {
  5932. if (res.code == 200) {
  5933. uni.showToast({
  5934. title: res.msg,
  5935. icon: "none"
  5936. });
  5937. }
  5938. if (this.answerfrist < this.Answerlistall - 1) {
  5939. this.answerfrist++;
  5940. this.answerlist = this.allAnswerLists[this.answerfrist];
  5941. this.answerlist.content = JSON.parse(this.answerlist.content);
  5942. } else {
  5943. uni.showToast({ title: "已是最后一题", icon: "none" });
  5944. this.showAnswer = false;
  5945. }
  5946. this.checkboxValue = [];
  5947. this.checkboxFormValue = "";
  5948. uni.showToast({ title: res.msg, icon: "none" });
  5949. }).finally((e) => {
  5950. this.isSubmit = false;
  5951. });
  5952. },
  5953. handleCheckboxSelect(value2) {
  5954. const index2 = this.checkboxValue.indexOf(value2);
  5955. formatAppLog("log", "at pages/home/living.vue:261", value2);
  5956. if (this.answerlist.type == 1) {
  5957. this.checkboxValue = [value2];
  5958. this.checkboxFormValue = this.checkboxValue.join(",");
  5959. this.submitAnswers();
  5960. formatAppLog("log", "at pages/home/living.vue:273", this.checkboxValue);
  5961. } else if (this.answerlist.type == 2) {
  5962. if (index2 > -1) {
  5963. this.checkboxValue.splice(index2, 1);
  5964. this.checkboxFormValue = this.checkboxValue.join(",");
  5965. } else {
  5966. this.checkboxValue.push(value2);
  5967. this.checkboxFormValue = this.checkboxValue.join(",");
  5968. }
  5969. formatAppLog("log", "at pages/home/living.vue:282", this.checkboxFormValue);
  5970. }
  5971. },
  5972. getAnswerlists() {
  5973. const data = {
  5974. liveId: this.liveId
  5975. };
  5976. getAnswerlist(data).then((res) => {
  5977. if (res.code == 200) {
  5978. if (res.data.length > 0) {
  5979. this.allAnswerLists = res.data;
  5980. this.Answerlistall = res.data.length;
  5981. if (this.allAnswerLists.length > 0) {
  5982. this.answerlist = this.allAnswerLists[0];
  5983. this.answerlist.content = JSON.parse(this.allAnswerLists[0].content);
  5984. }
  5985. this.showAnswer = true;
  5986. } else {
  5987. this.showAnswer = false;
  5988. }
  5989. }
  5990. });
  5991. },
  5992. gettalklist() {
  5993. const param = {
  5994. id: this.liveId
  5995. };
  5996. gettextlist(param).then((res) => {
  5997. if (res.code == 200) {
  5998. this.talklist = res.data;
  5999. this.$nextTick(() => {
  6000. this.scrollIntoView = `list_${this.talklist.length - 1}`;
  6001. });
  6002. }
  6003. });
  6004. },
  6005. open() {
  6006. },
  6007. close() {
  6008. this.showadd = !this.showadd;
  6009. },
  6010. closes() {
  6011. this.showziliao = !this.showziliao;
  6012. },
  6013. closest() {
  6014. this.showAnswer = !this.showAnswer;
  6015. },
  6016. longPress() {
  6017. this.timeout = setTimeout(() => {
  6018. this.isLongPress = true;
  6019. uni.saveImageToPhotosAlbum({
  6020. filePath: this.livedata.qwQrCode,
  6021. // 图片的本地路径或网络路径
  6022. success: () => {
  6023. uni.showToast({
  6024. title: "保存成功"
  6025. });
  6026. },
  6027. fail: () => {
  6028. uni.showToast({
  6029. title: "",
  6030. icon: "none"
  6031. });
  6032. }
  6033. });
  6034. }, 500);
  6035. },
  6036. cancelLongPress() {
  6037. clearTimeout(this.timeout);
  6038. this.isLongPress = false;
  6039. },
  6040. // 触摸开始
  6041. handleTouchStart() {
  6042. this.isZoom = true;
  6043. },
  6044. // 触摸结束
  6045. handleTouchEnd() {
  6046. this.isZoom = false;
  6047. },
  6048. getliving() {
  6049. const param = {
  6050. id: this.liveId
  6051. };
  6052. getlive(param).then((res) => {
  6053. if (res.code == 200) {
  6054. this.livedata = res.data;
  6055. this.codeimg = res.data.qwQrCode;
  6056. if (this.livedata.status == 2) {
  6057. this.autoplay = true;
  6058. this.videoContext.seek(this.livedata.nowDuration);
  6059. } else {
  6060. this.autoplay = false;
  6061. this.placeholderText = "直播开始才能发言讨论";
  6062. this.talkdisabled = true;
  6063. }
  6064. formatAppLog("log", "at pages/home/living.vue:381", this.autoplay);
  6065. } else {
  6066. uni.showToast({
  6067. title: res.msg,
  6068. icon: "none",
  6069. duration: 2e3
  6070. });
  6071. }
  6072. });
  6073. },
  6074. getEWechatSdk() {
  6075. let eWechatSdk = "";
  6076. if (/(Android)/i.test(navigator.userAgent)) {
  6077. eWechatSdk = "jWeixin";
  6078. } else if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  6079. eWechatSdk = "wx";
  6080. } else {
  6081. eWechatSdk = "jWeixin";
  6082. }
  6083. uni.setStorageSync("wxSdk", eWechatSdk);
  6084. },
  6085. closeWebSocket() {
  6086. if (socket != null) {
  6087. uni.closeSocket();
  6088. }
  6089. clearInterval(pingpangTimes);
  6090. },
  6091. reConnect() {
  6092. var that = this;
  6093. try {
  6094. uni.closeSocket();
  6095. } catch (e) {
  6096. }
  6097. setTimeout(function() {
  6098. that.initSocket();
  6099. }, 1e4);
  6100. },
  6101. initSocket() {
  6102. var that = this;
  6103. socket = uni.connectSocket({
  6104. // url: wsUrl+"?userId=40486&liveId=2",
  6105. url: wsUrl + "?userId=" + this.userid + "&liveId=" + this.liveId + "&AppToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI0IiwiaWF0IjoxNzQwNzIxMDQ1LCJleHAiOjE3NDEzMjU4NDV9.PgS83JTMSJgVFD6vGAhUsEPbS6Az4yMyX8wVug61TZNTB3092CtvANo-AB9ZG4NdSBLgLrf4litM3vvTk-FK0g",
  6106. multiple: true,
  6107. success: (res) => {
  6108. clearInterval(pingpangTimes);
  6109. uni.onSocketMessage((res2) => {
  6110. const redata = JSON.parse(res2.data);
  6111. this.talklist.push(redata.data);
  6112. this.$nextTick(() => {
  6113. this.scrollIntoView = `list_${this.talklist.length - 1}`;
  6114. });
  6115. if (redata.cmd == "deleteId") {
  6116. uni.$emit("deleteId");
  6117. } else if (redata.cmd == "init") {
  6118. uni.$emit("init", redata.data);
  6119. } else if (redata.cmd == "reload") {
  6120. uni.$emit("reload");
  6121. } else if (redata.data.cmd == "sendStatus") {
  6122. uni.$emit("sendStatus", redata.data);
  6123. } else if (redata.data.cmd == "entry") {
  6124. this.showWelcomeMessage = true;
  6125. uni.$emit("entry", redata.data);
  6126. }
  6127. });
  6128. },
  6129. error: (res) => {
  6130. uni.$emit("websocket", 0);
  6131. }
  6132. });
  6133. uni.onSocketOpen(() => {
  6134. isSocketOpen = true;
  6135. formatAppLog("log", "at pages/home/living.vue:469", "WebSocket连接已打开!!");
  6136. uni.showToast({
  6137. title: "插件已打开",
  6138. icon: "none"
  6139. });
  6140. });
  6141. uni.onSocketClose(() => {
  6142. isSocketOpen = false;
  6143. clearInterval(pingpangTimes);
  6144. formatAppLog("log", "at pages/home/living.vue:480", "WebSocket连接已关闭!");
  6145. uni.showToast({
  6146. title: "插件离线",
  6147. icon: "none"
  6148. });
  6149. that.reConnect();
  6150. });
  6151. uni.onSocketError(() => {
  6152. isSocketOpen = false;
  6153. clearInterval(pingpangTimes);
  6154. formatAppLog("log", "at pages/home/living.vue:493", "WebSocket连接打开失败");
  6155. uni.showToast({
  6156. title: "插件离线",
  6157. icon: "none"
  6158. });
  6159. uni.showModal({
  6160. content: "聊天连接失败是否重新尝试连接",
  6161. success() {
  6162. that.reConnect();
  6163. }
  6164. });
  6165. });
  6166. },
  6167. sendMsg() {
  6168. if (isSocketOpen) {
  6169. const data = {
  6170. liveId: this.livedata.liveId,
  6171. userId: this.userinfo.userId,
  6172. userType: 0,
  6173. cmd: "sendMsg",
  6174. msg: this.value,
  6175. nickName: this.userinfo.nickName,
  6176. avatar: this.userinfo.avatar
  6177. };
  6178. if (this.value == "") {
  6179. uni.showToast({
  6180. title: "不能发送空消息",
  6181. icon: "none"
  6182. });
  6183. } else {
  6184. socket.send({
  6185. data: JSON.stringify(data),
  6186. success: () => {
  6187. formatAppLog("log", "at pages/home/living.vue:529", "发送成功");
  6188. this.value = "";
  6189. },
  6190. fail: () => {
  6191. formatAppLog("log", "at pages/home/living.vue:533", "发送失败");
  6192. }
  6193. });
  6194. }
  6195. }
  6196. }
  6197. }
  6198. };
  6199. function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
  6200. const _component_u_avatar = resolveEasycom(vue.resolveDynamicComponent("u-avatar"), __easycom_0);
  6201. const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_1);
  6202. const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_2);
  6203. const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3);
  6204. return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
  6205. !$data.autoplay ? (vue.openBlock(), vue.createElementBlock("view", {
  6206. key: 0,
  6207. class: "popup-video"
  6208. }, [
  6209. $data.livedata.status == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  6210. key: 0,
  6211. class: "fs36 bold"
  6212. }, "——直播还未开始——")) : vue.createCommentVNode("v-if", true),
  6213. $data.livedata.status == 3 ? (vue.openBlock(), vue.createElementBlock("view", {
  6214. key: 1,
  6215. class: "fs36 bold"
  6216. }, "——直播已经结束——")) : vue.createCommentVNode("v-if", true),
  6217. vue.createElementVNode("view", { class: "fs28 mtb20" }, "了解更多,点击下方联系老师"),
  6218. vue.createElementVNode("view", {
  6219. class: "more",
  6220. onClick: _cache[0] || (_cache[0] = ($event) => $data.showadd = !$data.showadd)
  6221. }, "联系老师")
  6222. ])) : vue.createCommentVNode("v-if", true),
  6223. vue.createCommentVNode(` <image :src="livedata.liveImgUrl" \r
  6224. :class="livedata.status!=2?'background-images':'background-image'"></image> `),
  6225. vue.createElementVNode("view", { class: "blackbg" }),
  6226. vue.createElementVNode("view", { class: "content" }, [
  6227. vue.createCommentVNode(" 页面内容 "),
  6228. vue.createElementVNode("view", {
  6229. class: "flex-1",
  6230. style: { "position": "fixed", "top": "0", "z-index": "5" }
  6231. }, [
  6232. vue.createElementVNode("view", { class: "justify-start align-center pl30 mt30" }, [
  6233. vue.createVNode(_component_u_avatar, {
  6234. src: $data.livedata.liveImgUrl
  6235. }, null, 8, ["src"]),
  6236. vue.createElementVNode(
  6237. "view",
  6238. { class: "colorf ml20" },
  6239. vue.toDisplayString($data.livedata.liveName),
  6240. 1
  6241. /* TEXT */
  6242. )
  6243. ])
  6244. ]),
  6245. vue.createElementVNode("view", {
  6246. class: "videolist",
  6247. style: { "margin": "auto 0" }
  6248. }, [
  6249. vue.createElementVNode(
  6250. "view",
  6251. {
  6252. class: "vedio",
  6253. style: vue.normalizeStyle({ height: $data.isScreen ? "100vh" : "" })
  6254. },
  6255. [
  6256. vue.createElementVNode("video", {
  6257. id: "myVideo",
  6258. class: "videotop",
  6259. src: $data.livedata.videoUrl,
  6260. autoplay: $data.autoplay,
  6261. controls: false,
  6262. "vslide-gesture-in-fullscreen": "true",
  6263. "show-center-play-btn": false
  6264. }, null, 8, ["src", "autoplay"])
  6265. ],
  6266. 4
  6267. /* STYLE */
  6268. )
  6269. ]),
  6270. vue.createElementVNode("view", {
  6271. class: "pb40 mt90",
  6272. style: { "position": "fixed", "bottom": "0" }
  6273. }, [
  6274. vue.createElementVNode("view", { class: "w100 h300 mt20" }, [
  6275. vue.createElementVNode("scroll-view", {
  6276. "scroll-y": "true",
  6277. class: "talk p20 scrolly flex-1 column",
  6278. style: { "width": "calc(100% - 40rpx)", "height": "calc(100% - 40rpx)" },
  6279. "scroll-into-view": $data.scrollIntoView
  6280. }, [
  6281. vue.createElementVNode("view", null, [
  6282. (vue.openBlock(true), vue.createElementBlock(
  6283. vue.Fragment,
  6284. null,
  6285. vue.renderList($data.talklist, (item, index2) => {
  6286. return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  6287. class: "list justify-start",
  6288. key: item.index,
  6289. id: `list_${index2}`
  6290. }, [
  6291. vue.createElementVNode("view", { class: "talk-list ml16 justify-start" }, [
  6292. vue.createElementVNode("view", { class: "fs24" }, [
  6293. vue.createElementVNode(
  6294. "text",
  6295. { class: "fs24 colorf" },
  6296. vue.toDisplayString(item.msg) + "直播间" + vue.toDisplayString($data.messageContent),
  6297. 1
  6298. /* TEXT */
  6299. )
  6300. ])
  6301. ])
  6302. ], 8, ["id"])), [
  6303. [vue.vShow, item.cmd == "announcement"]
  6304. ]);
  6305. }),
  6306. 128
  6307. /* KEYED_FRAGMENT */
  6308. ))
  6309. ]),
  6310. (vue.openBlock(true), vue.createElementBlock(
  6311. vue.Fragment,
  6312. null,
  6313. vue.renderList($data.talklist, (item, index2) => {
  6314. return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  6315. class: "list justify-start",
  6316. key: item.index,
  6317. id: `list_${index2}`
  6318. }, [
  6319. vue.createElementVNode("view", { class: "talk-list ml16 justify-start" }, [
  6320. vue.createElementVNode("view", { class: "fs24" }, [
  6321. item.userId == $data.userinfo.userId && item.cmd == "sendMsg" ? (vue.openBlock(), vue.createElementBlock("text", {
  6322. key: 0,
  6323. style: { "color": "#3fc69b", "transform": "scale(0.8)", "display": "inline-block" }
  6324. }, "[ 我 ]")) : vue.createCommentVNode("v-if", true),
  6325. item.userType == 1 ? (vue.openBlock(), vue.createElementBlock("text", {
  6326. key: 1,
  6327. style: { "color": "#c84e1e", "transform": "scale(0.8)", "display": "inline-block" }
  6328. }, " [ 管理员 ]")) : vue.createCommentVNode("v-if", true),
  6329. vue.createElementVNode(
  6330. "text",
  6331. { style: { "color": "#bcbcbc" } },
  6332. vue.toDisplayString(item.nickName) + ":",
  6333. 1
  6334. /* TEXT */
  6335. ),
  6336. vue.createElementVNode(
  6337. "text",
  6338. { class: "fs24 colorf" },
  6339. vue.toDisplayString(item.msg),
  6340. 1
  6341. /* TEXT */
  6342. )
  6343. ])
  6344. ])
  6345. ], 8, ["id"])), [
  6346. [vue.vShow, item.cmd == "sendMsg"]
  6347. ]);
  6348. }),
  6349. 128
  6350. /* KEYED_FRAGMENT */
  6351. )),
  6352. $data.showWelcomeMessage ? (vue.openBlock(), vue.createElementBlock("view", {
  6353. key: 0,
  6354. class: "welcome-message"
  6355. }, [
  6356. (vue.openBlock(true), vue.createElementBlock(
  6357. vue.Fragment,
  6358. null,
  6359. vue.renderList($data.talklist, (item, index2) => {
  6360. return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", {
  6361. class: "list justify-start",
  6362. key: item.index,
  6363. id: `list_${index2}`
  6364. }, [
  6365. vue.createElementVNode("view", { class: "talk-list ml16 justify-start" }, [
  6366. vue.createElementVNode("view", { class: "fs24" }, [
  6367. vue.createElementVNode(
  6368. "text",
  6369. { style: { "color": "#9e5584" } },
  6370. vue.toDisplayString(item.nickName),
  6371. 1
  6372. /* TEXT */
  6373. ),
  6374. vue.createElementVNode(
  6375. "text",
  6376. { class: "fs24 color9" },
  6377. vue.toDisplayString(item.msg) + "直播间" + vue.toDisplayString($data.messageContent),
  6378. 1
  6379. /* TEXT */
  6380. )
  6381. ])
  6382. ])
  6383. ], 8, ["id"])), [
  6384. [vue.vShow, item.cmd == "entry" || item.cmd == "out"]
  6385. ]);
  6386. }),
  6387. 128
  6388. /* KEYED_FRAGMENT */
  6389. ))
  6390. ])) : vue.createCommentVNode("v-if", true)
  6391. ], 8, ["scroll-into-view"])
  6392. ]),
  6393. vue.createElementVNode("view", { class: "justify-between" }, [
  6394. vue.createVNode(_component_u_input, {
  6395. placeholder: $data.placeholderText,
  6396. border: "none",
  6397. customStyle: "background:rgba(255,255,255,0.2);font-size:24rpx;\r\n padding:12rpx;padding-left:40rpx;width:300rpx",
  6398. modelValue: $data.value,
  6399. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.value = $event),
  6400. shape: "circle",
  6401. color: "#fff",
  6402. placeholderStyle: "color:#e7e7e7",
  6403. class: "ml20"
  6404. }, null, 8, ["placeholder", "modelValue"]),
  6405. vue.createCommentVNode(" :disabled='talkdisabled' ></u-input> "),
  6406. vue.createElementVNode("view", {
  6407. onClick: _cache[2] || (_cache[2] = (...args) => $options.sendMsg && $options.sendMsg(...args)),
  6408. class: "colorf center ml10 fs24"
  6409. }, "发送"),
  6410. vue.createElementVNode("view", { class: "justify-between mr30 ml30 align-center" }, [
  6411. vue.createElementVNode("view", {
  6412. class: "icon-bg ml20",
  6413. onClick: _cache[3] || (_cache[3] = ($event) => $data.showziliao = !$data.showziliao)
  6414. }, [
  6415. vue.createElementVNode("image", {
  6416. src: _imports_0,
  6417. class: "w40 h40"
  6418. })
  6419. ]),
  6420. vue.createElementVNode("view", {
  6421. class: "icon-bg ml20",
  6422. onClick: _cache[4] || (_cache[4] = ($event) => $data.showziliao = !$data.showziliao)
  6423. }, [
  6424. vue.createElementVNode("image", {
  6425. src: _imports_1,
  6426. class: "w40 h40"
  6427. })
  6428. ]),
  6429. vue.createElementVNode(
  6430. "view",
  6431. {
  6432. class: vue.normalizeClass(["icon-bg ml20", { "zoom-button-active": $data.isZoom }]),
  6433. onTouchstart: _cache[5] || (_cache[5] = (...args) => $options.handleTouchStart && $options.handleTouchStart(...args)),
  6434. onTouchend: _cache[6] || (_cache[6] = (...args) => $options.handleTouchEnd && $options.handleTouchEnd(...args))
  6435. },
  6436. [
  6437. vue.createElementVNode("image", {
  6438. src: _imports_2,
  6439. class: "w40 h40"
  6440. })
  6441. ],
  6442. 34
  6443. /* CLASS, NEED_HYDRATION */
  6444. )
  6445. ])
  6446. ])
  6447. ])
  6448. ]),
  6449. vue.createVNode(_component_u_popup, {
  6450. show: $data.showadd,
  6451. onClose: $options.close,
  6452. onOpen: $options.open,
  6453. round: "20rpx",
  6454. bgColor: "#fffee1"
  6455. }, {
  6456. default: vue.withCtx(() => [
  6457. vue.createElementVNode("view", { class: "addchat p20" }, [
  6458. vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
  6459. vue.createVNode(_component_u_icon, {
  6460. name: "close",
  6461. size: "18",
  6462. onClick: _cache[7] || (_cache[7] = ($event) => $data.showadd = !$data.showadd)
  6463. })
  6464. ]),
  6465. vue.createElementVNode("view", { class: "column align-center" }, [
  6466. vue.createElementVNode("view", {
  6467. class: "fs36",
  6468. style: { "color": "#ff5c03" }
  6469. }, "扫码添加助教老师"),
  6470. vue.createElementVNode("view", { class: "fs28 color6" }, "扫码添加助教老师"),
  6471. vue.createElementVNode("view", {
  6472. class: "p10 mt40",
  6473. style: { "border": "#ff5c03 solid 2rpx" }
  6474. }, [
  6475. vue.createElementVNode("image", {
  6476. src: $data.codeimg,
  6477. class: "wh180",
  6478. onTouchstart: _cache[8] || (_cache[8] = (...args) => $options.longPress && $options.longPress(...args)),
  6479. onTouchend: _cache[9] || (_cache[9] = (...args) => $options.cancelLongPress && $options.cancelLongPress(...args))
  6480. }, null, 40, ["src"])
  6481. ]),
  6482. vue.createElementVNode("view", { class: "color6 mt20" }, "长按识别二维码")
  6483. ])
  6484. ])
  6485. ]),
  6486. _: 1
  6487. /* STABLE */
  6488. }, 8, ["show", "onClose", "onOpen"]),
  6489. vue.createVNode(_component_u_popup, {
  6490. show: $data.showziliao,
  6491. onClose: $options.closes,
  6492. round: "20rpx",
  6493. bgColor: "#fffee1"
  6494. }, {
  6495. default: vue.withCtx(() => [
  6496. vue.createElementVNode("view", { class: "addchat p20 bgf" }, [
  6497. vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
  6498. vue.createVNode(_component_u_icon, {
  6499. name: "close",
  6500. size: "18",
  6501. onClick: _cache[10] || (_cache[10] = ($event) => $data.showziliao = !$data.showziliao)
  6502. })
  6503. ]),
  6504. vue.createElementVNode("view", { class: "column align-center h400" }, [
  6505. vue.createElementVNode("view", {
  6506. class: "fs36",
  6507. style: { "color": "#ff5c03" }
  6508. }, "资料"),
  6509. vue.createElementVNode("view", {
  6510. innerHTML: $data.livedata.liveDesc
  6511. }, null, 8, ["innerHTML"])
  6512. ])
  6513. ])
  6514. ]),
  6515. _: 1
  6516. /* STABLE */
  6517. }, 8, ["show", "onClose"]),
  6518. vue.createVNode(_component_u_popup, {
  6519. show: $data.showAnswer,
  6520. onClose: $options.closest,
  6521. round: "40",
  6522. bgColor: "#fffee1",
  6523. mode: "center"
  6524. }, {
  6525. default: vue.withCtx(() => [
  6526. vue.createElementVNode("view", { class: "answerbox p20 bgf" }, [
  6527. vue.createElementVNode("view", { class: "u-flex-row-reverse u-flex" }, [
  6528. vue.createVNode(_component_u_icon, {
  6529. name: "close",
  6530. size: "18",
  6531. onClick: $options.closest
  6532. }, null, 8, ["onClick"])
  6533. ]),
  6534. vue.createElementVNode("view", { class: "column align-center" }, [
  6535. vue.createCommentVNode(" 单选 "),
  6536. $data.answerlist.type == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
  6537. key: 0,
  6538. style: { "width": "100%" }
  6539. }, [
  6540. vue.createElementVNode("view", {
  6541. class: "mb40",
  6542. style: { "text-align": "center" }
  6543. }, [
  6544. vue.createElementVNode("text", { class: "color9 fs24" }, "(单选)"),
  6545. vue.createTextVNode(
  6546. vue.toDisplayString($data.answerlist.title),
  6547. 1
  6548. /* TEXT */
  6549. )
  6550. ]),
  6551. (vue.openBlock(true), vue.createElementBlock(
  6552. vue.Fragment,
  6553. null,
  6554. vue.renderList($data.answerlist.content, (item, index2) => {
  6555. return vue.openBlock(), vue.createElementBlock("view", {
  6556. key: index2,
  6557. class: vue.normalizeClass($data.checkboxValue[0] == item.label ? "answeract itemanswer" : "itemanswer"),
  6558. onClick: ($event) => $options.handleCheckboxSelect(item.label)
  6559. }, vue.toDisplayString(item.label) + ". " + vue.toDisplayString(item.content), 11, ["onClick"]);
  6560. }),
  6561. 128
  6562. /* KEYED_FRAGMENT */
  6563. ))
  6564. ])) : vue.createCommentVNode("v-if", true),
  6565. vue.createCommentVNode(" 多选 "),
  6566. $data.answerlist.type == 2 ? (vue.openBlock(), vue.createElementBlock("view", {
  6567. key: 1,
  6568. style: { "width": "100%" }
  6569. }, [
  6570. vue.createElementVNode("view", {
  6571. class: "mb40",
  6572. style: { "text-align": "center" }
  6573. }, [
  6574. vue.createElementVNode("text", { class: "color9 fs24" }, "(多选)"),
  6575. vue.createTextVNode(
  6576. vue.toDisplayString($data.answerlist.title),
  6577. 1
  6578. /* TEXT */
  6579. )
  6580. ]),
  6581. (vue.openBlock(true), vue.createElementBlock(
  6582. vue.Fragment,
  6583. null,
  6584. vue.renderList($data.answerlist.content, (item, index2) => {
  6585. return vue.openBlock(), vue.createElementBlock("view", {
  6586. key: index2,
  6587. class: vue.normalizeClass($data.checkboxValue.includes(item.label) ? "answeract itemanswer" : "itemanswer"),
  6588. onClick: ($event) => $options.handleCheckboxSelect(item.label)
  6589. }, vue.toDisplayString(item.label) + ". " + vue.toDisplayString(item.content), 11, ["onClick"]);
  6590. }),
  6591. 128
  6592. /* KEYED_FRAGMENT */
  6593. )),
  6594. vue.createElementVNode("view", {
  6595. class: "submitbtn",
  6596. onClick: _cache[11] || (_cache[11] = (...args) => $options.submitAnswers && $options.submitAnswers(...args))
  6597. }, "确认")
  6598. ])) : vue.createCommentVNode("v-if", true),
  6599. vue.createElementVNode("view", {
  6600. class: "fs24 mtb20",
  6601. style: { "color": "#717171" }
  6602. }, [
  6603. vue.createTextVNode(
  6604. vue.toDisplayString($data.answerfrist + 1) + "/" + vue.toDisplayString($data.Answerlistall),
  6605. 1
  6606. /* TEXT */
  6607. ),
  6608. vue.createCommentVNode(" 已自动使用本地数据 ")
  6609. ])
  6610. ])
  6611. ])
  6612. ]),
  6613. _: 1
  6614. /* STABLE */
  6615. }, 8, ["show", "onClose"])
  6616. ]);
  6617. }
  6618. const PagesHomeLiving = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-471975a0"], ["__file", "F:/project/liveH5-v3/pages/home/living.vue"]]);
  6619. __definePage("pages/home/index", PagesHomeIndex);
  6620. __definePage("pages/user/index", PagesUserIndex);
  6621. __definePage("pages/games/index", PagesGamesIndex);
  6622. __definePage("pages/list/index", PagesListIndex);
  6623. __definePage("pages/home/live", PagesHomeLive);
  6624. __definePage("pages/home/living", PagesHomeLiving);
  6625. function getDevtoolsGlobalHook() {
  6626. return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;
  6627. }
  6628. function getTarget() {
  6629. return typeof navigator !== "undefined" && typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {};
  6630. }
  6631. const isProxyAvailable = typeof Proxy === "function";
  6632. const HOOK_SETUP = "devtools-plugin:setup";
  6633. const HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set";
  6634. class ApiProxy {
  6635. constructor(plugin, hook) {
  6636. this.target = null;
  6637. this.targetQueue = [];
  6638. this.onQueue = [];
  6639. this.plugin = plugin;
  6640. this.hook = hook;
  6641. const defaultSettings = {};
  6642. if (plugin.settings) {
  6643. for (const id in plugin.settings) {
  6644. const item = plugin.settings[id];
  6645. defaultSettings[id] = item.defaultValue;
  6646. }
  6647. }
  6648. const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
  6649. let currentSettings = { ...defaultSettings };
  6650. try {
  6651. const raw = localStorage.getItem(localSettingsSaveId);
  6652. const data = JSON.parse(raw);
  6653. Object.assign(currentSettings, data);
  6654. } catch (e) {
  6655. }
  6656. this.fallbacks = {
  6657. getSettings() {
  6658. return currentSettings;
  6659. },
  6660. setSettings(value2) {
  6661. try {
  6662. localStorage.setItem(localSettingsSaveId, JSON.stringify(value2));
  6663. } catch (e) {
  6664. }
  6665. currentSettings = value2;
  6666. }
  6667. };
  6668. hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value2) => {
  6669. if (pluginId === this.plugin.id) {
  6670. this.fallbacks.setSettings(value2);
  6671. }
  6672. });
  6673. this.proxiedOn = new Proxy({}, {
  6674. get: (_target, prop) => {
  6675. if (this.target) {
  6676. return this.target.on[prop];
  6677. } else {
  6678. return (...args) => {
  6679. this.onQueue.push({
  6680. method: prop,
  6681. args
  6682. });
  6683. };
  6684. }
  6685. }
  6686. });
  6687. this.proxiedTarget = new Proxy({}, {
  6688. get: (_target, prop) => {
  6689. if (this.target) {
  6690. return this.target[prop];
  6691. } else if (prop === "on") {
  6692. return this.proxiedOn;
  6693. } else if (Object.keys(this.fallbacks).includes(prop)) {
  6694. return (...args) => {
  6695. this.targetQueue.push({
  6696. method: prop,
  6697. args,
  6698. resolve: () => {
  6699. }
  6700. });
  6701. return this.fallbacks[prop](...args);
  6702. };
  6703. } else {
  6704. return (...args) => {
  6705. return new Promise((resolve) => {
  6706. this.targetQueue.push({
  6707. method: prop,
  6708. args,
  6709. resolve
  6710. });
  6711. });
  6712. };
  6713. }
  6714. }
  6715. });
  6716. }
  6717. async setRealTarget(target) {
  6718. this.target = target;
  6719. for (const item of this.onQueue) {
  6720. this.target.on[item.method](...item.args);
  6721. }
  6722. for (const item of this.targetQueue) {
  6723. item.resolve(await this.target[item.method](...item.args));
  6724. }
  6725. }
  6726. }
  6727. function setupDevtoolsPlugin(pluginDescriptor, setupFn) {
  6728. const target = getTarget();
  6729. const hook = getDevtoolsGlobalHook();
  6730. const enableProxy = isProxyAvailable && pluginDescriptor.enableEarlyProxy;
  6731. if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {
  6732. hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);
  6733. } else {
  6734. const proxy = enableProxy ? new ApiProxy(pluginDescriptor, hook) : null;
  6735. const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];
  6736. list.push({
  6737. pluginDescriptor,
  6738. setupFn,
  6739. proxy
  6740. });
  6741. if (proxy)
  6742. setupFn(proxy.proxiedTarget);
  6743. }
  6744. }
  6745. /*!
  6746. * vuex v4.1.0
  6747. * (c) 2022 Evan You
  6748. * @license MIT
  6749. */
  6750. var storeKey = "store";
  6751. function useStore(key) {
  6752. if (key === void 0)
  6753. key = null;
  6754. return vue.inject(key !== null ? key : storeKey);
  6755. }
  6756. function forEachValue(obj, fn) {
  6757. Object.keys(obj).forEach(function(key) {
  6758. return fn(obj[key], key);
  6759. });
  6760. }
  6761. function isObject$1(obj) {
  6762. return obj !== null && typeof obj === "object";
  6763. }
  6764. function isPromise(val) {
  6765. return val && typeof val.then === "function";
  6766. }
  6767. function assert(condition, msg) {
  6768. if (!condition) {
  6769. throw new Error("[vuex] " + msg);
  6770. }
  6771. }
  6772. function partial(fn, arg) {
  6773. return function() {
  6774. return fn(arg);
  6775. };
  6776. }
  6777. function genericSubscribe(fn, subs, options) {
  6778. if (subs.indexOf(fn) < 0) {
  6779. options && options.prepend ? subs.unshift(fn) : subs.push(fn);
  6780. }
  6781. return function() {
  6782. var i = subs.indexOf(fn);
  6783. if (i > -1) {
  6784. subs.splice(i, 1);
  6785. }
  6786. };
  6787. }
  6788. function resetStore(store2, hot) {
  6789. store2._actions = /* @__PURE__ */ Object.create(null);
  6790. store2._mutations = /* @__PURE__ */ Object.create(null);
  6791. store2._wrappedGetters = /* @__PURE__ */ Object.create(null);
  6792. store2._modulesNamespaceMap = /* @__PURE__ */ Object.create(null);
  6793. var state = store2.state;
  6794. installModule(store2, state, [], store2._modules.root, true);
  6795. resetStoreState(store2, state, hot);
  6796. }
  6797. function resetStoreState(store2, state, hot) {
  6798. var oldState = store2._state;
  6799. var oldScope = store2._scope;
  6800. store2.getters = {};
  6801. store2._makeLocalGettersCache = /* @__PURE__ */ Object.create(null);
  6802. var wrappedGetters = store2._wrappedGetters;
  6803. var computedObj = {};
  6804. var computedCache = {};
  6805. var scope = vue.effectScope(true);
  6806. scope.run(function() {
  6807. forEachValue(wrappedGetters, function(fn, key) {
  6808. computedObj[key] = partial(fn, store2);
  6809. computedCache[key] = vue.computed(function() {
  6810. return computedObj[key]();
  6811. });
  6812. Object.defineProperty(store2.getters, key, {
  6813. get: function() {
  6814. return computedCache[key].value;
  6815. },
  6816. enumerable: true
  6817. // for local getters
  6818. });
  6819. });
  6820. });
  6821. store2._state = vue.reactive({
  6822. data: state
  6823. });
  6824. store2._scope = scope;
  6825. if (store2.strict) {
  6826. enableStrictMode(store2);
  6827. }
  6828. if (oldState) {
  6829. if (hot) {
  6830. store2._withCommit(function() {
  6831. oldState.data = null;
  6832. });
  6833. }
  6834. }
  6835. if (oldScope) {
  6836. oldScope.stop();
  6837. }
  6838. }
  6839. function installModule(store2, rootState, path, module, hot) {
  6840. var isRoot = !path.length;
  6841. var namespace = store2._modules.getNamespace(path);
  6842. if (module.namespaced) {
  6843. if (store2._modulesNamespaceMap[namespace] && true) {
  6844. console.error("[vuex] duplicate namespace " + namespace + " for the namespaced module " + path.join("/"));
  6845. }
  6846. store2._modulesNamespaceMap[namespace] = module;
  6847. }
  6848. if (!isRoot && !hot) {
  6849. var parentState = getNestedState(rootState, path.slice(0, -1));
  6850. var moduleName = path[path.length - 1];
  6851. store2._withCommit(function() {
  6852. {
  6853. if (moduleName in parentState) {
  6854. console.warn(
  6855. '[vuex] state field "' + moduleName + '" was overridden by a module with the same name at "' + path.join(".") + '"'
  6856. );
  6857. }
  6858. }
  6859. parentState[moduleName] = module.state;
  6860. });
  6861. }
  6862. var local = module.context = makeLocalContext(store2, namespace, path);
  6863. module.forEachMutation(function(mutation, key) {
  6864. var namespacedType = namespace + key;
  6865. registerMutation(store2, namespacedType, mutation, local);
  6866. });
  6867. module.forEachAction(function(action, key) {
  6868. var type = action.root ? key : namespace + key;
  6869. var handler = action.handler || action;
  6870. registerAction(store2, type, handler, local);
  6871. });
  6872. module.forEachGetter(function(getter, key) {
  6873. var namespacedType = namespace + key;
  6874. registerGetter(store2, namespacedType, getter, local);
  6875. });
  6876. module.forEachChild(function(child, key) {
  6877. installModule(store2, rootState, path.concat(key), child, hot);
  6878. });
  6879. }
  6880. function makeLocalContext(store2, namespace, path) {
  6881. var noNamespace = namespace === "";
  6882. var local = {
  6883. dispatch: noNamespace ? store2.dispatch : function(_type, _payload, _options) {
  6884. var args = unifyObjectStyle(_type, _payload, _options);
  6885. var payload = args.payload;
  6886. var options = args.options;
  6887. var type = args.type;
  6888. if (!options || !options.root) {
  6889. type = namespace + type;
  6890. if (!store2._actions[type]) {
  6891. console.error("[vuex] unknown local action type: " + args.type + ", global type: " + type);
  6892. return;
  6893. }
  6894. }
  6895. return store2.dispatch(type, payload);
  6896. },
  6897. commit: noNamespace ? store2.commit : function(_type, _payload, _options) {
  6898. var args = unifyObjectStyle(_type, _payload, _options);
  6899. var payload = args.payload;
  6900. var options = args.options;
  6901. var type = args.type;
  6902. if (!options || !options.root) {
  6903. type = namespace + type;
  6904. if (!store2._mutations[type]) {
  6905. console.error("[vuex] unknown local mutation type: " + args.type + ", global type: " + type);
  6906. return;
  6907. }
  6908. }
  6909. store2.commit(type, payload, options);
  6910. }
  6911. };
  6912. Object.defineProperties(local, {
  6913. getters: {
  6914. get: noNamespace ? function() {
  6915. return store2.getters;
  6916. } : function() {
  6917. return makeLocalGetters(store2, namespace);
  6918. }
  6919. },
  6920. state: {
  6921. get: function() {
  6922. return getNestedState(store2.state, path);
  6923. }
  6924. }
  6925. });
  6926. return local;
  6927. }
  6928. function makeLocalGetters(store2, namespace) {
  6929. if (!store2._makeLocalGettersCache[namespace]) {
  6930. var gettersProxy = {};
  6931. var splitPos = namespace.length;
  6932. Object.keys(store2.getters).forEach(function(type) {
  6933. if (type.slice(0, splitPos) !== namespace) {
  6934. return;
  6935. }
  6936. var localType = type.slice(splitPos);
  6937. Object.defineProperty(gettersProxy, localType, {
  6938. get: function() {
  6939. return store2.getters[type];
  6940. },
  6941. enumerable: true
  6942. });
  6943. });
  6944. store2._makeLocalGettersCache[namespace] = gettersProxy;
  6945. }
  6946. return store2._makeLocalGettersCache[namespace];
  6947. }
  6948. function registerMutation(store2, type, handler, local) {
  6949. var entry = store2._mutations[type] || (store2._mutations[type] = []);
  6950. entry.push(function wrappedMutationHandler(payload) {
  6951. handler.call(store2, local.state, payload);
  6952. });
  6953. }
  6954. function registerAction(store2, type, handler, local) {
  6955. var entry = store2._actions[type] || (store2._actions[type] = []);
  6956. entry.push(function wrappedActionHandler(payload) {
  6957. var res = handler.call(store2, {
  6958. dispatch: local.dispatch,
  6959. commit: local.commit,
  6960. getters: local.getters,
  6961. state: local.state,
  6962. rootGetters: store2.getters,
  6963. rootState: store2.state
  6964. }, payload);
  6965. if (!isPromise(res)) {
  6966. res = Promise.resolve(res);
  6967. }
  6968. if (store2._devtoolHook) {
  6969. return res.catch(function(err) {
  6970. store2._devtoolHook.emit("vuex:error", err);
  6971. throw err;
  6972. });
  6973. } else {
  6974. return res;
  6975. }
  6976. });
  6977. }
  6978. function registerGetter(store2, type, rawGetter, local) {
  6979. if (store2._wrappedGetters[type]) {
  6980. {
  6981. console.error("[vuex] duplicate getter key: " + type);
  6982. }
  6983. return;
  6984. }
  6985. store2._wrappedGetters[type] = function wrappedGetter(store22) {
  6986. return rawGetter(
  6987. local.state,
  6988. // local state
  6989. local.getters,
  6990. // local getters
  6991. store22.state,
  6992. // root state
  6993. store22.getters
  6994. // root getters
  6995. );
  6996. };
  6997. }
  6998. function enableStrictMode(store2) {
  6999. vue.watch(function() {
  7000. return store2._state.data;
  7001. }, function() {
  7002. {
  7003. assert(store2._committing, "do not mutate vuex store state outside mutation handlers.");
  7004. }
  7005. }, { deep: true, flush: "sync" });
  7006. }
  7007. function getNestedState(state, path) {
  7008. return path.reduce(function(state2, key) {
  7009. return state2[key];
  7010. }, state);
  7011. }
  7012. function unifyObjectStyle(type, payload, options) {
  7013. if (isObject$1(type) && type.type) {
  7014. options = payload;
  7015. payload = type;
  7016. type = type.type;
  7017. }
  7018. {
  7019. assert(typeof type === "string", "expects string as the type, but found " + typeof type + ".");
  7020. }
  7021. return { type, payload, options };
  7022. }
  7023. var LABEL_VUEX_BINDINGS = "vuex bindings";
  7024. var MUTATIONS_LAYER_ID = "vuex:mutations";
  7025. var ACTIONS_LAYER_ID = "vuex:actions";
  7026. var INSPECTOR_ID = "vuex";
  7027. var actionId = 0;
  7028. function addDevtools(app2, store2) {
  7029. setupDevtoolsPlugin(
  7030. {
  7031. id: "org.vuejs.vuex",
  7032. app: app2,
  7033. label: "Vuex",
  7034. homepage: "https://next.vuex.vuejs.org/",
  7035. logo: "https://vuejs.org/images/icons/favicon-96x96.png",
  7036. packageName: "vuex",
  7037. componentStateTypes: [LABEL_VUEX_BINDINGS]
  7038. },
  7039. function(api2) {
  7040. api2.addTimelineLayer({
  7041. id: MUTATIONS_LAYER_ID,
  7042. label: "Vuex Mutations",
  7043. color: COLOR_LIME_500
  7044. });
  7045. api2.addTimelineLayer({
  7046. id: ACTIONS_LAYER_ID,
  7047. label: "Vuex Actions",
  7048. color: COLOR_LIME_500
  7049. });
  7050. api2.addInspector({
  7051. id: INSPECTOR_ID,
  7052. label: "Vuex",
  7053. icon: "storage",
  7054. treeFilterPlaceholder: "Filter stores..."
  7055. });
  7056. api2.on.getInspectorTree(function(payload) {
  7057. if (payload.app === app2 && payload.inspectorId === INSPECTOR_ID) {
  7058. if (payload.filter) {
  7059. var nodes = [];
  7060. flattenStoreForInspectorTree(nodes, store2._modules.root, payload.filter, "");
  7061. payload.rootNodes = nodes;
  7062. } else {
  7063. payload.rootNodes = [
  7064. formatStoreForInspectorTree(store2._modules.root, "")
  7065. ];
  7066. }
  7067. }
  7068. });
  7069. api2.on.getInspectorState(function(payload) {
  7070. if (payload.app === app2 && payload.inspectorId === INSPECTOR_ID) {
  7071. var modulePath = payload.nodeId;
  7072. makeLocalGetters(store2, modulePath);
  7073. payload.state = formatStoreForInspectorState(
  7074. getStoreModule(store2._modules, modulePath),
  7075. modulePath === "root" ? store2.getters : store2._makeLocalGettersCache,
  7076. modulePath
  7077. );
  7078. }
  7079. });
  7080. api2.on.editInspectorState(function(payload) {
  7081. if (payload.app === app2 && payload.inspectorId === INSPECTOR_ID) {
  7082. var modulePath = payload.nodeId;
  7083. var path = payload.path;
  7084. if (modulePath !== "root") {
  7085. path = modulePath.split("/").filter(Boolean).concat(path);
  7086. }
  7087. store2._withCommit(function() {
  7088. payload.set(store2._state.data, path, payload.state.value);
  7089. });
  7090. }
  7091. });
  7092. store2.subscribe(function(mutation, state) {
  7093. var data = {};
  7094. if (mutation.payload) {
  7095. data.payload = mutation.payload;
  7096. }
  7097. data.state = state;
  7098. api2.notifyComponentUpdate();
  7099. api2.sendInspectorTree(INSPECTOR_ID);
  7100. api2.sendInspectorState(INSPECTOR_ID);
  7101. api2.addTimelineEvent({
  7102. layerId: MUTATIONS_LAYER_ID,
  7103. event: {
  7104. time: Date.now(),
  7105. title: mutation.type,
  7106. data
  7107. }
  7108. });
  7109. });
  7110. store2.subscribeAction({
  7111. before: function(action, state) {
  7112. var data = {};
  7113. if (action.payload) {
  7114. data.payload = action.payload;
  7115. }
  7116. action._id = actionId++;
  7117. action._time = Date.now();
  7118. data.state = state;
  7119. api2.addTimelineEvent({
  7120. layerId: ACTIONS_LAYER_ID,
  7121. event: {
  7122. time: action._time,
  7123. title: action.type,
  7124. groupId: action._id,
  7125. subtitle: "start",
  7126. data
  7127. }
  7128. });
  7129. },
  7130. after: function(action, state) {
  7131. var data = {};
  7132. var duration = Date.now() - action._time;
  7133. data.duration = {
  7134. _custom: {
  7135. type: "duration",
  7136. display: duration + "ms",
  7137. tooltip: "Action duration",
  7138. value: duration
  7139. }
  7140. };
  7141. if (action.payload) {
  7142. data.payload = action.payload;
  7143. }
  7144. data.state = state;
  7145. api2.addTimelineEvent({
  7146. layerId: ACTIONS_LAYER_ID,
  7147. event: {
  7148. time: Date.now(),
  7149. title: action.type,
  7150. groupId: action._id,
  7151. subtitle: "end",
  7152. data
  7153. }
  7154. });
  7155. }
  7156. });
  7157. }
  7158. );
  7159. }
  7160. var COLOR_LIME_500 = 8702998;
  7161. var COLOR_DARK = 6710886;
  7162. var COLOR_WHITE = 16777215;
  7163. var TAG_NAMESPACED = {
  7164. label: "namespaced",
  7165. textColor: COLOR_WHITE,
  7166. backgroundColor: COLOR_DARK
  7167. };
  7168. function extractNameFromPath(path) {
  7169. return path && path !== "root" ? path.split("/").slice(-2, -1)[0] : "Root";
  7170. }
  7171. function formatStoreForInspectorTree(module, path) {
  7172. return {
  7173. id: path || "root",
  7174. // all modules end with a `/`, we want the last segment only
  7175. // cart/ -> cart
  7176. // nested/cart/ -> cart
  7177. label: extractNameFromPath(path),
  7178. tags: module.namespaced ? [TAG_NAMESPACED] : [],
  7179. children: Object.keys(module._children).map(
  7180. function(moduleName) {
  7181. return formatStoreForInspectorTree(
  7182. module._children[moduleName],
  7183. path + moduleName + "/"
  7184. );
  7185. }
  7186. )
  7187. };
  7188. }
  7189. function flattenStoreForInspectorTree(result, module, filter, path) {
  7190. if (path.includes(filter)) {
  7191. result.push({
  7192. id: path || "root",
  7193. label: path.endsWith("/") ? path.slice(0, path.length - 1) : path || "Root",
  7194. tags: module.namespaced ? [TAG_NAMESPACED] : []
  7195. });
  7196. }
  7197. Object.keys(module._children).forEach(function(moduleName) {
  7198. flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + "/");
  7199. });
  7200. }
  7201. function formatStoreForInspectorState(module, getters2, path) {
  7202. getters2 = path === "root" ? getters2 : getters2[path];
  7203. var gettersKeys = Object.keys(getters2);
  7204. var storeState = {
  7205. state: Object.keys(module.state).map(function(key) {
  7206. return {
  7207. key,
  7208. editable: true,
  7209. value: module.state[key]
  7210. };
  7211. })
  7212. };
  7213. if (gettersKeys.length) {
  7214. var tree = transformPathsToObjectTree(getters2);
  7215. storeState.getters = Object.keys(tree).map(function(key) {
  7216. return {
  7217. key: key.endsWith("/") ? extractNameFromPath(key) : key,
  7218. editable: false,
  7219. value: canThrow(function() {
  7220. return tree[key];
  7221. })
  7222. };
  7223. });
  7224. }
  7225. return storeState;
  7226. }
  7227. function transformPathsToObjectTree(getters2) {
  7228. var result = {};
  7229. Object.keys(getters2).forEach(function(key) {
  7230. var path = key.split("/");
  7231. if (path.length > 1) {
  7232. var target = result;
  7233. var leafKey = path.pop();
  7234. path.forEach(function(p) {
  7235. if (!target[p]) {
  7236. target[p] = {
  7237. _custom: {
  7238. value: {},
  7239. display: p,
  7240. tooltip: "Module",
  7241. abstract: true
  7242. }
  7243. };
  7244. }
  7245. target = target[p]._custom.value;
  7246. });
  7247. target[leafKey] = canThrow(function() {
  7248. return getters2[key];
  7249. });
  7250. } else {
  7251. result[key] = canThrow(function() {
  7252. return getters2[key];
  7253. });
  7254. }
  7255. });
  7256. return result;
  7257. }
  7258. function getStoreModule(moduleMap, path) {
  7259. var names = path.split("/").filter(function(n) {
  7260. return n;
  7261. });
  7262. return names.reduce(
  7263. function(module, moduleName, i) {
  7264. var child = module[moduleName];
  7265. if (!child) {
  7266. throw new Error('Missing module "' + moduleName + '" for path "' + path + '".');
  7267. }
  7268. return i === names.length - 1 ? child : child._children;
  7269. },
  7270. path === "root" ? moduleMap : moduleMap.root._children
  7271. );
  7272. }
  7273. function canThrow(cb) {
  7274. try {
  7275. return cb();
  7276. } catch (e) {
  7277. return e;
  7278. }
  7279. }
  7280. var Module = function Module2(rawModule, runtime) {
  7281. this.runtime = runtime;
  7282. this._children = /* @__PURE__ */ Object.create(null);
  7283. this._rawModule = rawModule;
  7284. var rawState = rawModule.state;
  7285. this.state = (typeof rawState === "function" ? rawState() : rawState) || {};
  7286. };
  7287. var prototypeAccessors$1 = { namespaced: { configurable: true } };
  7288. prototypeAccessors$1.namespaced.get = function() {
  7289. return !!this._rawModule.namespaced;
  7290. };
  7291. Module.prototype.addChild = function addChild(key, module) {
  7292. this._children[key] = module;
  7293. };
  7294. Module.prototype.removeChild = function removeChild(key) {
  7295. delete this._children[key];
  7296. };
  7297. Module.prototype.getChild = function getChild(key) {
  7298. return this._children[key];
  7299. };
  7300. Module.prototype.hasChild = function hasChild(key) {
  7301. return key in this._children;
  7302. };
  7303. Module.prototype.update = function update(rawModule) {
  7304. this._rawModule.namespaced = rawModule.namespaced;
  7305. if (rawModule.actions) {
  7306. this._rawModule.actions = rawModule.actions;
  7307. }
  7308. if (rawModule.mutations) {
  7309. this._rawModule.mutations = rawModule.mutations;
  7310. }
  7311. if (rawModule.getters) {
  7312. this._rawModule.getters = rawModule.getters;
  7313. }
  7314. };
  7315. Module.prototype.forEachChild = function forEachChild(fn) {
  7316. forEachValue(this._children, fn);
  7317. };
  7318. Module.prototype.forEachGetter = function forEachGetter(fn) {
  7319. if (this._rawModule.getters) {
  7320. forEachValue(this._rawModule.getters, fn);
  7321. }
  7322. };
  7323. Module.prototype.forEachAction = function forEachAction(fn) {
  7324. if (this._rawModule.actions) {
  7325. forEachValue(this._rawModule.actions, fn);
  7326. }
  7327. };
  7328. Module.prototype.forEachMutation = function forEachMutation(fn) {
  7329. if (this._rawModule.mutations) {
  7330. forEachValue(this._rawModule.mutations, fn);
  7331. }
  7332. };
  7333. Object.defineProperties(Module.prototype, prototypeAccessors$1);
  7334. var ModuleCollection = function ModuleCollection2(rawRootModule) {
  7335. this.register([], rawRootModule, false);
  7336. };
  7337. ModuleCollection.prototype.get = function get(path) {
  7338. return path.reduce(function(module, key) {
  7339. return module.getChild(key);
  7340. }, this.root);
  7341. };
  7342. ModuleCollection.prototype.getNamespace = function getNamespace(path) {
  7343. var module = this.root;
  7344. return path.reduce(function(namespace, key) {
  7345. module = module.getChild(key);
  7346. return namespace + (module.namespaced ? key + "/" : "");
  7347. }, "");
  7348. };
  7349. ModuleCollection.prototype.update = function update$1(rawRootModule) {
  7350. update2([], this.root, rawRootModule);
  7351. };
  7352. ModuleCollection.prototype.register = function register(path, rawModule, runtime) {
  7353. var this$1$1 = this;
  7354. if (runtime === void 0)
  7355. runtime = true;
  7356. {
  7357. assertRawModule(path, rawModule);
  7358. }
  7359. var newModule = new Module(rawModule, runtime);
  7360. if (path.length === 0) {
  7361. this.root = newModule;
  7362. } else {
  7363. var parent = this.get(path.slice(0, -1));
  7364. parent.addChild(path[path.length - 1], newModule);
  7365. }
  7366. if (rawModule.modules) {
  7367. forEachValue(rawModule.modules, function(rawChildModule, key) {
  7368. this$1$1.register(path.concat(key), rawChildModule, runtime);
  7369. });
  7370. }
  7371. };
  7372. ModuleCollection.prototype.unregister = function unregister(path) {
  7373. var parent = this.get(path.slice(0, -1));
  7374. var key = path[path.length - 1];
  7375. var child = parent.getChild(key);
  7376. if (!child) {
  7377. {
  7378. console.warn(
  7379. "[vuex] trying to unregister module '" + key + "', which is not registered"
  7380. );
  7381. }
  7382. return;
  7383. }
  7384. if (!child.runtime) {
  7385. return;
  7386. }
  7387. parent.removeChild(key);
  7388. };
  7389. ModuleCollection.prototype.isRegistered = function isRegistered(path) {
  7390. var parent = this.get(path.slice(0, -1));
  7391. var key = path[path.length - 1];
  7392. if (parent) {
  7393. return parent.hasChild(key);
  7394. }
  7395. return false;
  7396. };
  7397. function update2(path, targetModule, newModule) {
  7398. {
  7399. assertRawModule(path, newModule);
  7400. }
  7401. targetModule.update(newModule);
  7402. if (newModule.modules) {
  7403. for (var key in newModule.modules) {
  7404. if (!targetModule.getChild(key)) {
  7405. {
  7406. console.warn(
  7407. "[vuex] trying to add a new module '" + key + "' on hot reloading, manual reload is needed"
  7408. );
  7409. }
  7410. return;
  7411. }
  7412. update2(
  7413. path.concat(key),
  7414. targetModule.getChild(key),
  7415. newModule.modules[key]
  7416. );
  7417. }
  7418. }
  7419. }
  7420. var functionAssert = {
  7421. assert: function(value2) {
  7422. return typeof value2 === "function";
  7423. },
  7424. expected: "function"
  7425. };
  7426. var objectAssert = {
  7427. assert: function(value2) {
  7428. return typeof value2 === "function" || typeof value2 === "object" && typeof value2.handler === "function";
  7429. },
  7430. expected: 'function or object with "handler" function'
  7431. };
  7432. var assertTypes = {
  7433. getters: functionAssert,
  7434. mutations: functionAssert,
  7435. actions: objectAssert
  7436. };
  7437. function assertRawModule(path, rawModule) {
  7438. Object.keys(assertTypes).forEach(function(key) {
  7439. if (!rawModule[key]) {
  7440. return;
  7441. }
  7442. var assertOptions = assertTypes[key];
  7443. forEachValue(rawModule[key], function(value2, type) {
  7444. assert(
  7445. assertOptions.assert(value2),
  7446. makeAssertionMessage(path, key, type, value2, assertOptions.expected)
  7447. );
  7448. });
  7449. });
  7450. }
  7451. function makeAssertionMessage(path, key, type, value2, expected) {
  7452. var buf = key + " should be " + expected + ' but "' + key + "." + type + '"';
  7453. if (path.length > 0) {
  7454. buf += ' in module "' + path.join(".") + '"';
  7455. }
  7456. buf += " is " + JSON.stringify(value2) + ".";
  7457. return buf;
  7458. }
  7459. function createStore(options) {
  7460. return new Store(options);
  7461. }
  7462. var Store = function Store2(options) {
  7463. var this$1$1 = this;
  7464. if (options === void 0)
  7465. options = {};
  7466. {
  7467. assert(typeof Promise !== "undefined", "vuex requires a Promise polyfill in this browser.");
  7468. assert(this instanceof Store2, "store must be called with the new operator.");
  7469. }
  7470. var plugins = options.plugins;
  7471. if (plugins === void 0)
  7472. plugins = [];
  7473. var strict = options.strict;
  7474. if (strict === void 0)
  7475. strict = false;
  7476. var devtools = options.devtools;
  7477. this._committing = false;
  7478. this._actions = /* @__PURE__ */ Object.create(null);
  7479. this._actionSubscribers = [];
  7480. this._mutations = /* @__PURE__ */ Object.create(null);
  7481. this._wrappedGetters = /* @__PURE__ */ Object.create(null);
  7482. this._modules = new ModuleCollection(options);
  7483. this._modulesNamespaceMap = /* @__PURE__ */ Object.create(null);
  7484. this._subscribers = [];
  7485. this._makeLocalGettersCache = /* @__PURE__ */ Object.create(null);
  7486. this._scope = null;
  7487. this._devtools = devtools;
  7488. var store2 = this;
  7489. var ref = this;
  7490. var dispatch2 = ref.dispatch;
  7491. var commit2 = ref.commit;
  7492. this.dispatch = function boundDispatch(type, payload) {
  7493. return dispatch2.call(store2, type, payload);
  7494. };
  7495. this.commit = function boundCommit(type, payload, options2) {
  7496. return commit2.call(store2, type, payload, options2);
  7497. };
  7498. this.strict = strict;
  7499. var state = this._modules.root.state;
  7500. installModule(this, state, [], this._modules.root);
  7501. resetStoreState(this, state);
  7502. plugins.forEach(function(plugin) {
  7503. return plugin(this$1$1);
  7504. });
  7505. };
  7506. var prototypeAccessors = { state: { configurable: true } };
  7507. Store.prototype.install = function install2(app2, injectKey) {
  7508. app2.provide(injectKey || storeKey, this);
  7509. app2.config.globalProperties.$store = this;
  7510. var useDevtools = this._devtools !== void 0 ? this._devtools : true;
  7511. if (useDevtools) {
  7512. addDevtools(app2, this);
  7513. }
  7514. };
  7515. prototypeAccessors.state.get = function() {
  7516. return this._state.data;
  7517. };
  7518. prototypeAccessors.state.set = function(v) {
  7519. {
  7520. assert(false, "use store.replaceState() to explicit replace store state.");
  7521. }
  7522. };
  7523. Store.prototype.commit = function commit(_type, _payload, _options) {
  7524. var this$1$1 = this;
  7525. var ref = unifyObjectStyle(_type, _payload, _options);
  7526. var type = ref.type;
  7527. var payload = ref.payload;
  7528. var options = ref.options;
  7529. var mutation = { type, payload };
  7530. var entry = this._mutations[type];
  7531. if (!entry) {
  7532. {
  7533. console.error("[vuex] unknown mutation type: " + type);
  7534. }
  7535. return;
  7536. }
  7537. this._withCommit(function() {
  7538. entry.forEach(function commitIterator(handler) {
  7539. handler(payload);
  7540. });
  7541. });
  7542. this._subscribers.slice().forEach(function(sub) {
  7543. return sub(mutation, this$1$1.state);
  7544. });
  7545. if (options && options.silent) {
  7546. console.warn(
  7547. "[vuex] mutation type: " + type + ". Silent option has been removed. Use the filter functionality in the vue-devtools"
  7548. );
  7549. }
  7550. };
  7551. Store.prototype.dispatch = function dispatch(_type, _payload) {
  7552. var this$1$1 = this;
  7553. var ref = unifyObjectStyle(_type, _payload);
  7554. var type = ref.type;
  7555. var payload = ref.payload;
  7556. var action = { type, payload };
  7557. var entry = this._actions[type];
  7558. if (!entry) {
  7559. {
  7560. console.error("[vuex] unknown action type: " + type);
  7561. }
  7562. return;
  7563. }
  7564. try {
  7565. this._actionSubscribers.slice().filter(function(sub) {
  7566. return sub.before;
  7567. }).forEach(function(sub) {
  7568. return sub.before(action, this$1$1.state);
  7569. });
  7570. } catch (e) {
  7571. {
  7572. console.warn("[vuex] error in before action subscribers: ");
  7573. console.error(e);
  7574. }
  7575. }
  7576. var result = entry.length > 1 ? Promise.all(entry.map(function(handler) {
  7577. return handler(payload);
  7578. })) : entry[0](payload);
  7579. return new Promise(function(resolve, reject) {
  7580. result.then(function(res) {
  7581. try {
  7582. this$1$1._actionSubscribers.filter(function(sub) {
  7583. return sub.after;
  7584. }).forEach(function(sub) {
  7585. return sub.after(action, this$1$1.state);
  7586. });
  7587. } catch (e) {
  7588. {
  7589. console.warn("[vuex] error in after action subscribers: ");
  7590. console.error(e);
  7591. }
  7592. }
  7593. resolve(res);
  7594. }, function(error2) {
  7595. try {
  7596. this$1$1._actionSubscribers.filter(function(sub) {
  7597. return sub.error;
  7598. }).forEach(function(sub) {
  7599. return sub.error(action, this$1$1.state, error2);
  7600. });
  7601. } catch (e) {
  7602. {
  7603. console.warn("[vuex] error in error action subscribers: ");
  7604. console.error(e);
  7605. }
  7606. }
  7607. reject(error2);
  7608. });
  7609. });
  7610. };
  7611. Store.prototype.subscribe = function subscribe(fn, options) {
  7612. return genericSubscribe(fn, this._subscribers, options);
  7613. };
  7614. Store.prototype.subscribeAction = function subscribeAction(fn, options) {
  7615. var subs = typeof fn === "function" ? { before: fn } : fn;
  7616. return genericSubscribe(subs, this._actionSubscribers, options);
  7617. };
  7618. Store.prototype.watch = function watch$1(getter, cb, options) {
  7619. var this$1$1 = this;
  7620. {
  7621. assert(typeof getter === "function", "store.watch only accepts a function.");
  7622. }
  7623. return vue.watch(function() {
  7624. return getter(this$1$1.state, this$1$1.getters);
  7625. }, cb, Object.assign({}, options));
  7626. };
  7627. Store.prototype.replaceState = function replaceState(state) {
  7628. var this$1$1 = this;
  7629. this._withCommit(function() {
  7630. this$1$1._state.data = state;
  7631. });
  7632. };
  7633. Store.prototype.registerModule = function registerModule(path, rawModule, options) {
  7634. if (options === void 0)
  7635. options = {};
  7636. if (typeof path === "string") {
  7637. path = [path];
  7638. }
  7639. {
  7640. assert(Array.isArray(path), "module path must be a string or an Array.");
  7641. assert(path.length > 0, "cannot register the root module by using registerModule.");
  7642. }
  7643. this._modules.register(path, rawModule);
  7644. installModule(this, this.state, path, this._modules.get(path), options.preserveState);
  7645. resetStoreState(this, this.state);
  7646. };
  7647. Store.prototype.unregisterModule = function unregisterModule(path) {
  7648. var this$1$1 = this;
  7649. if (typeof path === "string") {
  7650. path = [path];
  7651. }
  7652. {
  7653. assert(Array.isArray(path), "module path must be a string or an Array.");
  7654. }
  7655. this._modules.unregister(path);
  7656. this._withCommit(function() {
  7657. var parentState = getNestedState(this$1$1.state, path.slice(0, -1));
  7658. delete parentState[path[path.length - 1]];
  7659. });
  7660. resetStore(this);
  7661. };
  7662. Store.prototype.hasModule = function hasModule(path) {
  7663. if (typeof path === "string") {
  7664. path = [path];
  7665. }
  7666. {
  7667. assert(Array.isArray(path), "module path must be a string or an Array.");
  7668. }
  7669. return this._modules.isRegistered(path);
  7670. };
  7671. Store.prototype.hotUpdate = function hotUpdate(newOptions) {
  7672. this._modules.update(newOptions);
  7673. resetStore(this, true);
  7674. };
  7675. Store.prototype._withCommit = function _withCommit(fn) {
  7676. var committing = this._committing;
  7677. this._committing = true;
  7678. fn();
  7679. this._committing = committing;
  7680. };
  7681. Object.defineProperties(Store.prototype, prototypeAccessors);
  7682. const postfix = "_expiry";
  7683. const storage = {
  7684. /**
  7685. * 设置缓存
  7686. * @param {[type]} k [键名]
  7687. * @param {[type]} v [键值]
  7688. * @param {[type]} t [时间、单位秒]
  7689. */
  7690. set(k, v, t) {
  7691. uni.setStorageSync(k, v);
  7692. const seconds = parseInt(t);
  7693. if (seconds > 0) {
  7694. let timestamp = Date.parse(/* @__PURE__ */ new Date());
  7695. timestamp = timestamp / 1e3 + seconds;
  7696. uni.setStorageSync(k + postfix, timestamp + "");
  7697. } else {
  7698. uni.removeStorageSync(k + postfix);
  7699. }
  7700. },
  7701. /**
  7702. * 获取缓存
  7703. * @param {[type]} k [键名]
  7704. * @param {[type]} def [获取为空时默认]
  7705. */
  7706. get(k, def) {
  7707. const deadtime = parseInt(uni.getStorageSync(k + postfix));
  7708. if (deadtime) {
  7709. if (parseInt(deadtime) < Date.parse(/* @__PURE__ */ new Date()) / 1e3) {
  7710. if (def) {
  7711. return def;
  7712. } else {
  7713. return false;
  7714. }
  7715. }
  7716. }
  7717. const res = uni.getStorageSync(k);
  7718. if (res) {
  7719. return res;
  7720. }
  7721. if (def == void 0 || def == "") {
  7722. def = false;
  7723. }
  7724. return def;
  7725. },
  7726. /**
  7727. * 删除指定缓存
  7728. * @param {Object} k
  7729. */
  7730. remove(k) {
  7731. uni.removeStorageSync(k);
  7732. uni.removeStorageSync(k + postfix);
  7733. },
  7734. /**
  7735. * 清理所有缓存
  7736. * @return {[type]} [description]
  7737. */
  7738. clear() {
  7739. uni.clearStorageSync();
  7740. }
  7741. };
  7742. const _sfc_main = {
  7743. onLaunch: function(options) {
  7744. uni.hideTabBar();
  7745. const store2 = useStore();
  7746. let parent_id;
  7747. if (options.query && options.query.scene) {
  7748. parent_id = decodeURIComponent(options.query.scene).split("=")[1];
  7749. } else if (options.query && options.query.parent_id) {
  7750. parent_id = options.query.parent_id;
  7751. }
  7752. storage.set("PARENT_ID", parent_id, 30 * 86400 * 3);
  7753. store2.commit("M_PARENT_ID", parent_id);
  7754. },
  7755. onShow: function() {
  7756. formatAppLog("log", "at App.vue:24", "App Show");
  7757. },
  7758. onLoad() {
  7759. formatAppLog("log", "at App.vue:27", "App Load");
  7760. },
  7761. onHide: function() {
  7762. formatAppLog("log", "at App.vue:30", "App Hide");
  7763. },
  7764. methods: {
  7765. /**
  7766. * 小程序主动更新
  7767. */
  7768. updateManager() {
  7769. const updateManager = uni.getUpdateManager();
  7770. updateManager.onCheckForUpdate((res) => {
  7771. });
  7772. updateManager.onUpdateReady(() => {
  7773. uni.showModal({
  7774. title: "更新提示",
  7775. content: "新版本已经准备好,即将重启应用",
  7776. showCancel: false,
  7777. success(res) {
  7778. if (res.confirm) {
  7779. updateManager.applyUpdate();
  7780. }
  7781. }
  7782. });
  7783. });
  7784. updateManager.onUpdateFailed(() => {
  7785. uni.showModal({
  7786. title: "更新提示",
  7787. content: "新版本下载失败",
  7788. showCancel: false
  7789. });
  7790. });
  7791. }
  7792. }
  7793. };
  7794. const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "F:/project/liveH5-v3/App.vue"]]);
  7795. const ACCESS_TOKEN = "AccessToken";
  7796. const USER_ID = "userId";
  7797. const USER_INFO = "userInfo";
  7798. const app = {
  7799. state: {
  7800. // 当前终端平台
  7801. platform: ""
  7802. },
  7803. mutations: {
  7804. SET_PLATFORM: (state, value2) => {
  7805. state.platform = value2;
  7806. }
  7807. },
  7808. actions: {}
  7809. };
  7810. const mergeConfig$2 = (_this, options) => {
  7811. let urlType = /^(http|https):\/\//.test(options.url);
  7812. let config2 = Object.assign({
  7813. timeout: _this.timeout
  7814. }, _this.config, options);
  7815. if (options.method == "FILE") {
  7816. config2.url = urlType ? options.url : _this.fileUrl + options.url;
  7817. } else {
  7818. config2.url = urlType ? options.url : _this.baseUrl + options.url;
  7819. }
  7820. if (options.header) {
  7821. config2.header = Object.assign({}, _this.header, options.header);
  7822. } else {
  7823. config2.header = Object.assign({}, _this.header);
  7824. }
  7825. return config2;
  7826. };
  7827. const dispatchRequest$1 = (requestInfo) => {
  7828. return new Promise((resolve, reject) => {
  7829. let requestAbort = true;
  7830. let requestData = {
  7831. url: requestInfo.url,
  7832. header: requestInfo.header,
  7833. //加入请求头
  7834. success: (res) => {
  7835. requestAbort = false;
  7836. resolve(res);
  7837. },
  7838. fail: (err) => {
  7839. requestAbort = false;
  7840. if (err.errMsg == "request:fail abort") {
  7841. reject({
  7842. errMsg: "请求超时,请重新尝试",
  7843. statusCode: 0
  7844. });
  7845. } else {
  7846. reject(err);
  7847. }
  7848. }
  7849. };
  7850. if (requestInfo.method) {
  7851. requestData.method = requestInfo.method;
  7852. }
  7853. if (requestInfo.data) {
  7854. requestData.data = requestInfo.data;
  7855. }
  7856. if (requestInfo.dataType) {
  7857. requestData.dataType = requestInfo.dataType;
  7858. }
  7859. let requestTask = uni.request(requestData);
  7860. setTimeout(() => {
  7861. if (requestAbort) {
  7862. requestTask.abort();
  7863. }
  7864. }, requestInfo.timeout);
  7865. });
  7866. };
  7867. const jsonpRequest = (requestInfo) => {
  7868. return new Promise((resolve, reject) => {
  7869. let dataStr = "";
  7870. Object.keys(requestInfo.data).forEach((key) => {
  7871. dataStr += key + "=" + requestInfo.data[key] + "&";
  7872. });
  7873. if (dataStr !== "") {
  7874. dataStr = dataStr.substr(0, dataStr.lastIndexOf("&"));
  7875. }
  7876. requestInfo.url = requestInfo.url + "?" + dataStr;
  7877. });
  7878. };
  7879. const getPlatform = () => {
  7880. const platform2 = "app";
  7881. return platform2;
  7882. };
  7883. const platfrom = getPlatform();
  7884. class request {
  7885. constructor(options) {
  7886. this.baseUrl = options.baseUrl || "";
  7887. this.fileUrl = options.fileUrl || "";
  7888. this.timeout = options.timeout || 6e3;
  7889. this.defaultUploadUrl = options.defaultUploadUrl || "";
  7890. this.header = options.header || {};
  7891. this.config = options.config || {
  7892. isPrompt: true,
  7893. load: true,
  7894. isFactory: false,
  7895. resend: 0
  7896. };
  7897. }
  7898. // post请求
  7899. post(url2 = "", data = {}, options = {}) {
  7900. return this.request({
  7901. method: "POST",
  7902. data,
  7903. url: url2,
  7904. ...options
  7905. });
  7906. }
  7907. // get请求
  7908. get(url2 = "", data = {}, options = {}) {
  7909. return this.request({
  7910. method: "GET",
  7911. data,
  7912. url: url2,
  7913. ...options
  7914. });
  7915. }
  7916. // put请求
  7917. put(url2 = "", data = {}, options = {}) {
  7918. return this.request({
  7919. method: "PUT",
  7920. data,
  7921. url: url2,
  7922. ...options
  7923. });
  7924. }
  7925. // delete请求
  7926. delete(url2 = "", data = {}, options = {}) {
  7927. return this.request({
  7928. method: "DELETE",
  7929. data,
  7930. url: url2,
  7931. ...options
  7932. });
  7933. }
  7934. // jsonp请求(只限于H5使用)
  7935. jsonp(url2 = "", data = {}, options = {}) {
  7936. return this.request({
  7937. method: "JSONP",
  7938. data,
  7939. url: url2,
  7940. ...options
  7941. });
  7942. }
  7943. // 接口请求方法
  7944. async request(data) {
  7945. let requestInfo, runRequestStart = false;
  7946. try {
  7947. if (!data.url) {
  7948. throw {
  7949. errMsg: "【request】缺失数据url",
  7950. statusCode: 0
  7951. };
  7952. }
  7953. requestInfo = mergeConfig$2(this, data);
  7954. runRequestStart = true;
  7955. if (this.requestStart) {
  7956. let requestStart = this.requestStart(requestInfo);
  7957. if (typeof requestStart == "object") {
  7958. let changekeys = ["data", "header", "isPrompt", "load", "isFactory"];
  7959. changekeys.forEach((key) => {
  7960. requestInfo[key] = requestStart[key];
  7961. });
  7962. } else {
  7963. throw {
  7964. errMsg: "【request】请求开始拦截器未通过",
  7965. statusCode: 0,
  7966. formData: requestInfo.data,
  7967. method: requestInfo.method,
  7968. header: requestInfo.header,
  7969. url: requestInfo.url
  7970. };
  7971. }
  7972. }
  7973. let requestResult = {};
  7974. if (requestInfo.method == "JSONP") {
  7975. requestResult = await jsonpRequest(requestInfo);
  7976. } else {
  7977. requestResult = await dispatchRequest$1(requestInfo);
  7978. }
  7979. if (requestInfo.isFactory && this.dataFactory) {
  7980. let result = await this.dataFactory({
  7981. ...requestInfo,
  7982. response: requestResult.data
  7983. });
  7984. return result ? Promise.resolve(result) : null;
  7985. } else {
  7986. return Promise.resolve(requestResult);
  7987. }
  7988. } catch (err) {
  7989. this.requestError && this.requestError(err);
  7990. return Promise.reject(err);
  7991. } finally {
  7992. if (runRequestStart) {
  7993. this.requestEnd && this.requestEnd(requestInfo);
  7994. }
  7995. }
  7996. }
  7997. }
  7998. const qiniuUploader = /* @__PURE__ */ function() {
  7999. var config2 = {
  8000. qiniuRegion: "",
  8001. qiniuImageURLPrefix: "",
  8002. qiniuUploadToken: "",
  8003. qiniuUploadTokenURL: "",
  8004. qiniuUploadTokenFunction: null,
  8005. qiniuShouldUseQiniuFileName: false
  8006. };
  8007. function init(options) {
  8008. config2 = {
  8009. qiniuRegion: "",
  8010. qiniuImageURLPrefix: "",
  8011. qiniuUploadToken: "",
  8012. qiniuUploadTokenURL: "",
  8013. qiniuUploadTokenFunction: null,
  8014. qiniuShouldUseQiniuFileName: false
  8015. };
  8016. updateConfigWithOptions(options);
  8017. }
  8018. function updateConfigWithOptions(options) {
  8019. if (options.region) {
  8020. config2.qiniuRegion = options.region;
  8021. } else {
  8022. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:30", "qiniu uploader need your bucket region");
  8023. }
  8024. if (options.uptoken) {
  8025. config2.qiniuUploadToken = options.uptoken;
  8026. } else if (options.uptokenURL) {
  8027. config2.qiniuUploadTokenURL = options.uptokenURL;
  8028. } else if (options.uptokenFunc) {
  8029. config2.qiniuUploadTokenFunction = options.uptokenFunc;
  8030. }
  8031. if (options.domain) {
  8032. config2.qiniuImageURLPrefix = options.domain;
  8033. }
  8034. config2.qiniuShouldUseQiniuFileName = options.shouldUseQiniuFileName;
  8035. }
  8036. function upload(filePath, success, fail, options, progress, cancelTask) {
  8037. if (null == filePath) {
  8038. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:47", "qiniu uploader need filePath to upload");
  8039. return;
  8040. }
  8041. if (options) {
  8042. updateConfigWithOptions(options);
  8043. }
  8044. if (config2.qiniuUploadToken) {
  8045. doUpload(filePath, success, fail, options, progress, cancelTask);
  8046. } else if (config2.qiniuUploadTokenURL) {
  8047. getQiniuToken(function() {
  8048. doUpload(filePath, success, fail, options, progress, cancelTask);
  8049. });
  8050. } else if (config2.qiniuUploadTokenFunction) {
  8051. config2.qiniuUploadToken = config2.qiniuUploadTokenFunction();
  8052. if (null == config2.qiniuUploadToken && config2.qiniuUploadToken.length > 0) {
  8053. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:62", "qiniu UploadTokenFunction result is null, please check the return value");
  8054. return;
  8055. }
  8056. doUpload(filePath, success, fail, options, progress, cancelTask);
  8057. } else {
  8058. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:67", "qiniu uploader need one of [uptoken, uptokenURL, uptokenFunc]");
  8059. return;
  8060. }
  8061. }
  8062. function doUpload(filePath, success, fail, options, progress, cancelTask) {
  8063. if (null == config2.qiniuUploadToken && config2.qiniuUploadToken.length > 0) {
  8064. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:74", "qiniu UploadToken is null, please check the init config or networking");
  8065. return;
  8066. }
  8067. var url2 = uploadURLFromRegionCode(config2.qiniuRegion);
  8068. var fileName = filePath.split("//")[1];
  8069. if (options && options.key) {
  8070. fileName = options.key;
  8071. }
  8072. var formData = {
  8073. "token": config2.qiniuUploadToken
  8074. };
  8075. if (!config2.qiniuShouldUseQiniuFileName) {
  8076. formData["key"] = fileName;
  8077. }
  8078. var uploadTask = wx.uploadFile({
  8079. url: url2,
  8080. filePath,
  8081. name: "file",
  8082. formData,
  8083. success: function(res) {
  8084. var dataString = res.data;
  8085. if (res.data.hasOwnProperty("type") && res.data.type === "Buffer") {
  8086. dataString = String.fromCharCode.apply(null, res.data.data);
  8087. }
  8088. try {
  8089. var dataObject = JSON.parse(dataString);
  8090. var imageUrl = config2.qiniuImageURLPrefix + "/" + dataObject.key;
  8091. dataObject.imageURL = imageUrl;
  8092. if (success) {
  8093. success(dataObject);
  8094. }
  8095. } catch (e) {
  8096. formatAppLog("log", "at utils/request/upload/qiniuUploader.js:107", "parse JSON failed, origin String is: " + dataString);
  8097. if (fail) {
  8098. fail(e);
  8099. }
  8100. }
  8101. },
  8102. fail: function(error2) {
  8103. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:114", error2);
  8104. if (fail) {
  8105. fail(error2);
  8106. }
  8107. }
  8108. });
  8109. uploadTask.onProgressUpdate((res) => {
  8110. progress && progress(res);
  8111. });
  8112. cancelTask && cancelTask(() => {
  8113. uploadTask.abort();
  8114. });
  8115. }
  8116. function getQiniuToken(callback) {
  8117. wx.request({
  8118. url: config2.qiniuUploadTokenURL,
  8119. success: function(res) {
  8120. var token = res.data.uptoken;
  8121. if (token && token.length > 0) {
  8122. config2.qiniuUploadToken = token;
  8123. if (callback) {
  8124. callback();
  8125. }
  8126. } else {
  8127. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:141", "qiniuUploader cannot get your token, please check the uptokenURL or server");
  8128. }
  8129. },
  8130. fail: function(error2) {
  8131. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:145", "qiniu UploadToken is null, please check the init config or networking: " + error2);
  8132. }
  8133. });
  8134. }
  8135. function uploadURLFromRegionCode(code2) {
  8136. var uploadURL = null;
  8137. switch (code2) {
  8138. case "ECN":
  8139. uploadURL = "https://up.qbox.me";
  8140. break;
  8141. case "NCN":
  8142. uploadURL = "https://up-z1.qbox.me";
  8143. break;
  8144. case "SCN":
  8145. uploadURL = "https://up-z2.qbox.me";
  8146. break;
  8147. case "NA":
  8148. uploadURL = "https://up-na0.qbox.me";
  8149. break;
  8150. case "ASG":
  8151. uploadURL = "https://up-as0.qbox.me";
  8152. break;
  8153. default:
  8154. formatAppLog("error", "at utils/request/upload/qiniuUploader.js:169", "please make the region is with one of [ECN, SCN, NCN, NA, ASG]");
  8155. }
  8156. return uploadURL;
  8157. }
  8158. return {
  8159. init,
  8160. upload
  8161. };
  8162. }();
  8163. const randomChar = function(l, url2 = "") {
  8164. const x = "0123456789qwertyuioplkjhgfdsazxcvbnm";
  8165. let tmp = "";
  8166. let time = /* @__PURE__ */ new Date();
  8167. for (let i = 0; i < l; i++) {
  8168. tmp += x.charAt(Math.ceil(Math.random() * 1e8) % x.length);
  8169. }
  8170. return "file/" + url2 + time.getTime() + tmp;
  8171. };
  8172. const chooseImage = function(data) {
  8173. return new Promise((resolve, reject) => {
  8174. uni.chooseImage({
  8175. count: data.count || 9,
  8176. //默认9
  8177. sizeType: data.sizeType || ["original", "compressed"],
  8178. //可以指定是原图还是压缩图,默认二者都有
  8179. sourceType: data.sourceType || ["album", "camera"],
  8180. //从相册选择
  8181. success: function(res) {
  8182. resolve(res.tempFiles);
  8183. },
  8184. fail: (err) => {
  8185. reject({
  8186. errMsg: err.errMsg,
  8187. errCode: err.errCode,
  8188. statusCode: 0
  8189. });
  8190. }
  8191. });
  8192. });
  8193. };
  8194. const chooseVideo = function(data) {
  8195. return new Promise((resolve, reject) => {
  8196. uni.chooseVideo({
  8197. sourceType: data.sourceType || ["album", "camera"],
  8198. //从相册选择
  8199. compressed: data.compressed || false,
  8200. //是否压缩所选的视频源文件,默认值为 true,需要压缩。
  8201. maxDuration: data.maxDuration || 60,
  8202. //拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。
  8203. camera: data.camera || "back",
  8204. //'front'、'back',默认'back'
  8205. success: function(res) {
  8206. let files = [{
  8207. path: res.tempFilePath
  8208. }];
  8209. files[0].duration = res.duration;
  8210. files[0].size = res.size;
  8211. files[0].height = res.height;
  8212. files[0].width = res.width;
  8213. resolve(files);
  8214. },
  8215. fail: (err) => {
  8216. reject({
  8217. errMsg: err.errMsg,
  8218. errCode: err.errCode,
  8219. statusCode: 0
  8220. });
  8221. }
  8222. });
  8223. });
  8224. };
  8225. const qiniuUpload = function(requestInfo, getQnToken) {
  8226. return new Promise((resolve, reject) => {
  8227. if (Array.isArray(requestInfo.files)) {
  8228. let len = requestInfo.files.length;
  8229. let fileList = new Array();
  8230. if (getQnToken) {
  8231. getQnToken((qnRes) => {
  8232. let prefixLen = qnRes.visitPrefix.length;
  8233. if (qnRes.visitPrefix.charAt(prefixLen - 1) == "/") {
  8234. qnRes.visitPrefix = qnRes.visitPrefix.substring(0, prefixLen - 1);
  8235. }
  8236. uploadFile(0);
  8237. function uploadFile(i) {
  8238. let item = requestInfo.files[i];
  8239. let updateUrl = randomChar(10, qnRes.folderPath);
  8240. let fileData = {
  8241. fileIndex: i,
  8242. files: requestInfo.files,
  8243. ...item
  8244. };
  8245. if (item.name) {
  8246. fileData.name = item.name;
  8247. let nameArr = item.name.split(".");
  8248. updateUrl += "." + nameArr[nameArr.length - 1];
  8249. }
  8250. qiniuUploader.upload(item.path || item, (res) => {
  8251. fileData.url = res.imageURL;
  8252. requestInfo.onEachUpdate && requestInfo.onEachUpdate({
  8253. url: res.imageURL,
  8254. ...fileData
  8255. });
  8256. fileList.push(res.imageURL);
  8257. if (len - 1 > i) {
  8258. uploadFile(i + 1);
  8259. } else {
  8260. resolve(fileList);
  8261. }
  8262. }, (error2) => {
  8263. reject(error2);
  8264. }, {
  8265. region: qnRes.region || "SCN",
  8266. //地区
  8267. domain: qnRes.visitPrefix,
  8268. // bucket 域名,下载资源时用到。
  8269. key: updateUrl,
  8270. uptoken: qnRes.token,
  8271. // 由其他程序生成七牛 uptoken
  8272. uptokenURL: "UpTokenURL.com/uptoken"
  8273. // 上传地址
  8274. }, (res) => {
  8275. formatAppLog("log", "at utils/request/upload/utils.js:127", requestInfo);
  8276. requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res));
  8277. });
  8278. }
  8279. });
  8280. } else {
  8281. reject({
  8282. errMsg: "请添加七牛云回调方法:getQnToken",
  8283. statusCode: 0
  8284. });
  8285. }
  8286. } else {
  8287. reject({
  8288. errMsg: "files 必须是数组类型",
  8289. statusCode: 0
  8290. });
  8291. }
  8292. });
  8293. };
  8294. const urlUpload = function(requestInfo, dataFactory) {
  8295. return new Promise((resolve, reject) => {
  8296. if (requestInfo.header["Content-Type"]) {
  8297. delete requestInfo.header["Content-Type"];
  8298. }
  8299. if (requestInfo.header["content-type"]) {
  8300. delete requestInfo.header["content-type"];
  8301. }
  8302. if (Array.isArray(requestInfo.files)) {
  8303. let fileUpload2 = function(i) {
  8304. let item = requestInfo.files[i];
  8305. let fileData = {
  8306. fileIndex: i,
  8307. files: requestInfo.files,
  8308. ...item
  8309. };
  8310. let config2 = {
  8311. url: requestInfo.url,
  8312. filePath: item.path,
  8313. header: requestInfo.header,
  8314. //加入请求头
  8315. name: requestInfo.name || "file",
  8316. success: (response) => {
  8317. if (requestInfo.isFactory && dataFactory) {
  8318. dataFactory({
  8319. ...requestInfo,
  8320. response
  8321. }).then((data) => {
  8322. fileList.push(data);
  8323. requestInfo.onEachUpdate && requestInfo.onEachUpdate({
  8324. data,
  8325. ...fileData
  8326. });
  8327. if (len <= i) {
  8328. resolve(fileList);
  8329. } else {
  8330. fileUpload2(i + 1);
  8331. }
  8332. }, (err) => {
  8333. reject(err);
  8334. });
  8335. } else {
  8336. requestInfo.onEachUpdate && requestInfo.onEachUpdate({
  8337. data: response,
  8338. ...fileData
  8339. });
  8340. fileList.push(response);
  8341. if (len <= i) {
  8342. resolve(fileList);
  8343. } else {
  8344. fileUpload2(i + 1);
  8345. }
  8346. }
  8347. },
  8348. fail: (err) => {
  8349. reject(err);
  8350. }
  8351. };
  8352. if (requestInfo.data) {
  8353. config2.formData = requestInfo.data;
  8354. }
  8355. const uploadTask = uni.uploadFile(config2);
  8356. uploadTask.onProgressUpdate((res) => {
  8357. requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res));
  8358. });
  8359. };
  8360. const len = requestInfo.files.length - 1;
  8361. let fileList = new Array();
  8362. fileUpload2(0);
  8363. } else {
  8364. reject({
  8365. errMsg: "files 必须是数组类型",
  8366. statusCode: 0
  8367. });
  8368. }
  8369. });
  8370. };
  8371. class fileUpload extends request {
  8372. constructor(props2) {
  8373. super(props2);
  8374. }
  8375. async ossImagUpload(options = {}) {
  8376. try {
  8377. const files = await chooseImage(options);
  8378. const data = [];
  8379. for (let item of files) {
  8380. let params = {
  8381. size: item.size,
  8382. model: "image"
  8383. };
  8384. if (item.name) {
  8385. params.name = item.name;
  8386. params.path = item.path;
  8387. } else if (item.path) {
  8388. if (item.path.indexOf("/") > -1) {
  8389. let names = item.path.split("/");
  8390. params.name = names[names.length - 1];
  8391. }
  8392. params.path = item.path;
  8393. }
  8394. options.onSelectComplete && options.onSelectComplete(files);
  8395. data.push(params);
  8396. }
  8397. return Promise.resolve(data);
  8398. } catch (err) {
  8399. return Promise.reject(err);
  8400. }
  8401. }
  8402. async ossVideoUpload(options = {}) {
  8403. let files;
  8404. try {
  8405. files = await chooseVideo(options);
  8406. let file = files[0];
  8407. let params = {
  8408. size: file.size,
  8409. model: "video"
  8410. };
  8411. if (file.name) {
  8412. params.name = file.name;
  8413. params.path = file.path;
  8414. } else if (file.path) {
  8415. if (file.path.indexOf("/") > -1) {
  8416. let names = file.path.split("/");
  8417. params.name = names[names.length - 1];
  8418. }
  8419. params.path = file.path;
  8420. }
  8421. options.onSelectComplete && options.onSelectComplete(files);
  8422. return Promise.resolve(params);
  8423. } catch (err) {
  8424. return Promise.reject(err);
  8425. }
  8426. }
  8427. //七牛云上传图片
  8428. async qnImgUpload(options = {}) {
  8429. let files;
  8430. try {
  8431. files = await chooseImage(options);
  8432. options.onSelectComplete && options.onSelectComplete(files);
  8433. } catch (err) {
  8434. this.requestError && this.requestError(err);
  8435. return Promise.reject(err);
  8436. }
  8437. if (files) {
  8438. return this.qnFileUpload({
  8439. ...options,
  8440. files
  8441. });
  8442. }
  8443. }
  8444. //七牛云上传视频
  8445. async qnVideoUpload(options = {}) {
  8446. let files;
  8447. try {
  8448. files = await chooseVideo(options);
  8449. options.onSelectComplete && options.onSelectComplete(files);
  8450. } catch (err) {
  8451. this.requestError && this.requestError(err);
  8452. return Promise.reject(err);
  8453. }
  8454. if (files) {
  8455. return this.qnFileUpload({
  8456. ...options,
  8457. files
  8458. });
  8459. }
  8460. }
  8461. //七牛云文件上传(支持多张上传)
  8462. async qnFileUpload(options = {}) {
  8463. let requestInfo;
  8464. try {
  8465. requestInfo = {
  8466. ...this.config,
  8467. ...options,
  8468. header: {},
  8469. method: "FILE"
  8470. };
  8471. if (this.requestStart) {
  8472. let requestStart = this.requestStart(requestInfo);
  8473. if (typeof requestStart == "object") {
  8474. let changekeys = ["load", "files"];
  8475. changekeys.forEach((key) => {
  8476. requestInfo[key] = requestStart[key];
  8477. });
  8478. } else {
  8479. throw {
  8480. errMsg: "【request】请求开始拦截器未通过",
  8481. statusCode: 0,
  8482. data: requestInfo.data,
  8483. method: requestInfo.method,
  8484. header: requestInfo.header,
  8485. url: requestInfo.url
  8486. };
  8487. }
  8488. }
  8489. let requestResult = await qiniuUpload(requestInfo, this.getQnToken);
  8490. return Promise.resolve(requestResult);
  8491. } catch (err) {
  8492. this.requestError && this.requestError(err);
  8493. return Promise.reject(err);
  8494. } finally {
  8495. this.requestEnd && this.requestEnd(requestInfo);
  8496. }
  8497. }
  8498. //本地服务器图片上传
  8499. async urlImgUpload() {
  8500. let options = {};
  8501. if (arguments[0]) {
  8502. if (typeof arguments[0] == "string") {
  8503. options.url = arguments[0];
  8504. } else if (typeof arguments[0] == "object") {
  8505. options = Object.assign(options, arguments[0]);
  8506. }
  8507. }
  8508. if (arguments[1] && typeof arguments[1] == "object") {
  8509. options = Object.assign(options, arguments[1]);
  8510. }
  8511. try {
  8512. options.files = await chooseImage(options);
  8513. options.onSelectComplete && options.onSelectComplete(options.files);
  8514. } catch (err) {
  8515. this.requestError && this.requestError(err);
  8516. return Promise.reject(err);
  8517. }
  8518. if (options.files) {
  8519. return this.urlFileUpload(options);
  8520. }
  8521. }
  8522. //本地服务器上传视频
  8523. async urlVideoUpload() {
  8524. let options = {};
  8525. if (arguments[0]) {
  8526. if (typeof arguments[0] == "string") {
  8527. options.url = arguments[0];
  8528. } else if (typeof arguments[0] == "object") {
  8529. options = Object.assign(options, arguments[0]);
  8530. }
  8531. }
  8532. if (arguments[1] && typeof arguments[1] == "object") {
  8533. options = Object.assign(options, arguments[1]);
  8534. }
  8535. try {
  8536. options.files = await chooseVideo(options);
  8537. options.onSelectComplete && options.onSelectComplete(options.files);
  8538. } catch (err) {
  8539. this.requestError && this.requestError(err);
  8540. return Promise.reject(err);
  8541. }
  8542. if (options.files) {
  8543. return this.urlFileUpload(options);
  8544. }
  8545. }
  8546. //本地服务器文件上传方法
  8547. async urlFileUpload() {
  8548. let requestInfo = {
  8549. method: "FILE"
  8550. };
  8551. if (arguments[0]) {
  8552. if (typeof arguments[0] == "string") {
  8553. requestInfo.url = arguments[0];
  8554. } else if (typeof arguments[0] == "object") {
  8555. requestInfo = Object.assign(requestInfo, arguments[0]);
  8556. }
  8557. }
  8558. if (arguments[1] && typeof arguments[1] == "object") {
  8559. requestInfo = Object.assign(requestInfo, arguments[1]);
  8560. }
  8561. if (!requestInfo.url && this.defaultUploadUrl) {
  8562. requestInfo.url = this.defaultUploadUrl;
  8563. }
  8564. let runRequestStart = false;
  8565. try {
  8566. if (!requestInfo.url) {
  8567. throw {
  8568. errMsg: "【request】文件上传缺失数据url",
  8569. statusCode: 0,
  8570. data: requestInfo.data,
  8571. method: requestInfo.method,
  8572. header: requestInfo.header,
  8573. url: requestInfo.url
  8574. };
  8575. }
  8576. requestInfo = mergeConfig$2(this, requestInfo);
  8577. runRequestStart = true;
  8578. if (this.requestStart) {
  8579. let requestStart = this.requestStart(requestInfo);
  8580. if (typeof requestStart == "object") {
  8581. let changekeys = ["data", "header", "isPrompt", "load", "isFactory", "files"];
  8582. changekeys.forEach((key) => {
  8583. requestInfo[key] = requestStart[key];
  8584. });
  8585. } else {
  8586. throw {
  8587. errMsg: "【request】请求开始拦截器未通过",
  8588. statusCode: 0,
  8589. data: requestInfo.data,
  8590. method: requestInfo.method,
  8591. header: requestInfo.header,
  8592. url: requestInfo.url
  8593. };
  8594. }
  8595. }
  8596. let requestResult = await urlUpload(requestInfo, this.dataFactory);
  8597. return Promise.resolve(requestResult);
  8598. } catch (err) {
  8599. this.requestError && this.requestError(err);
  8600. return Promise.reject(err);
  8601. } finally {
  8602. if (runRequestStart) {
  8603. this.requestEnd && this.requestEnd(requestInfo);
  8604. }
  8605. }
  8606. }
  8607. }
  8608. const testUrl = "https://wanbei.monvkeji.cn/";
  8609. const defaultConfig = {
  8610. // 系统名称
  8611. name: "签约",
  8612. apiUrl: testUrl
  8613. };
  8614. const mergeConfig$1 = Object.assign({}, defaultConfig);
  8615. const config = {
  8616. // 获取全部配置
  8617. all() {
  8618. return mergeConfig$1;
  8619. },
  8620. // 获取指定配置
  8621. get(key, def = void 0) {
  8622. if (mergeConfig$1.hasOwnProperty(key)) {
  8623. return mergeConfig$1[key];
  8624. }
  8625. formatAppLog("error", "at core/config/index.js:21", `检测到不存在的配置项: ${key}`);
  8626. return def;
  8627. },
  8628. getResource(imgName) {
  8629. return `${mergeConfig$1.apiUrl}images/${imgName}`;
  8630. }
  8631. };
  8632. const apiUrl = config.get("apiUrl");
  8633. const $http = new fileUpload({
  8634. // 接口请求地址
  8635. baseUrl: apiUrl,
  8636. // 服务器本地上传文件地址
  8637. fileUrl: apiUrl,
  8638. // 服务器上传图片默认url
  8639. defaultUploadUrl: "upload/image",
  8640. // 设置请求头(如果使用报错跨域问题,可能是content-type请求类型和后台那边设置的不一致)
  8641. header: {
  8642. "content-type": "application/json;charset=utf-8"
  8643. },
  8644. // 请求超时时间, 单位ms(默认15000)
  8645. timeout: 15e3,
  8646. // 默认配置(可不写)
  8647. config: {
  8648. // 是否自动提示错误
  8649. isPrompt: true,
  8650. // 是否显示加载动画
  8651. load: true,
  8652. // 是否使用数据工厂
  8653. isFactory: true
  8654. }
  8655. });
  8656. let requestNum = 0;
  8657. $http.requestStart = (options) => {
  8658. if (options.load) {
  8659. if (requestNum <= 0) {
  8660. uni.showLoading({
  8661. title: "加载中",
  8662. mask: true
  8663. });
  8664. }
  8665. requestNum += 1;
  8666. }
  8667. if (options.method == "FILE" && options.maxSize) {
  8668. const maxSize = options.maxSize;
  8669. for (let item of options.files) {
  8670. if (item.size > maxSize) {
  8671. setTimeout(() => {
  8672. uni.showToast({
  8673. title: "图片过大,请重新上传",
  8674. icon: "none"
  8675. });
  8676. });
  8677. return false;
  8678. }
  8679. }
  8680. }
  8681. options.header["api-name"] = store$1.getters.platform;
  8682. options.header["token"] = store$1.getters.token;
  8683. return options;
  8684. };
  8685. $http.requestEnd = (options) => {
  8686. if (options.load) {
  8687. if (requestNum > 0) {
  8688. uni.hideLoading();
  8689. }
  8690. }
  8691. };
  8692. $http.dataFactory = async (res) => {
  8693. requestNum -= 1;
  8694. if (requestNum <= 0) {
  8695. uni.hideLoading();
  8696. }
  8697. const httpData = res.response;
  8698. if (httpData.code === 0) {
  8699. uni.showToast({
  8700. title: httpData.msg,
  8701. icon: "none",
  8702. duration: 2500
  8703. });
  8704. return false;
  8705. } else if (httpData.code == 401) {
  8706. store$1.dispatch("Logout");
  8707. uni.showToast({
  8708. title: "登录状态错误或已失效",
  8709. icon: "none",
  8710. duration: 2500
  8711. });
  8712. return false;
  8713. } else if (httpData.code === 200) {
  8714. return Promise.resolve(httpData);
  8715. } else {
  8716. uni.showToast({
  8717. title: "服务端错误",
  8718. icon: "none",
  8719. duration: 2500
  8720. });
  8721. return false;
  8722. }
  8723. };
  8724. $http.requestError = (e) => {
  8725. if (e.statusCode === 0) {
  8726. throw e;
  8727. } else {
  8728. setTimeout(() => showRequestError(e), 10);
  8729. }
  8730. };
  8731. const showRequestError = (e) => {
  8732. let errMsg = `网络请求出错:${e.errMsg}`;
  8733. if (e.errMsg === "request:fail") {
  8734. errMsg = "网络请求错误,请检查您的网络是否正常!";
  8735. }
  8736. uni.showToast({
  8737. title: errMsg,
  8738. icon: "none",
  8739. duration: 3500
  8740. });
  8741. };
  8742. const api = {
  8743. userLoginWX: "api/login/login",
  8744. userLloginApp: "api/login/loginApp",
  8745. userLoginH5: "api/login/loginH5",
  8746. doSmsSend: "api/sms/send",
  8747. checkSms: "api/sms/checkSms",
  8748. resetPassword: "api/login/resetPassword"
  8749. };
  8750. function userLoginWX(data) {
  8751. return $http.post(api.userLoginWX, data);
  8752. }
  8753. function userLloginApp(data) {
  8754. return $http.post(api.userLloginApp, data);
  8755. }
  8756. function userLoginH5(data) {
  8757. return $http.post(api.userLoginH5, data);
  8758. }
  8759. const urlEncode = (obj = {}) => {
  8760. const result = [];
  8761. for (const key in obj) {
  8762. const item = obj[key];
  8763. if (!item) {
  8764. continue;
  8765. }
  8766. if (isArray$1(item)) {
  8767. item.forEach((val) => {
  8768. result.push(key + "=" + val);
  8769. });
  8770. } else {
  8771. result.push(key + "=" + item);
  8772. }
  8773. }
  8774. return result.join("&");
  8775. };
  8776. const inArray = (search, array2) => {
  8777. for (var i in array2) {
  8778. if (array2[i] == search)
  8779. return true;
  8780. }
  8781. return false;
  8782. };
  8783. const isArray$1 = (array2) => {
  8784. return Object.prototype.toString.call(array2) === "[object Array]";
  8785. };
  8786. const getTabBarLinks = () => {
  8787. const tabBarLinks = [
  8788. "pages/home/index",
  8789. "pages/camp/index",
  8790. "pages/games/index",
  8791. "pages/user/index"
  8792. ];
  8793. return tabBarLinks;
  8794. };
  8795. const navTo = (url2, query = {}, modo = "navigateTo") => {
  8796. if (!url2 || url2.length == 0) {
  8797. return false;
  8798. }
  8799. if (inArray(url2, getTabBarLinks())) {
  8800. uni.switchTab({
  8801. url: `/${url2}`
  8802. });
  8803. return true;
  8804. }
  8805. const queryStr = query ? "?" + urlEncode(query) : "";
  8806. modo === "navigateTo" && uni.navigateTo({
  8807. url: `/${url2}${queryStr}`
  8808. });
  8809. modo === "redirectTo" && uni.redirectTo({
  8810. url: `/${url2}${queryStr}`
  8811. });
  8812. return true;
  8813. };
  8814. const loginSuccess = (commit, {
  8815. token,
  8816. id,
  8817. userInfo
  8818. }) => {
  8819. const expiryTime = 30 * 86400 * 3;
  8820. storage.set(USER_ID, id, expiryTime);
  8821. storage.set(ACCESS_TOKEN, token, expiryTime);
  8822. commit("SET_TOKEN", token);
  8823. commit("SET_USER_ID", id);
  8824. commit("SET_USER_INFO", userInfo);
  8825. };
  8826. const user = {
  8827. state: {
  8828. // 用户认证token
  8829. token: uni.getStorageSync(ACCESS_TOKEN),
  8830. // 用户ID
  8831. userId: uni.getStorageSync(USER_ID),
  8832. userInfo: uni.getStorageSync(USER_INFO),
  8833. parent_id: null
  8834. },
  8835. mutations: {
  8836. SET_TOKEN: (state, value2) => {
  8837. state.token = value2;
  8838. },
  8839. SET_USER_ID: (state, value2) => {
  8840. state.userId = value2;
  8841. },
  8842. SET_USER_INFO: (state, value2) => {
  8843. state.userInfo = value2;
  8844. },
  8845. M_PARENT_ID: (state, value2) => {
  8846. state.parent_id = value2;
  8847. }
  8848. },
  8849. actions: {
  8850. // 用户登录(普通登录: 输入手机号和验证码)
  8851. async LoginWX({
  8852. commit
  8853. }, data) {
  8854. const result = await userLoginWX(data);
  8855. if (result) {
  8856. if (result.data.token) {
  8857. loginSuccess(commit, {
  8858. token: result.data.token,
  8859. id: result.data.id,
  8860. userInfo: {}
  8861. });
  8862. return Promise.resolve(result);
  8863. } else {
  8864. return Promise.resolve(result);
  8865. }
  8866. }
  8867. },
  8868. // 用户登录(普通登录: 输入手机号和验证码)
  8869. async LoginApp({
  8870. commit
  8871. }, data) {
  8872. const result = await userLloginApp(data);
  8873. if (result) {
  8874. loginSuccess(commit, {
  8875. token: result.data.token,
  8876. id: result.data.id
  8877. });
  8878. return Promise.resolve(result);
  8879. } else {
  8880. return Promise.resolve(result);
  8881. }
  8882. },
  8883. // H5登陆
  8884. async LoginH5({
  8885. commit
  8886. }, data) {
  8887. const result = await userLoginH5(data);
  8888. if (result) {
  8889. if (result.data.token) {
  8890. loginSuccess(commit, {
  8891. token: result.data.token,
  8892. id: result.data.id
  8893. });
  8894. return Promise.resolve(result);
  8895. } else {
  8896. return Promise.resolve(result);
  8897. }
  8898. }
  8899. },
  8900. // 退出登录
  8901. async Logout({
  8902. commit
  8903. }, data) {
  8904. const store2 = this;
  8905. if (store2.getters.userId > 0) {
  8906. storage.remove(USER_ID);
  8907. storage.remove(ACCESS_TOKEN);
  8908. storage.remove(USER_INFO);
  8909. commit("SET_TOKEN", "");
  8910. commit("SET_USER_ID", null);
  8911. commit("SET_USER_INFO", null);
  8912. navTo("pages/home/index", {});
  8913. return Promise.resolve({
  8914. result: true
  8915. });
  8916. }
  8917. }
  8918. }
  8919. };
  8920. const cate = {
  8921. state: {
  8922. // 当前终端平台
  8923. cate_history: uni.getStorageSync("cate_history") ? uni.getStorageSync("cate_history") : []
  8924. },
  8925. mutations: {
  8926. SET_CATE_HISTORY: (state, value2) => {
  8927. state.cate_history = value2;
  8928. uni.setStorageSync("cate_history", state.cate_history);
  8929. }
  8930. },
  8931. actions: {}
  8932. };
  8933. const getters = {
  8934. token: (state) => state.user.token,
  8935. userId: (state) => state.user.userId,
  8936. platform: (state) => state.app.platform,
  8937. userInfo: (state) => state.user.userInfo
  8938. };
  8939. const store = createStore({
  8940. modules: {
  8941. app,
  8942. user,
  8943. cate
  8944. },
  8945. getters
  8946. });
  8947. const store$1 = store;
  8948. const { toString } = Object.prototype;
  8949. function isArray(val) {
  8950. return toString.call(val) === "[object Array]";
  8951. }
  8952. function isObject(val) {
  8953. return val !== null && typeof val === "object";
  8954. }
  8955. function isDate(val) {
  8956. return toString.call(val) === "[object Date]";
  8957. }
  8958. function isURLSearchParams(val) {
  8959. return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
  8960. }
  8961. function forEach(obj, fn) {
  8962. if (obj === null || typeof obj === "undefined") {
  8963. return;
  8964. }
  8965. if (typeof obj !== "object") {
  8966. obj = [obj];
  8967. }
  8968. if (isArray(obj)) {
  8969. for (let i = 0, l = obj.length; i < l; i++) {
  8970. fn.call(null, obj[i], i, obj);
  8971. }
  8972. } else {
  8973. for (const key in obj) {
  8974. if (Object.prototype.hasOwnProperty.call(obj, key)) {
  8975. fn.call(null, obj[key], key, obj);
  8976. }
  8977. }
  8978. }
  8979. }
  8980. function isPlainObject(obj) {
  8981. return Object.prototype.toString.call(obj) === "[object Object]";
  8982. }
  8983. function deepMerge() {
  8984. const result = {};
  8985. function assignValue(val, key) {
  8986. if (typeof result[key] === "object" && typeof val === "object") {
  8987. result[key] = deepMerge(result[key], val);
  8988. } else if (typeof val === "object") {
  8989. result[key] = deepMerge({}, val);
  8990. } else {
  8991. result[key] = val;
  8992. }
  8993. }
  8994. for (let i = 0, l = arguments.length; i < l; i++) {
  8995. forEach(arguments[i], assignValue);
  8996. }
  8997. return result;
  8998. }
  8999. function isUndefined(val) {
  9000. return typeof val === "undefined";
  9001. }
  9002. function encode(val) {
  9003. return encodeURIComponent(val).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
  9004. }
  9005. function buildURL(url2, params) {
  9006. if (!params) {
  9007. return url2;
  9008. }
  9009. let serializedParams;
  9010. if (isURLSearchParams(params)) {
  9011. serializedParams = params.toString();
  9012. } else {
  9013. const parts = [];
  9014. forEach(params, (val, key) => {
  9015. if (val === null || typeof val === "undefined") {
  9016. return;
  9017. }
  9018. if (isArray(val)) {
  9019. key = `${key}[]`;
  9020. } else {
  9021. val = [val];
  9022. }
  9023. forEach(val, (v) => {
  9024. if (isDate(v)) {
  9025. v = v.toISOString();
  9026. } else if (isObject(v)) {
  9027. v = JSON.stringify(v);
  9028. }
  9029. parts.push(`${encode(key)}=${encode(v)}`);
  9030. });
  9031. });
  9032. serializedParams = parts.join("&");
  9033. }
  9034. if (serializedParams) {
  9035. const hashmarkIndex = url2.indexOf("#");
  9036. if (hashmarkIndex !== -1) {
  9037. url2 = url2.slice(0, hashmarkIndex);
  9038. }
  9039. url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams;
  9040. }
  9041. return url2;
  9042. }
  9043. function isAbsoluteURL(url2) {
  9044. return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
  9045. }
  9046. function combineURLs(baseURL, relativeURL) {
  9047. return relativeURL ? `${baseURL.replace(/\/+$/, "")}/${relativeURL.replace(/^\/+/, "")}` : baseURL;
  9048. }
  9049. function buildFullPath(baseURL, requestedURL) {
  9050. if (baseURL && !isAbsoluteURL(requestedURL)) {
  9051. return combineURLs(baseURL, requestedURL);
  9052. }
  9053. return requestedURL;
  9054. }
  9055. function settle(resolve, reject, response) {
  9056. const { validateStatus } = response.config;
  9057. const status = response.statusCode;
  9058. if (status && (!validateStatus || validateStatus(status))) {
  9059. resolve(response);
  9060. } else {
  9061. reject(response);
  9062. }
  9063. }
  9064. const mergeKeys$1 = (keys, config2) => {
  9065. const config3 = {};
  9066. keys.forEach((prop) => {
  9067. if (!isUndefined(config2[prop])) {
  9068. config3[prop] = config2[prop];
  9069. }
  9070. });
  9071. return config3;
  9072. };
  9073. const adapter = (config2) => new Promise((resolve, reject) => {
  9074. const fullPath = buildURL(buildFullPath(config2.baseURL, config2.url), config2.params);
  9075. const _config = {
  9076. url: fullPath,
  9077. header: config2.header,
  9078. complete: (response) => {
  9079. config2.fullPath = fullPath;
  9080. response.config = config2;
  9081. try {
  9082. if (typeof response.data === "string") {
  9083. response.data = JSON.parse(response.data);
  9084. }
  9085. } catch (e) {
  9086. }
  9087. settle(resolve, reject, response);
  9088. }
  9089. };
  9090. let requestTask;
  9091. if (config2.method === "UPLOAD") {
  9092. delete _config.header["content-type"];
  9093. delete _config.header["Content-Type"];
  9094. const otherConfig = {
  9095. filePath: config2.filePath,
  9096. name: config2.name
  9097. };
  9098. const optionalKeys = [
  9099. "files",
  9100. "timeout",
  9101. "formData"
  9102. ];
  9103. requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys$1(optionalKeys, config2) });
  9104. } else if (config2.method === "DOWNLOAD") {
  9105. if (!isUndefined(config2.timeout)) {
  9106. _config.timeout = config2.timeout;
  9107. }
  9108. requestTask = uni.downloadFile(_config);
  9109. } else {
  9110. const optionalKeys = [
  9111. "data",
  9112. "method",
  9113. "timeout",
  9114. "dataType",
  9115. "responseType",
  9116. "sslVerify",
  9117. "firstIpv4"
  9118. ];
  9119. requestTask = uni.request({ ..._config, ...mergeKeys$1(optionalKeys, config2) });
  9120. }
  9121. if (config2.getTask) {
  9122. config2.getTask(requestTask, config2);
  9123. }
  9124. });
  9125. const dispatchRequest = (config2) => adapter(config2);
  9126. function InterceptorManager() {
  9127. this.handlers = [];
  9128. }
  9129. InterceptorManager.prototype.use = function use(fulfilled, rejected) {
  9130. this.handlers.push({
  9131. fulfilled,
  9132. rejected
  9133. });
  9134. return this.handlers.length - 1;
  9135. };
  9136. InterceptorManager.prototype.eject = function eject(id) {
  9137. if (this.handlers[id]) {
  9138. this.handlers[id] = null;
  9139. }
  9140. };
  9141. InterceptorManager.prototype.forEach = function forEach2(fn) {
  9142. this.handlers.forEach((h) => {
  9143. if (h !== null) {
  9144. fn(h);
  9145. }
  9146. });
  9147. };
  9148. const mergeKeys = (keys, globalsConfig, config2) => {
  9149. const config3 = {};
  9150. keys.forEach((prop) => {
  9151. if (!isUndefined(config2[prop])) {
  9152. config3[prop] = config2[prop];
  9153. } else if (!isUndefined(globalsConfig[prop])) {
  9154. config3[prop] = globalsConfig[prop];
  9155. }
  9156. });
  9157. return config3;
  9158. };
  9159. const mergeConfig = (globalsConfig, config2 = {}) => {
  9160. const method = config2.method || globalsConfig.method || "GET";
  9161. let config3 = {
  9162. baseURL: globalsConfig.baseURL || "",
  9163. method,
  9164. url: config2.url || "",
  9165. params: config2.params || {},
  9166. custom: { ...globalsConfig.custom || {}, ...config2.custom || {} },
  9167. header: deepMerge(globalsConfig.header || {}, config2.header || {})
  9168. };
  9169. const defaultToConfig2Keys = ["getTask", "validateStatus"];
  9170. config3 = { ...config3, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) };
  9171. if (method === "DOWNLOAD") {
  9172. if (!isUndefined(config2.timeout)) {
  9173. config3.timeout = config2.timeout;
  9174. } else if (!isUndefined(globalsConfig.timeout)) {
  9175. config3.timeout = globalsConfig.timeout;
  9176. }
  9177. } else if (method === "UPLOAD") {
  9178. delete config3.header["content-type"];
  9179. delete config3.header["Content-Type"];
  9180. const uploadKeys = [
  9181. "files",
  9182. "filePath",
  9183. "name",
  9184. "timeout",
  9185. "formData"
  9186. ];
  9187. uploadKeys.forEach((prop) => {
  9188. if (!isUndefined(config2[prop])) {
  9189. config3[prop] = config2[prop];
  9190. }
  9191. });
  9192. if (isUndefined(config3.timeout) && !isUndefined(globalsConfig.timeout)) {
  9193. config3.timeout = globalsConfig.timeout;
  9194. }
  9195. } else {
  9196. const defaultsKeys = [
  9197. "data",
  9198. "timeout",
  9199. "dataType",
  9200. "responseType",
  9201. "sslVerify",
  9202. "firstIpv4"
  9203. ];
  9204. config3 = { ...config3, ...mergeKeys(defaultsKeys, globalsConfig, config2) };
  9205. }
  9206. return config3;
  9207. };
  9208. const defaults = {
  9209. baseURL: "",
  9210. header: {},
  9211. method: "GET",
  9212. dataType: "json",
  9213. responseType: "text",
  9214. custom: {},
  9215. timeout: 6e4,
  9216. sslVerify: true,
  9217. firstIpv4: false,
  9218. validateStatus: function validateStatus(status) {
  9219. return status >= 200 && status < 300;
  9220. }
  9221. };
  9222. var clone = function() {
  9223. function _instanceof(obj, type) {
  9224. return type != null && obj instanceof type;
  9225. }
  9226. var nativeMap;
  9227. try {
  9228. nativeMap = Map;
  9229. } catch (_) {
  9230. nativeMap = function() {
  9231. };
  9232. }
  9233. var nativeSet;
  9234. try {
  9235. nativeSet = Set;
  9236. } catch (_) {
  9237. nativeSet = function() {
  9238. };
  9239. }
  9240. var nativePromise;
  9241. try {
  9242. nativePromise = Promise;
  9243. } catch (_) {
  9244. nativePromise = function() {
  9245. };
  9246. }
  9247. function clone2(parent, circular, depth, prototype, includeNonEnumerable) {
  9248. if (typeof circular === "object") {
  9249. depth = circular.depth;
  9250. prototype = circular.prototype;
  9251. includeNonEnumerable = circular.includeNonEnumerable;
  9252. circular = circular.circular;
  9253. }
  9254. var allParents = [];
  9255. var allChildren = [];
  9256. var useBuffer = typeof Buffer != "undefined";
  9257. if (typeof circular == "undefined")
  9258. circular = true;
  9259. if (typeof depth == "undefined")
  9260. depth = Infinity;
  9261. function _clone(parent2, depth2) {
  9262. if (parent2 === null)
  9263. return null;
  9264. if (depth2 === 0)
  9265. return parent2;
  9266. var child;
  9267. var proto;
  9268. if (typeof parent2 != "object") {
  9269. return parent2;
  9270. }
  9271. if (_instanceof(parent2, nativeMap)) {
  9272. child = new nativeMap();
  9273. } else if (_instanceof(parent2, nativeSet)) {
  9274. child = new nativeSet();
  9275. } else if (_instanceof(parent2, nativePromise)) {
  9276. child = new nativePromise(function(resolve, reject) {
  9277. parent2.then(function(value2) {
  9278. resolve(_clone(value2, depth2 - 1));
  9279. }, function(err) {
  9280. reject(_clone(err, depth2 - 1));
  9281. });
  9282. });
  9283. } else if (clone2.__isArray(parent2)) {
  9284. child = [];
  9285. } else if (clone2.__isRegExp(parent2)) {
  9286. child = new RegExp(parent2.source, __getRegExpFlags(parent2));
  9287. if (parent2.lastIndex)
  9288. child.lastIndex = parent2.lastIndex;
  9289. } else if (clone2.__isDate(parent2)) {
  9290. child = new Date(parent2.getTime());
  9291. } else if (useBuffer && Buffer.isBuffer(parent2)) {
  9292. if (Buffer.from) {
  9293. child = Buffer.from(parent2);
  9294. } else {
  9295. child = new Buffer(parent2.length);
  9296. parent2.copy(child);
  9297. }
  9298. return child;
  9299. } else if (_instanceof(parent2, Error)) {
  9300. child = Object.create(parent2);
  9301. } else {
  9302. if (typeof prototype == "undefined") {
  9303. proto = Object.getPrototypeOf(parent2);
  9304. child = Object.create(proto);
  9305. } else {
  9306. child = Object.create(prototype);
  9307. proto = prototype;
  9308. }
  9309. }
  9310. if (circular) {
  9311. var index2 = allParents.indexOf(parent2);
  9312. if (index2 != -1) {
  9313. return allChildren[index2];
  9314. }
  9315. allParents.push(parent2);
  9316. allChildren.push(child);
  9317. }
  9318. if (_instanceof(parent2, nativeMap)) {
  9319. parent2.forEach(function(value2, key) {
  9320. var keyChild = _clone(key, depth2 - 1);
  9321. var valueChild = _clone(value2, depth2 - 1);
  9322. child.set(keyChild, valueChild);
  9323. });
  9324. }
  9325. if (_instanceof(parent2, nativeSet)) {
  9326. parent2.forEach(function(value2) {
  9327. var entryChild = _clone(value2, depth2 - 1);
  9328. child.add(entryChild);
  9329. });
  9330. }
  9331. for (var i in parent2) {
  9332. var attrs = Object.getOwnPropertyDescriptor(parent2, i);
  9333. if (attrs) {
  9334. child[i] = _clone(parent2[i], depth2 - 1);
  9335. }
  9336. try {
  9337. var objProperty = Object.getOwnPropertyDescriptor(parent2, i);
  9338. if (objProperty.set === "undefined") {
  9339. continue;
  9340. }
  9341. child[i] = _clone(parent2[i], depth2 - 1);
  9342. } catch (e) {
  9343. if (e instanceof TypeError) {
  9344. continue;
  9345. } else if (e instanceof ReferenceError) {
  9346. continue;
  9347. }
  9348. }
  9349. }
  9350. if (Object.getOwnPropertySymbols) {
  9351. var symbols = Object.getOwnPropertySymbols(parent2);
  9352. for (var i = 0; i < symbols.length; i++) {
  9353. var symbol = symbols[i];
  9354. var descriptor = Object.getOwnPropertyDescriptor(parent2, symbol);
  9355. if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
  9356. continue;
  9357. }
  9358. child[symbol] = _clone(parent2[symbol], depth2 - 1);
  9359. Object.defineProperty(child, symbol, descriptor);
  9360. }
  9361. }
  9362. if (includeNonEnumerable) {
  9363. var allPropertyNames = Object.getOwnPropertyNames(parent2);
  9364. for (var i = 0; i < allPropertyNames.length; i++) {
  9365. var propertyName = allPropertyNames[i];
  9366. var descriptor = Object.getOwnPropertyDescriptor(parent2, propertyName);
  9367. if (descriptor && descriptor.enumerable) {
  9368. continue;
  9369. }
  9370. child[propertyName] = _clone(parent2[propertyName], depth2 - 1);
  9371. Object.defineProperty(child, propertyName, descriptor);
  9372. }
  9373. }
  9374. return child;
  9375. }
  9376. return _clone(parent, depth);
  9377. }
  9378. clone2.clonePrototype = function clonePrototype(parent) {
  9379. if (parent === null)
  9380. return null;
  9381. var c = function() {
  9382. };
  9383. c.prototype = parent;
  9384. return new c();
  9385. };
  9386. function __objToStr(o) {
  9387. return Object.prototype.toString.call(o);
  9388. }
  9389. clone2.__objToStr = __objToStr;
  9390. function __isDate(o) {
  9391. return typeof o === "object" && __objToStr(o) === "[object Date]";
  9392. }
  9393. clone2.__isDate = __isDate;
  9394. function __isArray(o) {
  9395. return typeof o === "object" && __objToStr(o) === "[object Array]";
  9396. }
  9397. clone2.__isArray = __isArray;
  9398. function __isRegExp(o) {
  9399. return typeof o === "object" && __objToStr(o) === "[object RegExp]";
  9400. }
  9401. clone2.__isRegExp = __isRegExp;
  9402. function __getRegExpFlags(re) {
  9403. var flags = "";
  9404. if (re.global)
  9405. flags += "g";
  9406. if (re.ignoreCase)
  9407. flags += "i";
  9408. if (re.multiline)
  9409. flags += "m";
  9410. return flags;
  9411. }
  9412. clone2.__getRegExpFlags = __getRegExpFlags;
  9413. return clone2;
  9414. }();
  9415. class Request {
  9416. /**
  9417. * @param {Object} arg - 全局配置
  9418. * @param {String} arg.baseURL - 全局根路径
  9419. * @param {Object} arg.header - 全局header
  9420. * @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
  9421. * @param {String} arg.dataType = [json] - 全局默认的dataType
  9422. * @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持
  9423. * @param {Object} arg.custom - 全局默认的自定义参数
  9424. * @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
  9425. * @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+)
  9426. * @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+)
  9427. * @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+)
  9428. * @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
  9429. */
  9430. constructor(arg = {}) {
  9431. if (!isPlainObject(arg)) {
  9432. arg = {};
  9433. formatAppLog("warn", "at uni_modules/uview-plus/libs/luch-request/core/Request.js:39", "设置全局参数必须接收一个Object");
  9434. }
  9435. this.config = clone({ ...defaults, ...arg });
  9436. this.interceptors = {
  9437. request: new InterceptorManager(),
  9438. response: new InterceptorManager()
  9439. };
  9440. }
  9441. /**
  9442. * @Function
  9443. * @param {Request~setConfigCallback} f - 设置全局默认配置
  9444. */
  9445. setConfig(f) {
  9446. this.config = f(this.config);
  9447. }
  9448. middleware(config2) {
  9449. config2 = mergeConfig(this.config, config2);
  9450. const chain = [dispatchRequest, void 0];
  9451. let promise2 = Promise.resolve(config2);
  9452. this.interceptors.request.forEach((interceptor) => {
  9453. chain.unshift(interceptor.fulfilled, interceptor.rejected);
  9454. });
  9455. this.interceptors.response.forEach((interceptor) => {
  9456. chain.push(interceptor.fulfilled, interceptor.rejected);
  9457. });
  9458. while (chain.length) {
  9459. promise2 = promise2.then(chain.shift(), chain.shift());
  9460. }
  9461. return promise2;
  9462. }
  9463. /**
  9464. * @Function
  9465. * @param {Object} config - 请求配置项
  9466. * @prop {String} options.url - 请求路径
  9467. * @prop {Object} options.data - 请求参数
  9468. * @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
  9469. * @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse
  9470. * @prop {Object} [options.header = config.header] - 请求header
  9471. * @prop {Object} [options.method = config.method] - 请求方法
  9472. * @returns {Promise<unknown>}
  9473. */
  9474. request(config2 = {}) {
  9475. return this.middleware(config2);
  9476. }
  9477. get(url2, options = {}) {
  9478. return this.middleware({
  9479. url: url2,
  9480. method: "GET",
  9481. ...options
  9482. });
  9483. }
  9484. post(url2, data, options = {}) {
  9485. return this.middleware({
  9486. url: url2,
  9487. data,
  9488. method: "POST",
  9489. ...options
  9490. });
  9491. }
  9492. put(url2, data, options = {}) {
  9493. return this.middleware({
  9494. url: url2,
  9495. data,
  9496. method: "PUT",
  9497. ...options
  9498. });
  9499. }
  9500. delete(url2, data, options = {}) {
  9501. return this.middleware({
  9502. url: url2,
  9503. data,
  9504. method: "DELETE",
  9505. ...options
  9506. });
  9507. }
  9508. options(url2, data, options = {}) {
  9509. return this.middleware({
  9510. url: url2,
  9511. data,
  9512. method: "OPTIONS",
  9513. ...options
  9514. });
  9515. }
  9516. upload(url2, config2 = {}) {
  9517. config2.url = url2;
  9518. config2.method = "UPLOAD";
  9519. return this.middleware(config2);
  9520. }
  9521. download(url2, config2 = {}) {
  9522. config2.url = url2;
  9523. config2.method = "DOWNLOAD";
  9524. return this.middleware(config2);
  9525. }
  9526. }
  9527. function colorGradient(startColor = "rgb(0, 0, 0)", endColor = "rgb(255, 255, 255)", step = 10) {
  9528. const startRGB = hexToRgb(startColor, false);
  9529. const startR = startRGB[0];
  9530. const startG = startRGB[1];
  9531. const startB = startRGB[2];
  9532. const endRGB = hexToRgb(endColor, false);
  9533. const endR = endRGB[0];
  9534. const endG = endRGB[1];
  9535. const endB = endRGB[2];
  9536. const sR = (endR - startR) / step;
  9537. const sG = (endG - startG) / step;
  9538. const sB = (endB - startB) / step;
  9539. const colorArr = [];
  9540. for (let i = 0; i < step; i++) {
  9541. let hex = rgbToHex(`rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`);
  9542. if (i === 0)
  9543. hex = rgbToHex(startColor);
  9544. if (i === step - 1)
  9545. hex = rgbToHex(endColor);
  9546. colorArr.push(hex);
  9547. }
  9548. return colorArr;
  9549. }
  9550. function hexToRgb(sColor, str = true) {
  9551. const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  9552. sColor = String(sColor).toLowerCase();
  9553. if (sColor && reg.test(sColor)) {
  9554. if (sColor.length === 4) {
  9555. let sColorNew = "#";
  9556. for (let i = 1; i < 4; i += 1) {
  9557. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  9558. }
  9559. sColor = sColorNew;
  9560. }
  9561. const sColorChange = [];
  9562. for (let i = 1; i < 7; i += 2) {
  9563. sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
  9564. }
  9565. if (!str) {
  9566. return sColorChange;
  9567. }
  9568. return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;
  9569. }
  9570. if (/^(rgb|RGB)/.test(sColor)) {
  9571. const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  9572. return arr.map((val) => Number(val));
  9573. }
  9574. return sColor;
  9575. }
  9576. function rgbToHex(rgb) {
  9577. const _this = rgb;
  9578. const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  9579. if (/^(rgb|RGB)/.test(_this)) {
  9580. const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  9581. let strHex = "#";
  9582. for (let i = 0; i < aColor.length; i++) {
  9583. let hex = Number(aColor[i]).toString(16);
  9584. hex = String(hex).length == 1 ? `${0}${hex}` : hex;
  9585. if (hex === "0") {
  9586. hex += hex;
  9587. }
  9588. strHex += hex;
  9589. }
  9590. if (strHex.length !== 7) {
  9591. strHex = _this;
  9592. }
  9593. return strHex;
  9594. }
  9595. if (reg.test(_this)) {
  9596. const aNum = _this.replace(/#/, "").split("");
  9597. if (aNum.length === 6) {
  9598. return _this;
  9599. }
  9600. if (aNum.length === 3) {
  9601. let numHex = "#";
  9602. for (let i = 0; i < aNum.length; i += 1) {
  9603. numHex += aNum[i] + aNum[i];
  9604. }
  9605. return numHex;
  9606. }
  9607. } else {
  9608. return _this;
  9609. }
  9610. }
  9611. function colorToRgba(color2, alpha) {
  9612. color2 = rgbToHex(color2);
  9613. const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  9614. let sColor = String(color2).toLowerCase();
  9615. if (sColor && reg.test(sColor)) {
  9616. if (sColor.length === 4) {
  9617. let sColorNew = "#";
  9618. for (let i = 1; i < 4; i += 1) {
  9619. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  9620. }
  9621. sColor = sColorNew;
  9622. }
  9623. const sColorChange = [];
  9624. for (let i = 1; i < 7; i += 2) {
  9625. sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
  9626. }
  9627. return `rgba(${sColorChange.join(",")},${alpha})`;
  9628. }
  9629. return sColor;
  9630. }
  9631. const colorGradient$1 = {
  9632. colorGradient,
  9633. hexToRgb,
  9634. rgbToHex,
  9635. colorToRgba
  9636. };
  9637. let timeout = null;
  9638. function debounce(func2, wait = 500, immediate = false) {
  9639. if (timeout !== null)
  9640. clearTimeout(timeout);
  9641. if (immediate) {
  9642. const callNow = !timeout;
  9643. timeout = setTimeout(() => {
  9644. timeout = null;
  9645. }, wait);
  9646. if (callNow)
  9647. typeof func2 === "function" && func2();
  9648. } else {
  9649. timeout = setTimeout(() => {
  9650. typeof func2 === "function" && func2();
  9651. }, wait);
  9652. }
  9653. }
  9654. let flag;
  9655. function throttle(func2, wait = 500, immediate = true) {
  9656. if (immediate) {
  9657. if (!flag) {
  9658. flag = true;
  9659. typeof func2 === "function" && func2();
  9660. setTimeout(() => {
  9661. flag = false;
  9662. }, wait);
  9663. }
  9664. } else if (!flag) {
  9665. flag = true;
  9666. setTimeout(() => {
  9667. flag = false;
  9668. typeof func2 === "function" && func2();
  9669. }, wait);
  9670. }
  9671. }
  9672. const zIndex = {
  9673. toast: 10090,
  9674. noNetwork: 10080,
  9675. // popup包含popup,actionsheet,keyboard,picker的值
  9676. popup: 10075,
  9677. mask: 10070,
  9678. navbar: 980,
  9679. topTips: 975,
  9680. sticky: 970,
  9681. indexListSticky: 965
  9682. };
  9683. let platform = "none";
  9684. platform = "vue3";
  9685. platform = "plus";
  9686. const platform$1 = platform;
  9687. const http = new Request();
  9688. let themeType = ["primary", "success", "error", "warning", "info"];
  9689. function setConfig(configs) {
  9690. index.shallowMerge(config$1, configs.config || {});
  9691. index.shallowMerge(props$c, configs.props || {});
  9692. index.shallowMerge(color, configs.color || {});
  9693. index.shallowMerge(zIndex, configs.zIndex || {});
  9694. }
  9695. index.setConfig = setConfig;
  9696. const $u = {
  9697. route,
  9698. date: index.timeFormat,
  9699. // 另名date
  9700. colorGradient: colorGradient$1.colorGradient,
  9701. hexToRgb: colorGradient$1.hexToRgb,
  9702. rgbToHex: colorGradient$1.rgbToHex,
  9703. colorToRgba: colorGradient$1.colorToRgba,
  9704. test,
  9705. type: themeType,
  9706. http,
  9707. config: config$1,
  9708. // uview-plus配置信息相关,比如版本号
  9709. zIndex,
  9710. debounce,
  9711. throttle,
  9712. mixin: mixin$1,
  9713. mpMixin,
  9714. props: props$c,
  9715. ...index,
  9716. color,
  9717. platform: platform$1
  9718. };
  9719. uni.$u = $u;
  9720. const install = (Vue2) => {
  9721. Vue2.config.globalProperties.$u = $u;
  9722. Vue2.mixin(mixin$1);
  9723. };
  9724. const uviewPlus = {
  9725. install
  9726. };
  9727. function Initializer() {
  9728. store$1.commit("SET_PLATFORM", platfrom);
  9729. store$1.commit("SET_TOKEN", storage.get(ACCESS_TOKEN));
  9730. store$1.commit("SET_USER_ID", storage.get(USER_ID));
  9731. }
  9732. const share = {
  9733. data() {
  9734. return {
  9735. share: {
  9736. // 转发的标题 (默认标题)
  9737. title: config.get("name"),
  9738. // 默认是当前页面,必须是以‘/’开头的完整路径
  9739. path: `/pages/home/index`,
  9740. //自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径,
  9741. //支持PNG及JPG,不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4
  9742. imageUrl: config.getResource("logo.png")
  9743. }
  9744. };
  9745. },
  9746. // 发送给朋友
  9747. onShareAppMessage(res) {
  9748. let shareInfo = uni.getStorageSync("shareInfo");
  9749. return {
  9750. title: shareInfo.title || this.share.title,
  9751. imageUrl: shareInfo.imgUrl || this.share.imageUrl,
  9752. path: shareInfo.path || this.share.path
  9753. };
  9754. },
  9755. //分享到朋友圈
  9756. onShareTimeline(res) {
  9757. let shareInfo = uni.getStorageSync("shareInfo");
  9758. return {
  9759. title: shareInfo.title || this.share.title,
  9760. imageUrl: shareInfo.imgUrl || this.share.imageUrl,
  9761. path: shareInfo.path || this.share.path
  9762. };
  9763. }
  9764. };
  9765. const mixin = {
  9766. data() {
  9767. return {
  9768. platform: platfrom
  9769. };
  9770. },
  9771. computed: {}
  9772. };
  9773. function createApp() {
  9774. const app2 = vue.createVueApp(App);
  9775. app2.use(uviewPlus).use(store$1);
  9776. app2.config.productionTip = false;
  9777. app2.mixin(share).mixin(mixin);
  9778. return {
  9779. app: app2,
  9780. created: Initializer
  9781. };
  9782. }
  9783. const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp();
  9784. uni.Vuex = __Vuex__;
  9785. uni.Pinia = __Pinia__;
  9786. __app__.provide("__globalStyles", __uniConfig.styles);
  9787. __app__._component.mpType = "app";
  9788. __app__._component.render = () => {
  9789. };
  9790. __app__.mount("#app");
  9791. })(Vue);